diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..929f216ac --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +idioma.lock linguist-generated=true +content/docs/es/** linguist-generated=true +**/_pages/page.es.tsx linguist-generated=true diff --git a/.vscode/settings.json b/.vscode/settings.json index 5c2ba504c..cb78ac3bc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,10 @@ "quickfix.biome": "explicit", "source.organizeImports.biome": "explicit" }, + "files.exclude": { + "**/content/docs/es/**": true, + "**/app/\\[locale\\]/**/_pages/page.es.tsx": true + }, "[javascript]": { "editor.defaultFormatter": "biomejs.biome" }, diff --git a/.zed/settings.json b/.zed/settings.json index a2aac229d..42499a085 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -1,26 +1,48 @@ { "format_on_save": "on", "formatter": "language_server", + "file_scan_exclusions": [ + "**/content/docs/es/**", + "**/app/\\[locale\\]/**/_pages/page.es.tsx" + ], "languages": { "JavaScript": { "format_on_save": "on", "formatter": "language_server", - "language_servers": ["biome", "!vtsls", "!typescript-language-server", "!eslint"] + "language_servers": [ + "biome", + "!vtsls", + "!typescript-language-server", + "!eslint" + ] }, "TypeScript": { "format_on_save": "on", "formatter": "language_server", - "language_servers": ["biome", "!vtsls", "!typescript-language-server", "!eslint"] + "language_servers": [ + "biome", + "!vtsls", + "!typescript-language-server", + "!eslint" + ] }, "TSX": { "format_on_save": "on", "formatter": "language_server", - "language_servers": ["biome", "!vtsls", "!typescript-language-server", "!eslint"] + "language_servers": [ + "biome", + "!vtsls", + "!typescript-language-server", + "!eslint" + ] }, "JSON": { "format_on_save": "on", "formatter": "language_server", - "language_servers": ["biome", "..."] + "language_servers": [ + "biome", + "..." + ] }, "Markdown": { "format_on_save": "on", diff --git a/app/(docs)/error.tsx b/app/(docs)/error.tsx deleted file mode 100644 index 39a19cc5b..000000000 --- a/app/(docs)/error.tsx +++ /dev/null @@ -1,60 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import React from 'react'; - -export default function ErrorBoundary({ - error, - reset, -}: { - error: Error & { digest?: string }; - reset: () => void; -}) { - React.useEffect(() => { - // Hide sidebar for errors (including 404s) - const aside = document.querySelector('aside'); - if (aside) { - aside.style.display = 'none'; - } - - return () => { - const asideCleanup = document.querySelector('aside'); - if (asideCleanup) { - asideCleanup.style.display = ''; - } - }; - }, []); - - // Check if this is likely a 404 error - const is404 = error.message?.includes('404') || error.message?.includes('not found'); - - return ( -
-

- {is404 ? 'Page not found' : 'Something went wrong'} -

-

- {is404 - ? "The documentation you are looking for doesn't exist or has been moved." - : 'An error occurred while loading this page.'} -

-
- - Back to homepage - - {!is404 && ( - - )} -
-
- ); -} diff --git a/app/(docs)/not-found.tsx b/app/(docs)/not-found.tsx deleted file mode 100644 index 8be677752..000000000 --- a/app/(docs)/not-found.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import Link from 'next/link'; - -export default function DocsNotFound() { - return ( - <> - - - -
-

Token Operations

- - -
-
- -
-

NFT Operations

- - - -
-
- -
-

Complex Workflows

- -
-
- -
-

Message Signing

- - - - -
-
- - - - -``` - -## Troubleshooting - -**Post conditions failing** -- Verify exact amounts and addresses in post conditions -- Check wallet compatibility - some wallets don't support post conditions -- Use `PostConditionMode.Allow` for testing, `Deny` for production - -**Token operations not working** -- Confirm contract implements SIP-010 or SIP-009 standards correctly -- Check token contract address and name spelling -- Verify user has sufficient balance for transfers - -**Multi-step workflows failing** -- Add longer delays between steps for slow networks -- Implement transaction status checking before next step -- Handle nonce conflicts with proper sequencing - -**Message signing failures** -- Leather doesn't support non-standard `publicKey` parameter - omit it -- Xverse requires non-standard `publicKey` parameter for simple messages -- Both wallets require hex-encoded Clarity values for structured messages -- Verify message format matches wallet expectations - -**Structured message signing errors** -- Ensure Clarity tuples are properly constructed with `Cl` helpers -- Domain separation requires consistent naming across app versions -- Chain ID must match network: 1 for mainnet, 2147483648 for testnet -- Complex nested structures may not be supported by all wallets - -**Authentication workflow issues** -- Generate unique challenges to prevent replay attacks -- Verify signature on backend before trusting authentication -- Handle wallet connection changes during auth process -- Implement proper session management and timeout handling - -**Wallet compatibility issues** -- Reference the [wallet support table](/docs/building-frontend-applications/wallet-integration#wallet-support) for feature availability -- Implement fallback methods for unsupported features -- Test with multiple wallet types during development -- Handle wallet-specific parameter requirements for message signing \ No newline at end of file diff --git a/content/_hidden/(building-frontend-applications)/meta.json b/content/_hidden/(building-frontend-applications)/meta.json deleted file mode 100644 index 1d847c48c..000000000 --- a/content/_hidden/(building-frontend-applications)/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "building-frontend-applications", - "pages": ["wallet-integration", "interacting-with-smart-contracts"] -} diff --git a/content/_hidden/(building-frontend-applications)/wallet-integration.mdx b/content/_hidden/(building-frontend-applications)/wallet-integration.mdx deleted file mode 100644 index d0eda0d79..000000000 --- a/content/_hidden/(building-frontend-applications)/wallet-integration.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Wallet integration -description: Connect your web app to Stacks wallets and enable users to authenticate, sign transactions, and interact with smart contracts ---- - -Wallet integration transforms your web app from a static interface into a fully interactive blockchain application. Users can authenticate with their Stacks wallets, sign transactions, and interact with smart contracts directly from your app. - -Stacks Connect makes this integration straightforward with a single library that works with all major Stacks wallets including Leather, Xverse, and Asigna. - -## What you'll learn - -You'll learn how to: -- Connect and disconnect Stacks wallets -- Authenticate users and manage connection state -- Read user account information and balances -- Enable contract function calls from your frontend -- Deploy contracts through wallet interactions -- Sign messages for authentication and verification - -## Prerequisites - -Before starting, make sure you have: -- A web application (React, vanilla JS, or any framework) -- Basic knowledge of JavaScript and async/await -- [Node.js and npm](https://nodejs.org/) installed -- A Stacks wallet extension for testing (we recommend [Leather](https://leather.io/)) - -## Step 1: Install Stacks Connect - -Install the latest version of Stacks Connect in your project: - -```bash -npm install @stacks/connect@latest -``` - -> **Note:** This guide uses Stacks Connect v8.x.x which introduces the new `request` method pattern. If you're migrating from v7.x.x, the old `showConnect`, `openContractCall` methods are deprecated in favor of the unified `request` approach. - -Stacks Connect works with any JavaScript framework or vanilla JS applications. - -## Step 2: Set up wallet connection - -Create connection functions using the new `connect`, `disconnect`, and `isConnected` methods: - -```typescript -import { connect, disconnect, isConnected, getLocalStorage } from '@stacks/connect'; - -// Connect wallet function -async function connectWallet() { - try { - const response = await connect({ - forceWalletSelect: true, // Always show wallet selection modal - }); - - console.log('Connected successfully:', response); - updateUserInterface(); - } catch (error) { - console.error('Connection failed:', error); - } -} - -// Check if user is connected -function isUserConnected() { - return isConnected(); -} - -// Disconnect wallet function -function disconnectWallet() { - disconnect(); - updateUserInterface(); -} - -// Get stored user data from local storage -function getUserData() { - if (!isConnected()) return null; - - const data = getLocalStorage(); - return data?.addresses?.stx?.[0]?.address || null; -} -``` - -Add connect/disconnect buttons to your UI: - -```html -
- - - -
-``` - -## Step 3: Read user account data - -Once connected, access user information and display it: - -```typescript -// Get STX balance -async function getStxBalance(address, network = 'mainnet') { - const baseUrl = network === 'mainnet' - ? 'https://api.hiro.so' - : 'https://api.testnet.hiro.so'; - - try { - const response = await fetch(`${baseUrl}/v2/accounts/${address}?proof=0`); - const data = await response.json(); - - return { - balance: parseInt(data.balance) / 1000000, // Convert to STX - locked: parseInt(data.locked) / 1000000, - nonce: data.nonce, - }; - } catch (error) { - console.error('Failed to fetch balance:', error); - return { balance: 0, locked: 0, nonce: 0 }; - } -} - -// Update UI with user data -async function updateUserInterface() { - const userAddress = getUserData(); - const userInfoDiv = document.getElementById('user-info'); - const connectBtn = document.getElementById('connect-wallet'); - const disconnectBtn = document.getElementById('disconnect-wallet'); - - if (userAddress) { - const balance = await getStxBalance(userAddress); - - userInfoDiv.innerHTML = ` -

Address: ${userAddress}

-

Balance: ${balance.balance} STX

- `; - userInfoDiv.style.display = 'block'; - connectBtn.style.display = 'none'; - disconnectBtn.style.display = 'block'; - enableWalletFeatures(); - } else { - userInfoDiv.style.display = 'none'; - connectBtn.style.display = 'block'; - disconnectBtn.style.display = 'none'; - disableWalletFeatures(); - } -} -``` - -## Step 4: Make contract calls - -Enable users to interact with smart contracts using the new `request` method: - -```typescript -import { request } from '@stacks/connect'; -import { Cl } from '@stacks/transactions'; - -// Call a contract function -async function callContract() { - try { - const response = await request('stx_callContract', { - contract: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.hello-world', - functionName: 'set-value', - functionArgs: [ - Cl.uint(42), - Cl.stringUtf8('Hello from frontend!') - ], - network: 'testnet', // or 'mainnet' - }); - - console.log('Transaction ID:', response.txid); - alert(`Transaction submitted! ID: ${response.txid}`); - } catch (error) { - console.error('Contract call failed:', error); - alert('Transaction failed: ' + error.message); - } -} -``` - -Add a button to trigger contract calls: - -```html - -``` - -## Step 5: Deploy contracts - -Let users deploy contracts directly from your interface: - -```typescript -// Deploy a contract -async function deployContract() { - const contractCode = ` - ;; A simple counter contract - (define-data-var counter uint u0) - - (define-read-only (get-counter) - (var-get counter)) - - (define-public (increment) - (begin - (var-set counter (+ (var-get counter) u1)) - (ok (var-get counter)))) - `; - - try { - const response = await request('stx_deployContract', { - name: 'my-counter-contract', - clarityCode: contractCode, - clarityVersion: '2', - network: 'testnet', - }); - - console.log('Contract deployed! Transaction ID:', response.txid); - alert(`Contract deployed! Transaction ID: ${response.txid}`); - } catch (error) { - console.error('Contract deployment failed:', error); - alert('Deployment failed: ' + error.message); - } -} -``` - -Add deployment button: - -```html - -``` - -## Step 6: Sign messages - -Implement message signing for authentication and verification: - -```typescript -// Sign a simple message -async function signMessage() { - const message = 'Please sign this message to verify your identity'; - - try { - const response = await request('stx_signMessage', { - message, - }); - - console.log('Message signed:', response.signature); - console.log('Public key:', response.publicKey); - - // Store signature for verification - localStorage.setItem('userSignature', JSON.stringify(response)); - alert('Message signed successfully!'); - } catch (error) { - console.error('Message signing failed:', error); - alert('Signing failed: ' + error.message); - } -} - -// Sign a structured message -async function signStructuredMessage() { - try { - // Create structured message using Clarity values - const clarityMessage = Cl.tuple({ - proposal: Cl.stringAscii('Increase block reward'), - choice: Cl.stringAscii('Yes'), - voter: Cl.stringAscii(getUserData() || ''), - }); - - const clarityDomain = Cl.tuple({ - name: Cl.stringAscii('My dApp'), - version: Cl.stringAscii('1.0.0'), - 'chain-id': Cl.uint(1), - }); - - const response = await request('stx_signStructuredMessage', { - message: clarityMessage, - domain: clarityDomain, - }); - - console.log('Structured message signed:', response); - alert('Structured message signed successfully!'); - } catch (error) { - console.error('Structured message signing failed:', error); - alert('Structured signing failed: ' + error.message); - } -} -``` - -Add signing buttons: - -```html - - -``` - -## Step 7: Persist user session - -Store wallet connection state across browser sessions: - -```typescript -// Check connection status on page load -function initializeApp() { - updateUserInterface(); -} - -// Enable wallet-dependent features -function enableWalletFeatures() { - document.getElementById('contract-call-btn').disabled = false; - document.getElementById('deploy-contract-btn').disabled = false; - document.getElementById('sign-message-btn').disabled = false; - document.getElementById('sign-structured-btn').disabled = false; -} - -// Disable wallet features when disconnected -function disableWalletFeatures() { - document.getElementById('contract-call-btn').disabled = true; - document.getElementById('deploy-contract-btn').disabled = true; - document.getElementById('sign-message-btn').disabled = true; - document.getElementById('sign-structured-btn').disabled = true; -} - -// Store additional user preferences -function storeUserPreferences(preferences) { - localStorage.setItem('userPreferences', JSON.stringify(preferences)); -} - -function getUserPreferences() { - const stored = localStorage.getItem('userPreferences'); - return stored ? JSON.parse(stored) : {}; -} - -// Initialize on page load -document.addEventListener('DOMContentLoaded', initializeApp); -``` - -## Verify it's working - -Test your wallet integration: - -1. **Open your app** in a browser with a Stacks wallet installed -2. **Click "Connect Wallet"** and select your preferred wallet -3. **Verify user info displays** including address and balance -4. **Test contract calls** - transactions should open in the wallet -5. **Try message signing** - wallet should prompt for signature -6. **Refresh the page** - connection should persist - -Connected successfully? Your wallet integration is working! - -## Troubleshooting - -**Wallet not detected** -- Ensure you have a Stacks wallet extension installed -- Try refreshing the page after installing the wallet -- Check browser console for any JavaScript errors - -**Connection popup doesn't appear** -- Check if popup blockers are disabled for your site -- Verify you're using the latest version of `@stacks/connect` -- Make sure you're serving over HTTPS in production - -**Transactions fail** -- Verify contract addresses and function names are correct -- Check that the user has sufficient STX for fees -- Ensure you're using the correct network ('testnet' vs 'mainnet') -- Check that Clarity values are properly constructed with `Cl` helpers - -**User session not persisting** -- Check localStorage is enabled in the browser -- Verify `isConnected()` is called after page load -- Make sure `connect()` completed successfully - -**Balance not updating** -- API calls may be cached - add timestamp parameters -- Check network configuration matches the user's wallet -- Verify the Stacks API endpoints are accessible - -**Migration from older versions** -- Replace `showConnect()` with `connect()` -- Replace `openContractCall()` with `request('stx_callContract', {})` -- Replace `UserSession` usage with `isConnected()` and `getLocalStorage()` -- Update error handling from `onFinish/onCancel` to `try/catch` \ No newline at end of file diff --git a/content/_hidden/(deployment)/configuring-your-deployment-plans.mdx b/content/_hidden/(deployment)/configuring-your-deployment-plans.mdx deleted file mode 100644 index f6cceb8f4..000000000 --- a/content/_hidden/(deployment)/configuring-your-deployment-plans.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Working with deployment plans -description: Working with deployment plans ---- - -## Working with deployment plans \ No newline at end of file diff --git a/content/_hidden/(deployment)/deploying-your-application.mdx b/content/_hidden/(deployment)/deploying-your-application.mdx deleted file mode 100644 index 5fc485e6b..000000000 --- a/content/_hidden/(deployment)/deploying-your-application.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Deploying your application -description: Deploying your application ---- - -## Deploying your application \ No newline at end of file diff --git a/content/_hidden/(deployment)/meta.json b/content/_hidden/(deployment)/meta.json deleted file mode 100644 index 37c99f4b0..000000000 --- a/content/_hidden/(deployment)/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "deployment", - "pages": ["deploying-your-application", "configuring-your-deployment-plans"] -} diff --git a/content/_hidden/(event-streaming)/building-a-simple-indexer.mdx b/content/_hidden/(event-streaming)/building-a-simple-indexer.mdx deleted file mode 100644 index 50568eba7..000000000 --- a/content/_hidden/(event-streaming)/building-a-simple-indexer.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Building an Indexer -description: Building an Indexer ---- - -## Building a simple indexer \ No newline at end of file diff --git a/content/_hidden/(event-streaming)/contract-monitoring.mdx b/content/_hidden/(event-streaming)/contract-monitoring.mdx deleted file mode 100644 index de8868a50..000000000 --- a/content/_hidden/(event-streaming)/contract-monitoring.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Contract monitoring -description: Contract monitoring ---- - -## Contract monitoring \ No newline at end of file diff --git a/content/_hidden/(event-streaming)/creating-predicates.mdx b/content/_hidden/(event-streaming)/creating-predicates.mdx deleted file mode 100644 index 6a83084dd..000000000 --- a/content/_hidden/(event-streaming)/creating-predicates.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Creating Predicates -description: Learn how to create predicates for your Clarinet project. ---- - -# Creating Predicates \ No newline at end of file diff --git a/content/_hidden/(event-streaming)/meta.json b/content/_hidden/(event-streaming)/meta.json deleted file mode 100644 index f0a3d0f5f..000000000 --- a/content/_hidden/(event-streaming)/meta.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "title": "event-driven-architecture", - "pages": [ - "creating-predicates", - "working-with-events-and-transaction-payloads", - "building-a-simple-indexer", - "contract-monitoring" - ] -} diff --git a/content/_hidden/(event-streaming)/working-with-events-and-transaction-payloads.mdx b/content/_hidden/(event-streaming)/working-with-events-and-transaction-payloads.mdx deleted file mode 100644 index fe002a1db..000000000 --- a/content/_hidden/(event-streaming)/working-with-events-and-transaction-payloads.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Creating custom indexers -description: Creating custom indexers ---- - -## Creating custom indexers \ No newline at end of file diff --git a/content/_hidden/(local-development)/building-transactions.mdx b/content/_hidden/(local-development)/building-transactions.mdx deleted file mode 100644 index f0933ab27..000000000 --- a/content/_hidden/(local-development)/building-transactions.mdx +++ /dev/null @@ -1,434 +0,0 @@ ---- -title: Building Transactions -description: Create and customize all types of Stacks transactions with precise control over signing, sponsorship, and multi-signature scenarios ---- - -Building transactions programmatically gives you complete control over how your application interacts with the Stacks blockchain. You can create signed transactions for immediate broadcast, unsigned transactions for multi-signature workflows, sponsored transactions to pay fees for users, and complex multi-signature transactions. - -This approach is essential for backends, automated systems, and advanced dApps that need precise transaction control. - -## Feature overview - -Stacks.js provides transaction builders for every blockchain operation: - -**STX transfers**: Send native tokens between accounts with memo support -**Contract deployment**: Deploy Clarity smart contracts with version control -**Contract calls**: Execute functions with proper argument validation and post-conditions -**Sponsored transactions**: Pay transaction fees for other users -**Multi-signature transactions**: Require multiple signatures for enhanced security -**Fee and nonce management**: Automatic estimation or explicit control - -## Required packages - -Install the core transaction building package: - -```bash -npm install @stacks/transactions@latest -``` - -The `@stacks/network` package is optional in v7 - you can use string literals for networks. - -## Building signed transactions - -Signed transactions are ready to broadcast immediately. The private key signs the transaction during creation. - -### STX token transfer - -Send STX tokens between accounts: - -```typescript -import { makeSTXTokenTransfer, broadcastTransaction } from '@stacks/transactions'; - -const transaction = await makeSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '1000000', // 1 STX in microSTX - senderKey: 'your-private-key-hex', - network: 'testnet', - memo: 'Payment for services', - // nonce and fee are auto-fetched/estimated if not provided -}); - -const result = await broadcastTransaction({ - transaction, - network: 'testnet' -}); - -console.log('Transaction ID:', result.txid); -``` - -### Smart contract deployment - -Deploy Clarity contracts to the blockchain: - -```typescript -import { makeContractDeploy } from '@stacks/transactions'; -import { readFileSync } from 'fs'; - -const contractCode = readFileSync('./my-contract.clar', 'utf8'); - -const transaction = await makeContractDeploy({ - contractName: 'my-awesome-contract', - codeBody: contractCode, - senderKey: 'your-private-key-hex', - network: 'testnet', - clarityVersion: 3, // Defaults to latest if not specified -}); - -const result = await broadcastTransaction({ - transaction, - network: 'testnet' -}); -``` - -### Smart contract function call - -Execute contract functions with arguments and post-conditions: - -```typescript -import { makeContractCall, Cl } from '@stacks/transactions'; - -const transaction = await makeContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'hello-world', - functionName: 'set-value', - functionArgs: [ - Cl.uint(42), - Cl.stringUtf8('Hello Stacks!') - ], - senderKey: 'your-private-key-hex', - network: 'testnet', - validateWithAbi: true, // Validates against contract ABI - postConditions: [], // Add safety conditions -}); -``` - -## Building unsigned transactions - -Unsigned transactions require a separate signing step. Use these for multi-signature workflows or when you want to inspect transactions before signing. - -### Unsigned STX transfer - -```typescript -import { makeUnsignedSTXTokenTransfer } from '@stacks/transactions'; -import { privateKeyToPublicKey } from '@stacks/transactions'; - -const publicKey = privateKeyToPublicKey('your-private-key-hex'); - -const unsignedTx = await makeUnsignedSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '1000000', - publicKey: publicKey, - network: 'testnet', - memo: 'Unsigned transfer', -}); - -// Sign separately -import { TransactionSigner } from '@stacks/transactions'; - -const signer = new TransactionSigner(unsignedTx); -signer.signOrigin('your-private-key-hex'); - -// Now ready to broadcast -const signedTx = signer.getTxInComplete(); -``` - -### Unsigned contract call - -```typescript -import { makeUnsignedContractCall } from '@stacks/transactions'; - -const unsignedTx = await makeUnsignedContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'my-contract', - functionName: 'my-function', - functionArgs: [Cl.uint(100)], - publicKey: publicKey, - network: 'testnet', -}); - -// Sign with TransactionSigner as shown above -``` - -## Building sponsored transactions - -Sponsored transactions let you pay fees for other users. The origin creates and signs the transaction, then the sponsor adds their signature and fee. - -### Create sponsored transaction (origin side) - -```typescript -import { makeContractCall, Cl } from '@stacks/transactions'; - -// Origin creates transaction with sponsored: true -const sponsoredTx = await makeContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'my-contract', - functionName: 'user-action', - functionArgs: [Cl.standardPrincipal('ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG')], - senderKey: 'origin-private-key', - network: 'testnet', - sponsored: true, // This makes it a sponsored transaction -}); - -// Serialize for the sponsor -const serializedTx = sponsoredTx.serialize(); -``` - -### Complete sponsored transaction (sponsor side) - -```typescript -import { sponsorTransaction, deserializeTransaction } from '@stacks/transactions'; - -// Sponsor receives the serialized transaction -const deserializedTx = deserializeTransaction(serializedTx); - -// Sponsor adds fee and signature -const completedTx = await sponsorTransaction({ - transaction: deserializedTx, - sponsorPrivateKey: 'sponsor-private-key', - fee: '2000', // Sponsor pays the fee - network: 'testnet', -}); - -// Sponsor broadcasts the completed transaction -const result = await broadcastTransaction({ - transaction: completedTx, - network: 'testnet' -}); -``` - -## Building multi-signature transactions - -Multi-sig transactions require multiple signatures. Create unsigned transactions and collect signatures from multiple parties. - -### Create multi-sig transaction - -```typescript -import { - makeUnsignedSTXTokenTransfer, - TransactionSigner, - privateKeyToPublicKey -} from '@stacks/transactions'; - -// Collect public keys from all participants -const privateKeys = [ - 'private-key-1', - 'private-key-2', - 'private-key-3' -]; - -const publicKeys = privateKeys.map(privateKeyToPublicKey); - -// Create unsigned multi-sig transaction -const multiSigTx = await makeUnsignedSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '5000000', - numSignatures: 2, // Require 2 of 3 signatures - publicKeys: publicKeys, - network: 'testnet', -}); -``` - -### Collect signatures - -```typescript -const signer = new TransactionSigner(multiSigTx); - -// First participant signs -signer.signOrigin(privateKeys[0]); - -// Second participant signs -signer.signOrigin(privateKeys[1]); - -// Add remaining public key (unsigned participant) -signer.appendOrigin(publicKeys[2]); - -// Get completed transaction -const signedMultiSigTx = signer.getTxInComplete(); -``` - -## Configuration options - -### Custom network endpoints - -Connect to custom Stacks nodes: - -```typescript -const transaction = await makeSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '1000000', - senderKey: 'your-private-key', - network: 'testnet', - client: { baseUrl: 'http://localhost:3999' } // Custom devnet -}); -``` - -### Explicit fee and nonce control - -Override automatic fee estimation and nonce fetching: - -```typescript -const transaction = await makeContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'my-contract', - functionName: 'my-function', - functionArgs: [], - senderKey: 'your-private-key', - network: 'testnet', - nonce: '42', // Explicit nonce - fee: '5000', // Explicit fee in microSTX - anchorMode: 'any' // Transaction timing preference -}); -``` - -### Advanced post-conditions - -Add safety constraints using the new v7 post-condition format: - -```typescript -const stxPostCondition = { - type: 'stx-postcondition', - address: 'SP2JXKMSH007NPYAQHKJPQMAQYAD90NQGTVJVQ02B', - condition: 'gte', - amount: '1000000' -}; - -const ftPostCondition = { - type: 'ft-postcondition', - address: 'SP2JXKMSH007NPYAQHKJPQMAQYAD90NQGTVJVQ02B', - condition: 'eq', - amount: '100', - asset: 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.my-token::token' -}; - -const transaction = await makeContractCall({ - // ... other options - postConditions: [stxPostCondition, ftPostCondition] -}); -``` - -### Fee estimation - -Get fee estimates before building transactions: - -```typescript -import { fetchFeeEstimate } from '@stacks/transactions'; - -// Estimate for a specific transaction -const feeEstimate = await fetchFeeEstimate({ - transaction, - network: 'testnet' -}); - -// Use the estimate -const newTransaction = await makeSTXTokenTransfer({ - // ... other options - fee: feeEstimate.toString() -}); -``` - -## Working with Clarity values - -Use the `Cl` helper for building type-safe Clarity arguments: - -```typescript -import { Cl } from '@stacks/transactions'; - -const functionArgs = [ - Cl.uint(42), // unsigned integer - Cl.int(-10), // signed integer - Cl.bool(true), // boolean - Cl.stringUtf8('Hello World'), // UTF-8 string - Cl.stringAscii('ASCII only'), // ASCII string - Cl.buffer(new Uint8Array([1, 2, 3])), // buffer - Cl.principal('ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG'), // principal - Cl.contractPrincipal('ST123...', 'my-contract'), // contract principal - Cl.list([Cl.uint(1), Cl.uint(2)]), // list - Cl.tuple({ name: Cl.stringUtf8('Alice') }), // tuple - Cl.some(Cl.uint(42)), // optional (some) - Cl.none(), // optional (none) - Cl.ok(Cl.uint(100)), // response (ok) - Cl.error(Cl.uint(404)) // response (error) -]; -``` - -## Error handling - -Handle broadcast errors properly with the consistent v7 response format: - -```typescript -try { - const result = await broadcastTransaction({ - transaction, - network: 'testnet' - }); - - if (result.error) { - console.error('Transaction rejected:', result.reason); - console.error('Details:', result.reason_data); - } else { - console.log('Success:', result.txid); - } -} catch (error) { - console.error('Network or serialization error:', error); -} -``` - -## Best practices - -### Transaction serialization - -Transactions serialize to hex strings in v7 (not byte arrays): - -```typescript -const transaction = await makeSTXTokenTransfer({ /* options */ }); -const serialized = transaction.serialize(); // hex string -console.log('Serialized tx:', serialized); - -// For bytes (if needed for compatibility) -const bytes = transaction.serializeBytes(); // Uint8Array -``` - -### Nonce management - -For multiple transactions, manage nonces carefully: - -```typescript -import { fetchNonce } from '@stacks/transactions'; - -let currentNonce = await fetchNonce({ - address: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - network: 'testnet' -}); - -// Send multiple transactions with incremented nonces -for (const recipient of recipients) { - const transaction = await makeSTXTokenTransfer({ - recipient, - amount: '1000000', - senderKey: privateKey, - network: 'testnet', - nonce: currentNonce.toString() - }); - - await broadcastTransaction({ transaction, network: 'testnet' }); - currentNonce++; -} -``` - -### ABI validation - -Always validate contract calls against ABIs: - -```typescript -const transaction = await makeContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'my-contract', - functionName: 'my-function', - functionArgs: [Cl.uint(42)], - senderKey: privateKey, - network: 'testnet', - validateWithAbi: true // Fetches ABI and validates arguments -}); -``` - -This comprehensive approach to transaction building gives you the flexibility to handle any blockchain interaction scenario while maintaining type safety and proper error handling. \ No newline at end of file diff --git a/content/_hidden/(local-development)/configuring-clarity-vscode-extension.mdx b/content/_hidden/(local-development)/configuring-clarity-vscode-extension.mdx deleted file mode 100644 index afdbe001f..000000000 --- a/content/_hidden/(local-development)/configuring-clarity-vscode-extension.mdx +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: Configuring Clarity VSCode extension -description: Essential features and setup for the Clarity VS Code extension to streamline smart contract development ---- - -The Clarity VS Code extension transforms your editor into a powerful smart contract development environment. You'll get syntax highlighting, auto-completion, debugging, and real-time error checking—all the tools you need to write safe Clarity code. - -Think of it as your coding copilot. The extension catches errors before you deploy, suggests functions as you type, and shows documentation without leaving your editor. - -> **Need to install the extension?** Check our [Prerequisites guide](/docs/setting-up-your-environment/installing-prerequisites#set-up-vs-code-for-clarity) for installation instructions. - -## Core Features - -### Smart Auto-Completion - -Start typing any Clarity function and get instant suggestions with documentation. The extension adds parentheses and creates placeholders for function arguments. - -```clarity -;; Type "stx-tr" and get: -(stx-transfer? amount sender recipient) -;; ^ ^ ^ -;; Placeholders for easy navigation -``` - -Use `Tab` to jump between placeholders. Use `Escape` to exit placeholder mode. - -### Documentation on Hover - -Hover over any Clarity function or keyword to see its documentation. No need to switch tabs or search external docs. - -```clarity -;; Hover over 'map-set' to see: -;; - Function signature -;; - Parameter descriptions -;; - Return type -;; - Usage examples -(map-set my-map {key: "value"} "data") -``` - -### Go-to Definition - -Jump to function, constant, or variable definitions instantly: - -- `F12` or `Ctrl+Click` to go to definition -- `Alt+F12` to peek definition without leaving current file -- Works across contract files and contract calls - -### Real-Time Error Checking - -The extension validates your code on every save. You'll see: - -- **Red squiggles**: Syntax errors, unknown keywords -- **Yellow squiggles**: Warnings for potentially unsafe code -- **Error list**: All issues in the Problems panel (`Ctrl+Shift+M`) - -Common errors caught: -- Undefined variables or functions -- Type mismatches -- Missing trait implementations -- Invalid function signatures - -### Local Contract Resolution - -Auto-completion works across your entire project. Reference functions from other contracts in your workspace: - -```clarity -;; Auto-complete local contract calls -(contract-call? .my-token transfer amount sender recipient) -;; ^ -;; Suggests contracts in your project -``` - -### Trait Support - -When implementing traits (like SIP-009 NFTs or SIP-010 tokens), the extension verifies: - -- All required functions are implemented -- Function signatures match trait definitions -- Return types are correct - -```clarity -;; Extension warns if missing required trait functions -(impl-trait .sip-010-trait.sip-010-trait) - -;; ⚠️ Warning: Missing required function 'get-balance' -``` - -## Debugging Support - -The extension includes a visual debugger for step-by-step code execution. - -**Requirements:** -- VS Code Desktop (doesn't work in web version) -- [Clarinet installed locally](https://github.com/hirosystems/clarinet#installation) - -**How to debug:** - -1. Set breakpoints by clicking line numbers -2. Press `F5` or use Run → Start Debugging -3. Step through code line-by-line -4. Inspect variables and stack state - -The debugger shows you exactly how Clarity executes your functions, making it easier to understand complex logic and catch bugs. - -## Configuration Options - -### File Associations - -The extension automatically recognizes `.clar` files. For custom extensions: - -```json -// settings.json -{ - "files.associations": { - "*.clarity": "clarity" - } -} -``` - -### Formatting - -Enable format-on-save for consistent code style: - -```json -// settings.json -{ - "editor.formatOnSave": true, - "[clarity]": { - "editor.defaultFormatter": "HiroSystems.clarity-lsp" - } -} -``` - -### Error Checking Frequency - -Adjust how often the extension checks for errors: - -```json -// settings.json -{ - "clarity.checkOnSave": true, - "clarity.checkOnType": false -} -``` - -## Best Practices - -**Organize your workspace** -- Keep all contract files in your Clarinet project root -- Use descriptive filenames that match contract names -- Group related contracts in subdirectories - -**Use the extension's power** -- Hover before assuming—check function documentation -- Let auto-completion guide you to valid function names -- Pay attention to error squiggles; they catch real issues - -**Debugging workflow** -- Start with simple functions before debugging complex ones -- Use breakpoints strategically at decision points -- Check variable values at each step - -**Performance tips** -- Close unused Clarity files to improve responsiveness -- For large projects, consider workspace-specific settings -- Restart the extension (`Ctrl+Shift+P` → "Restart Extension Host") if it becomes slow - -## Troubleshooting - -**Extension not recognizing files?** -- Ensure files have `.clar` extension -- Check if you're in a Clarinet project directory -- Restart VS Code - -**Auto-completion not working?** -- Verify the language server is running (check status bar) -- Try reloading the window (`Ctrl+Shift+P` → "Reload Window") - -**Debugger won't start?** -- Confirm Clarinet is installed: `clarinet --version` -- Make sure you're using VS Code Desktop, not web -- Check that your project has a valid `Clarinet.toml` \ No newline at end of file diff --git a/content/_hidden/(local-development)/creating-a-clarinet-project.mdx b/content/_hidden/(local-development)/creating-a-clarinet-project.mdx deleted file mode 100644 index 6b49b3c8e..000000000 --- a/content/_hidden/(local-development)/creating-a-clarinet-project.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Creating a Clarinet project -sidebarTitle: Create a project -description: Step-by-step guide to create your first smart contract project with Clarinet ---- - -Ready to build your first smart contract? Clarinet makes it simple to generate a new project, write Clarity code, and test everything locally. You'll have a working counter contract up and running in minutes. - -Think of Clarinet as your smart contract workshop. It gives you project structure, testing tools, and a local blockchain—everything you need to build confidently before deploying to mainnet. - -## What You'll Learn - -- Generate a new Clarinet project -- Create your first smart contract -- Write basic Clarity functions -- Validate your contract code -- Test contract interactions locally - -## What You'll Need - -- [Clarinet installed](/docs/setting-up-your-environment/installing-prerequisites) -- Basic terminal knowledge -- 10 minutes for the walkthrough - -## Step 1: Generate Your Project - -Create a new Clarinet project called `counter`. This sets up everything you need for smart contract development. - -```terminal -$ clarinet new counter -Creating directory counter -Created file counter/Clarinet.toml -Created file counter/.gitignore -Created directory counter/contracts -Created directory counter/tests -Created file counter/settings/Devnet.toml -Created file counter/settings/Mainnet.toml -Created file counter/settings/Testnet.toml -Created file counter/package.json -Created file counter/tsconfig.json -Created file counter/vitest.config.js -``` - -Navigate into your new project: - -```terminal -$ cd counter -``` - -You now have a complete Clarinet workspace with: -- **contracts/**: Where your Clarity files live -- **tests/**: JavaScript test files -- **settings/**: Network configurations -- **Clarinet.toml**: Project configuration - -## Step 2: Create Your First Contract - -Generate a new smart contract called `counter` inside your project: - -```terminal -$ clarinet contract new counter -Created contracts/counter.clar -``` - -This command: -- Creates the contract file `contracts/counter.clar` -- Updates `Clarinet.toml` with contract configuration -- Sets up the proper folder structure - -Your `Clarinet.toml` now includes: - -```toml -[contracts.counter] -path = 'contracts/counter.clar' -clarity_version = 2 -epoch = "latest" -``` - -## Step 3: Write Your Smart Contract - -Open `contracts/counter.clar` and add this code: - -```clarity -;; Define a map to store counters for each user -(define-map counters principal uint) - -;; Public function to increment a user's counter -(define-public (count-up) - (ok (map-set counters tx-sender (+ (get-count tx-sender) u1))) -) - -;; Read-only function to get a user's current count -(define-read-only (get-count (who principal)) - (default-to u0 (map-get? counters who)) -) -``` - -**What this contract does:** -- **counters map**: Stores a number for each user (principal) -- **count-up function**: Increases the caller's count by 1 -- **get-count function**: Returns anyone's current count - -Each user gets their own counter that starts at 0 and increments when they call `count-up`. - -## Step 4: Validate Your Contract - -Check your contract for syntax errors and issues: - -```terminal -$ clarinet check -✅ 1 contract checked, no problems found. -``` - -See the checkmark? Your contract is valid! If you see errors: -- Check for typos in function names -- Make sure parentheses are balanced -- Verify correct Clarity syntax - -Common fixes: -- Missing or extra parentheses -- Incorrect function signatures -- Typos in built-in functions - -## Step 5: Test Your Contract Locally - -Start the Clarinet console to interact with your contract: - -```terminal -$ clarinet console -Welcome to Clarinet console. -Type (help) for available commands. ->> -``` - -**Test the count-up function:** - -```clarity ->> (contract-call? .counter count-up) -(ok true) -``` - -**Check your count:** - -```clarity ->> (contract-call? .counter get-count tx-sender) -u1 -``` - -**Increment again:** - -```clarity ->> (contract-call? .counter count-up) -(ok true) - ->> (contract-call? .counter get-count tx-sender) -u2 -``` - -Perfect! Your counter is working. Each call to `count-up` increases your count by 1. - -Hit `Ctrl+C` twice to leave the console. - -> **Project Structure**: Your Clarinet project includes contracts for your Clarity code, tests for JavaScript unit tests, settings for network configurations, and Clarinet.toml for project configuration. For a complete breakdown of each file and configuration options, see our [Anatomy of a Clarinet Project](/tools/clarinet/anatomy-of-a-clarinet-project) guide. - -## Verification - -Let's confirm everything is working: - -1. **Project created**: `ls` shows all the project files -2. **Contract valid**: `clarinet check` passes with no errors -3. **Contract interactive**: Console commands return expected results -4. **Functions work**: Counter increments correctly - -If any step fails, double-check the contract code and try `clarinet check` again. - -## Troubleshooting - -**"Command not found: clarinet"** -- Make sure [Clarinet is installed](/docs/setting-up-your-environment/installing-prerequisites) -- Restart your terminal after installation - -**"Contract validation failed"** -- Check for syntax errors in your `.clar` file -- Ensure parentheses are balanced -- Look for typos in function names - -**"Console not responding"** -- Exit with `Ctrl+C` and try `clarinet console` again -- Make sure you're in your project directory - -**"Contract call failed"** -- Verify the contract name matches your file (`.counter`) -- Check function names for typos -- Ensure you're using correct Clarity syntax diff --git a/content/_hidden/(local-development)/meta.json b/content/_hidden/(local-development)/meta.json deleted file mode 100644 index 15458daf6..000000000 --- a/content/_hidden/(local-development)/meta.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "local-development", - "pages": [ - "creating-a-clarinet-project", - "using-clarity-vscode-extension", - "working-with-devnet", - "using-local-accounts", - "building-transactions" - ] -} diff --git a/content/_hidden/(local-development)/using-local-accounts.mdx b/content/_hidden/(local-development)/using-local-accounts.mdx deleted file mode 100644 index 28c861f6a..000000000 --- a/content/_hidden/(local-development)/using-local-accounts.mdx +++ /dev/null @@ -1,370 +0,0 @@ ---- -title: Using Local Accounts -description: Create, manage, and use local Stacks accounts with private keys for development and testing ---- - -Local accounts let you work with Stacks blockchain directly using private keys. This approach is perfect for server-side applications, testing environments, and development workflows where you need full control over account operations. - -You'll use private keys to sign transactions, call contracts, and manage STX tokens without wallet extensions or user interaction. - -## What are local accounts? - -A local account is an account whose signing keys are stored and managed directly in your application code. It performs signing of transactions and messages with a private key **before** broadcasting them to the Stacks network. - -This is different from wallet-connected accounts (like those using Leather or Xverse), where: -- **Local accounts**: Private keys live in your code, signing happens locally -- **Wallet accounts**: Private keys stay in the user's wallet, signing requires user approval - -Local accounts are ideal for: -- **Server-side applications** that need to sign transactions automatically -- **Development and testing** where you want predictable, fast signing -- **Automated scripts** for blockchain interactions -- **Backend services** managing STX transfers or contract calls - -There are two ways to create local accounts in Stacks.js: -- **Private key accounts**: Direct hex private key usage -- **Seed phrase accounts**: Generate from 24-word mnemonic phrases - -## Feature overview - -Working with local accounts involves these core operations: - -**Account creation**: Generate new accounts with private keys and addresses -**Account restoration**: Load existing accounts from private keys or seed phrases -**Balance checking**: Query STX balances and nonces for transaction planning -**Read-only calls**: Execute contract functions without spending STX -**Transaction broadcasting**: Send STX transfers and contract calls to the network - -## Core packages required - -Stacks.js v7 simplifies account management with these packages: - -```bash -npm install @stacks/wallet-sdk @stacks/transactions @stacks/common@latest -``` - -The `@stacks/network` package is optional - you can use string literals like `'testnet'` or `'mainnet'` instead. - -## Creating new accounts - -### Generate a random account - -Create a completely new account with a random private key: - -```typescript -import { generateWallet, randomSeedPhrase, getStxAddress } from '@stacks/wallet-sdk'; - -// Generate new 24-word seed phrase -const seedPhrase = randomSeedPhrase(); - -// Create wallet from seed phrase -const wallet = await generateWallet({ - secretKey: seedPhrase, - password: 'your-secure-password' -}); - -// Access the first account -const account = wallet.accounts[0]; -const privateKey = account.stxPrivateKey; -const address = getStxAddress(account, 'testnet'); - -console.log('Address:', address); -console.log('Private Key:', privateKey); -console.log('Seed Phrase:', seedPhrase); -``` - -### Generate additional accounts - -Add more accounts to an existing wallet: - -```typescript -import { generateNewAccount } from '@stacks/wallet-sdk'; - -// Add second account to wallet -const walletWithTwoAccounts = generateNewAccount(wallet); -const secondAccount = walletWithTwoAccounts.accounts[1]; -const secondAddress = getStxAddress(secondAccount, 'testnet'); -``` - -## Loading existing accounts - -### From private key - -Use an existing private key directly: - -```typescript -import { privateKeyToAddress } from '@stacks/transactions'; - -const privateKey = 'your-64-character-hex-private-key'; -const address = privateKeyToAddress(privateKey, 'testnet'); -``` - -### From seed phrase - -Restore a wallet from a 24-word seed phrase: - -```typescript -import { generateWallet } from '@stacks/wallet-sdk'; - -const existingSeedPhrase = 'abandon ability able about above absent...'; -const restoredWallet = await generateWallet({ - secretKey: existingSeedPhrase, - password: 'your-password' -}); - -const restoredAccount = restoredWallet.accounts[0]; -``` - -## Getting account information - -### Check STX balance - -Query account balance and nonce from the Stacks API: - -```typescript -async function getAccountInfo(address: string, network = 'testnet') { - const baseUrl = network === 'mainnet' - ? 'https://api.hiro.so' - : 'https://api.testnet.hiro.so'; - - const response = await fetch(`${baseUrl}/v2/accounts/${address}?proof=0`); - const data = await response.json(); - - return { - balance: data.balance, - locked: data.locked, - nonce: data.nonce, - unlockHeight: data.unlock_height - }; -} - -// Usage -const accountInfo = await getAccountInfo('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM'); -console.log(`Balance: ${accountInfo.balance} microSTX`); -console.log(`Next nonce: ${accountInfo.nonce}`); -``` - -### Get account nonce - -Use the built-in function for cleaner nonce fetching: - -```typescript -import { fetchNonce } from '@stacks/transactions'; - -const nonce = await fetchNonce({ - address: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - network: 'testnet' -}); -``` - -## Calling read-only functions - -Execute contract functions that don't modify state: - -```typescript -import { fetchCallReadOnlyFunction, Cl } from '@stacks/transactions'; - -const result = await fetchCallReadOnlyFunction({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'hello-world', - functionName: 'get-counter', - functionArgs: [], // No arguments needed - network: 'testnet', - senderAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM' -}); - -console.log('Contract result:', result); -``` - -### With function arguments - -Pass Clarity values as function arguments: - -```typescript -const result = await fetchCallReadOnlyFunction({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'my-contract', - functionName: 'get-user-balance', - functionArgs: [ - Cl.standardPrincipal('ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG') - ], - network: 'testnet', - senderAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM' -}); -``` - -## Broadcasting transactions - -### STX token transfer - -Send STX tokens between accounts: - -```typescript -import { makeSTXTokenTransfer, broadcastTransaction } from '@stacks/transactions'; - -const transaction = await makeSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '1000000', // 1 STX in microSTX - senderKey: privateKey, - network: 'testnet', - memo: 'Test transfer', - // nonce and fee are optional - will be fetched/estimated automatically -}); - -const broadcastResponse = await broadcastTransaction({ - transaction, - network: 'testnet' -}); - -console.log('Transaction ID:', broadcastResponse.txid); -``` - -### Contract function call - -Call a contract function that modifies state: - -```typescript -import { makeContractCall, Cl } from '@stacks/transactions'; - -const transaction = await makeContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'hello-world', - functionName: 'increment-counter', - functionArgs: [Cl.uint(5)], - senderKey: privateKey, - network: 'testnet', - validateWithAbi: true // Validates function exists and arguments match -}); - -const broadcastResponse = await broadcastTransaction({ - transaction, - network: 'testnet' -}); -``` - -## Configuration options - -### Custom network endpoints - -Connect to custom Stacks nodes: - -```typescript -const transaction = await makeSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '1000000', - senderKey: privateKey, - network: 'testnet', - client: { baseUrl: 'http://localhost:3999' } // Custom devnet -}); -``` - -### Transaction options - -Customize transaction behavior: - -```typescript -const transaction = await makeContractCall({ - contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', - contractName: 'my-contract', - functionName: 'my-function', - functionArgs: [], - senderKey: privateKey, - network: 'testnet', - nonce: 42, // Explicit nonce - fee: '1000', // Explicit fee in microSTX - postConditions: [], // Add safety conditions - anchorMode: 'any' // Transaction timing preference -}); -``` - -### Fee estimation - -Get fee estimates before broadcasting: - -```typescript -import { fetchFeeEstimate } from '@stacks/transactions'; - -const feeEstimate = await fetchFeeEstimate({ - transaction, - network: 'testnet' -}); - -console.log('Estimated fee:', feeEstimate); -``` - -## Best practices - -### Private key security - -Never expose private keys in client-side code or logs: - -```typescript -// ✅ Good - Environment variables -const privateKey = process.env.PRIVATE_KEY; - -// ❌ Bad - Hardcoded keys -const privateKey = 'edf9aee84d9b7abc145504dde6726c64f369d37ee34ded868fabd876c26570bc'; -``` - -### Error handling - -Always handle network and transaction errors: - -```typescript -try { - const transaction = await makeSTXTokenTransfer({ - recipient: 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG', - amount: '1000000', - senderKey: privateKey, - network: 'testnet' - }); - - const result = await broadcastTransaction({ transaction, network: 'testnet' }); - - if (result.error) { - console.error('Transaction failed:', result.reason); - } else { - console.log('Success:', result.txid); - } -} catch (error) { - console.error('Network error:', error); -} -``` - -### Nonce management - -For multiple transactions, increment nonces manually: - -```typescript -let currentNonce = await fetchNonce({ address, network: 'testnet' }); - -// Send multiple transactions -for (const recipient of recipients) { - const transaction = await makeSTXTokenTransfer({ - recipient, - amount: '1000000', - senderKey: privateKey, - network: 'testnet', - nonce: currentNonce++ - }); - - await broadcastTransaction({ transaction, network: 'testnet' }); -} -``` - -### Testing on devnet - -Use local devnet for faster development: - -```typescript -// Works with clarinet devnet -const transaction = await makeSTXTokenTransfer({ - recipient: 'ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5', - amount: '1000000', - senderKey: privateKey, - network: 'devnet', - client: { baseUrl: 'http://localhost:3999' } -}); -``` - -This approach gives you complete control over Stacks accounts for development, testing, and server-side applications. You can sign transactions, interact with contracts, and manage STX tokens without relying on wallet extensions or user interaction. \ No newline at end of file diff --git a/content/_hidden/(local-development)/working-with-devnet.mdx b/content/_hidden/(local-development)/working-with-devnet.mdx deleted file mode 100644 index 82e68ddeb..000000000 --- a/content/_hidden/(local-development)/working-with-devnet.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Working with devnet -description: Set up and use Clarinet's local development network for testing smart contracts ---- - -Clarinet's devnet gives you a complete local blockchain environment. You'll run Bitcoin and Stacks nodes, APIs, and explorers right on your machine using Docker containers. - -This lets you test contracts, debug transactions, and develop frontends without spending real money or waiting for network confirmations. - -## What you'll learn - -You'll learn how to: -- [x] Start and configure a local devnet -- [x] Deploy contracts to your local network -- [x] Use devnet accounts for testing -- [x] Monitor transactions and contract calls -- [x] Troubleshoot common devnet issues - -## Prerequisites - -Before starting, make sure you have: -- [Docker Desktop](https://www.docker.com/products/docker-desktop/) installed and running -- A Clarinet project (see [Creating a Clarinet Project](/creating-a-clarinet-project)) -- Basic familiarity with terminal commands - -## Step 1: Start your devnet - -Navigate to your Clarinet project directory and start the devnet: - -```bash -clarinet devnet start -``` - -You'll see Docker containers spinning up. This creates a full blockchain stack: -- Bitcoin node (local bitcoind) -- Stacks node (local stacks-blockchain) -- Stacks API (for querying blockchain data) -- Stacks Explorer (web interface) -- Bitcoin Explorer -- PostgreSQL database - -The command opens an interactive dashboard by default. You can view logs instead with `--no-dashboard`. - -## Step 2: Access your local blockchain - -Once devnet starts, you can access these services: - -- **Stacks Explorer**: http://localhost:8000 - View blocks, transactions, and contracts -- **Bitcoin Explorer**: http://localhost:8001 - Monitor Bitcoin transactions -- **Stacks API**: http://localhost:3999 - Query blockchain data programmatically - -Your contracts from `contracts/` are automatically deployed when devnet starts. - -## Step 3: Use devnet accounts - -Devnet provides pre-funded accounts for testing. You can find account details in: -- The devnet dashboard (default view) -- `settings/Devnet.toml` configuration file - -Each account has: -- STX tokens for transaction fees -- Bitcoin for stacking/mining operations -- Private keys for signing transactions - -## Step 4: Test contract interactions - -With devnet running, you can interact with your contracts through: - -**Clarinet console** (in a new terminal): -```bash -clarinet console -``` - -**Frontend applications** pointing to `http://localhost:3999` - -**Direct API calls**: -```bash -curl http://localhost:3999/v2/info -``` - -## Verify it's working - -Check that devnet is running properly: - -1. **Visit the explorer**: Go to http://localhost:8000 and verify you see recent blocks -2. **Check API health**: Run `curl http://localhost:3999/v2/info` and confirm you get network info -3. **View your contracts**: Look for your deployed contracts in the explorer's contract section - -See recent transactions and your contract deployments? You're good to go. - -## Deploy and try it out - -Your contracts are automatically deployed when devnet starts. To test them: - -1. **Use the console**: Run `clarinet console` and call contract functions -2. **Check deployment status**: View deployments in the explorer or dashboard -3. **Test with a frontend**: Point your dapp to the local API endpoint - -## Troubleshooting - -**Error: clarinet was unable to create network** -- Make sure Docker Desktop is running -- Check that ports 3999, 8000, 8001 aren't in use by other applications - -**Containers won't start** -- Stop any running devnet: `clarinet devnet stop` -- Clear Docker containers: `docker system prune` -- Restart devnet - -**Contracts not deploying** -- Check `Clarinet.toml` for syntax errors -- Verify contract files are in the `contracts/` directory -- Review deployment logs in the dashboard - -## Configuration options - -Customize devnet behavior with these flags: - -- `--manifest-path`: Use a different Clarinet.toml file -- `--deployment-plan-path`: Specify custom deployment plan -- `--no-dashboard`: Show logs instead of interactive dashboard -- `--use-on-disk-deployment-plan`: Use existing deployment plan without updates - -Modify `settings/Devnet.toml` to change: -- Network ports -- Docker images -- Mining configuration -- Epoch settings \ No newline at end of file diff --git a/content/_hidden/(setting-up-your-environment)/installing-prerequisites.mdx b/content/_hidden/(setting-up-your-environment)/installing-prerequisites.mdx deleted file mode 100644 index 21bf7c46a..000000000 --- a/content/_hidden/(setting-up-your-environment)/installing-prerequisites.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Installing development tools -sidebarTitle: Prerequisites -description: Set up Clarinet and VS Code for Stacks development. ---- - - -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'; - -Get your development environment ready with Clarinet and the VS Code extension. These tools provide everything you need to write, test, and deploy smart contracts. - -## Install Clarinet - - - -```terminal !! macOS -$ brew install clarinet -``` - -```terminal !! Windows -$ winget install clarinet -``` - -```terminal !! Cargo -$ sudo apt install build-essential pkg-config libssl-dev -``` - -```terminal !! Binary -$ wget -nv https://github.com/hirosystems/clarinet/releases/download/v0.27.0/clarinet-linux-x64-glibc.tar.gz -O clarinet-linux-x64.tar.gz -$ tar -xf clarinet-linux-x64.tar.gz -$ chmod +x ./clarinet -$ mv ./clarinet /usr/local/bin -``` - - - -Verify installation: - -```terminal -$ clarinet --version -clarinet-cli 2.10.0 -``` - -## Install VS Code extension - -```terminal -$ code --install-extension hirosystems.clarity-lsp -``` - -Or install from VS Code: Extensions panel → Search "Clarity" → Install - -## Configuration options - -| Setting | Command | Description | -|---------|---------|-------------| -| Shell completions | `clarinet completions ` | Enable tab completion for commands | -| Update Clarinet | `brew upgrade clarinet` | Get the latest version (macOS) | -| Extension settings | VS Code Settings → Clarity | Configure formatter, linting | - -## Test your environment - -Verify your setup is working correctly: - -```terminal -$ clarinet new my-test && cd my-test -Created directory my-test -Created file Clarinet.toml - -$ clarinet contract new counter -Created file contracts/counter.clar -Created file tests/counter.test.ts - -$ npm run test -✔ 0 passed | 0 failed -``` - -## Common issues - - - - Command not found - -
- Check: Is Clarinet in PATH?
- Fix: Add to PATH or reinstall -
-
-
- - - VS Code not highlighting - -
- Check: Extension installed?
- Fix: Reload window after install -
-
-
- - - No auto-completion - -
- Check: In Clarinet project?
- Fix: Open folder with Clarinet.toml -
-
-
-
- -For detailed VS Code features, see the [extension guide](/tools/clarinet/vscode-extension). - -## Related guides - -- [Create your first project](/tools/clarinet/quickstart) -- [VS Code extension features](/tools/clarinet/vscode-extension) \ No newline at end of file diff --git a/content/_hidden/(setting-up-your-environment)/meta.json b/content/_hidden/(setting-up-your-environment)/meta.json deleted file mode 100644 index 83405259a..000000000 --- a/content/_hidden/(setting-up-your-environment)/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "setting-up-your-environment", - "pages": ["installing-prerequisites", "setting-up-a-web-wallet"] -} diff --git a/content/_hidden/(setting-up-your-environment)/setting-up-a-web-wallet.mdx b/content/_hidden/(setting-up-your-environment)/setting-up-a-web-wallet.mdx deleted file mode 100644 index e9811c40b..000000000 --- a/content/_hidden/(setting-up-your-environment)/setting-up-a-web-wallet.mdx +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Setting up a web wallet -sidebarTitle: Wallet installation -description: Quick setup guide for Leather wallet and devnet configuration for local development ---- - -You need a Bitcoin and Stacks wallet to interact with smart contracts during development. Leather is the most popular choice for developers—it supports both Bitcoin and Stacks, works with all major browsers, and makes switching between networks simple. - -This guide gets you set up with Leather and configured for local development in under 5 minutes. - -## What You'll Learn - -- Install Leather browser extension -- Create or restore a wallet -- Add devnet network for local development -- Alternative wallet options - -## What You'll Need - -- Chrome, Brave, Edge, or Opera browser -- 5 minutes for setup - -## Step 1: Install Leather - -**For Chrome, Brave, Edge, or Opera:** - -1. Visit the [Chrome Web Store Leather page](https://chrome.google.com/webstore/detail/leather/ldinpeekobnhjjdofggfgjlcehhmanlj) -2. Click "Add to Chrome" (or "Get" depending on your browser) -3. Allow the extension when prompted - -The extension icon appears in your browser toolbar. Click it to open Leather. - -**Alternative installation:** -You can also [install from source](https://leather.io/guides/install-leather) for developer builds or testing. - -## Step 2: Create Your Wallet - -**For new users:** - -1. Click "Create new wallet" -2. Write down your 12-word secret recovery phrase offline -3. Confirm your phrase by selecting words in order -4. Set a password for the wallet - -**For existing users:** -Click "Restore wallet" and enter your existing seed phrase. - -Your secret recovery phrase is the only way to restore your wallet. Store it securely offline—preferably written down or engraved on metal. - -## Step 3: Add Devnet Network - -This is the key step for local development. Devnet lets you test with Clarinet's local blockchain. - -1. Click the overflow menu (3 dots) at top-right of Leather -2. Select "Change network" -3. Click "Add network" -4. Enter these devnet details: - -``` -Name: Devnet -Stacks API URL: http://localhost:3999 -Bitcoin API URL: http://localhost:18443/wallet/{wallet_id} -``` - -5. Click "Add network" -6. Select "Devnet" from the network dropdown - -You're now connected to your local development environment. When you start Clarinet devnet, Leather will interact with your local blockchain. - -## Step 4: Verify Setup - -Test your setup: - -1. Switch to Devnet network in Leather -2. You should see "Devnet" in the top-left corner -3. Your STX balance will show 0 (normal—you'll get test tokens later) - -If you see any connection errors, make sure you've started `clarinet devnet` before switching to the devnet network. - -## Alternative Wallets - -**Xverse**: Another popular Bitcoin/Stacks wallet with mobile support. Follow their [complete setup guide](https://www.xverse.app/blog/how-to-set-up-an-xverse-wallet) if you prefer Xverse over Leather. - -**For production apps**: Support multiple wallets to give users choice. Both Leather and Xverse work with the same Stacks.js integration code. - -## Troubleshooting - -**Extension not appearing?** -- Check if it's hidden in your browser's extensions menu -- Pin it to your toolbar for easy access - -**Can't add devnet network?** -- Double-check the URLs exactly as shown above -- Make sure you're using `http://` not `https://` - -**Connection errors on devnet?** -- Start Clarinet devnet first: `clarinet devnet` -- Wait for all of the services to be running before verifying the setup \ No newline at end of file diff --git a/content/_hidden/(testing-your-contracts)/cost-analysis-and-debugging.mdx b/content/_hidden/(testing-your-contracts)/cost-analysis-and-debugging.mdx deleted file mode 100644 index a7bba2b6d..000000000 --- a/content/_hidden/(testing-your-contracts)/cost-analysis-and-debugging.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Cost analysis and debugging -description: Cost analysis and debugging ---- - -## Cost analysis and debugging \ No newline at end of file diff --git a/content/_hidden/(testing-your-contracts)/integration-testing.mdx b/content/_hidden/(testing-your-contracts)/integration-testing.mdx deleted file mode 100644 index bc5d75302..000000000 --- a/content/_hidden/(testing-your-contracts)/integration-testing.mdx +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: Integration testing -description: Learn how to write and run integration tests for your Clarity smart contracts using the Clarinet JS SDK and Vitest. ---- - -Integration testing is a crucial step in smart contract development that involves testing how different components of your system work together. The Clarinet JS SDK provides powerful tools for writing and running integration tests, allowing you to simulate complex scenarios and interactions between multiple contracts. - -By using integration tests, you can ensure that your smart contracts function correctly as part of a larger system and catch potential issues that might not be apparent in unit tests alone. - -In this guide, you will: - -1. [Set up a Clarinet project with a `defi` contract.](#set-up-a-clarinet-project) -2. [Write an integration test for the smart contract.](#test-the-deposit-and-borrow-functionality) -3. [Run tests and generate coverage reports.](#run-tests-and-generate-coverage-reports) - ---- - -## Set up a Clarinet project - -Start by creating a new Clarinet project. This command will create a new directory named `defi` and set up a basic Clarinet project inside it. - -```terminal -$ clarinet new stx-defi -$ cd stx-defi -``` - -After changing into your project directory, run `npm install` to install the package dependencies for testing. - -```terminal -$ npm install -``` - -We are going to use the same `defi` contract that we used in the [unit testing guide](/tools/clarinet/unit-testing), but with some additional functionality - the ability to `borrow` STX from the contract. If you don't have this project set up already, follow the steps below: - -```terminal -$ clarinet contract new defi -``` - -Then, inside your `defi.clar` file, copy and paste the following contract code: - -```clarity -;; Error constants for various failure scenarios. -(define-constant err-overborrow (err u300)) - -;; The interest rate for loans, represented as 10% (out of a base of 100). -(define-data-var loan-interest-rate uint u10) ;; Representing 10% interest rate - - -;; Holds the total amount of deposits in the contract, initialized to 0. -(define-data-var total-deposits uint u0) - -;; Maps a user's principal address to their deposited amount. -(define-map deposits { owner: principal } { amount: uint }) - -;; Maps a borrower's principal address to their loan details: amount and the last interaction block. -(define-map loans principal { amount: uint, last-interaction-block: uint }) - -;; Public function for users to deposit STX into the contract. -;; Updates their balance and the total deposits in the contract. -(define-public (deposit (amount uint)) - (let - ( - ;; Fetch the current balance or default to 0 if none exists. - (current-balance (default-to u0 (get amount (map-get? deposits { owner: tx-sender })))) - ) - ;; Transfer the STX from sender = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM" to recipient = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.defi (ie: contract identifier on the chain!)". - (try! (stx-transfer? amount tx-sender (as-contract tx-sender))) - ;; Update the user's deposit amount in the map. - (map-set deposits { owner: tx-sender } { amount: (+ current-balance amount) }) - ;; Update the total deposits variable. - (var-set total-deposits (+ (var-get total-deposits) amount)) - ;; Return success. - (ok true) - ) -) - -;; Public function for users to borrow STX based on their deposits. -(define-public (borrow (amount uint)) - (let - ( - ;; Fetch user's deposit or default to 0. - (user-deposit (default-to u0 (get amount (map-get? deposits { owner: tx-sender })))) - ;; Calculate the maximum amount the user is allowed to borrow. (which will be upto HALF of what they deposited) - (allowed-borrow (/ user-deposit u2)) - ;; Fetch current loan details or default to initial values. - (current-loan-details (default-to { amount: u0, last-interaction-block: u0 } (map-get? loans tx-sender ))) - ;; Calculate accrued interest on the current loan. - (accrued-interest (calculate-accrued-interest (get amount current-loan-details) (get last-interaction-block current-loan-details))) - ;; Calculate the total amount due including interest. - (total-due (+ (get amount current-loan-details) (unwrap-panic accrued-interest))) - ;; Calculate the new loan total after borrowing additional amount. - (new-loan (+ amount)) - ) - ;; Ensure the requested borrow amount does not exceed the allowed amount. - (asserts! (<= new-loan allowed-borrow) err-overborrow) - ;; Transfer the borrowed STX to the user. - (let - ( - (recipient tx-sender) - ) - (try! (as-contract (stx-transfer? amount tx-sender recipient))) - ) - ;; Update the user's loan details in the map. - (map-set loans tx-sender { amount: new-loan, last-interaction-block: block-height }) - ;; Return success. - (ok true) - ) -) - -;; Read-only function to get the total balance by tx-sender -(define-read-only (get-balance-by-sender) - (ok (map-get? deposits { owner: tx-sender })) -) - -;; Read-only function to get the total amount owed by the user. -(define-read-only (get-amount-owed) - (let - ( - ;; Fetch current loan details or default to initial values. - (current-loan-details (default-to { amount: u0, last-interaction-block: u0 } (map-get? loans tx-sender ))) - ;; Calculate accrued interest on the current loan. - (accrued-interest (calculate-accrued-interest (get amount current-loan-details) (get last-interaction-block current-loan-details))) - ;; Calculate the total amount due including interest. - (total-due (+ (get amount current-loan-details) (unwrap-panic accrued-interest))) - ) - ;; Return the total amount due. - (ok total-due) - ) -) - -;; Private function to calculate the accrued interest on a loan. -(define-private (calculate-accrued-interest (principal uint) (start-block uint)) - (let - ( - ;; Calculate the number of blocks elapsed since the last interaction. - (elapsed-blocks (- block-height start-block)) - ;; Calculate the interest based on the principal, rate, and elapsed time. - (interest (/ (* principal (var-get loan-interest-rate) elapsed-blocks) u10000)) - ) - ;; Ensure the loan started in the past (not at block 0). - (asserts! (not (is-eq start-block u0)) (ok u0)) - ;; Return the calculated interest. - (ok interest) - ) -) -``` - -Run `clarinet check` to ensure that your smart contract is valid and ready for testing. - - -You can find the full code for this project in [this repo](https://github.com/hirosystems/clarity-examples/tree/main/examples/stx-defi). - - -## Test the deposit and borrow functionality - -In order to `borrow` STX from the contract, users must first `deposit` STX into it. Therefore, we need to write an integration test that simulates the interaction between these two functions. - -Inside of your `defi.test.ts` file, replace the boilerplate code and add the following: - -```typescript -import { describe, it, expect } from 'vitest'; -import { Cl } from '@stacks/transactions'; - -const accounts = simnet.getAccounts(); -const wallet1 = accounts.get('wallet_1')!; - -describe('stx-defi', () => { - it('borrows 10 and verifies the amount owed to be 10', () => { - simnet.callPublicFn('defi', 'deposit', [Cl.uint(1000)], wallet1); - const totalDeposits = simnet.getDataVar('defi', 'total-deposits'); - expect(totalDeposits).toBeUint(1000); - - simnet.callPublicFn('defi', 'borrow', [Cl.uint(10)], wallet1); - const { result } = simnet.callReadOnlyFn('defi', 'get-amount-owed', [], wallet1); - expect(result).toBeOk(Cl.uint(10)); - }); -}); -``` - -In this integration test, we're simulating a scenario where a user deposits STX into the DeFi contract and then borrows against that deposit. Let's walk through the process step by step. - -We start by simulating a deposit of 1000 STX from `wallet1`. To do this, we use the `callPublicFn` method from the Clarinet JS SDK `simnet` object, which allows us to call public functions in our smart contract just as we would on the actual blockchain. - -After making the deposit, we want to verify that it was successful. We do this by checking the total deposits in the contract using `getDataVar`. - -This handy method lets us peek at the value of data variables defined in your contract. - - -To learn more about available methods for integration testing, check out the [reference page](/tools/clarinet/sdk-reference). - - -To ensure the deposit was recorded correctly, we use a custom matcher, `toBeUint`. This matcher is specifically designed to check if a value is a Clarity unsigned integer with the exact value we expect. - -With the deposit confirmed, we simulate `wallet1` borrowing 10 STX. We do this with another call to `callPublicFn`, this time invoking the `borrow` function of our contract. - -After the borrowing operation, we want to check how much `wallet1` owes. We use `callReadOnlyFn` to call a read-only function named `get-amount-owed` in our contract. - -Finally, we verify the amount owed using another custom matcher, `toBeOk(Cl.uint(10))`. This matcher is particularly useful because it checks two things at once: - -1. That our contract returned a successful Clarity response type. -2. That the value returned is a Clarity unsigned integer with the exact value we expect (`10`). - -These custom matchers and simnet methods are powerful tools and allow you to simulate complex interactions with your smart contracts and make detailed assertions about the results. - -## Run tests and generate coverage reports - -To run your tests, use: - -```terminal -$ npm run test -``` - -To generate a coverage report, use: - -```terminal -$ npm run coverage -``` - -This will run your tests and produce a detailed coverage report, helping you identify any untested parts of your contract. \ No newline at end of file diff --git a/content/_hidden/(testing-your-contracts)/meta.json b/content/_hidden/(testing-your-contracts)/meta.json deleted file mode 100644 index 9eb0a9b0f..000000000 --- a/content/_hidden/(testing-your-contracts)/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "testing-your-contracts", - "pages": ["unit-testing", "integration-testing", "cost-analysis-and-debugging"] -} diff --git a/content/_hidden/(testing-your-contracts)/unit-testing.mdx b/content/_hidden/(testing-your-contracts)/unit-testing.mdx deleted file mode 100644 index af4b18525..000000000 --- a/content/_hidden/(testing-your-contracts)/unit-testing.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Unit testing with Clarinet JS SDK -description: Learn how to write and run unit tests for your Clarity smart contracts using the Clarinet JS SDK and Vitest. ---- - -import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; - -Unit testing is the process of testing individual components or functions of smart contracts to ensure they work as expected. The Clarinet JS SDK provides a testing framework that allows you to write these tests using the Vitest testing framework, helping you catch bugs and errors early in the development process. - -In this guide, you will: - -1. [Set up a new Clarinet project with a `defi` contract](#set-up-a-new-clarinet-project). -2. [Write a unit test covering the `deposit` function](#test-the-deposit-function). -3. [Run tests and generate coverage reports](#run-tests-and-generate-coverage-reports). - ---- - -## Set up a new Clarinet project - -Start by creating a new project with the Clarinet CLI. The command below will create a project structure inside of `defi` with the necessary files and folders, including the Clarinet JS SDK already set up for testing. - -```terminal -$ clarinet new stx-defi -$ cd stx-defi -``` - -After changing into your project directory, run `npm install` to install the package dependencies for testing. - -```terminal -$ npm install -``` - -Since the smart contract code is out of scope for this guide, we are going to use a pre-existing contract. First, generate a new file using the `clarinet contract new` command in order to set up your project with the necessary configuration and test files. - -```terminal -$ clarinet contract new defi -``` - -Now, inside your `defi.clar` file, copy and paste the following contract code: - -```clarity -;; Holds the total amount of deposits in the contract, initialized to 0. -(define-data-var total-deposits uint u0) - -;; Maps a user's principal address to their deposited amount. -(define-map deposits { owner: principal } { amount: uint }) - -;; Public function for users to deposit STX into the contract. -;; Updates their balance and the total deposits in the contract. -(define-public (deposit (amount uint)) - (let - ( - ;; Fetch the current balance or default to 0 if none exists. - (current-balance (default-to u0 (get amount (map-get? deposits { owner: tx-sender })))) - ) - ;; Transfer the STX from sender = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM" to recipient = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.defi (ie: contract identifier on the chain!)". - (try! (stx-transfer? amount tx-sender (as-contract tx-sender))) - ;; Update the user's deposit amount in the map. - (map-set deposits { owner: tx-sender } { amount: (+ current-balance amount) }) - ;; Update the total deposits variable. - (var-set total-deposits (+ (var-get total-deposits) amount)) - ;; Return success. - (ok true) - ) -) - -;; Read-only function to get the total balance by tx-sender -(define-read-only (get-balance-by-sender) - (ok (map-get? deposits { owner: tx-sender })) -) -``` - -Run `clarinet check` to ensure that your smart contract is valid and ready for testing. - - -You can find the full code for this project in [this repo](https://github.com/hirosystems/clarity-examples/tree/main/examples/stx-defi). - - -## Test the deposit function - -This `deposit` function allows users to deposit STX into the contract, updating their balance inside a `deposits` map and adding to the total deposits stored in a `total-deposits` variable. The key tests we want to cover are that the deposit is successful and that the user's balance, as well as the contract's total deposits, are updated correctly. - -Inside of your `defi.test.ts` file, replace the boilerplate code and add the following: - -```typescript -import { describe, it, expect } from 'vitest'; -import { Cl } from '@stacks/transactions'; - -const accounts = simnet.getAccounts(); -const wallet1 = accounts.get('wallet_1')!; -``` - -These imports provide the testing framework and utilities we need. We also get the `wallet_1` account, which will act as our test user. - -Next, define the test suite and the specific test case: - -```typescript -describe('stx-defi', () => { - it('allows users to deposit STX', () => { - // Test code will go here - }); -}); -``` - -This structure comes from our Vitest integration, and it organizes our tests and describes what we're testing. The `describe` block groups multiple test cases together, while the `it` block represents a single test case. - -Now, let's simulate a deposit. Inside of the `it` block, define the amount to deposit and call the `deposit` function: - -```typescript -const amount = 1000; -const deposit = simnet.callPublicFn('defi', 'deposit', [Cl.uint(amount)], wallet1); -``` - -This code simulates a deposit by calling the `deposit` function, using the `callPublicFn` method from the Clarinet JS SDK, in our contract with a specified amount, just as a user would in the real world. - -After making the deposit, create an assertion to verify that the call itself was successful and returns an `ok` response type with the value `true`: - -```typescript -expect(deposit.result).toBeOk(Cl.bool(true)); -``` - -Run `npm run test` to confirm that this test passes. - -Let's go over some of the code in this assertion: - -- `expect` is a function from Vitest that makes an assertion about the value we expect to get back from the `deposit` function. - -But how do we test against Clarity types and values? This is where the `Cl` and `toBeOk` helpers come in. - -- `toBeOk` is a custom matcher function built into Vitest that checks if the result of the deposit call is an `Ok` response, which is a Clarity type. This is important because it confirms that the deposit transaction was processed successfully. -- `Cl` helper is from the `@stacks/transactions` package and is used to create Clarity values in JavaScript. In this case, it's used to create a Clarity boolean with the value of `true`. - - -To see more custom matcher examples, check out the [reference page](/tools/clarinet/sdk-reference). - - -Once we can confirm that the deposit was successful, write a test to verify that the contract's total deposits have been updated correctly. - -```typescript -const totalDeposits = simnet.getDataVar('defi', 'total-deposits'); -expect(totalDeposits).toBeUint(amount); -``` - -Run `npm run test` again to confirm that this test also passes. - -This check ensures that the contract accepted our deposit without any issues. - -Lastly, verify that the user's balance has been updated correctly: - -```typescript -const balance = simnet.callReadOnlyFn('defi', 'get-balance-by-sender', [], wallet1); -expect(balance.result).toBeOk( - Cl.some( - Cl.tuple({ - amount: Cl.uint(amount), - }) - ) -); -``` - -We call the `get-balance-by-sender` function and check if it matches the amount we just deposited. - -By following these steps, our test comprehensively verifies that the `deposit` function works as intended, updating individual balances and total deposits accurately. - - - -```typescript - import { describe, it, expect } from 'vitest'; - import { Cl } from '@stacks/transactions'; - - const accounts = simnet.getAccounts(); - const wallet1 = accounts.get('wallet_1')!; - - describe('stx-defi', () => { - it('allows users to deposit STX', () => { - const amount = 1000; - const deposit = simnet.callPublicFn('defi', 'deposit', [Cl.uint(amount)], wallet1); - expect(deposit.result).toBeOk(Cl.bool(true)); - - const totalDeposits = simnet.getDataVar('defi', 'total-deposits'); - expect(totalDeposits).toBeUint(amount); - - const balance = simnet.callReadOnlyFn('defi', 'get-balance-by-sender', [], wallet1); - expect(balance.result).toBeOk( - Cl.some( - Cl.tuple({ - amount: Cl.uint(amount), - }) - ) - ); - }); - }); -``` - - - -## Run tests and generate coverage reports - -To run your tests, use: - -```terminal -$ npm run test -``` - -To generate a coverage report, use: - -```terminal -$ npm run coverage -``` - -This will run your tests and produce a detailed coverage report, helping you identify any untested parts of your contract. \ No newline at end of file diff --git a/content/_hidden/(working-with-hiro-apis)/api-fundamentals.mdx b/content/_hidden/(working-with-hiro-apis)/api-fundamentals.mdx deleted file mode 100644 index 6cca08d2c..000000000 --- a/content/_hidden/(working-with-hiro-apis)/api-fundamentals.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: API fundamentals -description: API fundamentals ---- - -## API fundamentals \ No newline at end of file diff --git a/content/_hidden/(working-with-hiro-apis)/backend-integration-patterns.mdx b/content/_hidden/(working-with-hiro-apis)/backend-integration-patterns.mdx deleted file mode 100644 index 7f8f285b7..000000000 --- a/content/_hidden/(working-with-hiro-apis)/backend-integration-patterns.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Backend integration patterns -description: Backend integration patterns ---- - -## Backend integration patterns \ No newline at end of file diff --git a/content/_hidden/(working-with-hiro-apis)/meta.json b/content/_hidden/(working-with-hiro-apis)/meta.json deleted file mode 100644 index 08d4bb9fd..000000000 --- a/content/_hidden/(working-with-hiro-apis)/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "working-with-hiro-apis", - "pages": ["api-fundamentals", "backend-integration-patterns"] -} diff --git a/content/_hidden/features.mdx b/content/_hidden/features.mdx deleted file mode 100644 index 0a13ebb57..000000000 --- a/content/_hidden/features.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Introduction to Hiro tools -sidebarTitle: Introduction to Hiro tools -description: Learn more about our tools and how to use them together. -isNew: true ---- - - - -## Overview - -Core tools for building and testing smart contracts: - -- [**Clarinet**](/tools/clarinet) - Local blockchain development environment -- [**Clarinet JS SDK**](/tools/clarinet/sdk-introduction) - JavaScript testing framework -- [**Stacks.js**](/reference/stacks.js) - Frontend integration library -- [**Chainhook**](/tools/chainhook) - Event-driven blockchain applications - -## API services - -Query blockchain data without running infrastructure: - -- [**Stacks Blockchain API**](/apis/stacks-blockchain-api) - RESTful blockchain queries -- [**Token Metadata API**](/apis/token-metadata-api) - NFT and token metadata -- [**Ordinals API**](/apis/ordinals-api) - Bitcoin inscriptions data -- [**Runes API**](/apis/runes-api) - Bitcoin fungible tokens - -## Platform services - -Cloud-based tools for teams and production: - -- [**Hiro Platform**](https://platform.hiro.so) - Cloud development environment -- [**Contract Monitoring**](/tools/contract-monitoring) - Real-time alerts and metrics -- **Hosted Devnets** - Isolated test environments - -## Integrations - -How our tools connect and complement each other: - -| Tool | Integrates With | How They Work Together | -|------------|-----------------|-----------------------------------------------| -| Clarinet | Stacks.js | Deploy contracts locally, connect frontend | -| Clarinet | Chainhook | Test event handling in development | -| Stacks.js | Stacks API | Submit transactions, query results | - -## Development workflows - -### Smart contract DApp - -Building user-facing applications with smart contracts: - -```terminal -$ clarinet new my-project && cd my-project -$ clarinet contract new token -$ clarinet test - -$ clarinet devnet start -$ clarinet deployments apply --devnet -``` - -```typescript -import { request } from '@stacks/connect'; - -const response = await request('stx_callContract', { - contract: 'SP2MF04VAGYHGAZWGTEDW5VYCPDWWSY08Z1QFNDSN.counters', - functionName: 'count', - functionArgs: [Cl.int(3)], - network: 'mainnet', -}); - -const balance = await fetch( - 'https://api.hiro.so/v2/accounts/ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM' -); -``` - -**Tool flow**: Clarinet → Stacks.js → Stacks API - -### Event-driven backend - -React to blockchain events in real-time: - -```json -// 1. Create Chainhook predicate -{ - "chain": "stacks", - "uuid": "my-hook", - "networks": { - "mainnet": { - "if_this": { - "scope": "contract_call", - "method": "transfer" - }, - "then_that": { - "http_post": { - "url": "https://my-api.com/webhook" - } - } - } - } -} -``` - -```javascript -// 2. Handle webhook in your backend -app.post('/webhook', (req, res) => { - const { apply } = req.body; - const transactions = apply[0].transactions; - // Process event, update database - db.save(transactions); -}); -``` - -**Tool flow**: Chainhook → Your backend - -### Bitcoin applications - -Build on Bitcoin L1 protocols: - -```bash -# 1. Query existing data -curl https://api.hiro.so/ordinals/v1/inscriptions - -# 2. Or create custom indexes -bitcoin-indexer --config my-protocol.json -``` - -```typescript -// 3. Display in frontend -const inscriptions = await fetch( - 'https://api.hiro.so/ordinals/v1/inscriptions' -); -``` - -**Tool flow**: Ordinals / Runes APIs / Bitcoin Indexer → Your backend - -## Decision matrix - -| If You're Building | Use These Tools | Why | -|------------------------|------------------------------------------|-----------------------------------| -| Smart contract app | Clarinet + Stacks.js + API | Complete dev-to-production flow | -| NFT marketplace | Clarinet + Stacks.js + API + Token Metadata API | Automatic metadata handling | -| Bitcoin explorer | Ordinals/Runes APIs | Pre-indexed Bitcoin data | -| Analytics dashboard | APIs + Chainhook | Historical + real-time data | -| Custom protocol | Chainhook + Bitcoin Indexer | Build your own indexes | - -:::next-steps -- [Install Clarinet](/tools/clarinet/getting-started/installing-clarinet): Learn how to install Clarinet. -- [Explore API references](/apis): Explore our API references. -::: \ No newline at end of file diff --git a/content/_hidden/recommended-resources.mdx b/content/_hidden/recommended-resources.mdx deleted file mode 100644 index faa4bcd63..000000000 --- a/content/_hidden/recommended-resources.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Recommended resources -description: Here's a list of recommended content to further expand your knowledge in this amazing tool. -full: true ---- - -import { Card as MainCard, SecondaryCard, SmallCard } from '@/components/card'; -import { PageFooter } from '@/components/footer'; -import { Book, Play, Lightbulb, FileText, Key, Send, Webhook, Timer, ExternalLink } from 'lucide-react'; - -## Guides - - -} - tag="Guide" - description="Learn how to integrate, build, and extend functionality with practical, developer-focused guidance." -/> -} - tag="Quickstart" - description="Get started fast with the basics you need to set up and run your first project." -/> -} - tag="Concepts" - description="Understand the core ideas, principles, and mental models behind the system." -/> -} - tag="Tutorial" - description="A hands-on walkthrough to help you accomplish a specific task from start to finish." -/> - - -## Snippets/Recipes - - -} - tag="Authentication" - description="Learn how to securely authenticate API requests using access tokens." -/> -} - tag="Transactions" - description="Step-by-step guide to submit transactions using REST API endpoints." -/> -} - tag="Events" - description="Set up webhooks to listen for and respond to blockchain events in real-time." -/> -} - tag="Best Practices" - description="Implement proper rate limiting and retry logic in your applications." -/> - - -## Project templates - -To learn more about these concepts, check out these resources: - -- [Deep dive on Concept #1 ](https://example.com/concept-1) -- [Video tutorial on Concept #2 ](https://example.com/concept-2) -- [Clarity reference for functions ](https://example.com/clarity-reference) -- [Stacks documentation for PoX ](https://example.com/pox-docs) - -## Blog posts - -To learn more about these concepts, check out these resources: - -- [Deep dive on Concept #1 ](https://example.com/blog/concept-1) -- [Video tutorial on Concept #2 ](https://example.com/blog/concept-2) -- [Clarity reference for functions ](https://example.com/blog/clarity-reference) -- [Stacks documentation for PoX ](https://example.com/blog/pox-docs) - - -## Videos - -To learn more about these concepts, check out these resources: - -- [Deep dive on Concept #1 ](https://example.com/videos/concept-1) -- [Video tutorial on Concept #2 ](https://example.com/videos/concept-2) -- [Clarity reference for functions ](https://example.com/videos/clarity-reference) -- [Stacks documentation for PoX ](https://example.com/videos/pox-docs) - -## e-Books - -To learn more about these concepts, check out these resources: - -- [Deep dive on Concept #1 ](https://example.com/ebooks/concept-1) -- [Video tutorial on Concept #2 ](https://example.com/ebooks/concept-2) -- [Clarity reference for functions ](https://example.com/ebooks/clarity-reference) -- [Stacks documentation for PoX ](https://example.com/ebooks/pox-docs) \ No newline at end of file diff --git a/content/docs/apis/stacks-blockchain-api/reference/fees/meta.json b/content/docs/apis/stacks-blockchain-api/reference/fees/meta.json deleted file mode 100644 index 5e2525275..000000000 --- a/content/docs/apis/stacks-blockchain-api/reference/fees/meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "title": "Fees", - "pages": ["fee-rate", "estimate", "transfer-estimate"], - "defaultOpen": false -} diff --git a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/meta.json b/content/docs/apis/stacks-blockchain-api/reference/nakamoto/meta.json deleted file mode 100644 index 7312774f5..000000000 --- a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "title": "Nakamoto", - "pages": ["nakamoto-block", "tenure-blocks", "tenure-metadata", "tenure-fork-info", "tenure-tip"], - "defaultOpen": false -} diff --git a/content/docs/apis/ordinals-api/index.mdx b/content/docs/en/apis/ordinals-api/index.mdx similarity index 100% rename from content/docs/apis/ordinals-api/index.mdx rename to content/docs/en/apis/ordinals-api/index.mdx diff --git a/content/docs/apis/ordinals-api/meta.json b/content/docs/en/apis/ordinals-api/meta.json similarity index 100% rename from content/docs/apis/ordinals-api/meta.json rename to content/docs/en/apis/ordinals-api/meta.json diff --git a/content/docs/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx b/content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx rename to content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx diff --git a/content/docs/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx b/content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx rename to content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx diff --git a/content/docs/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx b/content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx rename to content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx diff --git a/content/docs/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx b/content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx rename to content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx diff --git a/content/docs/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx b/content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx rename to content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx diff --git a/content/docs/apis/ordinals-api/reference/brc20/index.mdx b/content/docs/en/apis/ordinals-api/reference/brc20/index.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/index.mdx rename to content/docs/en/apis/ordinals-api/reference/brc20/index.mdx diff --git a/content/docs/apis/ordinals-api/reference/brc20/meta.json b/content/docs/en/apis/ordinals-api/reference/brc20/meta.json similarity index 100% rename from content/docs/apis/ordinals-api/reference/brc20/meta.json rename to content/docs/en/apis/ordinals-api/reference/brc20/meta.json diff --git a/content/docs/apis/ordinals-api/reference/info/index.mdx b/content/docs/en/apis/ordinals-api/reference/info/index.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/info/index.mdx rename to content/docs/en/apis/ordinals-api/reference/info/index.mdx diff --git a/content/docs/apis/ordinals-api/reference/info/meta.json b/content/docs/en/apis/ordinals-api/reference/info/meta.json similarity index 100% rename from content/docs/apis/ordinals-api/reference/info/meta.json rename to content/docs/en/apis/ordinals-api/reference/info/meta.json diff --git a/content/docs/apis/ordinals-api/reference/info/status.mdx b/content/docs/en/apis/ordinals-api/reference/info/status.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/info/status.mdx rename to content/docs/en/apis/ordinals-api/reference/info/status.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx b/content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx rename to content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx b/content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx rename to content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/get-inscription.mdx b/content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/get-inscription.mdx rename to content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx b/content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx rename to content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx b/content/docs/en/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx rename to content/docs/en/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/index.mdx b/content/docs/en/apis/ordinals-api/reference/inscriptions/index.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/index.mdx rename to content/docs/en/apis/ordinals-api/reference/inscriptions/index.mdx diff --git a/content/docs/apis/ordinals-api/reference/inscriptions/meta.json b/content/docs/en/apis/ordinals-api/reference/inscriptions/meta.json similarity index 100% rename from content/docs/apis/ordinals-api/reference/inscriptions/meta.json rename to content/docs/en/apis/ordinals-api/reference/inscriptions/meta.json diff --git a/content/docs/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx b/content/docs/en/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx rename to content/docs/en/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx diff --git a/content/docs/apis/ordinals-api/reference/satoshis/get-satoshi.mdx b/content/docs/en/apis/ordinals-api/reference/satoshis/get-satoshi.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/satoshis/get-satoshi.mdx rename to content/docs/en/apis/ordinals-api/reference/satoshis/get-satoshi.mdx diff --git a/content/docs/apis/ordinals-api/reference/satoshis/index.mdx b/content/docs/en/apis/ordinals-api/reference/satoshis/index.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/satoshis/index.mdx rename to content/docs/en/apis/ordinals-api/reference/satoshis/index.mdx diff --git a/content/docs/apis/ordinals-api/reference/satoshis/meta.json b/content/docs/en/apis/ordinals-api/reference/satoshis/meta.json similarity index 100% rename from content/docs/apis/ordinals-api/reference/satoshis/meta.json rename to content/docs/en/apis/ordinals-api/reference/satoshis/meta.json diff --git a/content/docs/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx b/content/docs/en/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx rename to content/docs/en/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx diff --git a/content/docs/apis/ordinals-api/reference/statistics/index.mdx b/content/docs/en/apis/ordinals-api/reference/statistics/index.mdx similarity index 100% rename from content/docs/apis/ordinals-api/reference/statistics/index.mdx rename to content/docs/en/apis/ordinals-api/reference/statistics/index.mdx diff --git a/content/docs/apis/ordinals-api/reference/statistics/meta.json b/content/docs/en/apis/ordinals-api/reference/statistics/meta.json similarity index 100% rename from content/docs/apis/ordinals-api/reference/statistics/meta.json rename to content/docs/en/apis/ordinals-api/reference/statistics/meta.json diff --git a/content/docs/apis/ordinals-api/usage.mdx b/content/docs/en/apis/ordinals-api/usage.mdx similarity index 100% rename from content/docs/apis/ordinals-api/usage.mdx rename to content/docs/en/apis/ordinals-api/usage.mdx diff --git a/content/docs/apis/platform-api/index.mdx b/content/docs/en/apis/platform-api/index.mdx similarity index 100% rename from content/docs/apis/platform-api/index.mdx rename to content/docs/en/apis/platform-api/index.mdx diff --git a/content/docs/apis/platform-api/meta.json b/content/docs/en/apis/platform-api/meta.json similarity index 100% rename from content/docs/apis/platform-api/meta.json rename to content/docs/en/apis/platform-api/meta.json diff --git a/content/docs/apis/platform-api/reference/chainhooks/create.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/create.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/create.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/create.mdx diff --git a/content/docs/apis/platform-api/reference/chainhooks/delete.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/delete.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/delete.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/delete.mdx diff --git a/content/docs/apis/platform-api/reference/chainhooks/get.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/get.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/get.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/get.mdx diff --git a/content/docs/apis/platform-api/reference/chainhooks/index.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/index.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/index.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/index.mdx diff --git a/content/docs/apis/platform-api/reference/chainhooks/list.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/list.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/list.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/list.mdx diff --git a/content/docs/apis/platform-api/reference/chainhooks/meta.json b/content/docs/en/apis/platform-api/reference/chainhooks/meta.json similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/meta.json rename to content/docs/en/apis/platform-api/reference/chainhooks/meta.json diff --git a/content/docs/apis/platform-api/reference/chainhooks/status.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/status.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/status.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/status.mdx diff --git a/content/docs/apis/platform-api/reference/chainhooks/update.mdx b/content/docs/en/apis/platform-api/reference/chainhooks/update.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/chainhooks/update.mdx rename to content/docs/en/apis/platform-api/reference/chainhooks/update.mdx diff --git a/content/docs/apis/platform-api/reference/devnet/bitcoin-node.mdx b/content/docs/en/apis/platform-api/reference/devnet/bitcoin-node.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/devnet/bitcoin-node.mdx rename to content/docs/en/apis/platform-api/reference/devnet/bitcoin-node.mdx diff --git a/content/docs/apis/platform-api/reference/devnet/index.mdx b/content/docs/en/apis/platform-api/reference/devnet/index.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/devnet/index.mdx rename to content/docs/en/apis/platform-api/reference/devnet/index.mdx diff --git a/content/docs/apis/platform-api/reference/devnet/meta.json b/content/docs/en/apis/platform-api/reference/devnet/meta.json similarity index 100% rename from content/docs/apis/platform-api/reference/devnet/meta.json rename to content/docs/en/apis/platform-api/reference/devnet/meta.json diff --git a/content/docs/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx b/content/docs/en/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx rename to content/docs/en/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx diff --git a/content/docs/apis/platform-api/reference/devnet/start.mdx b/content/docs/en/apis/platform-api/reference/devnet/start.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/devnet/start.mdx rename to content/docs/en/apis/platform-api/reference/devnet/start.mdx diff --git a/content/docs/apis/platform-api/reference/devnet/stop.mdx b/content/docs/en/apis/platform-api/reference/devnet/stop.mdx similarity index 100% rename from content/docs/apis/platform-api/reference/devnet/stop.mdx rename to content/docs/en/apis/platform-api/reference/devnet/stop.mdx diff --git a/content/docs/apis/platform-api/usage.mdx b/content/docs/en/apis/platform-api/usage.mdx similarity index 100% rename from content/docs/apis/platform-api/usage.mdx rename to content/docs/en/apis/platform-api/usage.mdx diff --git a/content/docs/apis/runes-api/index.mdx b/content/docs/en/apis/runes-api/index.mdx similarity index 100% rename from content/docs/apis/runes-api/index.mdx rename to content/docs/en/apis/runes-api/index.mdx diff --git a/content/docs/apis/runes-api/meta.json b/content/docs/en/apis/runes-api/meta.json similarity index 100% rename from content/docs/apis/runes-api/meta.json rename to content/docs/en/apis/runes-api/meta.json diff --git a/content/docs/apis/runes-api/reference/activities/activity.mdx b/content/docs/en/apis/runes-api/reference/activities/activity.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/activities/activity.mdx rename to content/docs/en/apis/runes-api/reference/activities/activity.mdx diff --git a/content/docs/apis/runes-api/reference/activities/for-address.mdx b/content/docs/en/apis/runes-api/reference/activities/for-address.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/activities/for-address.mdx rename to content/docs/en/apis/runes-api/reference/activities/for-address.mdx diff --git a/content/docs/apis/runes-api/reference/activities/for-block.mdx b/content/docs/en/apis/runes-api/reference/activities/for-block.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/activities/for-block.mdx rename to content/docs/en/apis/runes-api/reference/activities/for-block.mdx diff --git a/content/docs/apis/runes-api/reference/activities/for-transaction.mdx b/content/docs/en/apis/runes-api/reference/activities/for-transaction.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/activities/for-transaction.mdx rename to content/docs/en/apis/runes-api/reference/activities/for-transaction.mdx diff --git a/content/docs/apis/runes-api/reference/activities/index.mdx b/content/docs/en/apis/runes-api/reference/activities/index.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/activities/index.mdx rename to content/docs/en/apis/runes-api/reference/activities/index.mdx diff --git a/content/docs/apis/runes-api/reference/activities/meta.json b/content/docs/en/apis/runes-api/reference/activities/meta.json similarity index 100% rename from content/docs/apis/runes-api/reference/activities/meta.json rename to content/docs/en/apis/runes-api/reference/activities/meta.json diff --git a/content/docs/apis/runes-api/reference/balances/address.mdx b/content/docs/en/apis/runes-api/reference/balances/address.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/balances/address.mdx rename to content/docs/en/apis/runes-api/reference/balances/address.mdx diff --git a/content/docs/apis/runes-api/reference/balances/holder-balance.mdx b/content/docs/en/apis/runes-api/reference/balances/holder-balance.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/balances/holder-balance.mdx rename to content/docs/en/apis/runes-api/reference/balances/holder-balance.mdx diff --git a/content/docs/apis/runes-api/reference/balances/holders.mdx b/content/docs/en/apis/runes-api/reference/balances/holders.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/balances/holders.mdx rename to content/docs/en/apis/runes-api/reference/balances/holders.mdx diff --git a/content/docs/apis/runes-api/reference/balances/index.mdx b/content/docs/en/apis/runes-api/reference/balances/index.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/balances/index.mdx rename to content/docs/en/apis/runes-api/reference/balances/index.mdx diff --git a/content/docs/apis/runes-api/reference/balances/meta.json b/content/docs/en/apis/runes-api/reference/balances/meta.json similarity index 100% rename from content/docs/apis/runes-api/reference/balances/meta.json rename to content/docs/en/apis/runes-api/reference/balances/meta.json diff --git a/content/docs/apis/runes-api/reference/etchings/get-etching.mdx b/content/docs/en/apis/runes-api/reference/etchings/get-etching.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/etchings/get-etching.mdx rename to content/docs/en/apis/runes-api/reference/etchings/get-etching.mdx diff --git a/content/docs/apis/runes-api/reference/etchings/get-etchings.mdx b/content/docs/en/apis/runes-api/reference/etchings/get-etchings.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/etchings/get-etchings.mdx rename to content/docs/en/apis/runes-api/reference/etchings/get-etchings.mdx diff --git a/content/docs/apis/runes-api/reference/etchings/index.mdx b/content/docs/en/apis/runes-api/reference/etchings/index.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/etchings/index.mdx rename to content/docs/en/apis/runes-api/reference/etchings/index.mdx diff --git a/content/docs/apis/runes-api/reference/etchings/meta.json b/content/docs/en/apis/runes-api/reference/etchings/meta.json similarity index 100% rename from content/docs/apis/runes-api/reference/etchings/meta.json rename to content/docs/en/apis/runes-api/reference/etchings/meta.json diff --git a/content/docs/apis/runes-api/reference/info/index.mdx b/content/docs/en/apis/runes-api/reference/info/index.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/info/index.mdx rename to content/docs/en/apis/runes-api/reference/info/index.mdx diff --git a/content/docs/apis/runes-api/reference/info/meta.json b/content/docs/en/apis/runes-api/reference/info/meta.json similarity index 100% rename from content/docs/apis/runes-api/reference/info/meta.json rename to content/docs/en/apis/runes-api/reference/info/meta.json diff --git a/content/docs/apis/runes-api/reference/info/status.mdx b/content/docs/en/apis/runes-api/reference/info/status.mdx similarity index 100% rename from content/docs/apis/runes-api/reference/info/status.mdx rename to content/docs/en/apis/runes-api/reference/info/status.mdx diff --git a/content/docs/apis/runes-api/usage.mdx b/content/docs/en/apis/runes-api/usage.mdx similarity index 100% rename from content/docs/apis/runes-api/usage.mdx rename to content/docs/en/apis/runes-api/usage.mdx diff --git a/content/docs/apis/signer-metrics-api/index.mdx b/content/docs/en/apis/signer-metrics-api/index.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/index.mdx rename to content/docs/en/apis/signer-metrics-api/index.mdx diff --git a/content/docs/apis/signer-metrics-api/meta.json b/content/docs/en/apis/signer-metrics-api/meta.json similarity index 100% rename from content/docs/apis/signer-metrics-api/meta.json rename to content/docs/en/apis/signer-metrics-api/meta.json diff --git a/content/docs/apis/signer-metrics-api/reference/block-proposals/index.mdx b/content/docs/en/apis/signer-metrics-api/reference/block-proposals/index.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/block-proposals/index.mdx rename to content/docs/en/apis/signer-metrics-api/reference/block-proposals/index.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/block-proposals/meta.json b/content/docs/en/apis/signer-metrics-api/reference/block-proposals/meta.json similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/block-proposals/meta.json rename to content/docs/en/apis/signer-metrics-api/reference/block-proposals/meta.json diff --git a/content/docs/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx b/content/docs/en/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx rename to content/docs/en/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx b/content/docs/en/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx rename to content/docs/en/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx b/content/docs/en/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx rename to content/docs/en/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx b/content/docs/en/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx rename to content/docs/en/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/blocks/index.mdx b/content/docs/en/apis/signer-metrics-api/reference/blocks/index.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/blocks/index.mdx rename to content/docs/en/apis/signer-metrics-api/reference/blocks/index.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/blocks/meta.json b/content/docs/en/apis/signer-metrics-api/reference/blocks/meta.json similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/blocks/meta.json rename to content/docs/en/apis/signer-metrics-api/reference/blocks/meta.json diff --git a/content/docs/apis/signer-metrics-api/reference/info/index.mdx b/content/docs/en/apis/signer-metrics-api/reference/info/index.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/info/index.mdx rename to content/docs/en/apis/signer-metrics-api/reference/info/index.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/info/meta.json b/content/docs/en/apis/signer-metrics-api/reference/info/meta.json similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/info/meta.json rename to content/docs/en/apis/signer-metrics-api/reference/info/meta.json diff --git a/content/docs/apis/signer-metrics-api/reference/info/status.mdx b/content/docs/en/apis/signer-metrics-api/reference/info/status.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/info/status.mdx rename to content/docs/en/apis/signer-metrics-api/reference/info/status.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/signers/index.mdx b/content/docs/en/apis/signer-metrics-api/reference/signers/index.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/signers/index.mdx rename to content/docs/en/apis/signer-metrics-api/reference/signers/index.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/signers/meta.json b/content/docs/en/apis/signer-metrics-api/reference/signers/meta.json similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/signers/meta.json rename to content/docs/en/apis/signer-metrics-api/reference/signers/meta.json diff --git a/content/docs/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx b/content/docs/en/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx rename to content/docs/en/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx diff --git a/content/docs/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx b/content/docs/en/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx rename to content/docs/en/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx diff --git a/content/docs/apis/signer-metrics-api/usage.mdx b/content/docs/en/apis/signer-metrics-api/usage.mdx similarity index 100% rename from content/docs/apis/signer-metrics-api/usage.mdx rename to content/docs/en/apis/signer-metrics-api/usage.mdx diff --git a/content/docs/apis/stacks-blockchain-api/architecture.mdx b/content/docs/en/apis/stacks-blockchain-api/architecture.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/architecture.mdx rename to content/docs/en/apis/stacks-blockchain-api/architecture.mdx diff --git a/content/docs/apis/stacks-blockchain-api/index.mdx b/content/docs/en/apis/stacks-blockchain-api/index.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/index.mdx rename to content/docs/en/apis/stacks-blockchain-api/index.mdx diff --git a/content/docs/apis/stacks-blockchain-api/meta.json b/content/docs/en/apis/stacks-blockchain-api/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/meta.json rename to content/docs/en/apis/stacks-blockchain-api/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/nonce-handling.mdx b/content/docs/en/apis/stacks-blockchain-api/nonce-handling.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/nonce-handling.mdx rename to content/docs/en/apis/stacks-blockchain-api/nonce-handling.mdx diff --git a/content/docs/apis/stacks-blockchain-api/pagination.mdx b/content/docs/en/apis/stacks-blockchain-api/pagination.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/pagination.mdx rename to content/docs/en/apis/stacks-blockchain-api/pagination.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/assets.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/assets.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/assets.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/assets.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/balances.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/balances.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/balances.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/balances.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/meta.json similarity index 95% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/meta.json index 9cab8049c..ba89d31c7 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/accounts/meta.json +++ b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/meta.json @@ -1,7 +1,6 @@ { "title": "Accounts", "pages": [ - "info", "assets", "balances", "stx-balances", diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/transactions.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/accounts/transactions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/transactions.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/accounts/transactions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/average-times.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/average-times.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/average-times.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/average-times.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/get-block.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-block.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/get-block.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-block.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/meta.json similarity index 71% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/meta.json index e32757d45..eb56eed30 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/blocks/meta.json +++ b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/meta.json @@ -8,11 +8,8 @@ "recent-blocks", "block-by-hash", "block-by-height", - "block-by-height-v3", "block-by-burn-block-hash", - "block-by-burn-block-height", - "block-proposal", - "upload-block" + "block-by-burn-block-height" ], "defaultOpen": false } diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/burn-blocks/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/burn-blocks/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/faucets/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/faucets/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/faucets/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/faucets/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/faucets/stx.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/faucets/stx.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/faucets/stx.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/faucets/stx.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx diff --git a/content/docs/en/apis/stacks-blockchain-api/reference/fees/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/fees/meta.json new file mode 100644 index 000000000..4dae7e68c --- /dev/null +++ b/content/docs/en/apis/stacks-blockchain-api/reference/fees/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Fees", + "pages": ["fee-rate"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/info/meta.json similarity index 91% rename from content/docs/apis/stacks-blockchain-api/reference/info/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/info/meta.json index 719c88059..00dc4199c 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/info/meta.json +++ b/content/docs/en/apis/stacks-blockchain-api/reference/info/meta.json @@ -2,8 +2,6 @@ "title": "Info", "pages": [ "status", - "core-api", - "health", "network-block-time", "network-given-block-time", "total-and-unlocked-stx-supply", diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/network-block-time.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/network-block-time.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/network-block-time.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/network-block-time.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/status.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/status.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/status.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/status.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/mempool/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/mempool/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/mempool/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/mempool/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/names/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/names/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/name-details.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/name-details.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/name-details.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/name-details.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/names.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/names.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/names.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/names.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/namespace-names.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/namespace-names.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/namespace-names.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/namespace-names.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/namespaces.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/namespaces.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/namespaces.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/namespaces.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/meta.json similarity index 61% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/meta.json index f5216f411..f62e46c27 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/meta.json +++ b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/meta.json @@ -5,10 +5,7 @@ "cycle", "signers-in-cycle", "signer-in-cycle", - "signer-details", - "stackers-for-signer-in-cycle", - "pox-details", - "stacker-set" + "stackers-for-signer-in-cycle" ], "defaultOpen": false } diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/search/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/search/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/search/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/search/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/search/search-by-id.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/search/search-by-id.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/search/search-by-id.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/search/search-by-id.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx diff --git a/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/meta.json new file mode 100644 index 000000000..72880557e --- /dev/null +++ b/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Smart Contracts", + "pages": ["status", "info", "by-trait", "events"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-pool/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-pool/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-pool/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-pool/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/tokens/holders.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/tokens/holders.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/tokens/holders.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/tokens/holders.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/tokens/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/tokens/meta.json similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/tokens/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/tokens/meta.json diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/meta.json b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/meta.json similarity index 82% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/meta.json rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/meta.json index 13acd6526..59f10ae9b 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/transactions/meta.json +++ b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/meta.json @@ -4,7 +4,6 @@ "recent-transactions", "get-transaction", "get-raw-transaction", - "transaction-details-v3", "address-transactions", "transactions-by-block", "events-for-an-address-transaction", @@ -13,8 +12,7 @@ "mempool-transactions", "dropped-mempool-transactions", "statistics-for-mempool-transactions", - "details-for-transactions", - "broadcast-transaction" + "details-for-transactions" ], "defaultOpen": false } diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx b/content/docs/en/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx rename to content/docs/en/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx diff --git a/content/docs/apis/stacks-blockchain-api/requesting-proofs.mdx b/content/docs/en/apis/stacks-blockchain-api/requesting-proofs.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/requesting-proofs.mdx rename to content/docs/en/apis/stacks-blockchain-api/requesting-proofs.mdx diff --git a/content/docs/apis/stacks-blockchain-api/usage.mdx b/content/docs/en/apis/stacks-blockchain-api/usage.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/usage.mdx rename to content/docs/en/apis/stacks-blockchain-api/usage.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/index.mdx b/content/docs/en/apis/stacks-node-rpc-api/index.mdx new file mode 100644 index 000000000..dee945d52 --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/index.mdx @@ -0,0 +1,29 @@ +--- +title: Stacks Node RPC API +sidebarTitle: Overview +description: Direct RPC access to Stacks blockchain nodes for real-time data and operations. +llm: false +--- + +## Overview + +The Stacks Node RPC API provides direct access to Stacks blockchain nodes through RPC endpoints. **Hiro proxies these calls to upstream Stacks nodes** - we don't maintain or control the nodes themselves, so performance and availability depend on upstream blockchain infrastructure. + +## Key features + +- **Raw blockchain node methods** - Submit transactions, call read-only contracts, query mempool/state +- **Real-time blockchain state** - No caching layers, direct node responses +- **Smart contract execution** - Execute read-only functions and retrieve contract state +- **Transaction broadcasting** - Submit transactions directly to the network + +## Usage + +```terminal +$ curl -L 'https://api.hiro.so/v2/info' -H 'Accept: application/json' +``` + +For more usage examples and rate limiting information, see [Usage](/apis/stacks-node-rpc-api/usage). + +:::callout +**REST vs RPC:** Use [Stacks Blockchain API](/apis/stacks-blockchain-api) for cached, indexed blockchain data (balances, transactions, events). Use RPC endpoints for raw node operations and real-time blockchain state queries. +::: \ No newline at end of file diff --git a/content/docs/en/apis/stacks-node-rpc-api/meta.json b/content/docs/en/apis/stacks-node-rpc-api/meta.json new file mode 100644 index 000000000..4c84cf1fc --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "APIs", + "root": true, + "pages": ["---Stacks Node RPC API---", "index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/accounts/info.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/accounts/info.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/accounts/info.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/accounts/info.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/accounts/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/accounts/meta.json new file mode 100644 index 000000000..24286ac17 --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/accounts/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Accounts", + "pages": ["info"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-height-v3.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/blocks/block-by-height-v3.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/block-by-height-v3.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/blocks/block-by-height-v3.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/block-proposal.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/blocks/block-proposal.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/block-proposal.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/blocks/block-proposal.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/blocks/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/blocks/meta.json new file mode 100644 index 000000000..ae4afee3a --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/blocks/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Blocks", + "pages": ["block-by-height-v3", "block-proposal", "upload-block"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/blocks/upload-block.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/blocks/upload-block.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/blocks/upload-block.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/blocks/upload-block.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/fees/estimate.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/fees/estimate.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/fees/estimate.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/fees/estimate.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/fees/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/fees/meta.json new file mode 100644 index 000000000..b14707173 --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/fees/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Fees", + "pages": ["estimate", "transfer-estimate"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/fees/transfer-estimate.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/fees/transfer-estimate.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/fees/transfer-estimate.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/fees/transfer-estimate.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/core-api.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/info/core-api.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/core-api.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/info/core-api.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/info/health.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/info/health.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/info/health.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/info/health.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/info/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/info/meta.json new file mode 100644 index 000000000..60430a09b --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/info/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Info", + "pages": ["core-api", "health"], + "defaultOpen": false +} diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/meta.json new file mode 100644 index 000000000..be2914109 --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Nakamoto", + "pages": ["nakamoto-block", "tenure-blocks", "tenure-fork-info", "tenure-metadata", "tenure-tip"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/nakamoto-block.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/nakamoto-block.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/nakamoto/nakamoto-block.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/nakamoto-block.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-blocks.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-blocks.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-blocks.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-blocks.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-fork-info.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-fork-info.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-fork-info.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-fork-info.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-metadata.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-metadata.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-metadata.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-metadata.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-tip.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-tip.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/nakamoto/tenure-tip.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-tip.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/meta.json new file mode 100644 index 000000000..570d2fa7c --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Proof of Transfer", + "pages": ["pox-details", "signer-details", "stacker-set"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/pox-details.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/pox-details.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/pox-details.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/pox-details.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-details.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/signer-details.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-details.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/signer-details.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/stacker-set.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/stacker-set.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/proof-of-transfer/stacker-set.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/stacker-set.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/constants.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/constants.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/constants.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/constants.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/fast-read-only.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/fast-read-only.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/fast-read-only.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/fast-read-only.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/interface.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/interface.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/interface.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/interface.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/map-entry.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/map-entry.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/map-entry.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/map-entry.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/meta.json similarity index 67% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/meta.json rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/meta.json index 856c9a5e1..c903ea747 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/meta.json +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/meta.json @@ -1,18 +1,14 @@ { "title": "Smart Contracts", "pages": [ - "status", - "info", - "source", - "by-trait", + "constants", + "fast-read-only", "interface", "map-entry", "read-only", - "fast-read-only", - "events", - "variable", - "constants", - "traits" + "source", + "traits", + "variable" ], "defaultOpen": false } diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/read-only.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/read-only.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/read-only.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/read-only.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/source.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/source.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/source.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/source.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/traits.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/traits.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/traits.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/traits.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/smart-contracts/variable.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/variable.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/smart-contracts/variable.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/variable.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/sortitions/get-sortitions.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/get-sortitions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/sortitions/get-sortitions.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/get-sortitions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/sortitions/latest-and-last-sortitions.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/latest-and-last-sortitions.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/sortitions/latest-and-last-sortitions.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/latest-and-last-sortitions.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/sortitions/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/meta.json similarity index 69% rename from content/docs/apis/stacks-blockchain-api/reference/sortitions/meta.json rename to content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/meta.json index 814398079..3e8e90d10 100644 --- a/content/docs/apis/stacks-blockchain-api/reference/sortitions/meta.json +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/meta.json @@ -2,10 +2,10 @@ "title": "Sortitions", "pages": [ "get-sortitions", + "latest-and-last-sortitions", "sortition-by-burn-hash", "sortition-by-burn-height", - "sortition-by-consensus-hash", - "latest-and-last-sortitions" + "sortition-by-consensus-hash" ], "defaultOpen": false } diff --git a/content/docs/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-hash.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-hash.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-hash.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-hash.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-height.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-height.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-height.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-height.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/sortitions/sortition-by-consensus-hash.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-consensus-hash.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/sortitions/sortition-by-consensus-hash.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-consensus-hash.mdx diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/broadcast-transaction.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/transactions/broadcast-transaction.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/broadcast-transaction.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/transactions/broadcast-transaction.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/reference/transactions/meta.json b/content/docs/en/apis/stacks-node-rpc-api/reference/transactions/meta.json new file mode 100644 index 000000000..2ce05a7e8 --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/reference/transactions/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Transactions", + "pages": ["broadcast-transaction", "transaction-details-v3"], + "defaultOpen": false +} diff --git a/content/docs/apis/stacks-blockchain-api/reference/transactions/transaction-details-v3.mdx b/content/docs/en/apis/stacks-node-rpc-api/reference/transactions/transaction-details-v3.mdx similarity index 100% rename from content/docs/apis/stacks-blockchain-api/reference/transactions/transaction-details-v3.mdx rename to content/docs/en/apis/stacks-node-rpc-api/reference/transactions/transaction-details-v3.mdx diff --git a/content/docs/en/apis/stacks-node-rpc-api/usage.mdx b/content/docs/en/apis/stacks-node-rpc-api/usage.mdx new file mode 100644 index 000000000..fc25408ea --- /dev/null +++ b/content/docs/en/apis/stacks-node-rpc-api/usage.mdx @@ -0,0 +1,66 @@ +--- +title: Basic usage +sidebarTitle: Usage +description: Learn the basics of using the Stacks Node RPC API. +--- + +## Usage + +The Stacks Node RPC API provides direct access to Stacks blockchain nodes through RPC endpoints. All requests use HTTPS and enforce standard REST principles. + +### Base URL + +```console -c +https://api.hiro.so +``` + +### Making requests + +```terminal +$ curl -L 'https://api.hiro.so/v2/info' \ + -H 'Accept: application/json' +``` + +### Authentication + +Include your API key for higher rate limits: + +```terminal +$ curl -L 'https://api.hiro.so/v2/info' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Rate limits + +RPC calls are **weighted based on method cost** and consume more units than REST endpoints: + +| Method Type | Examples | Cost Multiplier | +|-------------|----------|-----------------| +| Light reads | `get_block`, `get_transaction` | 1× | +| Read-only contract calls | `call_read_only_function` | 2× | +| Transaction submission | `submit_transaction` | 3× | +| Heavy operations | `trace_call`, deep contract scans | 5× | + +### Rate limit headers + +``` +X-RateLimit-Limit: 900 # window capacity in units +X-RateLimit-Remaining: 125 # remaining units +X-RateLimit-Reset: 60 # seconds until reset +X-RateLimit-Method-Cost: 3 # cost for this RPC method +X-Plan-Tier: starter # your plan tier +X-Surface: rpc # indicates RPC endpoint +``` + +## Response codes + +| Code | Description | +|------|-------------| +| `200` | Successful request | +| `400` | Invalid parameters | +| `401` | Missing API key | +| `403` | Invalid API key | +| `404` | Resource not found | +| `429` | Rate limit exceeded | +| `5xx` | Server/upstream node errors | diff --git a/content/docs/apis/token-metadata-api/index.mdx b/content/docs/en/apis/token-metadata-api/index.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/index.mdx rename to content/docs/en/apis/token-metadata-api/index.mdx diff --git a/content/docs/apis/token-metadata-api/meta.json b/content/docs/en/apis/token-metadata-api/meta.json similarity index 100% rename from content/docs/apis/token-metadata-api/meta.json rename to content/docs/en/apis/token-metadata-api/meta.json diff --git a/content/docs/apis/token-metadata-api/reference/info/index.mdx b/content/docs/en/apis/token-metadata-api/reference/info/index.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/info/index.mdx rename to content/docs/en/apis/token-metadata-api/reference/info/index.mdx diff --git a/content/docs/apis/token-metadata-api/reference/info/meta.json b/content/docs/en/apis/token-metadata-api/reference/info/meta.json similarity index 100% rename from content/docs/apis/token-metadata-api/reference/info/meta.json rename to content/docs/en/apis/token-metadata-api/reference/info/meta.json diff --git a/content/docs/apis/token-metadata-api/reference/info/status.mdx b/content/docs/en/apis/token-metadata-api/reference/info/status.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/info/status.mdx rename to content/docs/en/apis/token-metadata-api/reference/info/status.mdx diff --git a/content/docs/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx b/content/docs/en/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx rename to content/docs/en/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx diff --git a/content/docs/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx b/content/docs/en/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx rename to content/docs/en/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx diff --git a/content/docs/apis/token-metadata-api/reference/tokens/index.mdx b/content/docs/en/apis/token-metadata-api/reference/tokens/index.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/tokens/index.mdx rename to content/docs/en/apis/token-metadata-api/reference/tokens/index.mdx diff --git a/content/docs/apis/token-metadata-api/reference/tokens/meta.json b/content/docs/en/apis/token-metadata-api/reference/tokens/meta.json similarity index 100% rename from content/docs/apis/token-metadata-api/reference/tokens/meta.json rename to content/docs/en/apis/token-metadata-api/reference/tokens/meta.json diff --git a/content/docs/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx b/content/docs/en/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx rename to content/docs/en/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx diff --git a/content/docs/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx b/content/docs/en/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx rename to content/docs/en/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx diff --git a/content/docs/apis/token-metadata-api/usage.mdx b/content/docs/en/apis/token-metadata-api/usage.mdx similarity index 100% rename from content/docs/apis/token-metadata-api/usage.mdx rename to content/docs/en/apis/token-metadata-api/usage.mdx diff --git a/content/docs/meta.json b/content/docs/en/meta.json similarity index 100% rename from content/docs/meta.json rename to content/docs/en/meta.json diff --git a/content/docs/reference/stacks.js/(connect)/broadcast-transactions.mdx b/content/docs/en/reference/stacks.js/(connect)/broadcast-transactions.mdx similarity index 100% rename from content/docs/reference/stacks.js/(connect)/broadcast-transactions.mdx rename to content/docs/en/reference/stacks.js/(connect)/broadcast-transactions.mdx diff --git a/content/docs/reference/stacks.js/(connect)/connect-wallet.mdx b/content/docs/en/reference/stacks.js/(connect)/connect-wallet.mdx similarity index 98% rename from content/docs/reference/stacks.js/(connect)/connect-wallet.mdx rename to content/docs/en/reference/stacks.js/(connect)/connect-wallet.mdx index 1e819bf9a..b7e67650d 100644 --- a/content/docs/reference/stacks.js/(connect)/connect-wallet.mdx +++ b/content/docs/en/reference/stacks.js/(connect)/connect-wallet.mdx @@ -5,6 +5,8 @@ description: Learn how to connect to Stacks wallets and authenticate users. Learn how to integrate wallet connections into your Stacks application. Connecting a wallet authenticates users and enables blockchain interactions like transfers and contract calls. +## What you'll learn + :::objectives - Install the `@stacks/connect` package - Connect to a wallet and authenticate users @@ -12,6 +14,8 @@ Learn how to integrate wallet connections into your Stacks application. Connecti - Access user account data ::: +## Prerequisites + :::prerequisites - Node.js installed on your machine - A web application setup (React, Vue, or vanilla JS) @@ -125,6 +129,8 @@ Learn how to integrate wallet connections into your Stacks application. Connecti +## Next steps + :::next-steps - [Sign messages](/reference/stacks.js/message-signing): Prove address ownership - [Broadcast transactions](/reference/stacks.js/broadcast-transactions): Learn about different transaction types diff --git a/content/docs/reference/stacks.js/(connect)/message-signing.mdx b/content/docs/en/reference/stacks.js/(connect)/message-signing.mdx similarity index 99% rename from content/docs/reference/stacks.js/(connect)/message-signing.mdx rename to content/docs/en/reference/stacks.js/(connect)/message-signing.mdx index 3b2de4b79..239831879 100644 --- a/content/docs/reference/stacks.js/(connect)/message-signing.mdx +++ b/content/docs/en/reference/stacks.js/(connect)/message-signing.mdx @@ -192,6 +192,8 @@ async function authenticate() { } ``` +## Next steps + :::next-steps - [Broadcast transactions](/reference/stacks.js/broadcast-transactions): Learn how to sign and broadcast transactions - [Connect API reference](/reference/stacks.js/packages/connect): Explore all available methods diff --git a/content/docs/reference/stacks.js/(connect)/meta.json b/content/docs/en/reference/stacks.js/(connect)/meta.json similarity index 100% rename from content/docs/reference/stacks.js/(connect)/meta.json rename to content/docs/en/reference/stacks.js/(connect)/meta.json diff --git a/content/docs/reference/stacks.js/(connect)/migration-guide.mdx b/content/docs/en/reference/stacks.js/(connect)/migration-guide.mdx similarity index 100% rename from content/docs/reference/stacks.js/(connect)/migration-guide.mdx rename to content/docs/en/reference/stacks.js/(connect)/migration-guide.mdx diff --git a/content/docs/reference/stacks.js/(connect)/wallet-support.mdx b/content/docs/en/reference/stacks.js/(connect)/wallet-support.mdx similarity index 100% rename from content/docs/reference/stacks.js/(connect)/wallet-support.mdx rename to content/docs/en/reference/stacks.js/(connect)/wallet-support.mdx diff --git a/content/docs/reference/stacks.js/(integrations)/meta.json b/content/docs/en/reference/stacks.js/(integrations)/meta.json similarity index 100% rename from content/docs/reference/stacks.js/(integrations)/meta.json rename to content/docs/en/reference/stacks.js/(integrations)/meta.json diff --git a/content/docs/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx b/content/docs/en/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx similarity index 99% rename from content/docs/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx rename to content/docs/en/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx index 06e2d50a9..1c591dba6 100644 --- a/content/docs/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx +++ b/content/docs/en/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx @@ -9,6 +9,8 @@ import { File, Folder, Files } from 'fumadocs-ui/components/files'; import { Steps, Step } from '@/components/steps'; import { ArrowRight, Check } from 'lucide-react'; +## What you'll learn + :::objectives - Install and configure the Pyth SDK - Fetch VAA messages from Hermes API @@ -16,6 +18,8 @@ import { ArrowRight, Check } from 'lucide-react'; - Handle post-conditions for oracle fees ::: +## Prerequisites + :::prerequisites - A React or Node.js application with Stacks.js installed - Understanding of [Pyth oracle contracts](/resources/clarity/external-data) @@ -190,6 +194,8 @@ import { ArrowRight, Check } from 'lucide-react'; +## Next steps + :::next-steps - [Clarity contracts](/resources/clarity/external-data): Learn how to integrate Pyth oracle with Clarity contracts. - [Testing with Clarinet](/tools/clarinet/pyth-oracle-integration): Learn how to test Pyth oracle integration with Clarinet. diff --git a/content/docs/reference/stacks.js/(integrations)/react-native-integration.mdx b/content/docs/en/reference/stacks.js/(integrations)/react-native-integration.mdx similarity index 99% rename from content/docs/reference/stacks.js/(integrations)/react-native-integration.mdx rename to content/docs/en/reference/stacks.js/(integrations)/react-native-integration.mdx index 471322080..59700fae5 100644 --- a/content/docs/reference/stacks.js/(integrations)/react-native-integration.mdx +++ b/content/docs/en/reference/stacks.js/(integrations)/react-native-integration.mdx @@ -279,6 +279,8 @@ const broadcastTransaction = async (transaction: StacksTransaction) => { }; ``` +## Next steps + :::next-steps - [Transactions package](/reference/stacks.js/packages/transactions): Learn about the transactions package. - [Network package](/reference/stacks.js/packages/network): Learn about the network package utils. diff --git a/content/docs/reference/stacks.js/(local-accounts)/build-transactions.mdx b/content/docs/en/reference/stacks.js/(local-accounts)/build-transactions.mdx similarity index 99% rename from content/docs/reference/stacks.js/(local-accounts)/build-transactions.mdx rename to content/docs/en/reference/stacks.js/(local-accounts)/build-transactions.mdx index 34e72bf04..509ca7eec 100644 --- a/content/docs/reference/stacks.js/(local-accounts)/build-transactions.mdx +++ b/content/docs/en/reference/stacks.js/(local-accounts)/build-transactions.mdx @@ -252,6 +252,8 @@ tx.setFee(feeRate); const result = await broadcastTransaction({ transaction: tx }); ``` +## Next steps + :::next-steps - [Contract calls](/reference/stacks.js/contract-calls): Learn how to call contract functions. - [Post-conditions](/reference/stacks.js/post-conditions): Understanding post-conditions. diff --git a/content/docs/reference/stacks.js/(local-accounts)/contract-calls.mdx b/content/docs/en/reference/stacks.js/(local-accounts)/contract-calls.mdx similarity index 100% rename from content/docs/reference/stacks.js/(local-accounts)/contract-calls.mdx rename to content/docs/en/reference/stacks.js/(local-accounts)/contract-calls.mdx diff --git a/content/docs/reference/stacks.js/(local-accounts)/contract-deployment.mdx b/content/docs/en/reference/stacks.js/(local-accounts)/contract-deployment.mdx similarity index 100% rename from content/docs/reference/stacks.js/(local-accounts)/contract-deployment.mdx rename to content/docs/en/reference/stacks.js/(local-accounts)/contract-deployment.mdx diff --git a/content/docs/reference/stacks.js/(local-accounts)/meta.json b/content/docs/en/reference/stacks.js/(local-accounts)/meta.json similarity index 100% rename from content/docs/reference/stacks.js/(local-accounts)/meta.json rename to content/docs/en/reference/stacks.js/(local-accounts)/meta.json diff --git a/content/docs/reference/stacks.js/(local-accounts)/read-only-calls.mdx b/content/docs/en/reference/stacks.js/(local-accounts)/read-only-calls.mdx similarity index 100% rename from content/docs/reference/stacks.js/(local-accounts)/read-only-calls.mdx rename to content/docs/en/reference/stacks.js/(local-accounts)/read-only-calls.mdx diff --git a/content/docs/reference/stacks.js/(overview)/accounts-and-addresses.mdx b/content/docs/en/reference/stacks.js/(overview)/accounts-and-addresses.mdx similarity index 100% rename from content/docs/reference/stacks.js/(overview)/accounts-and-addresses.mdx rename to content/docs/en/reference/stacks.js/(overview)/accounts-and-addresses.mdx diff --git a/content/docs/reference/stacks.js/(overview)/meta.json b/content/docs/en/reference/stacks.js/(overview)/meta.json similarity index 100% rename from content/docs/reference/stacks.js/(overview)/meta.json rename to content/docs/en/reference/stacks.js/(overview)/meta.json diff --git a/content/docs/reference/stacks.js/(overview)/networks.mdx b/content/docs/en/reference/stacks.js/(overview)/networks.mdx similarity index 100% rename from content/docs/reference/stacks.js/(overview)/networks.mdx rename to content/docs/en/reference/stacks.js/(overview)/networks.mdx diff --git a/content/docs/reference/stacks.js/(overview)/private-keys.mdx b/content/docs/en/reference/stacks.js/(overview)/private-keys.mdx similarity index 100% rename from content/docs/reference/stacks.js/(overview)/private-keys.mdx rename to content/docs/en/reference/stacks.js/(overview)/private-keys.mdx diff --git a/content/docs/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx b/content/docs/en/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx similarity index 99% rename from content/docs/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx rename to content/docs/en/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx index 17c3688c3..ad640a320 100644 --- a/content/docs/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx +++ b/content/docs/en/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx @@ -6,6 +6,8 @@ description: Learn how to add post-conditions to protect your Stacks transaction Post-conditions are a powerful security feature in Stacks that protect users from unexpected transaction outcomes. This tutorial will walk you through implementing post-conditions in your applications to ensure transactions behave exactly as users expect. +## What you'll learn + :::objectives - Construct post-conditions using the Pc helper API - Add post-conditions to different transaction types @@ -14,6 +16,8 @@ Post-conditions are a powerful security feature in Stacks that protect users fro - Handle semi-fungible tokens (SFTs) with post-conditions ::: +## Prerequisites + :::prerequisites - Basic understanding of Stacks transactions - Stacks.js library installed (`npm install @stacks/transactions`) @@ -231,6 +235,8 @@ type: tip Explore the [Post-conditions template](https://platform.hiro.so) for interactive examples. ::: +## Next steps + :::next-steps - [Contract calling](/reference/stacks.js/contract-calls): Learn how to call contracts in Stacks - [Transaction broadcasting](/reference/stacks.js/broadcast-transactions): Learn how to broadcast protected transactions diff --git a/content/docs/reference/stacks.js/(post-conditions)/meta.json b/content/docs/en/reference/stacks.js/(post-conditions)/meta.json similarity index 100% rename from content/docs/reference/stacks.js/(post-conditions)/meta.json rename to content/docs/en/reference/stacks.js/(post-conditions)/meta.json diff --git a/content/docs/reference/stacks.js/(post-conditions)/post-conditions.mdx b/content/docs/en/reference/stacks.js/(post-conditions)/post-conditions.mdx similarity index 100% rename from content/docs/reference/stacks.js/(post-conditions)/post-conditions.mdx rename to content/docs/en/reference/stacks.js/(post-conditions)/post-conditions.mdx diff --git a/content/docs/reference/stacks.js/(utils)/address-validation.mdx b/content/docs/en/reference/stacks.js/(utils)/address-validation.mdx similarity index 100% rename from content/docs/reference/stacks.js/(utils)/address-validation.mdx rename to content/docs/en/reference/stacks.js/(utils)/address-validation.mdx diff --git a/content/docs/reference/stacks.js/(utils)/encoding-decoding.mdx b/content/docs/en/reference/stacks.js/(utils)/encoding-decoding.mdx similarity index 100% rename from content/docs/reference/stacks.js/(utils)/encoding-decoding.mdx rename to content/docs/en/reference/stacks.js/(utils)/encoding-decoding.mdx diff --git a/content/docs/reference/stacks.js/(utils)/meta.json b/content/docs/en/reference/stacks.js/(utils)/meta.json similarity index 100% rename from content/docs/reference/stacks.js/(utils)/meta.json rename to content/docs/en/reference/stacks.js/(utils)/meta.json diff --git a/content/docs/reference/stacks.js/(utils)/network-configuration.mdx b/content/docs/en/reference/stacks.js/(utils)/network-configuration.mdx similarity index 100% rename from content/docs/reference/stacks.js/(utils)/network-configuration.mdx rename to content/docs/en/reference/stacks.js/(utils)/network-configuration.mdx diff --git a/content/docs/reference/stacks.js/(utils)/unit-conversion.mdx b/content/docs/en/reference/stacks.js/(utils)/unit-conversion.mdx similarity index 100% rename from content/docs/reference/stacks.js/(utils)/unit-conversion.mdx rename to content/docs/en/reference/stacks.js/(utils)/unit-conversion.mdx diff --git a/content/docs/reference/stacks.js/index.mdx b/content/docs/en/reference/stacks.js/index.mdx similarity index 99% rename from content/docs/reference/stacks.js/index.mdx rename to content/docs/en/reference/stacks.js/index.mdx index 691b5e171..1ca9db3e3 100644 --- a/content/docs/reference/stacks.js/index.mdx +++ b/content/docs/en/reference/stacks.js/index.mdx @@ -60,6 +60,8 @@ Stacks.js is separated into focused packages published under the `@stacks` scope +## Next steps + :::next-steps - [Connect wallet](/reference/stacks.js/connect-wallet): Add wallet authentication - [Build transactions](/reference/stacks.js/build-transactions): Build and broadcast transactions diff --git a/content/docs/reference/stacks.js/meta.json b/content/docs/en/reference/stacks.js/meta.json similarity index 100% rename from content/docs/reference/stacks.js/meta.json rename to content/docs/en/reference/stacks.js/meta.json diff --git a/content/docs/reference/stacks.js/packages/connect.mdx b/content/docs/en/reference/stacks.js/packages/connect.mdx similarity index 100% rename from content/docs/reference/stacks.js/packages/connect.mdx rename to content/docs/en/reference/stacks.js/packages/connect.mdx diff --git a/content/docs/reference/stacks.js/packages/meta.json b/content/docs/en/reference/stacks.js/packages/meta.json similarity index 100% rename from content/docs/reference/stacks.js/packages/meta.json rename to content/docs/en/reference/stacks.js/packages/meta.json diff --git a/content/docs/reference/stacks.js/packages/network.mdx b/content/docs/en/reference/stacks.js/packages/network.mdx similarity index 100% rename from content/docs/reference/stacks.js/packages/network.mdx rename to content/docs/en/reference/stacks.js/packages/network.mdx diff --git a/content/docs/reference/stacks.js/packages/sbtc.mdx b/content/docs/en/reference/stacks.js/packages/sbtc.mdx similarity index 100% rename from content/docs/reference/stacks.js/packages/sbtc.mdx rename to content/docs/en/reference/stacks.js/packages/sbtc.mdx diff --git a/content/docs/reference/stacks.js/packages/transactions.mdx b/content/docs/en/reference/stacks.js/packages/transactions.mdx similarity index 100% rename from content/docs/reference/stacks.js/packages/transactions.mdx rename to content/docs/en/reference/stacks.js/packages/transactions.mdx diff --git a/content/docs/en/resources/archive/download-guide.mdx b/content/docs/en/resources/archive/download-guide.mdx new file mode 100644 index 000000000..a78699448 --- /dev/null +++ b/content/docs/en/resources/archive/download-guide.mdx @@ -0,0 +1,182 @@ +--- +title: How to download Hiro archives +description: Comprehensive guide for downloading large archive files reliably with troubleshooting tips. +--- + +## Overview + +Hiro Archive files are large datasets (ranging from several GB to several _hundred_ GB) hosted on Google Cloud Storage. Due to their size, downloads can be interrupted by network issues, rate limits, or connection timeouts. This guide provides multiple download methods and troubleshooting solutions. + +## File sizes and requirements + +Before downloading, ensure you have sufficient: +- **Disk space**: Archives range from 10GB (APIs) to several hundred GB+ (blockchain data) +- **Bandwidth**: Downloads can take hours or days depending on your connection +- **Storage for extraction**: Archives expand significantly when extracted + +## Download methods + +### Method 1: wget with resume (Recommended for most users) + +The `wget` command with the `-c` flag enables resuming interrupted downloads: + +:::callout +type: info +### macOS Users +You may need to install wget first: `brew install wget`. Alternatively, use the curl method below which is pre-installed on macOS. +::: + +```terminal +$ wget -c https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz +$ wget -c --progress=bar:force:noscroll https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz +``` + +**Advantages:** +- Resumes interrupted downloads automatically +- Built into most Unix systems +- Simple to use + +**Disadvantages:** +- Single-threaded downloads +- May still experience connection resets + +### Method 2: curl with retries + +Use `curl` with automatic retries for robust downloads. The `--continue-at -` flag resumes partial downloads, while `--output` specifies the filename: + +```terminal +$ curl --continue-at - --retry 10 --retry-delay 5 --retry-max-time 0 \ + --progress-bar \ + --output mainnet-stacks-blockchain-latest.tar.gz \ + https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz +``` + +**Advantages:** +- Automatic retry mechanism +- Resume capability with `-C -` +- More configuration options + +### Method 3: gcloud storage cp (Fastest, requires authentication) + +Google Cloud CLI provides the fastest download speeds with parallel transfers. First authenticate with `gcloud auth login`, then either download the file to disk or stream directly to extraction: + +#### Download file to current directory + +```terminal +$ gcloud storage cp gs://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz . +``` + +#### OR stream directly to extraction (saves disk space but slower due to sequential download) + +```terminal +$ gcloud storage cp gs://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz - | tar -xz +``` + +**Advantages:** +- Significantly faster downloads (2-3x speed improvement) +- Built-in parallel transfers +- Automatic retry handling +- Can stream directly to extraction (useful when disk space is limited, but disables parallel transfers) + +**Disadvantages:** +- Requires Google account authentication +- Additional software installation needed + +### Method 4: Download managers (JDownloader) + +For users who prefer GUI applications or need advanced download management: + +1. Download and install [JDownloader](https://jdownloader.org/download/index) +2. Copy the archive URL into JDownloader +3. Configure parallel connections for faster downloads + +**Advantages:** +- Graphical interface +- Parallel downloading +- Advanced retry mechanisms +- Cross-platform support + +## Verification and extraction + +After downloading, verify the file integrity: + +:::callout +type: info +### Checksum Availability +SHA256 checksum files are available for **all archives** to verify download integrity. +::: + +1. **Download the checksum file:** + ```terminal + $ wget https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.sha256 + ``` + +2. **Verify the download:** + ```terminal + $ echo "$(cat mainnet-stacks-blockchain-latest.sha256 | awk '{print $1}') mainnet-stacks-blockchain-latest.tar.gz" | shasum -a 256 -c + ``` + +3. **Extract the archive:** + ```terminal + $ tar -zxvf mainnet-stacks-blockchain-latest.tar.gz -C /target/directory + ``` + +:::callout +type: info +### Large file extraction +The `marf.sqlite.blobs` file can be very large and may take significant time to extract. Ensure you have sufficient disk space and be patient during extraction. +::: + +## Performance tips + +1. **Use gcloud for fastest downloads** - requires authentication but provides significant speed improvements +2. **Download during off-peak hours** - typically late night or early morning +3. **Use wired connections** - avoid Wi-Fi for large downloads when possible +4. **Monitor disk space** - extracted archives can be 2-3x larger than compressed files +5. **Consider streaming extraction** with gcloud to save disk space + +## FAQ + + + + Why do downloads keep failing? + + Large file downloads from cloud storage can be interrupted due to network issues, rate limiting, or connection timeouts. Use resume-capable tools like `wget -c` or `gcloud storage cp`. + + + + + Which download method should I use? + + For fastest speeds, use `gcloud storage cp` (requires Google auth). For simplicity, use `wget -c`. For reliability without authentication, try a download manager like JDownloader. + + + + + How long should a download take? + + Download time varies based on file size and connection speed. The mainnet blockchain archive (several hundred GB+) can take 6-24+ hours on typical broadband connections. + + + + + Can I resume a failed download? + + Yes, use `wget -c`, `curl -C -`, or `gcloud storage cp` to resume interrupted downloads from where they stopped. + + + + + Why is gcloud faster? + + Google Cloud CLI uses parallel transfers and optimized protocols when downloading from Google Cloud Storage, resulting in 2-3x speed improvements. + + + + + Do I need to verify downloaded files? + + Yes, verify large downloads using SHA256 checksums to ensure data integrity. + + + diff --git a/content/docs/resources/archive/index.mdx b/content/docs/en/resources/archive/index.mdx similarity index 57% rename from content/docs/resources/archive/index.mdx rename to content/docs/en/resources/archive/index.mdx index 6ab5a589f..ad1ef11ee 100644 --- a/content/docs/resources/archive/index.mdx +++ b/content/docs/en/resources/archive/index.mdx @@ -11,11 +11,6 @@ The Hiro Archive enables you to quickly bootstrap supported services with pre-lo [View the Hiro Archive](https://archive.hiro.so/) -## Supported services +## Installation -We record and archive mainnet and testnet snapshots for the following services every night: - -:::next-steps -- [Stacks blockchain](/resources/archive/stacks-blockchain): Bootstrap a Stacks node with archived blockchain data -- [Verify archive data](/resources/archive/verify-archive-data): Verify the integrity of archive data -::: \ No newline at end of file +See the [download](/resources/archive/download-guide) guide for instructions on how to download Hiro archives. diff --git a/content/docs/en/resources/archive/meta.json b/content/docs/en/resources/archive/meta.json new file mode 100644 index 000000000..e583e1c7d --- /dev/null +++ b/content/docs/en/resources/archive/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Hiro Archive", + "root": true, + "pages": ["index", "download-guide", "stacks-blockchain", "stacks-api", "token-metadata-api"] +} diff --git a/content/docs/resources/archive/stacks-api.mdx b/content/docs/en/resources/archive/stacks-api.mdx similarity index 93% rename from content/docs/resources/archive/stacks-api.mdx rename to content/docs/en/resources/archive/stacks-api.mdx index a43a77eed..ad145c49d 100644 --- a/content/docs/resources/archive/stacks-api.mdx +++ b/content/docs/en/resources/archive/stacks-api.mdx @@ -69,7 +69,7 @@ or the most recent upload for a particular version: **If restoring via Postgres dump** 1. Download the archive and shasum for the appropriate network and restoration method. -1. [Verify the archive](/resources/archive/verify-archive-data) with the shasum. +1. Verify the archive using the steps in the [download guide](/resources/archive/download-guide#verification-and-extraction) (note: API archives may not have SHA256 files available). 1. Import the archive file into a running Postgres database (may take up to an hour depending on database specs and tuning): ```terminal $ export PGPASSWORD= @@ -83,7 +83,7 @@ or the most recent upload for a particular version: **If restoring via TSV file** 1. Download the archive and shasum for the appropriate network and restoration method. -1. [Verify the archive](/resources/archive/verify-archive-data) with the shasum. +1. Verify the archive using the steps in the [download guide](/resources/archive/download-guide#verification-and-extraction) (note: API archives may not have SHA256 files available). 1. Extract the archive into the desired directory: ```terminal $ gzip -d --stdout > /path/to/extracted/file diff --git a/content/docs/resources/archive/stacks-blockchain.mdx b/content/docs/en/resources/archive/stacks-blockchain.mdx similarity index 73% rename from content/docs/resources/archive/stacks-blockchain.mdx rename to content/docs/en/resources/archive/stacks-blockchain.mdx index aaeea9b10..be6358f1b 100644 --- a/content/docs/resources/archive/stacks-blockchain.mdx +++ b/content/docs/en/resources/archive/stacks-blockchain.mdx @@ -28,13 +28,20 @@ or the most recent upload for a particular version: ## Restoring a Stacks blockchain node using the Hiro Archive 1. Download the archive and shasum for the appropriate network. -1. [Verify the archive](/resources/archive/verify-archive-data) with the shasum. -1. Extract the archive into the desired directory: + +:::callout +type: info +### Download Help +Archives are large files (321GB+ for mainnet) that may experience connection issues. For detailed download methods, troubleshooting, and faster download options, see the [How to download Hiro archives](/resources/archive/download-guide) guide. +::: + +2. Verify the archive using the steps in the [download guide](/resources/archive/download-guide#verification-and-extraction). +3. Extract the archive into the desired directory: ```terminal $ tar -zxvf -C /target/directory ``` -1. [Configure the `working_dir` property](https://docs.stacks.co/docs/nodes-and-miners/stacks-node-configuration#node) in your Stacks blockchain node Config.toml file to match the directory you extracted the archive to. -1. Launch your Stacks blockchain node. You can use [one of these example configuration files](https://github.com/stacks-network/stacks-blockchain/tree/master/testnet/stacks-node/conf) as a reference. -1. Verify the dataset is being used by comparing your nodes [local block height](http://localhost:20443/v2/info) with [Hiro's](https://api.hiro.so/v2/info). If the block height matches or is close to Hiro's block height, the restoration was successful. +4. [Configure the `working_dir` property](https://docs.stacks.co/docs/nodes-and-miners/stacks-node-configuration#node) in your Stacks blockchain node Config.toml file to match the directory you extracted the archive to. +5. Launch your Stacks blockchain node. You can use [one of these example configuration files](https://github.com/stacks-network/stacks-blockchain/tree/master/testnet/stacks-node/conf) as a reference. +6. Verify the dataset is being used by comparing your nodes [local block height](http://localhost:20443/v2/info) with [Hiro's](https://api.hiro.so/v2/info). If the block height matches or is close to Hiro's block height, the restoration was successful. 1. It may take a few minutes for the local node to respond on this endpoint. 1. Your block height may be up to a few hundred blocks away from Hiro's depending on the age of the archive. It should catch up relatively quickly. diff --git a/content/docs/resources/archive/token-metadata-api.mdx b/content/docs/en/resources/archive/token-metadata-api.mdx similarity index 92% rename from content/docs/resources/archive/token-metadata-api.mdx rename to content/docs/en/resources/archive/token-metadata-api.mdx index f7a07ab73..85c37ca9f 100644 --- a/content/docs/resources/archive/token-metadata-api.mdx +++ b/content/docs/en/resources/archive/token-metadata-api.mdx @@ -34,7 +34,7 @@ or the most recent upload for a particular version: ## Restoring the Token Metadata API using the Hiro Archive 1. Download the archive and shasum for the appropriate network. -1. [Verify the archive](/resources/archive/verify-archive-data) with the shasum. +1. Verify the archive using the steps in the [download guide](/resources/archive/download-guide#verification-and-extraction) (note: API archives may not have SHA256 files available). 1. Import the archive file into a running Postgres database (may take up to an hour depending on database specs and tuning): ```terminal $ export PGPASSWORD= diff --git a/content/docs/resources/clarity/(integrations)/external-data.mdx b/content/docs/en/resources/clarity/(integrations)/external-data.mdx similarity index 99% rename from content/docs/resources/clarity/(integrations)/external-data.mdx rename to content/docs/en/resources/clarity/(integrations)/external-data.mdx index 96a24b767..25b03b3e3 100644 --- a/content/docs/resources/clarity/(integrations)/external-data.mdx +++ b/content/docs/en/resources/clarity/(integrations)/external-data.mdx @@ -215,6 +215,8 @@ For testnet development, use these contract addresses: (define-constant PYTH-STORAGE-CONTRACT-TESTNET 'ST20M5GABDT6WYJHXBT5CDH4501V1Q65242SPRMXH.pyth-storage-v3) ``` +## Next steps + :::next-steps - [Frontend integration](/reference/stacks.js/pyth-oracle-integration): Learn how to fetch VAA messages and call your oracle-enabled contracts - [Testing with Clarinet](/tools/clarinet/pyth-oracle-integration): Set up tests for contracts that depend on oracle data diff --git a/content/docs/resources/clarity/(integrations)/meta.json b/content/docs/en/resources/clarity/(integrations)/meta.json similarity index 100% rename from content/docs/resources/clarity/(integrations)/meta.json rename to content/docs/en/resources/clarity/(integrations)/meta.json diff --git a/content/docs/resources/clarity/index.mdx b/content/docs/en/resources/clarity/index.mdx similarity index 100% rename from content/docs/resources/clarity/index.mdx rename to content/docs/en/resources/clarity/index.mdx diff --git a/content/docs/resources/clarity/meta.json b/content/docs/en/resources/clarity/meta.json similarity index 100% rename from content/docs/resources/clarity/meta.json rename to content/docs/en/resources/clarity/meta.json diff --git a/content/docs/resources/clarity/reference/functions.mdx b/content/docs/en/resources/clarity/reference/functions.mdx similarity index 98% rename from content/docs/resources/clarity/reference/functions.mdx rename to content/docs/en/resources/clarity/reference/functions.mdx index be18b46c0..f061401e6 100644 --- a/content/docs/resources/clarity/reference/functions.mdx +++ b/content/docs/en/resources/clarity/reference/functions.mdx @@ -50,7 +50,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `i1`, `i2`, ... | `int` or `uint` | Two or more integers to subtract | +| i1, i2, ... | `int` or `uint` | Two or more integers to subtract | ```clarity (- 10 3) ;; Returns 7 @@ -79,7 +79,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `i1`, `i2`, ... | `int` or `uint` | Two or more integers to multiply | +| i1, i2, ... | `int` or `uint` | Two or more integers to multiply | ```clarity (* 3 4) ;; Returns 12 @@ -105,7 +105,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `i1`, `i2`, ... | `int` or `uint` | Two or more integers to divide | +| i1, i2, ... | `int` or `uint` | Two or more integers to divide | ```clarity (/ 10 2) ;; Returns 5 @@ -347,7 +347,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `b1`, `b2`, ... | `bool` | Boolean values to evaluate | +| b1, b2, ... | `bool` | Boolean values to evaluate | ```clarity (and true true) ;; Returns true @@ -356,7 +356,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de ;; Multiple conditions (define-read-only (is-valid-transfer (amount uint) (recipient principal)) - (and + (and (> amount u0) (not (is-eq recipient tx-sender)) (<= amount (get-balance tx-sender)))) @@ -376,7 +376,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `b1`, `b2`, ... | `bool` | Boolean values to evaluate | +| b1, b2, ... | `bool` | Boolean values to evaluate | ```clarity (or true false) ;; Returns true @@ -385,7 +385,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de ;; Check permissions (define-read-only (can-access (user principal)) - (or + (or (is-eq user contract-owner) (default-to false (map-get? admins user)) (var-get public-access))) @@ -457,7 +457,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `v1`, `v2`, ... | any | Values to compare for equality | +| v1, v2, ... | any | Values to compare for equality | ```clarity (is-eq 5 5) ;; Returns true @@ -488,14 +488,14 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `v1`, `v2`, ... | any | Values to include in the list | +| v1, v2, ... | any | Values to include in the list | ```clarity (list 1 2 3) ;; Returns (1 2 3) (list true false true) ;; Returns (true false true) ;; Create address list -(define-data-var admins (list 5 principal) +(define-data-var admins (list 5 principal) (list 'SP1234... 'SP5678...)) ``` @@ -921,7 +921,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| | `func` | function | Function to apply | -| `list1`, `list2`, ... | `list` | Lists to map over | +| list1, list2, ... | `list` | Lists to map over | ```clarity (map + (list 1 2 3) (list 10 20 30)) ;; Returns (11 22 33) @@ -1133,8 +1133,8 @@ Clarity provides a comprehensive set of built-in functions for smart contract de ```clarity (define-map balances principal uint) -(define-map user-profiles - principal +(define-map user-profiles + principal { name: (string-ascii 50), age: uint, @@ -1142,8 +1142,8 @@ Clarity provides a comprehensive set of built-in functions for smart contract de }) ;; Composite key -(define-map allowances - { owner: principal, spender: principal } +(define-map allowances + { owner: principal, spender: principal } uint) ``` @@ -1408,7 +1408,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de ;; Success response (define-public (deposit (amount uint)) (begin - (map-set balances tx-sender + (map-set balances tx-sender (+ (get-balance tx-sender) amount)) (ok amount))) ``` @@ -1812,7 +1812,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | Name | Type | Description | |------|------|-------------| -| `expr1`, `expr2`, ... | any | Expressions to execute | +| expr1, expr2, ... | any | Expressions to execute | | `last-expr` | any | Final expression (return value) | ```clarity @@ -2181,7 +2181,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de (define-non-fungible-token complex-nft { id: uint, serial: (buff 20) }) ;; NFT with metadata -(define-map nft-metadata uint { +(define-map nft-metadata uint { name: (string-ascii 50), uri: (string-ascii 200) }) @@ -2354,7 +2354,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de ;; Payment with reference (define-public (pay-invoice (amount uint) (recipient principal) (invoice-id (buff 16))) - (stx-transfer-memo? amount tx-sender recipient + (stx-transfer-memo? amount tx-sender recipient (concat 0x494e56 invoice-id))) ;; "INV" prefix ``` @@ -2582,7 +2582,7 @@ Clarity provides a comprehensive set of built-in functions for smart contract de | `public-key` | `(buff 33)` | Public key | ```clarity -(secp256k1-verify +(secp256k1-verify 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef signature public-key) ;; Returns bool @@ -3328,4 +3328,3 @@ Key points: (print { function: "transfer", amount: amount, sender: tx-sender }) (ok true))) ``` - diff --git a/content/docs/resources/clarity/reference/keywords.mdx b/content/docs/en/resources/clarity/reference/keywords.mdx similarity index 100% rename from content/docs/resources/clarity/reference/keywords.mdx rename to content/docs/en/resources/clarity/reference/keywords.mdx diff --git a/content/docs/resources/clarity/reference/types.mdx b/content/docs/en/resources/clarity/reference/types.mdx similarity index 100% rename from content/docs/resources/clarity/reference/types.mdx rename to content/docs/en/resources/clarity/reference/types.mdx diff --git a/content/docs/resources/guides/api-keys.mdx b/content/docs/en/resources/guides/api-keys.mdx similarity index 100% rename from content/docs/resources/guides/api-keys.mdx rename to content/docs/en/resources/guides/api-keys.mdx diff --git a/content/docs/resources/guides/build-a-decentralized-kickstarter.mdx b/content/docs/en/resources/guides/build-a-decentralized-kickstarter.mdx similarity index 100% rename from content/docs/resources/guides/build-a-decentralized-kickstarter.mdx rename to content/docs/en/resources/guides/build-a-decentralized-kickstarter.mdx diff --git a/content/docs/resources/guides/build-an-nft-marketplace.mdx b/content/docs/en/resources/guides/build-an-nft-marketplace.mdx similarity index 100% rename from content/docs/resources/guides/build-an-nft-marketplace.mdx rename to content/docs/en/resources/guides/build-an-nft-marketplace.mdx diff --git a/content/docs/resources/guides/index.mdx b/content/docs/en/resources/guides/index.mdx similarity index 100% rename from content/docs/resources/guides/index.mdx rename to content/docs/en/resources/guides/index.mdx diff --git a/content/docs/resources/guides/installing-docker.mdx b/content/docs/en/resources/guides/installing-docker.mdx similarity index 99% rename from content/docs/resources/guides/installing-docker.mdx rename to content/docs/en/resources/guides/installing-docker.mdx index 12abd5478..b3db8d319 100644 --- a/content/docs/resources/guides/installing-docker.mdx +++ b/content/docs/en/resources/guides/installing-docker.mdx @@ -39,6 +39,8 @@ You might need to install additional Windows components like Hyper-V or WSL 2. --- +## Next steps + :::next-steps - [Sync a Bitcoin node](/resources/guides/sync-a-bitcoin-node): Learn how to sync a Bitcoin node for running Chainhook as a service. - [Sync a Stacks node](/resources/guides/sync-a-stacks-node): Learn how to sync a Stacks node for running a local devnet. diff --git a/content/docs/resources/guides/meta.json b/content/docs/en/resources/guides/meta.json similarity index 100% rename from content/docs/resources/guides/meta.json rename to content/docs/en/resources/guides/meta.json diff --git a/content/docs/resources/guides/no-loss-lottery.mdx b/content/docs/en/resources/guides/no-loss-lottery.mdx similarity index 100% rename from content/docs/resources/guides/no-loss-lottery.mdx rename to content/docs/en/resources/guides/no-loss-lottery.mdx diff --git a/content/docs/resources/guides/rate-limits.mdx b/content/docs/en/resources/guides/rate-limits.mdx similarity index 100% rename from content/docs/resources/guides/rate-limits.mdx rename to content/docs/en/resources/guides/rate-limits.mdx diff --git a/content/docs/resources/guides/response-headers.mdx b/content/docs/en/resources/guides/response-headers.mdx similarity index 100% rename from content/docs/resources/guides/response-headers.mdx rename to content/docs/en/resources/guides/response-headers.mdx diff --git a/content/docs/resources/guides/sync-a-bitcoin-node.mdx b/content/docs/en/resources/guides/sync-a-bitcoin-node.mdx similarity index 100% rename from content/docs/resources/guides/sync-a-bitcoin-node.mdx rename to content/docs/en/resources/guides/sync-a-bitcoin-node.mdx diff --git a/content/docs/resources/guides/sync-a-stacks-node.mdx b/content/docs/en/resources/guides/sync-a-stacks-node.mdx similarity index 98% rename from content/docs/resources/guides/sync-a-stacks-node.mdx rename to content/docs/en/resources/guides/sync-a-stacks-node.mdx index 72df3935d..e9901e890 100644 --- a/content/docs/resources/guides/sync-a-stacks-node.mdx +++ b/content/docs/en/resources/guides/sync-a-stacks-node.mdx @@ -5,6 +5,8 @@ description: Learn how to sync a Stacks node for running a local devnet or mainn Running a Stacks node is crucial for developers aiming to interact directly with the Stacks blockchain. It allows for the verification of transactions, ensures decentralized operations, and enhances blockchain security. +## What you'll learn + :::objectives - Clone the Stacks blockchain Docker repository - Start the service diff --git a/content/docs/resources/guides/using-clarity-values.mdx b/content/docs/en/resources/guides/using-clarity-values.mdx similarity index 100% rename from content/docs/resources/guides/using-clarity-values.mdx rename to content/docs/en/resources/guides/using-clarity-values.mdx diff --git a/content/docs/resources/guides/using-pyth-price-feeds.mdx b/content/docs/en/resources/guides/using-pyth-price-feeds.mdx similarity index 99% rename from content/docs/resources/guides/using-pyth-price-feeds.mdx rename to content/docs/en/resources/guides/using-pyth-price-feeds.mdx index 26f02e0c0..daf69fe68 100644 --- a/content/docs/resources/guides/using-pyth-price-feeds.mdx +++ b/content/docs/en/resources/guides/using-pyth-price-feeds.mdx @@ -410,6 +410,8 @@ Batch multiple price updates when possible: - [Trust Machines Pyth integration](https://github.com/Trust-Machines/stacks-pyth-bridge) - [Wormhole VAA specification](https://wormhole.com/docs/protocol/infrastructure/vaas/) +## Next steps + :::next-steps - [Deep dive on Clarity](/resources/clarity/external-data): Advanced oracle patterns and optimizations - [Deep dive on frontend](/reference/stacks.js/pyth-oracle-integration): Building production-ready oracle UIs diff --git a/content/docs/resources/snippets/build-a-stx-pc.mdx b/content/docs/en/resources/snippets/build-a-stx-pc.mdx similarity index 100% rename from content/docs/resources/snippets/build-a-stx-pc.mdx rename to content/docs/en/resources/snippets/build-a-stx-pc.mdx diff --git a/content/docs/resources/snippets/build-an-ft-pc.mdx b/content/docs/en/resources/snippets/build-an-ft-pc.mdx similarity index 100% rename from content/docs/resources/snippets/build-an-ft-pc.mdx rename to content/docs/en/resources/snippets/build-an-ft-pc.mdx diff --git a/content/docs/resources/snippets/build-an-nft-pc.mdx b/content/docs/en/resources/snippets/build-an-nft-pc.mdx similarity index 100% rename from content/docs/resources/snippets/build-an-nft-pc.mdx rename to content/docs/en/resources/snippets/build-an-nft-pc.mdx diff --git a/content/docs/resources/snippets/build-an-unsigned-tx.mdx b/content/docs/en/resources/snippets/build-an-unsigned-tx.mdx similarity index 100% rename from content/docs/resources/snippets/build-an-unsigned-tx.mdx rename to content/docs/en/resources/snippets/build-an-unsigned-tx.mdx diff --git a/content/docs/resources/snippets/check-for-duplicates.mdx b/content/docs/en/resources/snippets/check-for-duplicates.mdx similarity index 100% rename from content/docs/resources/snippets/check-for-duplicates.mdx rename to content/docs/en/resources/snippets/check-for-duplicates.mdx diff --git a/content/docs/resources/snippets/convert-btc-to-stx-address.mdx b/content/docs/en/resources/snippets/convert-btc-to-stx-address.mdx similarity index 100% rename from content/docs/resources/snippets/convert-btc-to-stx-address.mdx rename to content/docs/en/resources/snippets/convert-btc-to-stx-address.mdx diff --git a/content/docs/resources/snippets/convert-string-to-principal.mdx b/content/docs/en/resources/snippets/convert-string-to-principal.mdx similarity index 100% rename from content/docs/resources/snippets/convert-string-to-principal.mdx rename to content/docs/en/resources/snippets/convert-string-to-principal.mdx diff --git a/content/docs/resources/snippets/create-a-random-burn-address.mdx b/content/docs/en/resources/snippets/create-a-random-burn-address.mdx similarity index 100% rename from content/docs/resources/snippets/create-a-random-burn-address.mdx rename to content/docs/en/resources/snippets/create-a-random-burn-address.mdx diff --git a/content/docs/resources/snippets/create-a-sponsored-tx.mdx b/content/docs/en/resources/snippets/create-a-sponsored-tx.mdx similarity index 100% rename from content/docs/resources/snippets/create-a-sponsored-tx.mdx rename to content/docs/en/resources/snippets/create-a-sponsored-tx.mdx diff --git a/content/docs/resources/snippets/create-sha256-hash-clarity.mdx b/content/docs/en/resources/snippets/create-sha256-hash-clarity.mdx similarity index 100% rename from content/docs/resources/snippets/create-sha256-hash-clarity.mdx rename to content/docs/en/resources/snippets/create-sha256-hash-clarity.mdx diff --git a/content/docs/resources/snippets/create-sha256-hash-stacks-js.mdx b/content/docs/en/resources/snippets/create-sha256-hash-stacks-js.mdx similarity index 100% rename from content/docs/resources/snippets/create-sha256-hash-stacks-js.mdx rename to content/docs/en/resources/snippets/create-sha256-hash-stacks-js.mdx diff --git a/content/docs/resources/snippets/deploy-a-contract.mdx b/content/docs/en/resources/snippets/deploy-a-contract.mdx similarity index 100% rename from content/docs/resources/snippets/deploy-a-contract.mdx rename to content/docs/en/resources/snippets/deploy-a-contract.mdx diff --git a/content/docs/resources/snippets/derive-principal-addresses-between-networks.mdx b/content/docs/en/resources/snippets/derive-principal-addresses-between-networks.mdx similarity index 100% rename from content/docs/resources/snippets/derive-principal-addresses-between-networks.mdx rename to content/docs/en/resources/snippets/derive-principal-addresses-between-networks.mdx diff --git a/content/docs/resources/snippets/derive-stacks-address-from-keys.mdx b/content/docs/en/resources/snippets/derive-stacks-address-from-keys.mdx similarity index 100% rename from content/docs/resources/snippets/derive-stacks-address-from-keys.mdx rename to content/docs/en/resources/snippets/derive-stacks-address-from-keys.mdx diff --git a/content/docs/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx b/content/docs/en/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx similarity index 100% rename from content/docs/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx rename to content/docs/en/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx diff --git a/content/docs/resources/snippets/filter-items-from-a-list.mdx b/content/docs/en/resources/snippets/filter-items-from-a-list.mdx similarity index 100% rename from content/docs/resources/snippets/filter-items-from-a-list.mdx rename to content/docs/en/resources/snippets/filter-items-from-a-list.mdx diff --git a/content/docs/resources/snippets/generate-a-secret-key.mdx b/content/docs/en/resources/snippets/generate-a-secret-key.mdx similarity index 100% rename from content/docs/resources/snippets/generate-a-secret-key.mdx rename to content/docs/en/resources/snippets/generate-a-secret-key.mdx diff --git a/content/docs/resources/snippets/generate-a-wallet.mdx b/content/docs/en/resources/snippets/generate-a-wallet.mdx similarity index 100% rename from content/docs/resources/snippets/generate-a-wallet.mdx rename to content/docs/en/resources/snippets/generate-a-wallet.mdx diff --git a/content/docs/resources/snippets/generate-random-number.mdx b/content/docs/en/resources/snippets/generate-random-number.mdx similarity index 100% rename from content/docs/resources/snippets/generate-random-number.mdx rename to content/docs/en/resources/snippets/generate-random-number.mdx diff --git a/content/docs/resources/snippets/get-account-details-from-wallet.mdx b/content/docs/en/resources/snippets/get-account-details-from-wallet.mdx similarity index 100% rename from content/docs/resources/snippets/get-account-details-from-wallet.mdx rename to content/docs/en/resources/snippets/get-account-details-from-wallet.mdx diff --git a/content/docs/resources/snippets/helper-function-to-restrict-contract-calls.mdx b/content/docs/en/resources/snippets/helper-function-to-restrict-contract-calls.mdx similarity index 100% rename from content/docs/resources/snippets/helper-function-to-restrict-contract-calls.mdx rename to content/docs/en/resources/snippets/helper-function-to-restrict-contract-calls.mdx diff --git a/content/docs/resources/snippets/index.mdx b/content/docs/en/resources/snippets/index.mdx similarity index 100% rename from content/docs/resources/snippets/index.mdx rename to content/docs/en/resources/snippets/index.mdx diff --git a/content/docs/resources/snippets/integrate-api-keys-using-stacksjs.mdx b/content/docs/en/resources/snippets/integrate-api-keys-using-stacksjs.mdx similarity index 100% rename from content/docs/resources/snippets/integrate-api-keys-using-stacksjs.mdx rename to content/docs/en/resources/snippets/integrate-api-keys-using-stacksjs.mdx diff --git a/content/docs/resources/snippets/meta.json b/content/docs/en/resources/snippets/meta.json similarity index 100% rename from content/docs/resources/snippets/meta.json rename to content/docs/en/resources/snippets/meta.json diff --git a/content/docs/resources/snippets/return-an-entry-from-a-map.mdx b/content/docs/en/resources/snippets/return-an-entry-from-a-map.mdx similarity index 100% rename from content/docs/resources/snippets/return-an-entry-from-a-map.mdx rename to content/docs/en/resources/snippets/return-an-entry-from-a-map.mdx diff --git a/content/docs/resources/snippets/transfer-a-sip10-token.mdx b/content/docs/en/resources/snippets/transfer-a-sip10-token.mdx similarity index 100% rename from content/docs/resources/snippets/transfer-a-sip10-token.mdx rename to content/docs/en/resources/snippets/transfer-a-sip10-token.mdx diff --git a/content/docs/resources/snippets/transfer-stx.mdx b/content/docs/en/resources/snippets/transfer-stx.mdx similarity index 100% rename from content/docs/resources/snippets/transfer-stx.mdx rename to content/docs/en/resources/snippets/transfer-stx.mdx diff --git a/content/docs/resources/templates/index.mdx b/content/docs/en/resources/templates/index.mdx similarity index 100% rename from content/docs/resources/templates/index.mdx rename to content/docs/en/resources/templates/index.mdx diff --git a/content/docs/resources/templates/meta.json b/content/docs/en/resources/templates/meta.json similarity index 100% rename from content/docs/resources/templates/meta.json rename to content/docs/en/resources/templates/meta.json diff --git a/content/docs/start/index.mdx b/content/docs/en/start/index.mdx similarity index 100% rename from content/docs/start/index.mdx rename to content/docs/en/start/index.mdx diff --git a/content/docs/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx b/content/docs/en/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx similarity index 99% rename from content/docs/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx rename to content/docs/en/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx index 49eb8f40f..9a496d127 100644 --- a/content/docs/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx +++ b/content/docs/en/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx @@ -158,6 +158,8 @@ Use a download manager with resume support: $ aria2c -x 16 -s 16 https://archive.hiro.so/bitcoin-indexer/mainnet/bitcoin-indexer-full-latest.tar.gz ``` +## Next steps + :::next-steps - [Configure the indexer](/tools/bitcoin-indexer/configuration): Fine-tune settings for your use case - [Start using the Ordinals API](/tools/bitcoin-indexer/ordinals-api): Run queries on your indexed data diff --git a/content/docs/tools/bitcoin-indexer/(indexer)/configuration.mdx b/content/docs/en/tools/bitcoin-indexer/(indexer)/configuration.mdx similarity index 100% rename from content/docs/tools/bitcoin-indexer/(indexer)/configuration.mdx rename to content/docs/en/tools/bitcoin-indexer/(indexer)/configuration.mdx diff --git a/content/docs/tools/bitcoin-indexer/(indexer)/full-sync.mdx b/content/docs/en/tools/bitcoin-indexer/(indexer)/full-sync.mdx similarity index 98% rename from content/docs/tools/bitcoin-indexer/(indexer)/full-sync.mdx rename to content/docs/en/tools/bitcoin-indexer/(indexer)/full-sync.mdx index 960daec60..3d2afdeda 100644 --- a/content/docs/tools/bitcoin-indexer/(indexer)/full-sync.mdx +++ b/content/docs/en/tools/bitcoin-indexer/(indexer)/full-sync.mdx @@ -7,11 +7,13 @@ isNew: true import { ArrowRight, Check } from 'lucide-react'; -::objectives +## What you'll learn + +:::objectives - Set up and configure the Bitcoin Indexer - Run the indexer from scratch - Monitor indexing progress effectively -:: +::: :::prerequisites - Bitcoin Core node running with `txindex=1` @@ -178,6 +180,8 @@ Test that APIs are returning data: $ curl http://localhost:3000/ordinals/v1/inscriptions/0 ``` +## Next steps + :::next-steps - [Hiro Archives](/tools/bitcoin-indexer/archive-bootstrap): Skip weeks of indexing by bootstrapping from Hiro's pre-indexed archives. - [Advanced configuration](/tools/bitcoin-indexer/configuration): Configure the Bitcoin Indexer for optimal performance and customize metaprotocol settings. diff --git a/content/docs/tools/bitcoin-indexer/(indexer)/installation.mdx b/content/docs/en/tools/bitcoin-indexer/(indexer)/installation.mdx similarity index 99% rename from content/docs/tools/bitcoin-indexer/(indexer)/installation.mdx rename to content/docs/en/tools/bitcoin-indexer/(indexer)/installation.mdx index 530b215ab..96ea1ca22 100644 --- a/content/docs/tools/bitcoin-indexer/(indexer)/installation.mdx +++ b/content/docs/en/tools/bitcoin-indexer/(indexer)/installation.mdx @@ -212,6 +212,8 @@ $ bitcoin-indexer --help Bitcoin Indexer - High-performance metaprotocol indexing engine ``` +## Next steps + :::next-steps - [Configure the indexer](/tools/bitcoin-indexer/configuration): Set up bitcoin-indexer-config.toml - [Bootstrap from archives](/tools/bitcoin-indexer/archive-bootstrap): Speed up initial sync with pre-indexed data diff --git a/content/docs/tools/bitcoin-indexer/(indexer)/meta.json b/content/docs/en/tools/bitcoin-indexer/(indexer)/meta.json similarity index 100% rename from content/docs/tools/bitcoin-indexer/(indexer)/meta.json rename to content/docs/en/tools/bitcoin-indexer/(indexer)/meta.json diff --git a/content/docs/tools/bitcoin-indexer/(indexer)/node-installation.mdx b/content/docs/en/tools/bitcoin-indexer/(indexer)/node-installation.mdx similarity index 99% rename from content/docs/tools/bitcoin-indexer/(indexer)/node-installation.mdx rename to content/docs/en/tools/bitcoin-indexer/(indexer)/node-installation.mdx index 0e45f42d3..fb0d56828 100644 --- a/content/docs/tools/bitcoin-indexer/(indexer)/node-installation.mdx +++ b/content/docs/en/tools/bitcoin-indexer/(indexer)/node-installation.mdx @@ -206,6 +206,8 @@ $ sudo systemctl status bitcoind Active: [32mactive (running)[0m ``` +## Next steps + :::next-steps - [Configure the indexer](/tools/bitcoin-indexer/configuration): Set up the Bitcoin Indexer to connect to your node - [Bootstrap from archive](/tools/bitcoin-indexer/archive-bootstrap): Skip the wait with pre-synced archives diff --git a/content/docs/tools/bitcoin-indexer/(integrations)/meta.json b/content/docs/en/tools/bitcoin-indexer/(integrations)/meta.json similarity index 100% rename from content/docs/tools/bitcoin-indexer/(integrations)/meta.json rename to content/docs/en/tools/bitcoin-indexer/(integrations)/meta.json diff --git a/content/docs/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx b/content/docs/en/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx similarity index 99% rename from content/docs/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx rename to content/docs/en/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx index 409384a04..10e870566 100644 --- a/content/docs/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx +++ b/content/docs/en/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx @@ -226,6 +226,8 @@ All errors return consistent JSON structure: | `RATE_LIMITED` | 429 | Too many requests | | `INTERNAL_ERROR` | 500 | Server error | +## Next steps + :::next-steps - [Runes API](/tools/bitcoin-indexer/runes-api): Query Runes tokens and balances - [Ordinals API](/tools/bitcoin-indexer/ordinals-api): Access Ordinals data diff --git a/content/docs/tools/bitcoin-indexer/(integrations)/runes-api.mdx b/content/docs/en/tools/bitcoin-indexer/(integrations)/runes-api.mdx similarity index 99% rename from content/docs/tools/bitcoin-indexer/(integrations)/runes-api.mdx rename to content/docs/en/tools/bitcoin-indexer/(integrations)/runes-api.mdx index 3c533fc47..bd6015d0c 100644 --- a/content/docs/tools/bitcoin-indexer/(integrations)/runes-api.mdx +++ b/content/docs/en/tools/bitcoin-indexer/(integrations)/runes-api.mdx @@ -226,6 +226,8 @@ All errors return consistent JSON structure: | `RATE_LIMITED` | 429 | Too many requests | | `INTERNAL_ERROR` | 500 | Server error | +## Next steps + :::next-steps - [Runes API](/tools/bitcoin-indexer/runes-api): Query Runes tokens and balances - [Ordinals API](/tools/bitcoin-indexer/ordinals-api): Access Ordinals data diff --git a/content/docs/tools/bitcoin-indexer/(overview)/meta.json b/content/docs/en/tools/bitcoin-indexer/(overview)/meta.json similarity index 100% rename from content/docs/tools/bitcoin-indexer/(overview)/meta.json rename to content/docs/en/tools/bitcoin-indexer/(overview)/meta.json diff --git a/content/docs/tools/bitcoin-indexer/index.mdx b/content/docs/en/tools/bitcoin-indexer/index.mdx similarity index 99% rename from content/docs/tools/bitcoin-indexer/index.mdx rename to content/docs/en/tools/bitcoin-indexer/index.mdx index ae15f6f4e..3ff71f2dc 100644 --- a/content/docs/tools/bitcoin-indexer/index.mdx +++ b/content/docs/en/tools/bitcoin-indexer/index.mdx @@ -29,6 +29,8 @@ Docker images are also available: $ docker pull hirosystems/bitcoin-indexer:latest ``` +## Next steps + :::next-steps - [Node installation](/tools/bitcoin-indexer/node-installation): Configure and sync a Bitcoin Core node optimized for the Bitcoin Indexer. - [Full sync](/tools/bitcoin-indexer/full-sync): Run the indexer from scratch diff --git a/content/docs/tools/bitcoin-indexer/meta.json b/content/docs/en/tools/bitcoin-indexer/meta.json similarity index 100% rename from content/docs/tools/bitcoin-indexer/meta.json rename to content/docs/en/tools/bitcoin-indexer/meta.json diff --git a/content/docs/tools/chainhook/(chainhook-cli)/cli-reference.mdx b/content/docs/en/tools/chainhook/(chainhook-cli)/cli-reference.mdx similarity index 100% rename from content/docs/tools/chainhook/(chainhook-cli)/cli-reference.mdx rename to content/docs/en/tools/chainhook/(chainhook-cli)/cli-reference.mdx diff --git a/content/docs/tools/chainhook/(chainhook-cli)/event-scanning.mdx b/content/docs/en/tools/chainhook/(chainhook-cli)/event-scanning.mdx similarity index 100% rename from content/docs/tools/chainhook/(chainhook-cli)/event-scanning.mdx rename to content/docs/en/tools/chainhook/(chainhook-cli)/event-scanning.mdx diff --git a/content/docs/tools/chainhook/(chainhook-cli)/meta.json b/content/docs/en/tools/chainhook/(chainhook-cli)/meta.json similarity index 100% rename from content/docs/tools/chainhook/(chainhook-cli)/meta.json rename to content/docs/en/tools/chainhook/(chainhook-cli)/meta.json diff --git a/content/docs/tools/chainhook/(chainhook-cli)/service-mode.mdx b/content/docs/en/tools/chainhook/(chainhook-cli)/service-mode.mdx similarity index 100% rename from content/docs/tools/chainhook/(chainhook-cli)/service-mode.mdx rename to content/docs/en/tools/chainhook/(chainhook-cli)/service-mode.mdx diff --git a/content/docs/tools/chainhook/(event-handling)/custom-indexer.mdx b/content/docs/en/tools/chainhook/(event-handling)/custom-indexer.mdx similarity index 100% rename from content/docs/tools/chainhook/(event-handling)/custom-indexer.mdx rename to content/docs/en/tools/chainhook/(event-handling)/custom-indexer.mdx diff --git a/content/docs/tools/chainhook/(event-handling)/example-indexers.mdx b/content/docs/en/tools/chainhook/(event-handling)/example-indexers.mdx similarity index 100% rename from content/docs/tools/chainhook/(event-handling)/example-indexers.mdx rename to content/docs/en/tools/chainhook/(event-handling)/example-indexers.mdx diff --git a/content/docs/tools/chainhook/(event-handling)/meta.json b/content/docs/en/tools/chainhook/(event-handling)/meta.json similarity index 100% rename from content/docs/tools/chainhook/(event-handling)/meta.json rename to content/docs/en/tools/chainhook/(event-handling)/meta.json diff --git a/content/docs/tools/chainhook/(event-handling)/payload-handling.mdx b/content/docs/en/tools/chainhook/(event-handling)/payload-handling.mdx similarity index 100% rename from content/docs/tools/chainhook/(event-handling)/payload-handling.mdx rename to content/docs/en/tools/chainhook/(event-handling)/payload-handling.mdx diff --git a/content/docs/tools/chainhook/(event-handling)/webhook-setup.mdx b/content/docs/en/tools/chainhook/(event-handling)/webhook-setup.mdx similarity index 100% rename from content/docs/tools/chainhook/(event-handling)/webhook-setup.mdx rename to content/docs/en/tools/chainhook/(event-handling)/webhook-setup.mdx diff --git a/content/docs/tools/chainhook/(integrations)/meta.json b/content/docs/en/tools/chainhook/(integrations)/meta.json similarity index 100% rename from content/docs/tools/chainhook/(integrations)/meta.json rename to content/docs/en/tools/chainhook/(integrations)/meta.json diff --git a/content/docs/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx b/content/docs/en/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx similarity index 98% rename from content/docs/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx rename to content/docs/en/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx index f885b4046..aa20fdb7b 100644 --- a/content/docs/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx +++ b/content/docs/en/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx @@ -3,12 +3,16 @@ title: Register Chainhooks on devnet description: In this guide, you'll learn how to automatically register Chainhooks on devnet using Clarinet. --- +## What you'll learn + :::objectives - Create Chainhook predicate files in your Clarinet project - Register predicates automatically when starting devnet - Monitor Chainhook execution during local development ::: +## Prerequisites + :::prerequisites - Clarinet version 2.1.0 or higher installed - A Clarinet project with smart contracts @@ -111,6 +115,8 @@ description: In this guide, you'll learn how to automatically register Chainhook +## Next steps + :::next-steps - [Bitcoin scopes](/tools/chainhook/reference/bitcoin-scopes): Explore available event types for Bitcoin - [Stacks scopes](/tools/chainhook/reference/stacks-scopes): Explore available event types for Stacks diff --git a/content/docs/tools/chainhook/(overview)/meta.json b/content/docs/en/tools/chainhook/(overview)/meta.json similarity index 100% rename from content/docs/tools/chainhook/(overview)/meta.json rename to content/docs/en/tools/chainhook/(overview)/meta.json diff --git a/content/docs/tools/chainhook/(overview)/quickstart.mdx b/content/docs/en/tools/chainhook/(overview)/quickstart.mdx similarity index 97% rename from content/docs/tools/chainhook/(overview)/quickstart.mdx rename to content/docs/en/tools/chainhook/(overview)/quickstart.mdx index 9e4733253..22002b9d8 100644 --- a/content/docs/tools/chainhook/(overview)/quickstart.mdx +++ b/content/docs/en/tools/chainhook/(overview)/quickstart.mdx @@ -3,11 +3,15 @@ title: Quickstart description: In this guide, you'll create your first Chainhook predicate to monitor STX transfers on the Stacks blockchain. --- +## What you'll learn + :::objectives - How to create a Chainhook predicate for tracking STX transfers - How to scan historical blockchain data using Chainhook ::: +## Prerequisites + :::prerequisites - For installation instructions, visit the [Chainhook installation guide](/tools/chainhook#installation). ::: @@ -88,6 +92,8 @@ description: In this guide, you'll create your first Chainhook predicate to moni +## Next steps + :::next-steps - [Design custom predicates](/tools/chainhook/usage): Learn to create predicates for contract calls, NFT transfers, and more - [Run Chainhook as a service](/tools/chainhook/service-mode): Set up continuous blockchain monitoring with webhook delivery diff --git a/content/docs/tools/chainhook/(overview)/usage.mdx b/content/docs/en/tools/chainhook/(overview)/usage.mdx similarity index 100% rename from content/docs/tools/chainhook/(overview)/usage.mdx rename to content/docs/en/tools/chainhook/(overview)/usage.mdx diff --git a/content/docs/tools/chainhook/index.mdx b/content/docs/en/tools/chainhook/index.mdx similarity index 99% rename from content/docs/tools/chainhook/index.mdx rename to content/docs/en/tools/chainhook/index.mdx index f1de1ba83..186eb4185 100644 --- a/content/docs/tools/chainhook/index.mdx +++ b/content/docs/en/tools/chainhook/index.mdx @@ -43,6 +43,8 @@ $ cd chainhook && cargo chainhook-install +## Next steps + :::next-steps - [Quickstart](/tools/chainhook/quickstart): Get started with Chainhook. - [Register chainhooks locally](/tools/chainhook/register-chainhooks-on-devnet): Register chainhooks on your local blockchain. diff --git a/content/docs/tools/chainhook/meta.json b/content/docs/en/tools/chainhook/meta.json similarity index 100% rename from content/docs/tools/chainhook/meta.json rename to content/docs/en/tools/chainhook/meta.json diff --git a/content/docs/tools/chainhook/reference/bitcoin-scopes.mdx b/content/docs/en/tools/chainhook/reference/bitcoin-scopes.mdx similarity index 100% rename from content/docs/tools/chainhook/reference/bitcoin-scopes.mdx rename to content/docs/en/tools/chainhook/reference/bitcoin-scopes.mdx diff --git a/content/docs/tools/chainhook/reference/stacks-scopes.mdx b/content/docs/en/tools/chainhook/reference/stacks-scopes.mdx similarity index 100% rename from content/docs/tools/chainhook/reference/stacks-scopes.mdx rename to content/docs/en/tools/chainhook/reference/stacks-scopes.mdx diff --git a/content/docs/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx similarity index 100% rename from content/docs/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx diff --git a/content/docs/tools/clarinet/(clarinet-cli)/cli-reference.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/cli-reference.mdx similarity index 100% rename from content/docs/tools/clarinet/(clarinet-cli)/cli-reference.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/cli-reference.mdx diff --git a/content/docs/tools/clarinet/(clarinet-cli)/contract-interaction.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/contract-interaction.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-cli)/contract-interaction.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/contract-interaction.mdx index 543ae7b4b..3fa7ae1c5 100644 --- a/content/docs/tools/clarinet/(clarinet-cli)/contract-interaction.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-cli)/contract-interaction.mdx @@ -178,6 +178,8 @@ For a complete list of available console commands and their usage, view the [CLI +## Next steps + :::next-steps - [Validation and analysis](/tools/clarinet/validation-and-analysis): Learn how to test and validate your Clarinet project. - [Deployment](/tools/clarinet/deployment): Learn how to deploy your Clarinet project. diff --git a/content/docs/tools/clarinet/(clarinet-cli)/deployment.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/deployment.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-cli)/deployment.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/deployment.mdx index 3f6590a13..900e653cd 100644 --- a/content/docs/tools/clarinet/(clarinet-cli)/deployment.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-cli)/deployment.mdx @@ -419,6 +419,8 @@ When deploying, Clarinet prompts to overwrite manual changes. Type `no` to keep +## Next steps + :::next-steps - [Chainhook](/tools/chainhook): Learn how to monitor your contracts with Chainhook. - [Contract monitoring](/tools/contract-monitoring): Learn how to monitor your contracts with Chainhook. diff --git a/content/docs/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx index 112618489..df91b6e50 100644 --- a/content/docs/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx @@ -464,6 +464,8 @@ $ clarinet devnet start --package demo-env.json +## Next steps + :::next-steps - [Contract interaction](/tools/clarinet/contract-interaction): Learn how to interact with your contracts. - [Deployment](/tools/clarinet/deployment): Learn how to deploy your Clarinet project. diff --git a/content/docs/tools/clarinet/(clarinet-cli)/meta.json b/content/docs/en/tools/clarinet/(clarinet-cli)/meta.json similarity index 100% rename from content/docs/tools/clarinet/(clarinet-cli)/meta.json rename to content/docs/en/tools/clarinet/(clarinet-cli)/meta.json diff --git a/content/docs/tools/clarinet/(clarinet-cli)/project-development.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/project-development.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-cli)/project-development.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/project-development.mdx index 968719bfc..6ff022a46 100644 --- a/content/docs/tools/clarinet/(clarinet-cli)/project-development.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-cli)/project-development.mdx @@ -170,6 +170,8 @@ Now you can implement traits from mainnet contracts: ``` +## Next steps + :::next-steps - [Contract interaction](/tools/clarinet/contract-interaction): Learn how to interact with your contracts. - [Testing and validation](/tools/clarinet/validation-and-analysis): Learn how to test and validate your Clarinet project. diff --git a/content/docs/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx b/content/docs/en/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx rename to content/docs/en/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx index 82e72ab1b..6096c2862 100644 --- a/content/docs/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx @@ -233,6 +233,8 @@ $ (contract-call? .vesting claim) (ok {claimed: u2500, remaining: u7500}) ``` +## Next steps + :::next-steps - [Deployment](/tools/clarinet/deployment): Learn how to deploy your Clarinet project. - [Clarinet SDK](/tools/clarinet/sdk-introduction): Learn how to use the Clarinet SDK. diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx similarity index 100% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx index 1b248afa0..19696b9e5 100644 --- a/content/docs/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx @@ -7,6 +7,8 @@ description: Integration testing is a crucial step in smart contract development import { ArrowRight, Check } from 'lucide-react'; +## What you'll learn + :::objectives - Set up integration tests for multi-step workflows - Testing contract interactions and dependencies @@ -210,6 +212,8 @@ $ npm run test | Timing issues | Use `simnet.mineEmptyBlocks()` to advance block height | | Complex assertions | Break down into smaller, focused tests | +## Next steps + :::next-steps - [SDK reference](/tools/clarinet/sdk-reference): Learn more about the Clarinet JS SDK. - [Stacks.js integration](/tools/clarinet/stacks-js-integration): Learn how to integrate Stacks.js with your Clarinet project. diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx index b3b1ddc60..ed425d3c7 100644 --- a/content/docs/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx @@ -122,6 +122,8 @@ Quickly experiment with MXS without setting up a project: $ contract-call? 'SP000000000000000000002Q6VF78.pox-4 current-pox-reward-cycle ``` +## Next steps + :::next-steps - [Pyth oracle integration](/tools/clarinet/pyth-oracle-integration): Learn how to integrate the Pyth oracle with your Clarinet project. - [sBTC integration](/tools/clarinet/sbtc-integration): Learn how to integrate the sBTC with your Clarinet project. diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/meta.json b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/meta.json similarity index 100% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/meta.json rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/meta.json diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx index c876a6d1e..e0a8f16da 100644 --- a/content/docs/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx @@ -283,6 +283,8 @@ export default defineConfig({ }); ``` +## Next steps + :::next-steps - [Unit testing](/tools/clarinet/unit-testing): Learn how to test your contract with unit testing. - [SDK reference](/tools/clarinet/sdk-reference): Learn more about the Clarinet JS SDK. diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx similarity index 100% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx diff --git a/content/docs/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx similarity index 99% rename from content/docs/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx rename to content/docs/en/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx index 12896f5e6..18f9bda26 100644 --- a/content/docs/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx +++ b/content/docs/en/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx @@ -8,6 +8,8 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/ import { ArrowRight, Check } from 'lucide-react'; +## What you'll learn + :::objectives - Set up a Clarinet project for unit testing - Write unit tests for public and read-only functions @@ -205,6 +207,8 @@ Test Files 1 passed (1) +## Next steps + :::next-steps - [Integration testing](/tools/clarinet/integration-testing): Learn how to test your contract with integration testing. - [Mainnet execution simulation](/tools/clarinet/mainnet-execution-simulation): Learn how to test your contract with mainnet state. diff --git a/content/docs/tools/clarinet/(integrations)/chainhook-integration.mdx b/content/docs/en/tools/clarinet/(integrations)/chainhook-integration.mdx similarity index 98% rename from content/docs/tools/clarinet/(integrations)/chainhook-integration.mdx rename to content/docs/en/tools/clarinet/(integrations)/chainhook-integration.mdx index eac1eaa72..617a4cff2 100644 --- a/content/docs/tools/clarinet/(integrations)/chainhook-integration.mdx +++ b/content/docs/en/tools/clarinet/(integrations)/chainhook-integration.mdx @@ -4,6 +4,8 @@ sidebarTitle: Chainhook integration description: In this guide, you'll learn how to register Chainhooks on devnet to monitor and react to smart contract events during local development. --- +## What you'll learn + :::objectives - Create Chainhook predicate files for event monitoring - Register Chainhooks with Clarinet devnet @@ -11,6 +13,8 @@ description: In this guide, you'll learn how to register Chainhooks on devnet to - Set up webhooks for real-time notifications ::: +## Prerequisites + :::prerequisites - Clarinet version 2.1.0 or higher required. Check with `clarinet --version`. - Node.js version 16 or higher required. Check with `node --version`. diff --git a/content/docs/tools/clarinet/(integrations)/meta.json b/content/docs/en/tools/clarinet/(integrations)/meta.json similarity index 100% rename from content/docs/tools/clarinet/(integrations)/meta.json rename to content/docs/en/tools/clarinet/(integrations)/meta.json diff --git a/content/docs/tools/clarinet/(integrations)/pyth-oracle-integration.mdx b/content/docs/en/tools/clarinet/(integrations)/pyth-oracle-integration.mdx similarity index 99% rename from content/docs/tools/clarinet/(integrations)/pyth-oracle-integration.mdx rename to content/docs/en/tools/clarinet/(integrations)/pyth-oracle-integration.mdx index 36fb1344f..e6082306d 100644 --- a/content/docs/tools/clarinet/(integrations)/pyth-oracle-integration.mdx +++ b/content/docs/en/tools/clarinet/(integrations)/pyth-oracle-integration.mdx @@ -4,6 +4,8 @@ sidebarTitle: Pyth oracle integration description: Learn how to test smart contracts that depend on Pyth oracle price feeds using Clarinet. --- +## What you'll learn + :::objectives - Set up mainnet contract dependencies - Use mainnet transaction execution (MXS) for oracle testing @@ -11,6 +13,8 @@ description: Learn how to test smart contracts that depend on Pyth oracle price - Write integration tests with real oracle data ::: +## Prerequisites + :::prerequisites - Clarinet version 2.1.0 or higher with MXS support diff --git a/content/docs/tools/clarinet/(integrations)/sbtc-integration.mdx b/content/docs/en/tools/clarinet/(integrations)/sbtc-integration.mdx similarity index 99% rename from content/docs/tools/clarinet/(integrations)/sbtc-integration.mdx rename to content/docs/en/tools/clarinet/(integrations)/sbtc-integration.mdx index 341ae66d8..8c87bead1 100644 --- a/content/docs/tools/clarinet/(integrations)/sbtc-integration.mdx +++ b/content/docs/en/tools/clarinet/(integrations)/sbtc-integration.mdx @@ -4,6 +4,8 @@ sidebarTitle: sBTC integration description: In this guide, you'll learn how to interact with the mainnet sBTC contract in your Clarinet project. --- +## What you'll learn + :::objectives - Add sBTC smart contracts to your Clarinet project - Test contracts with automatic sBTC funding in devnet @@ -11,6 +13,8 @@ description: In this guide, you'll learn how to interact with the mainnet sBTC c - Deploy sBTC contracts to testnet and mainnet ::: +## Prerequisites + :::prerequisites - Clarinet 2.15.0 or later required for automatic sBTC integration. ::: diff --git a/content/docs/tools/clarinet/(integrations)/stacks-js-integration.mdx b/content/docs/en/tools/clarinet/(integrations)/stacks-js-integration.mdx similarity index 99% rename from content/docs/tools/clarinet/(integrations)/stacks-js-integration.mdx rename to content/docs/en/tools/clarinet/(integrations)/stacks-js-integration.mdx index b1eaef908..54cb6e514 100644 --- a/content/docs/tools/clarinet/(integrations)/stacks-js-integration.mdx +++ b/content/docs/en/tools/clarinet/(integrations)/stacks-js-integration.mdx @@ -4,6 +4,8 @@ sidebarTitle: Stacks.js integration description: In this guide, you'll learn how to interacts with your smart contracts on devnet using the Stacks.js libraries. --- +## What you'll learn + :::objectives - Configure Stacks.js for local devnet connection - Make STX transfers between devnet accounts diff --git a/content/docs/tools/clarinet/(overview)/faq.mdx b/content/docs/en/tools/clarinet/(overview)/faq.mdx similarity index 100% rename from content/docs/tools/clarinet/(overview)/faq.mdx rename to content/docs/en/tools/clarinet/(overview)/faq.mdx diff --git a/content/docs/tools/clarinet/(overview)/meta.json b/content/docs/en/tools/clarinet/(overview)/meta.json similarity index 100% rename from content/docs/tools/clarinet/(overview)/meta.json rename to content/docs/en/tools/clarinet/(overview)/meta.json diff --git a/content/docs/tools/clarinet/(overview)/project-structure.mdx b/content/docs/en/tools/clarinet/(overview)/project-structure.mdx similarity index 99% rename from content/docs/tools/clarinet/(overview)/project-structure.mdx rename to content/docs/en/tools/clarinet/(overview)/project-structure.mdx index efd28b42e..9544eacec 100644 --- a/content/docs/tools/clarinet/(overview)/project-structure.mdx +++ b/content/docs/en/tools/clarinet/(overview)/project-structure.mdx @@ -268,6 +268,8 @@ Never commit mainnet private keys or mnemonics. Use environment variables for pr +## Next steps + :::next-steps - [Writing Clarity contracts](/tools/clarinet/project-development): Create and manage Clarity contracts. - [Testing and validation](/tools/clarinet/contract-interaction): Interact with Clarity contracts in your project. diff --git a/content/docs/tools/clarinet/(overview)/quickstart.mdx b/content/docs/en/tools/clarinet/(overview)/quickstart.mdx similarity index 99% rename from content/docs/tools/clarinet/(overview)/quickstart.mdx rename to content/docs/en/tools/clarinet/(overview)/quickstart.mdx index a6a28a06c..e9ba6a567 100644 --- a/content/docs/tools/clarinet/(overview)/quickstart.mdx +++ b/content/docs/en/tools/clarinet/(overview)/quickstart.mdx @@ -3,12 +3,16 @@ title: Quickstart description: In this guide, you'll build a simple counter smart contract and interact with it in a local environment. --- +## What you'll learn + :::objectives - Create a Clarity smart contract project - Write Clarity code with maps and public functions - Test and validate your contracts using Clarinet's console ::: +## Prerequisites + :::prerequisites - Clarinet installed on your machine. Follow the [installation guide](/tools/clarinet#installation) if needed. - A code editor like VS Code for editing Clarity files. @@ -146,6 +150,8 @@ description: In this guide, you'll build a simple counter smart contract and int +## Next steps + :::next-steps - [Project structure](/tools/clarinet/project-structure): Learn about the project structure and how to manage your contracts. - [Local blockchain development](/tools/clarinet/local-blockchain-development): Spin up a local blockchain to test your contracts. diff --git a/content/docs/tools/clarinet/(vscode-extension)/meta.json b/content/docs/en/tools/clarinet/(vscode-extension)/meta.json similarity index 100% rename from content/docs/tools/clarinet/(vscode-extension)/meta.json rename to content/docs/en/tools/clarinet/(vscode-extension)/meta.json diff --git a/content/docs/tools/clarinet/(vscode-extension)/vscode-extension.mdx b/content/docs/en/tools/clarinet/(vscode-extension)/vscode-extension.mdx similarity index 100% rename from content/docs/tools/clarinet/(vscode-extension)/vscode-extension.mdx rename to content/docs/en/tools/clarinet/(vscode-extension)/vscode-extension.mdx diff --git a/content/docs/tools/clarinet/index.mdx b/content/docs/en/tools/clarinet/index.mdx similarity index 99% rename from content/docs/tools/clarinet/index.mdx rename to content/docs/en/tools/clarinet/index.mdx index 67d93a8f8..1bb02ff75 100644 --- a/content/docs/tools/clarinet/index.mdx +++ b/content/docs/en/tools/clarinet/index.mdx @@ -44,6 +44,8 @@ To explore Clarinet features with AI, copy and paste [llms.txt](/tools/clarinet/ ``` +## Next steps + :::next-steps - [Quickstart](/tools/clarinet/quickstart): Get started with Clarinet. - [Create a project](/tools/clarinet/project-development): Create a new Clarinet project. diff --git a/content/docs/tools/clarinet/meta.json b/content/docs/en/tools/clarinet/meta.json similarity index 100% rename from content/docs/tools/clarinet/meta.json rename to content/docs/en/tools/clarinet/meta.json diff --git a/content/docs/tools/contract-monitoring/create-alert.mdx b/content/docs/en/tools/contract-monitoring/create-alert.mdx similarity index 98% rename from content/docs/tools/contract-monitoring/create-alert.mdx rename to content/docs/en/tools/contract-monitoring/create-alert.mdx index 193f87ea5..8d8e719e4 100644 --- a/content/docs/tools/contract-monitoring/create-alert.mdx +++ b/content/docs/en/tools/contract-monitoring/create-alert.mdx @@ -3,12 +3,16 @@ title: Create an alert description: Learn how to create an alert to monitor function calls for a contract. --- +## What you'll learn + :::objectives - Set up alerts for contract functions - Configure email and webhook notifications - Monitor contract usage patterns ::: +## Prerequisites + :::prerequisites - Contracts deployed to Stacks mainnet (or use any public contract) - A Hiro Platform account - [Sign up free](https://platform.hiro.so) @@ -166,6 +170,8 @@ interface Principal { The `tx_status` will always return "pending" for monitor alerts. Notifications are sent when transactions hit the mempool, not when they're confirmed on the blockchain. ::: +## Next steps + :::next-steps - [Hiro Platform](https://platform.hiro.so): Create and manage new webhooks in the Platform. - [Chainhook](/tools/chainhook): Learn about advanced event monitoring with Chainhook diff --git a/content/docs/tools/contract-monitoring/index.mdx b/content/docs/en/tools/contract-monitoring/index.mdx similarity index 98% rename from content/docs/tools/contract-monitoring/index.mdx rename to content/docs/en/tools/contract-monitoring/index.mdx index 9c3dd747e..10d06ea79 100644 --- a/content/docs/tools/contract-monitoring/index.mdx +++ b/content/docs/en/tools/contract-monitoring/index.mdx @@ -14,6 +14,8 @@ To explore Contract monitoring features with AI, copy and paste [llms.txt](/tool - **Real-time notifications** - Target specific events and receive webhooks within seconds - **No-code setup** - Configure monitors through the Platform UI without writing code +## Next steps + :::next-steps - [Create an alert](/tools/contract-monitoring/create-alert): Set up your first alert for function calls. - [Chainhooks](/tools/chainhook): Learn more about Chainhooks and how they differ from contract monitoring. diff --git a/content/docs/tools/contract-monitoring/meta.json b/content/docs/en/tools/contract-monitoring/meta.json similarity index 100% rename from content/docs/tools/contract-monitoring/meta.json rename to content/docs/en/tools/contract-monitoring/meta.json diff --git a/content/docs/es/apis/ordinals-api/index.mdx b/content/docs/es/apis/ordinals-api/index.mdx new file mode 100644 index 000000000..0b0a932aa --- /dev/null +++ b/content/docs/es/apis/ordinals-api/index.mdx @@ -0,0 +1,35 @@ +--- +title: API de Ordinales +sidebarTitle: Visión general +description: Datos rápidos y confiables para ordinales de Bitcoin y tokens BRC-20 a través de REST. +llm: false +--- +## Visión general + +La API de Ordinals proporciona datos completos de inscripciones para ordinales de Bitcoin a través de una interfaz REST de alto rendimiento. Construida con respuestas en caché e indexación optimizada, ofrece metadatos de inscripciones, actividad de trading, información de tokens BRC-20 y datos a nivel de satoshi con latencia mínima. + +## Características principales + +* **Datos completos de inscripción** - Metadatos, contenido y propiedad de todos los ordinales +* **Soporte para tokens BRC-20** - Metadatos completos de tokens, saldos e información del titular +* **Seguimiento a nivel Satoshi** - Datos de inscripción vinculados a satoshis específicos + +## Uso + +```terminal +$ curl -L 'https://api.hiro.so/ordinals/v1/inscriptions' -H 'Accept: application/json' +``` + +Para más ejemplos de uso, haga clic [aquí](/apis/ordinals-api/usage). + +:::callout +Todas las respuestas de la API de Ordinals incluyen [límites de tasa de encabezados](/resources/guides/response-headers) que te ayudan a monitorear el uso de tu API con información de cuota específica de Bitcoin. +::: + +:::callout +type: help + +### ¿Necesitas ayuda para construir con la API de Ordinals? + +Contáctanos en el #ordinales canal activado [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horas de oficina semanales](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/apis/ordinals-api/meta.json b/content/docs/es/apis/ordinals-api/meta.json new file mode 100644 index 000000000..ec20236a6 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Ordinals API", + "root": true, + "pages": ["---Ordinals API---", "index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx new file mode 100644 index 000000000..032c10f6a --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener actividad BRC-20 +sidebarTitle: Actividad BRC-20 +description: Recupera la actividad BRC-20 filtrada por ticker, dirección, operación o altura de bloque. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx new file mode 100644 index 000000000..8fd65852d --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener saldos BRC-20 +sidebarTitle: Saldos BRC-20 +description: Recupera los saldos de tokens BRC-20 para una dirección de Bitcoin. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx new file mode 100644 index 000000000..30ac6cd62 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener detalles del token BRC-20 +sidebarTitle: Detalles del token BRC-20 +description: Recupera información de un token BRC-20, incluyendo suministro y titulares. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx new file mode 100644 index 000000000..13d371cb8 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener titulares de tokens BRC-20 +sidebarTitle: Titulares de tokens BRC-20 +description: Recupera una lista de titulares y sus saldos para un token BRC-20 específico. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx new file mode 100644 index 000000000..a6780c475 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx @@ -0,0 +1,7 @@ +--- +title: Obtén tokens BRC-20 +sidebarTitle: Tokens BRC-20 +description: Recupera información para tokens BRC-20. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/brc20/index.mdx b/content/docs/es/apis/ordinals-api/reference/brc20/index.mdx new file mode 100644 index 000000000..5a38b58c5 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/brc20/index.mdx @@ -0,0 +1,6 @@ +--- +title: BRC-20 +index: true +full: true +description: Recupera información sobre tokens BRC-20. +--- diff --git a/content/docs/es/apis/ordinals-api/reference/info/index.mdx b/content/docs/es/apis/ordinals-api/reference/info/index.mdx new file mode 100644 index 000000000..cffa47cb7 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/info/index.mdx @@ -0,0 +1,6 @@ +--- +title: Estado +index: true +full: true +description: Recupera información sobre el estado de la API de Ordinals, incluyendo la versión del servidor. +--- diff --git a/content/docs/es/apis/ordinals-api/reference/info/status.mdx b/content/docs/es/apis/ordinals-api/reference/info/status.mdx new file mode 100644 index 000000000..bb179d3af --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/info/status.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener estado de la API +sidebarTitle: Estado de la API +description: Recupera el estado de funcionamiento de la API de Ordinals. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx new file mode 100644 index 000000000..736048147 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener contenido de inscripción +sidebarTitle: Contenido de la inscripción +description: Recupera el contenido de una sola inscripción. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx new file mode 100644 index 000000000..2757ee19c --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transferencias de inscripciones +sidebarTitle: Transferencias de inscripciones +description: Recupera todas las transferencias de una única inscripción. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription.mdx b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription.mdx new file mode 100644 index 000000000..4cf8c8d82 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscription.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener inscripción +sidebarTitle: Inscripción +description: Recupera una única inscripción. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx new file mode 100644 index 000000000..3d8187b42 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener inscripciones +sidebarTitle: Inscripciones +description: Recupera una lista de inscripciones con opciones para filtrar y ordenar los resultados. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx new file mode 100644 index 000000000..72a230999 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transferencias por bloque +sidebarTitle: Transferencias por bloque +description: Obtiene una lista de transferencias de inscripciones que ocurrieron en un bloque específico de Bitcoin. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/inscriptions/index.mdx b/content/docs/es/apis/ordinals-api/reference/inscriptions/index.mdx new file mode 100644 index 000000000..bdb92d14f --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/inscriptions/index.mdx @@ -0,0 +1,6 @@ +--- +title: Inscripciones +index: true +full: true +description: Recupera información sobre inscripciones de Ordinals. +--- diff --git a/content/docs/es/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx b/content/docs/es/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx new file mode 100644 index 000000000..97bfbea88 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtén inscripciones satoshi +sidebarTitle: Inscripciones Satoshi +description: Recupera todas las inscripciones asociadas a un solo satoshi. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/satoshis/get-satoshi.mdx b/content/docs/es/apis/ordinals-api/reference/satoshis/get-satoshi.mdx new file mode 100644 index 000000000..5a05aba03 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/satoshis/get-satoshi.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener ordinal de satoshi +sidebarTitle: Ordinal de Satoshi +description: Recupera información ordinal para un solo satoshi. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/satoshis/index.mdx b/content/docs/es/apis/ordinals-api/reference/satoshis/index.mdx new file mode 100644 index 000000000..dfcdcb99f --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/satoshis/index.mdx @@ -0,0 +1,6 @@ +--- +title: Satoshis +index: true +full: true +description: Recupera información ordinal para satoshis. +--- diff --git a/content/docs/es/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx b/content/docs/es/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx new file mode 100644 index 000000000..446d3aca0 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el recuento de inscripciones por bloque +sidebarTitle: Recuento de inscripciones por bloque +description: Recupera estadísticas sobre el número de inscripciones reveladas por bloque. +full: true +--- + diff --git a/content/docs/es/apis/ordinals-api/reference/statistics/index.mdx b/content/docs/es/apis/ordinals-api/reference/statistics/index.mdx new file mode 100644 index 000000000..5044bef3d --- /dev/null +++ b/content/docs/es/apis/ordinals-api/reference/statistics/index.mdx @@ -0,0 +1,6 @@ +--- +title: Estadísticas +index: true +full: true +description: Recupera estadísticas sobre el número de inscripciones por bloque. +--- diff --git a/content/docs/es/apis/ordinals-api/usage.mdx b/content/docs/es/apis/ordinals-api/usage.mdx new file mode 100644 index 000000000..05ea81c87 --- /dev/null +++ b/content/docs/es/apis/ordinals-api/usage.mdx @@ -0,0 +1,47 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API de Ordinals. +--- +## Uso + +La API de Ordinals está construida sobre principios REST, imponiendo HTTPS para todas las solicitudes para garantizar la seguridad, integridad y privacidad de los datos. + +### URL base + +```console -c +https://api.hiro.so +``` + +### Realizando solicitudes + +Para hacer una solicitud a la API de Ordinals, puedes pegar el comando curl a continuación en tu terminal. + +```terminal +$ curl -L 'https://api.hiro.so/ordinals/v1/inscriptions' \ + -H 'Accept: application/json' +``` + +### Autenticación + +Si estás utilizando una api-key, reemplaza `$HIRO_API_KEY` con tu clave API secreta. + +```terminal +$ curl -L 'https://api.hiro.so/ordinals/v1/inscriptions' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Códigos de respuesta + +La API de Ordinals utiliza códigos de respuesta HTTP estándar para indicar el éxito o fracaso de la solicitud. + +| Código | Descripción | +|--------|-------------| +| `200` | Solicitud exitosa | +| `400` | Verifique que los parámetros fueran correctos | +| `401` | Clave de API faltante | +| `403` | Clave API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de tasa excedido | +| `5xx` | Errores del servidor | diff --git a/content/docs/es/apis/platform-api/index.mdx b/content/docs/es/apis/platform-api/index.mdx new file mode 100644 index 000000000..ab42b070a --- /dev/null +++ b/content/docs/es/apis/platform-api/index.mdx @@ -0,0 +1,31 @@ +--- +title: API de la plataforma +sidebarTitle: Visión general +description: Acceso programático a devnet y gestión de chainhook a través de REST. +llm: false +--- +## Visión general + +La API de la Plataforma proporciona control programático sobre los servicios de la Plataforma Hiro a través de una interfaz REST. Diseñada para automatización e integración de CI/CD, te permite crear y gestionar chainhooks, controlar devnets alojados en la plataforma e interactuar con servicios blockchain directamente desde el código de tu aplicación. + +## Características principales + +* **Automatización de Chainhook** - Crear, actualizar y eliminar chainhooks de forma programática +* **Control de devnet** - Iniciar, detener e interactuar con redes de desarrollo alojadas en la plataforma +* **Integración de CI/CD** - Automatice los flujos de trabajo de blockchain en su proceso de desarrollo + +## Uso + +```terminal +$ curl -L 'https://api.platform.hiro.so/v1/ext/{apiKey}/chainhooks' -H 'Accept: application/json' +``` + +Para más ejemplos de uso, haga clic [aquí](/apis/platform-api/usage). + +:::callout +type: help + +### ¿Necesitas ayuda para construir con la API de la Plataforma? + +Contáctanos en el #plataforma-hiro canal activado [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horas de oficina semanales](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/apis/platform-api/meta.json b/content/docs/es/apis/platform-api/meta.json new file mode 100644 index 000000000..cb535833d --- /dev/null +++ b/content/docs/es/apis/platform-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Platform API", + "root": true, + "pages": ["---Platform API---", "index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/create.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/create.mdx new file mode 100644 index 000000000..69de47f89 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/create.mdx @@ -0,0 +1,7 @@ +--- +title: Crear un chainhook +sidebarTitle: Crear +description: Crea un chainhook a través de la Plataforma Hiro. +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/delete.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/delete.mdx new file mode 100644 index 000000000..bcc02c275 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/delete.mdx @@ -0,0 +1,7 @@ +--- +title: Eliminar un chainhook +sidebarTitle: Eliminar +description: Eliminar un chainhook a través de la Plataforma Hiro. +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/get.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/get.mdx new file mode 100644 index 000000000..0fc987ba2 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/get.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener un chainhook específico +sidebarTitle: Obtener +description: Obtén un chainhook específico a través de la Plataforma Hiro. +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/index.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/index.mdx new file mode 100644 index 000000000..89a897bb2 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/index.mdx @@ -0,0 +1,6 @@ +--- +title: Chainhooks +index: true +full: true +description: Obtiene información sobre la API de Platform Chainhooks. +--- diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/list.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/list.mdx new file mode 100644 index 000000000..aa0652373 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/list.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener todos los chainhooks +sidebarTitle: Lista +description: Obtén todos tus chainhooks a través de la Plataforma Hiro. +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/status.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/status.mdx new file mode 100644 index 000000000..aaa9accea --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/status.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el estado de un chainhook +sidebarTitle: Estado +description: Recupera el estado de un chainhook específico a través de la Plataforma Hiro. +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/chainhooks/update.mdx b/content/docs/es/apis/platform-api/reference/chainhooks/update.mdx new file mode 100644 index 000000000..23d8d0e7c --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/chainhooks/update.mdx @@ -0,0 +1,7 @@ +--- +title: Actualizar un chainhook +sidebarTitle: Actualizar +description: Actualiza un chainhook a través de la Plataforma Hiro. +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/devnet/bitcoin-node.mdx b/content/docs/es/apis/platform-api/reference/devnet/bitcoin-node.mdx new file mode 100644 index 000000000..a24be408d --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/devnet/bitcoin-node.mdx @@ -0,0 +1,7 @@ +--- +title: Nodo de Bitcoin +sidebarTitle: Nodo de Bitcoin +description: Proxy para el nodo de Bitcoin en una red de desarrollo (devnet). +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/devnet/index.mdx b/content/docs/es/apis/platform-api/reference/devnet/index.mdx new file mode 100644 index 000000000..41b2219d7 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/devnet/index.mdx @@ -0,0 +1,6 @@ +--- +title: Devnet +index: true +full: true +description: Recupera información sobre los servicios de Platform Devnet como Stacks Blockchain API, nodo Bitcoin y más. +--- diff --git a/content/docs/es/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx b/content/docs/es/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx new file mode 100644 index 000000000..d54f151d5 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx @@ -0,0 +1,7 @@ +--- +title: API de Blockchain de Stacks +sidebarTitle: API de Blockchain de Stacks +description: Proxy para la API de la Blockchain de Stacks en una red de desarrollo (devnet). +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/devnet/start.mdx b/content/docs/es/apis/platform-api/reference/devnet/start.mdx new file mode 100644 index 000000000..a13f0d1cc --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/devnet/start.mdx @@ -0,0 +1,7 @@ +--- +title: Iniciar devnet +sidebarTitle: Iniciar devnet +description: Iniciar una red de desarrollo (devnet). +full: true +--- + diff --git a/content/docs/es/apis/platform-api/reference/devnet/stop.mdx b/content/docs/es/apis/platform-api/reference/devnet/stop.mdx new file mode 100644 index 000000000..3a14b55a9 --- /dev/null +++ b/content/docs/es/apis/platform-api/reference/devnet/stop.mdx @@ -0,0 +1,7 @@ +--- +title: Detener devnet +sidebarTitle: Detener devnet +description: Detener una red de desarrollo (devnet). +full: true +--- + diff --git a/content/docs/es/apis/platform-api/usage.mdx b/content/docs/es/apis/platform-api/usage.mdx new file mode 100644 index 000000000..cf7d8092d --- /dev/null +++ b/content/docs/es/apis/platform-api/usage.mdx @@ -0,0 +1,47 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API de la Plataforma. +--- +## Uso + +La API de la Plataforma está construida sobre principios REST, imponiendo HTTPS para todas las solicitudes para garantizar la seguridad, integridad y privacidad de los datos. + +### URL base + +```console -c +https://api.platform.hiro.so +``` + +### Realizando solicitudes + +Para hacer una solicitud a la API de la Plataforma, puedes pegar el comando curl a continuación en tu terminal. + +```terminal +$ curl -L 'https://api.platform.hiro.so/v1/ext/{apiKey}/chainhooks' \ + -H 'Accept: application/json' +``` + +### Autenticación + +La API de la plataforma utiliza autenticación basada en rutas. Reemplace `{apiKey}` en la ruta URL con tu clave de API de Platform. + +```terminal +$ curl -L 'https://api.platform.hiro.so/v1/ext/{apiKey}/chainhooks' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' +``` + +## Códigos de respuesta + +La API de la Plataforma utiliza códigos de respuesta HTTP estándar para indicar el éxito o fracaso de la solicitud. + +| Código | Descripción | +|--------|-------------| +| `200` | Solicitud exitosa | +| `400` | Verifique que los parámetros fueran correctos | +| `401` | Clave de API faltante | +| `403` | Clave API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de tasa excedido | +| `5xx` | Errores del servidor | diff --git a/content/docs/es/apis/runes-api/index.mdx b/content/docs/es/apis/runes-api/index.mdx new file mode 100644 index 000000000..c0370c7e3 --- /dev/null +++ b/content/docs/es/apis/runes-api/index.mdx @@ -0,0 +1,35 @@ +--- +title: API de Runas +sidebarTitle: Visión general +description: Datos rápidos y confiables para Bitcoin Runes a través de REST. +llm: false +--- +## Visión general + +La API de Runes proporciona datos completos para Bitcoin Runes a través de una interfaz REST de alto rendimiento. Construida con respuestas en caché e indexación optimizada, ofrece metadatos de runas, actividad comercial, información de titulares y detalles de grabado con una latencia mínima. + +## Características principales + +* **Cobertura completa de runas** - Metadatos para todos los grabados y actividad rúnica +* **Seguimiento de titulares** - Saldos y datos de propiedad para los poseedores de rune +* **Monitoreo de actividad** - Seguimiento en tiempo real de transferencias y operaciones de runas + +## Uso + +```terminal +$ curl -L 'https://api.hiro.so/runes/v1/etchings' -H 'Accept: application/json' +``` + +Para más ejemplos de uso, haga clic [aquí](/apis/runes-api/usage). + +:::callout +Todas las respuestas de la API de Runes incluyen [límites de tasa de encabezados](/resources/guides/response-headers) que te ayudan a monitorear el uso de tu API con información de cuota específica de Bitcoin. +::: + +:::callout +type: help + +### ¿Necesitas ayuda para construir con la API de Runes? + +Contáctanos en el #ordinales canal encendido [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horas de oficina semanales](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/apis/runes-api/meta.json b/content/docs/es/apis/runes-api/meta.json new file mode 100644 index 000000000..ea8e3a6eb --- /dev/null +++ b/content/docs/es/apis/runes-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Runes API", + "root": true, + "pages": ["---Runes API---", "index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/es/apis/runes-api/reference/activities/activity.mdx b/content/docs/es/apis/runes-api/reference/activities/activity.mdx new file mode 100644 index 000000000..73a60609a --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/activities/activity.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener toda la actividad +sidebarTitle: Toda la actividad +description: Recupera toda la actividad de una Runa. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/activities/for-address.mdx b/content/docs/es/apis/runes-api/reference/activities/for-address.mdx new file mode 100644 index 000000000..764c01a82 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/activities/for-address.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener actividad para una dirección +sidebarTitle: Actividad de una dirección +description: Recupera toda la actividad de Rune para una dirección de Bitcoin. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/activities/for-block.mdx b/content/docs/es/apis/runes-api/reference/activities/for-block.mdx new file mode 100644 index 000000000..d9f5901b1 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/activities/for-block.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener actividad para un bloque +sidebarTitle: Actividad para un bloque +description: Obtiene una lista paginada de actividad de runas para un bloque. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/activities/for-transaction.mdx b/content/docs/es/apis/runes-api/reference/activities/for-transaction.mdx new file mode 100644 index 000000000..84c98ca08 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/activities/for-transaction.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener actividad para una transacción +sidebarTitle: Actividad de una transacción +description: Obtiene una lista paginada de actividad de runas para una transacción. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/activities/index.mdx b/content/docs/es/apis/runes-api/reference/activities/index.mdx new file mode 100644 index 000000000..9019b8b64 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/activities/index.mdx @@ -0,0 +1,6 @@ +--- +title: Actividades +index: true +full: true +description: Recupera información sobre actividades de Runa. +--- diff --git a/content/docs/es/apis/runes-api/reference/balances/address.mdx b/content/docs/es/apis/runes-api/reference/balances/address.mdx new file mode 100644 index 000000000..002c080d8 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/balances/address.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener saldos de direcciones +sidebarTitle: Saldos de direcciones +description: Recupera una lista paginada de saldos de direcciones. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/balances/holder-balance.mdx b/content/docs/es/apis/runes-api/reference/balances/holder-balance.mdx new file mode 100644 index 000000000..b06b360e9 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/balances/holder-balance.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener saldo del titular +sidebarTitle: Saldo del titular +description: Recupera el saldo del titular para una Runa específica. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/balances/holders.mdx b/content/docs/es/apis/runes-api/reference/balances/holders.mdx new file mode 100644 index 000000000..573182af5 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/balances/holders.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener portadores de runas +sidebarTitle: Portadores de runas +description: Recupera una lista paginada de poseedores de una Runa. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/balances/index.mdx b/content/docs/es/apis/runes-api/reference/balances/index.mdx new file mode 100644 index 000000000..f1b5542f4 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/balances/index.mdx @@ -0,0 +1,6 @@ +--- +title: Saldos +index: true +full: true +description: Recupera información sobre los saldos de Rune. +--- diff --git a/content/docs/es/apis/runes-api/reference/etchings/get-etching.mdx b/content/docs/es/apis/runes-api/reference/etchings/get-etching.mdx new file mode 100644 index 000000000..08c8ac562 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/etchings/get-etching.mdx @@ -0,0 +1,7 @@ +--- +title: Ponte a grabar +sidebarTitle: Grabado +description: Recupera información para un grabado de Runa. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/etchings/get-etchings.mdx b/content/docs/es/apis/runes-api/reference/etchings/get-etchings.mdx new file mode 100644 index 000000000..b9c7d2635 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/etchings/get-etchings.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener grabados +sidebarTitle: Grabados +description: Recupera una lista paginada de grabados rúnicos. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/reference/etchings/index.mdx b/content/docs/es/apis/runes-api/reference/etchings/index.mdx new file mode 100644 index 000000000..399ddfd38 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/etchings/index.mdx @@ -0,0 +1,6 @@ +--- +title: Grabados +index: true +full: true +description: Recupera información sobre grabados rúnicos. +--- diff --git a/content/docs/es/apis/runes-api/reference/info/index.mdx b/content/docs/es/apis/runes-api/reference/info/index.mdx new file mode 100644 index 000000000..486da5675 --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/info/index.mdx @@ -0,0 +1,6 @@ +--- +title: Estado +index: true +full: true +description: Recupera información sobre el estado de la API de Rune. +--- diff --git a/content/docs/es/apis/runes-api/reference/info/status.mdx b/content/docs/es/apis/runes-api/reference/info/status.mdx new file mode 100644 index 000000000..ac9e8221e --- /dev/null +++ b/content/docs/es/apis/runes-api/reference/info/status.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener Estado de la API +sidebarTitle: Estado de la API +description: Recupera el estado de la API. +full: true +--- + diff --git a/content/docs/es/apis/runes-api/usage.mdx b/content/docs/es/apis/runes-api/usage.mdx new file mode 100644 index 000000000..74df85e2e --- /dev/null +++ b/content/docs/es/apis/runes-api/usage.mdx @@ -0,0 +1,47 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API de Runes. +--- +## Uso + +La API de Runes está construida sobre principios REST, imponiendo HTTPS para todas las solicitudes para garantizar la seguridad, integridad y privacidad de los datos. + +### URL base + +```console -c +https://api.hiro.so +``` + +### Realizando solicitudes + +Para hacer una solicitud a la API de Runes, puedes pegar el comando curl a continuación en tu terminal. + +```terminal +$ curl -L 'https://api.hiro.so/runes/v1/etchings' \ + -H 'Accept: application/json' +``` + +### Autenticación + +Si estás utilizando una api-key, reemplaza `$HIRO_API_KEY` con tu clave API secreta. + +```terminal +$ curl -L 'https://api.hiro.so/runes/v1/etchings' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Códigos de respuesta + +La API de Runes utiliza códigos de respuesta HTTP estándar para indicar el éxito o fracaso de la solicitud. + +| Código | Descripción | +|--------|-------------| +| `200` | Solicitud exitosa | +| `400` | Verifique que los parámetros fueran correctos | +| `401` | Clave de API faltante | +| `403` | Clave API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de tasa excedido | +| `5xx` | Errores del servidor | diff --git a/content/docs/es/apis/signer-metrics-api/index.mdx b/content/docs/es/apis/signer-metrics-api/index.mdx new file mode 100644 index 000000000..d89910656 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/index.mdx @@ -0,0 +1,31 @@ +--- +title: API de métricas del firmante +sidebarTitle: Visión general +description: Monitorea y analiza el comportamiento de los firmantes en la red Stacks a través de REST. +llm: false +--- +## Visión general + +La API de Métricas de Firmantes proporciona capacidades de monitoreo exhaustivas para los firmantes en la red Stacks a través de una interfaz REST. Diseñada para el análisis de la red y el seguimiento del rendimiento, ofrece información detallada sobre los firmantes activos, las tasas de aceptación de bloques y las métricas de tiempo a lo largo de los ciclos PoX. + +## Características principales + +* **Monitoreo del firmante** - Realizar un seguimiento de los firmantes activos y sus métricas de rendimiento +* **Análisis de bloques** - Información agregada del firmante para la validación de bloques +* **Seguimiento del ciclo de PoX** - Monitorear la participación de los firmantes a lo largo de los ciclos + +## Uso + +```terminal +$ curl -L 'https://api.hiro.so/signer-metrics/v1/cycles/95/signers' -H 'Accept: application/json' +``` + +Para más ejemplos de uso, haga clic [aquí](/apis/signer-metrics-api/usage). + +:::callout +type: help + +### ¿Necesitas ayuda para construir con la API de Métricas del Firmante? + +Contáctanos en el #api canal encendido [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horas de oficina semanales](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/apis/signer-metrics-api/meta.json b/content/docs/es/apis/signer-metrics-api/meta.json new file mode 100644 index 000000000..19a002f36 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Signer Metrics API", + "root": true, + "pages": ["---Signer Metrics API---", "index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/es/apis/signer-metrics-api/reference/block-proposals/index.mdx b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/index.mdx new file mode 100644 index 000000000..4ff134eac --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/index.mdx @@ -0,0 +1,6 @@ +--- +title: Block proposals +description: Obtener información sobre propuestas de bloques. +full: true +index: true +--- diff --git a/content/docs/es/apis/signer-metrics-api/reference/block-proposals/mtea.json b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/mtea.json new file mode 100644 index 000000000..4c880c22a --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/mtea.json @@ -0,0 +1,4 @@ +{ + "title": "Block proposals", + "pages": ["..."] +} diff --git a/content/docs/es/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx new file mode 100644 index 000000000..d2105e3e4 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx @@ -0,0 +1,7 @@ +--- +title: Información del firmante para un bloque +sidebarTitle: Información del firmante para la propuesta de bloque +description: Obtener información del firmante para un bloque específico. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx new file mode 100644 index 000000000..afac5f811 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx @@ -0,0 +1,7 @@ +--- +title: Información del firmante para las propuestas de bloques más recientes +sidebarTitle: Información del firmante para propuestas recientes +description: Obtener información del firmante para las propuestas de bloques más recientes. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx b/content/docs/es/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx new file mode 100644 index 000000000..5d36e56c5 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx @@ -0,0 +1,7 @@ +--- +title: Información agregada del firmante para un bloque +sidebarTitle: Información del firmante del bloque +description: Obtén información agregada del firmante para un bloque específico. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx b/content/docs/es/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx new file mode 100644 index 000000000..7096a1fd3 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx @@ -0,0 +1,7 @@ +--- +title: Información agregada del firmante para los bloques más recientes +sidebarTitle: Información del firmante para bloques recientes +description: Obtener información agregada del firmante para los bloques más recientes. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/reference/blocks/index.mdx b/content/docs/es/apis/signer-metrics-api/reference/blocks/index.mdx new file mode 100644 index 000000000..1a9dca591 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/blocks/index.mdx @@ -0,0 +1,6 @@ +--- +title: Blocks +description: Obtén información agregada del firmante para los bloques. +full: true +index: true +--- diff --git a/content/docs/es/apis/signer-metrics-api/reference/blocks/meta.json b/content/docs/es/apis/signer-metrics-api/reference/blocks/meta.json new file mode 100644 index 000000000..61480c519 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/blocks/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Blocks", + "pages": ["..."] +} diff --git a/content/docs/es/apis/signer-metrics-api/reference/info/index.mdx b/content/docs/es/apis/signer-metrics-api/reference/info/index.mdx new file mode 100644 index 000000000..507f6d820 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/info/index.mdx @@ -0,0 +1,6 @@ +--- +title: Info +description: Puntos finales del estado del servicio +full: true +index: true +--- diff --git a/content/docs/es/apis/signer-metrics-api/reference/info/meta.json b/content/docs/es/apis/signer-metrics-api/reference/info/meta.json new file mode 100644 index 000000000..5df3dcd09 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/info/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Info", + "pages": ["..."] +} diff --git a/content/docs/es/apis/signer-metrics-api/reference/info/status.mdx b/content/docs/es/apis/signer-metrics-api/reference/info/status.mdx new file mode 100644 index 000000000..ad9795b81 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/info/status.mdx @@ -0,0 +1,7 @@ +--- +title: Estado de la API +sidebarTitle: Estado de la API +description: Muestra el estado de la API y su carga de trabajo actual. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/reference/signers/index.mdx b/content/docs/es/apis/signer-metrics-api/reference/signers/index.mdx new file mode 100644 index 000000000..4b4397b41 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/signers/index.mdx @@ -0,0 +1,6 @@ +--- +title: Signers +description: Obtén información sobre los firmantes en la cadena de bloques de Stacks. +full: true +index: true +--- diff --git a/content/docs/es/apis/signer-metrics-api/reference/signers/meta.json b/content/docs/es/apis/signer-metrics-api/reference/signers/meta.json new file mode 100644 index 000000000..ce236a503 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/signers/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Signers", + "pages": ["..."] +} diff --git a/content/docs/es/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx b/content/docs/es/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx new file mode 100644 index 000000000..de8e76ecb --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx @@ -0,0 +1,7 @@ +--- +title: Firmante del Ciclo PoX +sidebarTitle: Firmante del Ciclo PoX +description: Obtén estadísticas para un firmante específico en un ciclo PoX determinado. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx b/content/docs/es/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx new file mode 100644 index 000000000..9365fb0f4 --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx @@ -0,0 +1,7 @@ +--- +title: Firmantes del Ciclo PoX +sidebarTitle: Firmantes del Ciclo PoX +description: Obtén una lista de firmantes en un ciclo PoX determinado. +full: true +--- + diff --git a/content/docs/es/apis/signer-metrics-api/usage.mdx b/content/docs/es/apis/signer-metrics-api/usage.mdx new file mode 100644 index 000000000..2c99ba51f --- /dev/null +++ b/content/docs/es/apis/signer-metrics-api/usage.mdx @@ -0,0 +1,47 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API de Métricas del Firmante. +--- +## Uso + +La API de Métricas del Firmante está construida sobre principios REST, imponiendo HTTPS para todas las solicitudes para garantizar la seguridad, integridad y privacidad de los datos. + +### URL base + +```console -c +https://api.hiro.so +``` + +### Realizando solicitudes + +Para hacer una solicitud a la API de Métricas del Firmante, puedes pegar el comando curl a continuación en tu terminal. + +```terminal +$ curl -L 'https://api.hiro.so/signer-metrics/v1/cycles/95/signers' \ + -H 'Accept: application/json' +``` + +### Autenticación + +Si estás utilizando una api-key, reemplaza `$HIRO_API_KEY` con tu clave API secreta. + +```terminal +$ curl -L 'https://api.hiro.so/signer-metrics/v1/cycles/95/signers' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Códigos de respuesta + +La API de Métricas del Firmante utiliza códigos de respuesta HTTP estándar para indicar el éxito o fracaso de la solicitud. + +| Código | Descripción | +|--------|-------------| +| `200` | Solicitud exitosa | +| `400` | Verifique que los parámetros fueran correctos | +| `401` | Clave de API faltante | +| `403` | Clave API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de tasa excedido | +| `5xx` | Errores del servidor | diff --git a/content/docs/es/apis/stacks-blockchain-api/architecture.mdx b/content/docs/es/apis/stacks-blockchain-api/architecture.mdx new file mode 100644 index 000000000..3f99615f9 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/architecture.mdx @@ -0,0 +1,57 @@ +--- +title: Arquitectura +description: Comprende la arquitectura de la API de la Blockchain de Stacks. +--- +![Arquitectura de la API de la cadena de bloques Stacks](/images/api/architecture.svg) + +## Puntos finales RPC + +El `stacks-node` tiene su propio conjunto mínimo de puntos finales http conocidos como `RPC endpoints`. + +* El `stacks-blockchain-api` permite a los clientes acceder a los puntos finales RPC mediante el proxy de solicitudes a un grupo balanceado de carga de `stacks-nodes`. +* Para obtener más detalles sobre los puntos finales RPC, consulte: [Documentación de Puntos de Conexión RPC](https://github.com/blockstack/stacks-blockchain/blob/master/docs/rpc-endpoints.md) +* Los puntos finales RPC comunes incluyen: + * `POST /v2/transactions` - Transmitir una transacción + * `GET /v2/pox` - Recuperar información relevante actual de Prueba de Transferencia (PoX) + * `POST /v2/contracts/call-read//` - Evaluar y devolver el resultado de llamar a una función de Clarity + * `POST /v2/fees/transaction` - Evaluar una transacción dada y proporcionar datos de estimación de tarifas de transacción + * `GET /v2/accounts/
` - Obtener el nonce actual requerido para crear transacciones + +## Puntos finales adicionales + +La API de la cadena de bloques Stacks implementa puntos finales adicionales que proporcionan datos no disponibles directamente desde los nodos de Stacks debido a diversas limitaciones. + +* El `stacks-node` es posible que no persista ciertos datos o que no los sirva eficientemente a muchos clientes. Por ejemplo, aunque puede devolver el saldo actual de STX de una cuenta, no puede proporcionar un historial de transacciones de la cuenta. +* La API implementa la especificación Rosetta de Coinbase, un estándar abierto diseñado para simplificar la implementación e interacción con blockchain. Se puede encontrar más información en [API de Rosetta](https://www.rosetta-api.org/). +* La API incluye soporte para los puntos finales del Sistema de Nombres de Blockchain (BNS). Los detalles están disponibles en [Documentación de BNS](https://docs.stacks.co/clarity/example-contracts/bns). +* Para las rutas de Express.js, consulte el directorio `/src/api/routes`. + +La API crea un servidor http "observador de eventos" que escucha eventos de un "emisor de eventos" de stacks-node. + +Los eventos son solicitudes HTTP POST que contienen: + +* Bloques +* Transacciones + +Subproductos de las transacciones ejecutadas, tales como: + +* Transferencias de activos +* Datos de registro de contratos inteligentes +* Datos de costo de ejecución + +La API procesa y almacena estos eventos como datos relacionales en PostgreSQL. Para el código del "observador de eventos", consulte `/src/event-stream`. + +## OpenAPI y JSON Schema + +Todos los endpoints http y las respuestas están definidos en OpenAPI y JSON Schema. + +* Ver `/docs/openapi.yaml` +* Estos se utilizan para generar automáticamente la documentación en https://hirosystems.github.io/stacks-blockchain-api/ +* Los esquemas JSON se convierten en interfaces de TypeScript, que son utilizadas internamente por el módulo controlador de la base de datos para transformar los resultados de las consultas SQL en las formas de objeto correctas. +* OpenAPI y los esquemas JSON también se utilizan para generar un independiente `@stacks/blockchain-api-client`. + +## Configuración de Desarrollo + +La forma más fácil/rápida de desarrollar en este repositorio es usando el depurador de VS Code. Utiliza docker-compose para configurar una instancia de stacks-node y Postgres. + +Alternativamente, puedes ejecutar `npm run dev:integrated` que hace lo mismo pero sin un depurador. diff --git a/content/docs/es/apis/stacks-blockchain-api/index.mdx b/content/docs/es/apis/stacks-blockchain-api/index.mdx new file mode 100644 index 000000000..3511bf1ea --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/index.mdx @@ -0,0 +1,35 @@ +--- +title: API de Blockchain de Stacks +sidebarTitle: Visión general +description: Datos de blockchain rápidos y confiables para el ecosistema Stacks a través de REST. +llm: false +--- +## Visión general + +La API de Stacks proporciona acceso completo a los datos de la blockchain de Stacks a través de una interfaz REST de alto rendimiento. Construida sobre respuestas en caché e indexación optimizada, entrega datos de transacciones, información de contratos inteligentes, saldos de cuentas y detalles de bloques con una latencia mínima. + +## Características principales + +* **Ingesta de datos en tiempo real** - Indexa continuamente la actividad de la cadena de bloques a medida que ocurre +* **Respuestas en caché** - Rendimiento optimizado mediante estrategias de almacenamiento en caché inteligentes +* **Acceso completo a los datos** - Historial de transacciones, contratos inteligentes, cuentas y bloques + +## Uso + +```terminal +$ curl -L 'https://api.hiro.so/extended' -H 'Accept: application/json' +``` + +Para más ejemplos de uso, haga clic [aquí](/apis/stacks-blockchain-api/usage). + +:::callout +Todas las respuestas de la API de Stacks Blockchain incluyen [límites de tasa de encabezados](/resources/guides/response-headers) que te ayudan a monitorear el uso de tu API con información de cuota específica de Stacks. +::: + +:::callout +type: help + +### ¿Necesitas ayuda para construir con la API de la Blockchain de Stacks? + +Contáctanos en el #api canal activado [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horas de oficina semanales](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/apis/stacks-blockchain-api/meta.json b/content/docs/es/apis/stacks-blockchain-api/meta.json new file mode 100644 index 000000000..9f957b868 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/meta.json @@ -0,0 +1,15 @@ +{ + "title": "APIs", + "root": true, + "pages": [ + "---Stacks Blockchain API---", + "index", + "usage", + "architecture", + "pagination", + "none-handling", + "requesting-proofs", + "---Reference---", + "...reference" + ] +} diff --git a/content/docs/es/apis/stacks-blockchain-api/nonce-handling.mdx b/content/docs/es/apis/stacks-blockchain-api/nonce-handling.mdx new file mode 100644 index 000000000..9086da9f0 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/nonce-handling.mdx @@ -0,0 +1,25 @@ +--- +title: Manejo de nonce +description: Aprende cómo manejar nonces en Stacks. +--- +Para evitar transacciones "atascadas", debes rastrear el próximo nonce disponible para los principales que emiten transacciones. La +API de Stacks Blockchain proporciona un endpoint para simplificar el manejo de nonces al usar el siguiente comando: + +```terminal +$ curl 'https://api.testnet.hiro.so/extended/v1/address//nonces' +``` + +```json +{ + "last_executed_tx_nonce": 5893, + "last_mempool_tx_nonce": null, + "possible_next_nonce": 5894, + "detected_missing_nonces": [] +} +``` + +El `possible_next_nonce` property es el nonce sugerido para la próxima transacción de un principal determinado. Se deriva como el siguiente número entero al nonce más grande encontrado en bloques y mempool. No tiene en cuenta los nonces faltantes. + +El `detected_missing_nonces` La propiedad encuentra cualquier nonce no contiguo después de inspeccionar las transacciones de los bloques y el mempool. Por ejemplo, para un principal dado, si la última transacción incluida en un bloque tiene un nonce de 5, y hay solo una transacción en el mempool con nonce 7, entonces indica que probablemente algo salió mal con la transacción con nonce 6 (ya sea que no fue creada o transmitida correctamente por un cliente, o fue descartada por cualquier razón). Esto es una fuerte indicación de que la transacción del mempool con nonce 7 nunca será minada ya que falta el nonce anterior. + +Los clientes que continúan transmitiendo transacciones con el `possible_next_nonce` propiedad de 8, luego 9, luego 10, probablemente resultará en que todas sus transacciones pendientes/en mempool nunca se procesen. Para que todas las transacciones se procesen, los clientes deben primero usar cualquier nonce faltante antes de usar el sugerido `possible_next_nonce`. diff --git a/content/docs/es/apis/stacks-blockchain-api/pagination.mdx b/content/docs/es/apis/stacks-blockchain-api/pagination.mdx new file mode 100644 index 000000000..f3bc0ffee --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/pagination.mdx @@ -0,0 +1,53 @@ +--- +title: Paginación +description: Aprende cómo paginar a través de listas. +--- +## Uso + +Para hacer las respuestas de la API más compactas, las listas devueltas por la API están paginadas. Para las listas, el cuerpo de la respuesta incluye: + +* `limit`: El número de elementos de la lista devueltos por respuesta +* `offset`: El número de elementos a omitir (comenzando desde 0) +* `total`: El número de todos los elementos de lista disponibles +* `results`: El array de elementos de la lista (la longitud del array es igual al límite establecido) + +Aquí hay una respuesta de ejemplo: + +```json +{ + "limit": 10, + "offset": 0, + "total": 101922, + "results": [ + { + "tx_id": "0x924e0a688664851f5f96b437fabaec19b7542cfcaaf92a97eae43384cacd83d0", + "nonce": 308, + "fee_rate": "0", + "sender_address": "ST39F7SA0AKH7RB363W3NE2DTHD3P32ZHNX2KE7J9", + "sponsored": false, + "post_condition_mode": "deny", + "post_conditions": [], + "anchor_mode": "on_chain_only", + "block_hash": "0x17ceb3da5f36aab351d6b14f5aa77f85bb6b800b954b2f24c564579f80116d99", + "parent_block_hash": "0xe0d1e8d216a77526ae2ce40294fc77038798a179a6532bb8980d3c2183f58de6", + "block_height": 14461, + "burn_block_time": 1622875042, + "burn_block_time_iso": "2021-06-05T06:37:22.000Z", + "canonical": true, + "tx_index": 0, + "tx_status": "success", + "tx_result": {}, + "microblock_hash": "", + "microblock_sequence": 2147483647, + "microblock_canonical": true, + "event_count": 0, + "events": [], + "tx_type": "coinbase", + "coinbase_payload": {} + }, + {} + ] +} +``` + +Usando el `limit` y `offset` propiedades, puede paginar a través de la lista completa aumentando el desplazamiento según el límite hasta alcanzar el total. diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/assets.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/assets.mdx new file mode 100644 index 000000000..0c4db73bc --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/assets.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener activos de la cuenta +sidebarTitle: Activos +description: Recupera una lista de todos los eventos de activos asociados con una cuenta o un identificador de contrato. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/balances.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/balances.mdx new file mode 100644 index 000000000..2bfcfb904 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/balances.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener saldos de cuenta +sidebarTitle: Saldos +description: Recupera información del saldo de la cuenta, incluyendo STX, tokens fungibles y no fungibles. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx new file mode 100644 index 000000000..3029c1457 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transferencias entrantes de STX +sidebarTitle: Transferencias entrantes de STX +description: Obtiene una lista de transferencias de STX con memos al principal dado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/info.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/info.mdx new file mode 100644 index 000000000..bed70c1f3 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/info.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener información de la cuenta +sidebarTitle: Información +description: Recupera los datos de la cuenta para un identificador de cuenta o contrato dado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx new file mode 100644 index 000000000..978615d53 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx @@ -0,0 +1,7 @@ +--- +title: Obtén el último nonce +sidebarTitle: Último nonce +description: Recupera los últimos valores de nonce utilizados por una cuenta inspeccionando el mempool y las transacciones ancladas. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx new file mode 100644 index 000000000..77709683a --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el saldo de STX de la cuenta +sidebarTitle: Saldo de STX +description: Obtiene el saldo de tokens STX para una dirección o identificador de contrato especificado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx new file mode 100644 index 000000000..858d3ac6e --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener detalles de transacciones de cuenta con transferencias +sidebarTitle: Detalles de la transacción con transferencias +description: Recupera los detalles de la transacción para una transacción específica, incluyendo las transferencias de STX para cada transacción. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx new file mode 100644 index 000000000..298272cfd --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones de cuenta con transferencias +sidebarTitle: Transacciones con transferencias +description: Recupera transacciones para una cuenta específica incluyendo transferencias de STX para cada transacción. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transactions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transactions.mdx new file mode 100644 index 000000000..0167dd0f5 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/accounts/transactions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones de la cuenta +sidebarTitle: Transacciones +description: Recupera transacciones para una cuenta específica. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/average-times.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/average-times.mdx new file mode 100644 index 000000000..7703fa801 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/average-times.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener tiempos promedio de bloque +sidebarTitle: Tiempos promedio +description: Recupera los tiempos promedio de bloque. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx new file mode 100644 index 000000000..e5002662e --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloque por hash de bloque de burnchain +sidebarTitle: Bloque por hash de bloque quemado +description: Recupera los detalles del bloque de un bloque específico para un hash de bloque de burnchain dado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx new file mode 100644 index 000000000..250241336 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloque por altura de bloque de burnchain +sidebarTitle: Bloque por altura de bloque quemado +description: Recupera los detalles del bloque de un bloque específico para una altura de bloque de burnchain dada. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx new file mode 100644 index 000000000..66bf45f0e --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloque por hash +sidebarTitle: Bloque por hash +description: Recupera los detalles del bloque de un bloque específico para una altura de cadena determinada. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-height-v3.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-height-v3.mdx new file mode 100644 index 000000000..56f1a5c61 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-height-v3.mdx @@ -0,0 +1,8 @@ +--- +title: Bloque por altura (v3) +sidebarTitle: Bloque por altura (v3) +description: Recupera un bloque por su altura utilizando el endpoint v3. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx new file mode 100644 index 000000000..dc891708c --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloque por altura +sidebarTitle: Bloque por altura +description: Recupera los detalles del bloque de un bloque específico para una altura de cadena determinada. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-proposal.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-proposal.mdx new file mode 100644 index 000000000..b4842a9c0 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/block-proposal.mdx @@ -0,0 +1,8 @@ +--- +title: Validar bloque propuesto +sidebarTitle: Propuesta de bloque +description: Validar un bloque propuesto de Stacks. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-block.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-block.mdx new file mode 100644 index 000000000..3408095b5 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-block.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloque +sidebarTitle: Bloque +description: Recupera un solo bloque. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx new file mode 100644 index 000000000..feb0ec225 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloques por bloque de quemado +sidebarTitle: Bloques por bloque quemado +description: Obtiene una lista de bloques confirmados por un bloque de quemado específico. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx new file mode 100644 index 000000000..b878c7930 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloques +sidebarTitle: Bloques +description: Recupera una lista de bloques minados recientemente. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx new file mode 100644 index 000000000..a7ca9d8a4 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloques recientes +sidebarTitle: Bloques recientes +description: Recupera una lista de bloques minados recientemente. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/blocks/upload-block.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/upload-block.mdx new file mode 100644 index 000000000..f1eca030a --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/blocks/upload-block.mdx @@ -0,0 +1,8 @@ +--- +title: Bloque de carga +sidebarTitle: Bloque de carga +description: Subir un bloque al nodo. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx new file mode 100644 index 000000000..de03ffa7f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloque de quemado +sidebarTitle: Bloque de quemado +description: Recupera un único bloque de quemado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx new file mode 100644 index 000000000..8d4cfa274 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener bloques quemados +sidebarTitle: Bloques de quemado +description: Obtiene una lista de bloques de quemado recientes. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/faucets/stx.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/faucets/stx.mdx new file mode 100644 index 000000000..5e4f21779 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/faucets/stx.mdx @@ -0,0 +1,7 @@ +--- +title: Tokens de la red de prueba STX +sidebarTitle: STX +description: Entrega tokens STX de testnet a una dirección especificada. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/fees/estimate.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/fees/estimate.mdx new file mode 100644 index 000000000..cce4d5846 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/fees/estimate.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener tarifas aproximadas para la transacción dada +sidebarTitle: Estimación +description: Obtén una tarifa estimada para la transacción proporcionada. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx new file mode 100644 index 000000000..b353397c0 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener tasa de comisión +sidebarTitle: Tasa de comisión +description: Recupera una tasa de comisión estimada para las transacciones. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/fees/transfer-estimate.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/fees/transfer-estimate.mdx new file mode 100644 index 000000000..4114d6254 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/fees/transfer-estimate.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener estimación de tarifa de transferencia +sidebarTitle: Estimación de transferencia +description: Obtiene una tasa de comisión estimada para transacciones de transferencia de STX. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx new file mode 100644 index 000000000..8c554438a --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el suministro circulante de STX en formato de texto plano +sidebarTitle: Suministro circulante de STX en formato de texto plano +description: Recupera el suministro circulante de STX como texto sin formato. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/core-api.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/core-api.mdx new file mode 100644 index 000000000..4702899f2 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/core-api.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener información básica de la API +sidebarTitle: Información de la API principal +description: Recupera información sobre la API Core, incluyendo la versión del servidor. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/health.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/health.mdx new file mode 100644 index 000000000..eb48dcb9f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/health.mdx @@ -0,0 +1,8 @@ +--- +title: Chequeo de salud +sidebarTitle: Salud +description: Obtener información de salud sobre el estado de sincronización del nodo. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx new file mode 100644 index 000000000..1ac1b86c6 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el suministro total y desbloqueado de STX (heredado) +sidebarTitle: Suministro total y desbloqueado de STX (heredado) +description: Recupera el suministro total y desbloqueado de STX en el formato heredado de la API 1.0. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/network-block-time.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/network-block-time.mdx new file mode 100644 index 000000000..6e567a7ed --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/network-block-time.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el tiempo objetivo de bloque de la red +sidebarTitle: El tiempo objetivo de bloque de la red +description: Recupera los tiempos de bloque objetivo para la red principal y la red de pruebas. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx new file mode 100644 index 000000000..3988258b6 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el tiempo objetivo de bloque de una red determinada +sidebarTitle: El tiempo objetivo de bloque de una red determinada +description: Recupera el tiempo de bloque objetivo para una red determinada. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/status.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/status.mdx new file mode 100644 index 000000000..b9fd8a690 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/status.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener estado de la API +sidebarTitle: Estado de la API +description: Recupera el estado de ejecución de la API de Blockchain de Stacks. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx new file mode 100644 index 000000000..9945f4630 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el suministro total y desbloqueado de STX +sidebarTitle: Suministro total y desbloqueado de STX +description: Obtiene el suministro total y desbloqueado de STX. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx new file mode 100644 index 000000000..ac757272e --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el suministro total de STX en formato de texto plano +sidebarTitle: Suministro total de STX en formato de texto sin formato +description: Obtiene el suministro total de STX como texto sin formato. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx new file mode 100644 index 000000000..f7b50027f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener prioridades de tarifas de transacción +sidebarTitle: Prioridades de las comisiones de transacción +description: Recupera las prioridades de tarifas estimadas (en micro-STX) para todas las transacciones que se encuentran actualmente en el mempool. También devuelve las prioridades separadas por tipo de transacción. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/nakamoto-block.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/nakamoto-block.mdx new file mode 100644 index 000000000..c3ade4fd0 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/nakamoto-block.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener bloque Nakamoto +sidebarTitle: Bloque de Nakamoto +description: Obtén un bloque Nakamoto por su hash de índice de bloque. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-blocks.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-blocks.mdx new file mode 100644 index 000000000..5f86a6db8 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-blocks.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener bloques de tenencia de Nakamoto +sidebarTitle: Bloques de mandato de Nakamoto +description: Obtener una secuencia de bloques Nakamoto en un período. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-fork-info.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-fork-info.mdx new file mode 100644 index 000000000..1bc2afb31 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-fork-info.mdx @@ -0,0 +1,8 @@ +--- +title: Información sobre la bifurcación de tenencia +sidebarTitle: Información sobre la bifurcación de tenencia +description: Obtén información sobre las bifurcaciones de tenencia entre dos IDs de bloque. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-metadata.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-metadata.mdx new file mode 100644 index 000000000..163a1abd6 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-metadata.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener metadatos de tenencia de Nakamoto +sidebarTitle: Metadatos de permanencia de Nakamoto +description: Obtener metadatos sobre el mandato actual de Nakamoto. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-tip.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-tip.mdx new file mode 100644 index 000000000..ddea5480f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/nakamoto/tenure-tip.mdx @@ -0,0 +1,8 @@ +--- +title: Consejo para la titularidad +sidebarTitle: Consejo para la titularidad +description: Obtén el ID del bloque de propina de la tenencia asociada a un hash de consenso dado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx new file mode 100644 index 000000000..1f8365519 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener archivo de zona histórico +sidebarTitle: Zona de archivo histórico +description: Recupera el archivo de zona histórico para un nombre específico. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/name-details.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/name-details.mdx new file mode 100644 index 000000000..225dce5ea --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/name-details.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener detalles del nombre +sidebarTitle: Detalles del nombre +description: Recupera detalles de un nombre dado, incluyendo la dirección, el estado y el ID de la última transacción. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx new file mode 100644 index 000000000..15d9a75cb --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener subdominios de nombre +sidebarTitle: Nombrar subdominios +description: Recupera la lista de subdominios para un nombre específico. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx new file mode 100644 index 000000000..05675ab54 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener archivo de zona de nombre +sidebarTitle: Nombrar archivo de zona +description: Recupera el archivo de zona para un nombre específico. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/names.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/names.mdx new file mode 100644 index 000000000..25b2b14cc --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/names.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener todos los nombres +sidebarTitle: Todos los nombres +description: Recupera una lista de todos los nombres conocidos por el nodo. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/namespace-names.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/namespace-names.mdx new file mode 100644 index 000000000..feacbaba8 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/namespace-names.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener nombres de espacios de nombres +sidebarTitle: Nombres de espacios de nombres +description: Recupera una lista de nombres dentro de un espacio de nombres determinado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/namespaces.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/namespaces.mdx new file mode 100644 index 000000000..ac5df3d16 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/namespaces.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener todos los espacios de nombres +sidebarTitle: Todos los espacios de nombres +description: Recupera una lista de todos los espacios de nombres conocidos por el nodo. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx new file mode 100644 index 000000000..f9b58da18 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener nombres propiedad de una dirección +sidebarTitle: Nombres propiedad de la dirección +description: Recupera la lista de nombres que pertenecen a una dirección específica. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx new file mode 100644 index 000000000..607615494 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener historial de token no fungible +sidebarTitle: Historia de los tokens no fungibles +description: Recupera el historial de un token no fungible. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx new file mode 100644 index 000000000..f3434ebd0 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener tenencias de tokens no fungibles +sidebarTitle: Tenencias de tokens no fungibles +description: Recupera una lista de tokens no fungibles propiedad del principal dado (dirección STX o ID de contrato inteligente). +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx new file mode 100644 index 000000000..2f333beb5 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener acuñaciones de tokens no fungibles +sidebarTitle: Acuñaciones de tokens no fungibles +description: Recupera una lista de acuñaciones de tokens no fungibles para un identificador de activo dado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx new file mode 100644 index 000000000..9227f0622 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener ciclo PoX +sidebarTitle: Ciclo de PoX +description: Obtiene detalles de un ciclo PoX. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx new file mode 100644 index 000000000..a2e4fefcb --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener ciclos de PoX +sidebarTitle: Ciclos de PoX +description: Obtiene una lista de ciclos PoX. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/pox-details.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/pox-details.mdx new file mode 100644 index 000000000..8b959a74d --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/pox-details.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener detalles de PoX +sidebarTitle: Detalles de PoX +description: Recupera información de Prueba de Transferencia (PoX). +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-details.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-details.mdx new file mode 100644 index 000000000..d1a7a241f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-details.mdx @@ -0,0 +1,8 @@ +--- +title: Detalles del firmante +sidebarTitle: Detalles del firmante +description: Obtener información del firmante para un firmante y ciclo específicos. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx new file mode 100644 index 000000000..27f5d6a99 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener firmante en ciclo PoX +sidebarTitle: Firmante en el ciclo PoX +description: Obtiene detalles de un firmante en un ciclo PoX. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx new file mode 100644 index 000000000..cacbe9fef --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener firmantes en el ciclo PoX +sidebarTitle: Firmantes en el ciclo PoX +description: Obtiene una lista de firmantes en un ciclo PoX. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/stacker-set.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/stacker-set.mdx new file mode 100644 index 000000000..cd7d78a9c --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/stacker-set.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener información del conjunto de apiladores y firmantes +sidebarTitle: Información del conjunto de apiladores y firmantes +description: Recupera información del conjunto de apiladores y firmantes para un ciclo determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx new file mode 100644 index 000000000..6555a2203 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener stackers para el firmante en el ciclo PoX +sidebarTitle: Apiladores para firmante en ciclo PoX +description: Obtiene una lista de stackers para un firmante en un ciclo PoX. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/search/search-by-id.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/search/search-by-id.mdx new file mode 100644 index 000000000..e36973db6 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/search/search-by-id.mdx @@ -0,0 +1,7 @@ +--- +title: Buscar por ID +sidebarTitle: Buscar por ID +description: Buscar bloques, transacciones, contratos o cuentas por hash/ID. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx new file mode 100644 index 000000000..1c046011e --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener contratos por característica +sidebarTitle: Contratos por rasgo +description: "Recupera una lista de contratos basada en las siguientes características enumeradas en formato JSON: funciones, variables, mapas, tokens fungibles y tokens no fungibles." +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/constants.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/constants.mdx new file mode 100644 index 000000000..221ac42e5 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/constants.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener valor constante +sidebarTitle: Valor constante +description: Obtener el valor de una constante dentro de un contrato. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx new file mode 100644 index 000000000..967b449fe --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener eventos del contrato +sidebarTitle: Eventos de contrato +description: Recupera una lista de eventos que han sido desencadenados por un contrato inteligente determinado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/fast-read-only.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/fast-read-only.mdx new file mode 100644 index 000000000..8f23f2613 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/fast-read-only.mdx @@ -0,0 +1,8 @@ +--- +title: Llamada rápida a función de solo lectura +sidebarTitle: Llamada rápida de solo lectura +description: Llama a una función de solo lectura en un contrato inteligente sin costo ni seguimiento de memoria para una ejecución más rápida. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx new file mode 100644 index 000000000..4e9c5b149 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener información del contrato +sidebarTitle: Información del contrato +description: Recupera detalles de un contrato inteligente específico. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/interface.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/interface.mdx new file mode 100644 index 000000000..dcceba6d5 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/interface.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener interfaz del contrato +sidebarTitle: Interfaz del contrato +description: Recupera una lista de funciones, variables, mapas, tokens fungibles y tokens no fungibles para un contrato inteligente determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/map-entry.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/map-entry.mdx new file mode 100644 index 000000000..c61af6e28 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/map-entry.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener entrada del mapa de contrato +sidebarTitle: Entrada del mapa de contrato +description: Recupera una entrada específica de un mapa de datos de contrato. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/read-only.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/read-only.mdx new file mode 100644 index 000000000..e2ea6c223 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/read-only.mdx @@ -0,0 +1,8 @@ +--- +title: Llamar función de solo lectura +sidebarTitle: Llamar función de solo lectura +description: Llama a una función pública de solo lectura en un contrato inteligente determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/source.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/source.mdx new file mode 100644 index 000000000..384e10337 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/source.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener el código fuente del contrato +sidebarTitle: Fuente del contrato +description: Recupera el código fuente de Clarity de un contrato determinado, junto con la altura del bloque en el que se publicó y la prueba MARF de los datos. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx new file mode 100644 index 000000000..b36e3977f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener el estado de los contratos +sidebarTitle: Estado de los contratos +description: Recupera el estado de implementación de múltiples contratos inteligentes. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/traits.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/traits.mdx new file mode 100644 index 000000000..f938c33e2 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/traits.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener detalles de implementación de rasgos +sidebarTitle: Detalles de implementación de rasgos +description: Determinar si un rasgo especificado está implementado (ya sea explícita o implícitamente) dentro de un contrato dado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/variable.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/variable.mdx new file mode 100644 index 000000000..b205d5fdf --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/smart-contracts/variable.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener variable de datos +sidebarTitle: Valor de la variable de datos +description: Obtener variable de datos del contrato +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/get-sortitions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/get-sortitions.mdx new file mode 100644 index 000000000..0d86109fc --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/get-sortitions.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener sorteos +sidebarTitle: Obtener sorteos +description: Recupera información sobre sorteos de la burnchain. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/latest-and-last-sortitions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/latest-and-last-sortitions.mdx new file mode 100644 index 000000000..a13b17719 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/latest-and-last-sortitions.mdx @@ -0,0 +1,8 @@ +--- +title: Últimos y finales sorteos +sidebarTitle: Últimos y finales sorteos +description: Recupera información sobre los últimos y más recientes sorteos. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-hash.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-hash.mdx new file mode 100644 index 000000000..453485cb5 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-hash.mdx @@ -0,0 +1,8 @@ +--- +title: Sorteo por hash de quemado +sidebarTitle: Sorteo por hash de quemado +description: Obtiene información sobre un sorteo por su hash de bloque de quemado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-height.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-height.mdx new file mode 100644 index 000000000..00d3b02fa --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-height.mdx @@ -0,0 +1,8 @@ +--- +title: Sorteo por altura de quemado +sidebarTitle: Sorteo por altura de quemado +description: Obtiene información sobre un sorteo por su altura de bloque de quemado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-consensus-hash.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-consensus-hash.mdx new file mode 100644 index 000000000..6c44be0a2 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/sortitions/sortition-by-consensus-hash.mdx @@ -0,0 +1,8 @@ +--- +title: Sorteo por hash de consenso +sidebarTitle: Sorteo por hash de consenso +description: Recupera información sobre un sorteo por su hash de consenso. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx new file mode 100644 index 000000000..941fc23eb --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener miembros del grupo de staking +sidebarTitle: Miembros del grupo de staking +description: Obtiene la lista de miembros del grupo de apilamiento para un delegador principal determinado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx new file mode 100644 index 000000000..0adcd9e2b --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener recompensa reciente de burnchain para el destinatario dado +sidebarTitle: Recompensa reciente de la cadena de quemado para el destinatario dado +description: Recupera una lista de recompensas recientes de la cadena de quemado (por ejemplo, Bitcoin) para el destinatario especificado con las cantidades asociadas y la información del bloque. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx new file mode 100644 index 000000000..5efa5ae5f --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener destinatarios recientes de recompensas de burnchain +sidebarTitle: Destinatarios recientes de recompensas de burnchain +description: Recupera una lista de los destinatarios recientes de recompensas de la cadena de quemado (por ejemplo, Bitcoin) con las cantidades asociadas y la información del bloque. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx new file mode 100644 index 000000000..4aa6d89a7 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener entradas recientes de titulares de espacios de recompensa +sidebarTitle: Entradas recientes de titulares de espacios de recompensa +description: Recupera una lista de las direcciones de Bitcoin que recibirían válidamente compromisos de Prueba de Transferencia para una dirección de destinatario titular de un espacio de recompensa determinado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx new file mode 100644 index 000000000..d82a5e345 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener titulares de slots de recompensa recientes +sidebarTitle: Titulares recientes de espacios de recompensa +description: Recupera una lista de las direcciones de Bitcoin que recibirían válidamente compromisos de Prueba de Transferencia. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx new file mode 100644 index 000000000..9e3bd6d37 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener las recompensas totales de burnchain para el destinatario especificado +sidebarTitle: Recompensas totales de burnchain para el destinatario dado +description: Recupera las recompensas totales de la cadena de quemado (por ejemplo, Bitcoin) para una dirección de destinatario determinada. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/tokens/holders.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/tokens/holders.mdx new file mode 100644 index 000000000..f93421fe3 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/tokens/holders.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener titulares de tokens fungibles +sidebarTitle: Titulares de tokens fungibles +description: Recupera la lista de titulares de tokens fungibles para un ID de token determinado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx new file mode 100644 index 000000000..2b5ad4559 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones de dirección +sidebarTitle: Direcciones de transacciones +description: Recupera transacciones enviadas o recibidas por una dirección STX o ID de contrato inteligente. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/broadcast-transaction.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/broadcast-transaction.mdx new file mode 100644 index 000000000..7d8eb06dc --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/broadcast-transaction.mdx @@ -0,0 +1,8 @@ +--- +title: Transmitir transacción +sidebarTitle: Transacción +description: Transmite transacciones sin procesar en la red. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx new file mode 100644 index 000000000..ef481d203 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener detalles de las transacciones +sidebarTitle: Detalles de las transacciones +description: Recupera detalles para una lista de transacciones. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx new file mode 100644 index 000000000..aa83a6b46 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener eventos para una transacción de dirección +sidebarTitle: Eventos para una transacción de dirección +description: Recupera eventos para una transacción específica. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx new file mode 100644 index 000000000..1569f8b10 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacción sin procesar +sidebarTitle: Transacción sin procesar +description: Recupera una transacción serializada codificada en hexadecimal para un ID determinado. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx new file mode 100644 index 000000000..711762fe1 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacción +sidebarTitle: Transacción +description: Recupera detalles de una transacción específica. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx new file mode 100644 index 000000000..fe54b0c87 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones de mempool +sidebarTitle: Transacciones en la mempool +description: Recupera todas las transacciones que han sido recientemente transmitidas al mempool. Estas son transacciones pendientes esperando confirmación. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx new file mode 100644 index 000000000..b3f0b3636 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones recientes +sidebarTitle: Transacciones recientes +description: Recupera todas las transacciones minadas recientemente. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx new file mode 100644 index 000000000..781be0463 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener estadísticas de las transacciones en mempool +sidebarTitle: Estadísticas de transacciones en mempool +description: Recupera estadísticas de las transacciones en el mempool, como recuentos, antigüedad y tarifas. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transaction-details-v3.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transaction-details-v3.mdx new file mode 100644 index 000000000..41aaa0b6e --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transaction-details-v3.mdx @@ -0,0 +1,8 @@ +--- +title: Detalles de la transacción (v3) +sidebarTitle: Detalles de la transacción (v3) +description: Obtén detalles de la transacción por ID de transacción utilizando el endpoint v3. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx new file mode 100644 index 000000000..033ffabdc --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener eventos de transacción +sidebarTitle: Eventos de transacción +description: Recupera eventos para una transacción específica. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx new file mode 100644 index 000000000..8128050ef --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones por bloque +sidebarTitle: Transacciones por bloque +description: Recupera las transacciones confirmadas en un solo bloque. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx new file mode 100644 index 000000000..de4d075e7 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener transacciones para dirección +sidebarTitle: Transacciones para dirección +description: Recupera transacciones para una dirección específica. +full: true +--- + diff --git a/content/docs/es/apis/stacks-blockchain-api/requesting-proofs.mdx b/content/docs/es/apis/stacks-blockchain-api/requesting-proofs.mdx new file mode 100644 index 000000000..3af495251 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/requesting-proofs.mdx @@ -0,0 +1,11 @@ +--- +title: Solicitando pruebas +description: Comprender las solicitudes de prueba de los puntos finales de la API. +--- +## Visión general + +Varios endpoints solicitarán el [Prueba de Merkel MARF](https://github.com/stacksgov/sips/blob/main/sips/sip-004/sip-004-materialized-view.md#marf-merkle-proofs) por defecto. + +Provisto con la prueba, un cliente puede verificar el valor, la energía acumulada gastada y el número de confirmaciones para el valor de respuesta proporcionado por la API. + +Solicitar la prueba requiere más recursos (tiempo de cómputo, tiempo de respuesta y tamaño del cuerpo de la respuesta). Para evitar los recursos adicionales, en caso de que no se requiera verificación, los puntos finales de la API permiten establecer el parámetro de solicitud: `proof=0`. El objeto de respuesta devuelto no tendrá ningún campo de prueba. diff --git a/content/docs/es/apis/stacks-blockchain-api/usage.mdx b/content/docs/es/apis/stacks-blockchain-api/usage.mdx new file mode 100644 index 000000000..8be649b94 --- /dev/null +++ b/content/docs/es/apis/stacks-blockchain-api/usage.mdx @@ -0,0 +1,47 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API de la cadena de bloques de Stacks. +--- +## Uso + +La API de Stacks está construida sobre principios REST, imponiendo HTTPS para todas las solicitudes para garantizar la seguridad, integridad y privacidad de los datos. + +### URL base + +```console -c +https://api.hiro.so +``` + +### Realizando solicitudes + +Para hacer una solicitud a la API de Stacks, puedes pegar el comando curl a continuación en tu terminal. + +```terminal +$ curl -L 'https://api.hiro.so/extended' \ + -H 'Accept: application/json' +``` + +### Autenticación + +Si estás utilizando una api-key, reemplaza `$HIRO_API_KEY` con tu clave API secreta. + +```terminal +$ curl -L 'https://api.hiro.so/extended' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Códigos de respuesta + +La API de Stacks utiliza códigos de respuesta HTTP estándar para indicar el éxito o fracaso de una solicitud. + +| Código | Descripción | +|--------|-------------| +| `200` | Solicitud exitosa | +| `400` | Compruebe que los parámetros fueron correctos | +| `401` | Clave de API faltante | +| `403` | Clave de API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de tasa excedido | +| `5xx` | Errores del servidor | diff --git a/content/docs/es/apis/stacks-node-rpc-api/index.mdx b/content/docs/es/apis/stacks-node-rpc-api/index.mdx new file mode 100644 index 000000000..d047172bf --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/index.mdx @@ -0,0 +1,28 @@ +--- +title: API RPC del Nodo Stacks +sidebarTitle: Visión general +description: Acceso RPC directo a los nodos de la cadena de bloques Stacks para datos y operaciones en tiempo real. +llm: false +--- +## Visión general + +La API RPC del Nodo Stacks proporciona acceso directo a los nodos de la cadena de bloques Stacks a través de puntos finales RPC. **Hiro envía estas llamadas a nodos Stacks ascendentes** - no mantenemos ni controlamos los nodos en sí, por lo que el rendimiento y la disponibilidad dependen de la infraestructura blockchain subyacente. + +## Características principales + +* **Métodos de nodo blockchain sin procesar** - Enviar transacciones, llamar contratos de solo lectura, consultar mempool/estado +* **Estado de la blockchain en tiempo real** - Sin capas de almacenamiento en caché, respuestas directas del nodo +* **Ejecución de contratos inteligentes** - Ejecutar funciones de solo lectura y recuperar el estado del contrato +* **Transmisión de transacciones** - Enviar transacciones directamente a la red + +## Uso + +```terminal +$ curl -L 'https://api.hiro.so/v2/info' -H 'Accept: application/json' +``` + +Para obtener más ejemplos de uso e información sobre límites de velocidad, consulte [Uso](/apis/stacks-node-rpc-api/usage). + +:::callout +**REST vs RPC:** Usar [API de la Blockchain Stacks](/apis/stacks-blockchain-api) para datos de blockchain almacenados en caché e indexados (saldos, transacciones, eventos). Utilice los puntos finales RPC para operaciones de nodo sin procesar y consultas de estado de blockchain en tiempo real. +::: diff --git a/content/docs/es/apis/stacks-node-rpc-api/meta.json b/content/docs/es/apis/stacks-node-rpc-api/meta.json new file mode 100644 index 000000000..4c84cf1fc --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "APIs", + "root": true, + "pages": ["---Stacks Node RPC API---", "index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/accounts/info.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/accounts/info.mdx new file mode 100644 index 000000000..6b3a1f567 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/accounts/info.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener información de la cuenta +sidebarTitle: Información +description: Recupera los datos de la cuenta para un identificador de cuenta o contrato determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/block-by-height-v3.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/block-by-height-v3.mdx new file mode 100644 index 000000000..56f1a5c61 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/block-by-height-v3.mdx @@ -0,0 +1,8 @@ +--- +title: Bloque por altura (v3) +sidebarTitle: Bloque por altura (v3) +description: Recupera un bloque por su altura utilizando el endpoint v3. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/block-proposal.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/block-proposal.mdx new file mode 100644 index 000000000..b4842a9c0 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/block-proposal.mdx @@ -0,0 +1,8 @@ +--- +title: Validar bloque propuesto +sidebarTitle: Propuesta de bloque +description: Validar un bloque propuesto de Stacks. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/upload-block.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/upload-block.mdx new file mode 100644 index 000000000..35a52ac71 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/blocks/upload-block.mdx @@ -0,0 +1,8 @@ +--- +title: Subir bloque +sidebarTitle: Subir bloque +description: Subir un bloque al nodo. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/fees/estimate.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/fees/estimate.mdx new file mode 100644 index 000000000..cce4d5846 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/fees/estimate.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener tarifas aproximadas para la transacción dada +sidebarTitle: Estimación +description: Obtén una tarifa estimada para la transacción proporcionada. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/fees/transfer-estimate.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/fees/transfer-estimate.mdx new file mode 100644 index 000000000..fba5eec10 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/fees/transfer-estimate.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener estimación de tarifa de transferencia +sidebarTitle: Estimación de transferencia +description: Recupera una tasa de comisión estimada para las transacciones de transferencia de STX. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/info/core-api.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/info/core-api.mdx new file mode 100644 index 000000000..4702899f2 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/info/core-api.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener información básica de la API +sidebarTitle: Información de la API principal +description: Recupera información sobre la API Core, incluyendo la versión del servidor. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/info/health.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/info/health.mdx new file mode 100644 index 000000000..eb48dcb9f --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/info/health.mdx @@ -0,0 +1,8 @@ +--- +title: Chequeo de salud +sidebarTitle: Salud +description: Obtener información de salud sobre el estado de sincronización del nodo. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/nakamoto-block.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/nakamoto-block.mdx new file mode 100644 index 000000000..9d1e1000c --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/nakamoto-block.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener bloque Nakamoto +sidebarTitle: Bloque Nakamoto +description: Obtener un bloque Nakamoto por su hash de bloque de índice. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-blocks.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-blocks.mdx new file mode 100644 index 000000000..2ce817cfa --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-blocks.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener bloques de tenencia de Nakamoto +sidebarTitle: Bloques de tenencia de Nakamoto +description: Obtener una secuencia de bloques Nakamoto en un mandato. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-fork-info.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-fork-info.mdx new file mode 100644 index 000000000..1ab7c4e90 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-fork-info.mdx @@ -0,0 +1,8 @@ +--- +title: Información sobre la bifurcación de tenencia +sidebarTitle: Información sobre la bifurcación de tenencia +description: Obtener información sobre las bifurcaciones de tenencia entre dos ID de bloque. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-metadata.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-metadata.mdx new file mode 100644 index 000000000..7eb5ef2e4 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-metadata.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener metadatos de tenencia de Nakamoto +sidebarTitle: Metadatos de tenencia de Nakamoto +description: Obtener metadatos sobre la tenencia de Nakamoto en curso. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-tip.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-tip.mdx new file mode 100644 index 000000000..2af5aa961 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/nakamoto/tenure-tip.mdx @@ -0,0 +1,8 @@ +--- +title: Consejo de permanencia +sidebarTitle: Consejo de permanencia +description: Obtén el ID del bloque de propina de la tenencia asociada con un hash de consenso dado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/pox-details.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/pox-details.mdx new file mode 100644 index 000000000..d4dfe2ac6 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/pox-details.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener detalles de PoX +sidebarTitle: Detalles de PoX +description: Recupera información de Proof-of-Transfer (PoX). +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/signer-details.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/signer-details.mdx new file mode 100644 index 000000000..d1a7a241f --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/signer-details.mdx @@ -0,0 +1,8 @@ +--- +title: Detalles del firmante +sidebarTitle: Detalles del firmante +description: Obtener información del firmante para un firmante y ciclo específicos. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/stacker-set.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/stacker-set.mdx new file mode 100644 index 000000000..bc1b7d6e4 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/proof-of-transfer/stacker-set.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener información del conjunto de apiladores y firmantes +sidebarTitle: Información del conjunto de apiladores y firmantes +description: Recupera información del conjunto de stackers y firmantes para un ciclo determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/constants.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/constants.mdx new file mode 100644 index 000000000..221ac42e5 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/constants.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener valor constante +sidebarTitle: Valor constante +description: Obtener el valor de una constante dentro de un contrato. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/fast-read-only.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/fast-read-only.mdx new file mode 100644 index 000000000..eae6ec942 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/fast-read-only.mdx @@ -0,0 +1,8 @@ +--- +title: Llamada rápida a función de solo lectura +sidebarTitle: Llamada rápida de solo lectura +description: Llama a una función de solo lectura en un contrato inteligente sin seguimiento de costos y memoria para una ejecución más rápida. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/interface.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/interface.mdx new file mode 100644 index 000000000..f9eced13d --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/interface.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener interfaz del contrato +sidebarTitle: Interfaz de contrato +description: Obtiene una lista de funciones, variables, mapas, tokens fungibles y tokens no fungibles para un contrato inteligente determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/map-entry.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/map-entry.mdx new file mode 100644 index 000000000..20dedf9fc --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/map-entry.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener entrada del mapa del contrato +sidebarTitle: Entrada de mapa de contrato +description: Recupera una entrada específica del mapa de datos de un contrato. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/read-only.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/read-only.mdx new file mode 100644 index 000000000..e2ea6c223 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/read-only.mdx @@ -0,0 +1,8 @@ +--- +title: Llamar función de solo lectura +sidebarTitle: Llamar función de solo lectura +description: Llama a una función pública de solo lectura en un contrato inteligente determinado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/source.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/source.mdx new file mode 100644 index 000000000..355abf67b --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/source.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener código fuente del contrato +sidebarTitle: Fuente del contrato +description: Recupera el código fuente de Clarity de un contrato determinado, junto con la altura del bloque en el que se publicó y la prueba MARF de los datos. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/traits.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/traits.mdx new file mode 100644 index 000000000..daa0255f9 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/traits.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener detalles de implementación de rasgos +sidebarTitle: Detalles de implementación de rasgos +description: Determinar si un rasgo específico está implementado (ya sea explícita o implícitamente) dentro de un contrato dado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/variable.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/variable.mdx new file mode 100644 index 000000000..78c28f049 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/smart-contracts/variable.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener variable de datos +sidebarTitle: Valor de variable de datos +description: Obtener variable de datos del contrato +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/get-sortitions.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/get-sortitions.mdx new file mode 100644 index 000000000..75520fd08 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/get-sortitions.mdx @@ -0,0 +1,8 @@ +--- +title: Obtener sorticiones +sidebarTitle: Obtener sorteos +description: Recupera información sobre sorteos de la burnchain. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/latest-and-last-sortitions.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/latest-and-last-sortitions.mdx new file mode 100644 index 000000000..8600bb2e4 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/latest-and-last-sortitions.mdx @@ -0,0 +1,8 @@ +--- +title: Últimas y finales sorticiones +sidebarTitle: Últimas y finales sorticiones +description: Recupera información sobre las últimas y más recientes sorticiones. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-hash.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-hash.mdx new file mode 100644 index 000000000..2a94f3ec3 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-hash.mdx @@ -0,0 +1,8 @@ +--- +title: Sorteo por hash de quemado +sidebarTitle: Sorteo por hash de quemado +description: Recupera información sobre un sorteo por su hash de bloque de quemado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-height.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-height.mdx new file mode 100644 index 000000000..884ea2145 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-height.mdx @@ -0,0 +1,8 @@ +--- +title: Sorteo por altura de quemado +sidebarTitle: Sorteo por altura de quemado +description: Obtiene información sobre un sorteo por la altura de su bloque de quemado. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-consensus-hash.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-consensus-hash.mdx new file mode 100644 index 000000000..6c44be0a2 --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-consensus-hash.mdx @@ -0,0 +1,8 @@ +--- +title: Sorteo por hash de consenso +sidebarTitle: Sorteo por hash de consenso +description: Recupera información sobre un sorteo por su hash de consenso. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/transactions/broadcast-transaction.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/transactions/broadcast-transaction.mdx new file mode 100644 index 000000000..7d8eb06dc --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/transactions/broadcast-transaction.mdx @@ -0,0 +1,8 @@ +--- +title: Transmitir transacción +sidebarTitle: Transacción +description: Transmite transacciones sin procesar en la red. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/reference/transactions/transaction-details-v3.mdx b/content/docs/es/apis/stacks-node-rpc-api/reference/transactions/transaction-details-v3.mdx new file mode 100644 index 000000000..41aaa0b6e --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/reference/transactions/transaction-details-v3.mdx @@ -0,0 +1,8 @@ +--- +title: Detalles de la transacción (v3) +sidebarTitle: Detalles de la transacción (v3) +description: Obtén detalles de la transacción por ID de transacción utilizando el endpoint v3. +full: true +isRpc: true +--- + diff --git a/content/docs/es/apis/stacks-node-rpc-api/usage.mdx b/content/docs/es/apis/stacks-node-rpc-api/usage.mdx new file mode 100644 index 000000000..d664eee3c --- /dev/null +++ b/content/docs/es/apis/stacks-node-rpc-api/usage.mdx @@ -0,0 +1,65 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API RPC del Nodo Stacks. +--- +## Uso + +The Stacks Node RPC API provides direct access to Stacks blockchain nodes through RPC endpoints. All requests use HTTPS and enforce standard REST principles. + +### URL base + +```console -c +https://api.hiro.so +``` + +### Realizando solicitudes + +```terminal +$ curl -L 'https://api.hiro.so/v2/info' \ + -H 'Accept: application/json' +``` + +### Autenticación + +Incluya su clave API para límites de tasa más altos: + +```terminal +$ curl -L 'https://api.hiro.so/v2/info' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Límites de tasa + +Las llamadas RPC son **ponderado según el costo del método** and consume more units than REST endpoints: + +| Tipo de método | Ejemplos | Multiplicador de costo | +|-------------|----------|-----------------| +| Lecturas ligeras | `get_block`, `get_transaction` | 1× | +| Llamadas a contratos de solo lectura | `call_read_only_function` | 2× | +| Envío de transacción | `submit_transaction` | 3× | +| Operaciones pesadas | `trace_call`, escaneos profundos de contratos | 5× | + +### Encabezados de límite de tasa + +``` +X-RateLimit-Limit: 900 # window capacity in units +X-RateLimit-Remaining: 125 # remaining units +X-RateLimit-Reset: 60 # seconds until reset +X-RateLimit-Method-Cost: 3 # cost for this RPC method +X-Plan-Tier: starter # your plan tier +X-Surface: rpc # indicates RPC endpoint +``` + +## Códigos de respuesta + +| Código | Descripción | +|------|-------------| +| `200` | Solicitud exitosa | +| `400` | Parámetros inválidos | +| `401` | Falta la clave API | +| `403` | Clave de API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de velocidad excedido | +| `5xx` | Errores del servidor/nodo ascendente | diff --git a/content/docs/es/apis/token-metadata-api/index.mdx b/content/docs/es/apis/token-metadata-api/index.mdx new file mode 100644 index 000000000..e6897dc7b --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/index.mdx @@ -0,0 +1,35 @@ +--- +title: API de Metadatos de Tokens +sidebarTitle: Visión general +description: Metadatos rápidos y confiables para tokens de Stacks a través de REST. +llm: false +--- +## Visión general + +La API de Metadatos de Tokens proporciona metadatos completos para tokens en la blockchain de Stacks a través de una interfaz REST de alto rendimiento. Construida con respuestas en caché e indexación optimizada, ofrece información de tokens fungibles, propiedades de NFT y datos de colecciones con una latencia mínima. + +## Características principales + +* **Cobertura completa de tokens** - Metadatos para tokens fungibles, no fungibles y semi-fungibles +* **Respuestas en caché** - Rendimiento optimizado mediante estrategias de almacenamiento en caché inteligentes +* **Metadatos enriquecidos** - Propiedades de tokens, atributos e información de colección + +## Uso + +```terminal +$ curl -L 'https://api.hiro.so/metadata/v1/ft' -H 'Accept: application/json' +``` + +Para más ejemplos de uso, haga clic [aquí](/apis/token-metadata-api/usage). + +:::callout +Todas las respuestas de la API de metadatos de tokens incluyen [límites de tasa de encabezados](/resources/guides/response-headers) que te ayudan a monitorear el uso de tu API con información de cuota específica de Stacks. +::: + +:::callout +type: help + +### ¿Necesitas ayuda para construir con la API de Metadatos de Tokens? + +Contáctanos en el #api canal activado [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horas de oficina semanales](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/apis/token-metadata-api/meta.json b/content/docs/es/apis/token-metadata-api/meta.json new file mode 100644 index 000000000..1fae121a6 --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Token Metadata API", + "root": true, + "pages": ["index", "usage", "---Reference---", "...reference"] +} diff --git a/content/docs/es/apis/token-metadata-api/reference/info/index.mdx b/content/docs/es/apis/token-metadata-api/reference/info/index.mdx new file mode 100644 index 000000000..c8532742d --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/info/index.mdx @@ -0,0 +1,6 @@ +--- +title: Información +index: true +full: true +description: Recupera información sobre la API de Metadatos de Token, incluyendo la versión del servidor. +--- diff --git a/content/docs/es/apis/token-metadata-api/reference/info/status.mdx b/content/docs/es/apis/token-metadata-api/reference/info/status.mdx new file mode 100644 index 000000000..1da45235d --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/info/status.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener estado +sidebarTitle: Estado +description: Recupera información sobre la API de Metadatos de Token, incluyendo la versión del servidor. +full: true +--- + diff --git a/content/docs/es/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx b/content/docs/es/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx new file mode 100644 index 000000000..5f7b566ab --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener metadatos de token fungible +sidebarTitle: Metadatos de token fungible +description: Recupera metadatos para un token fungible SIP-010. +full: true +--- + diff --git a/content/docs/es/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx b/content/docs/es/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx new file mode 100644 index 000000000..3138dcd99 --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener tokens fungibles +sidebarTitle: Tokens fungibles +description: Recupera información sobre tokens fungibles. +full: true +--- + diff --git a/content/docs/es/apis/token-metadata-api/reference/tokens/index.mdx b/content/docs/es/apis/token-metadata-api/reference/tokens/index.mdx new file mode 100644 index 000000000..603f061ff --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/tokens/index.mdx @@ -0,0 +1,6 @@ +--- +title: Tokens +index: true +full: true +description: Recupera información sobre tokens en la cadena de bloques de Stacks. +--- diff --git a/content/docs/es/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx b/content/docs/es/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx new file mode 100644 index 000000000..f917651a0 --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener metadatos de token no fungible +sidebarTitle: Metadatos de token no fungible +description: Recupera metadatos para un token no fungible SIP-009. +full: true +--- + diff --git a/content/docs/es/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx b/content/docs/es/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx new file mode 100644 index 000000000..c8d0e2384 --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx @@ -0,0 +1,7 @@ +--- +title: Obtener metadatos de token semi-fungible +sidebarTitle: Metadatos de token semi-fungible +description: Recupera información sobre tokens semi-fungibles. +full: true +--- + diff --git a/content/docs/es/apis/token-metadata-api/usage.mdx b/content/docs/es/apis/token-metadata-api/usage.mdx new file mode 100644 index 000000000..f708ad8a8 --- /dev/null +++ b/content/docs/es/apis/token-metadata-api/usage.mdx @@ -0,0 +1,47 @@ +--- +title: Uso básico +sidebarTitle: Uso +description: Aprende los conceptos básicos del uso de la API de Metadatos de Token. +--- +## Uso + +La API de Metadatos de Tokens está construida sobre principios REST, imponiendo HTTPS para todas las solicitudes para garantizar la seguridad, integridad y privacidad de los datos. + +### URL base + +```console -c +https://api.hiro.so +``` + +### Realizando solicitudes + +Para hacer una solicitud a la API de Metadatos de Token, puedes pegar el comando curl a continuación en tu terminal. + +```terminal +$ curl -L 'https://api.hiro.so/metadata/v1/ft' \ + -H 'Accept: application/json' +``` + +### Autenticación + +Si estás utilizando una api-key, reemplaza `$HIRO_API_KEY` con tu clave API secreta. + +```terminal +$ curl -L 'https://api.hiro.so/metadata/v1/ft' \ + -H 'Accept: application/json' \ + -H 'x-api-key: $HIRO_API_KEY' +``` + +## Códigos de respuesta + +La API de Metadatos de Tokens utiliza códigos de respuesta HTTP estándar para indicar el éxito o fracaso de la solicitud. + +| Código | Descripción | +|--------|-------------| +| `200` | Solicitud exitosa | +| `400` | Verifique que los parámetros fueran correctos | +| `401` | Clave de API faltante | +| `403` | Clave API inválida | +| `404` | Recurso no encontrado | +| `429` | Límite de tasa excedido | +| `5xx` | Errores del servidor | diff --git a/content/docs/es/meta.json b/content/docs/es/meta.json new file mode 100644 index 000000000..617976bc9 --- /dev/null +++ b/content/docs/es/meta.json @@ -0,0 +1,5 @@ +{ + "title": "hiro", + "root": true, + "pages": ["...tools", "...apis", "...reference", "...resources"] +} diff --git a/content/docs/es/reference/stacks.js/(connect)/broadcast-transactions.mdx b/content/docs/es/reference/stacks.js/(connect)/broadcast-transactions.mdx new file mode 100644 index 000000000..3964f983e --- /dev/null +++ b/content/docs/es/reference/stacks.js/(connect)/broadcast-transactions.mdx @@ -0,0 +1,168 @@ +--- +title: Transmitir transacciones +description: Solicita a los usuarios que firmen transacciones y las transmitan a la cadena de bloques de Stacks. +--- +import { Badge } from '@/components/ui/badge'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; + +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'; +import { ChevronRight, Code, Terminal } from 'lucide-react'; +import { File, Folder, Files } from 'fumadocs-ui/components/files'; + +El proceso de transmitir transacciones es fundamental para interactuar con blockchains, ya sea que estés transfiriendo tokens, desplegando contratos o ejecutando funciones de contratos. + +En esta guía, aprenderás cómo: + +1. [Instale los paquetes necesarios](#setup-and-installation) +2. [Conectar a la billetera de un usuario](#connect-to-a-users-wallet) +3. [Firmar y transmitir transacciones](#sign-and-broadcast-transactions) +4. [Manejar resultados de transacciones](#handle-transaction-results) + +*** + +## Configuración e instalación + +Instale los paquetes necesarios para comenzar a construir y transmitir transacciones: + +```package-install +@stacks/connect @stacks/transactions +``` + +## Conectar a la billetera de un usuario + +Antes de firmar transacciones, los usuarios necesitan conectar su billetera a su aplicación. Use el `connect` función para iniciar una conexión de billetera: + +```ts +import { connect, isConnected } from '@stacks/connect'; + +async function connectWallet() { + if (!isConnected()) { + const response = await connect(); + console.log('Connected with addresses:', response); + } +} +``` + +## Firmar y transmitir transacciones + +Hay tres tipos de transacciones que puedes crear: transferencias de STX, implementaciones de contratos y llamadas a contratos. + + + + + Transferencia de STX + + + + Despliegue de contratos + + + + Ejecución del contrato + + + + + Para transferir tokens STX, utiliza el `request` método con `stx_transferStx`: + + ```ts + import { request } from '@stacks/connect'; + + async function transferStx() { + const response = await request('stx_transferStx', { + recipient: 'ST2EB9WEQNR9P0K28D2DC352TM75YG3K0GT7V13CV', + amount: '100', // in micro-STX (1 STX = 1,000,000 micro-STX) + memo: 'Reimbursement', // optional + }); + + console.log('Transaction ID:', response.txId); + } + ``` + + + + Para desplegar un contrato inteligente, utiliza el `request` método con `stx_deployContract`: + + ```ts + import { request } from '@stacks/connect'; + + async function deployContract() { + const codeBody = '(define-public (say-hi) (ok "hello world"))'; + + const response = await request('stx_deployContract', { + name: 'my-contract', + code: codeBody, + clarityVersion: 3, // optional, defaults to latest version + }); + + console.log('Transaction ID:', response.txId); + } + ``` + + Los contratos se implementarán en la dirección de Stacks de la billetera conectada. + + + + Para llamar a una función de contrato, utiliza el `request` método con 'stx\_callContract'. Aquí hay un ejemplo usando un contrato simple: + + ```clarity + (define-public (say-hi) + (print "hi") + (ok u0) + ) + ``` + + Así es como se llama a esta función: + + ```ts + import { request } from '@stacks/connect'; + import { Cl } from '@stacks/transactions'; + + async function callContract() { + const response = await request('stx_callContract', { + contractAddress: 'ST22T6ZS7HVWEMZHHFK77H4GTNDTWNPQAX8WZAKHJ', + contractName: 'my-contract', + functionName: 'say-hi', + functionArgs: [], // array of Clarity values + }); + + console.log('Transaction ID:', response.txId); + } + ``` + + Para funciones que toman argumentos, puedes usar el `Cl` espacio de nombres para construir valores de Clarity: + + ```ts + const functionArgs = [ + Cl.uint(123), + Cl.stringAscii("hello"), + Cl.standardPrincipalCV("ST1X.."), + ]; + ``` + + + +## Manejar resultados de transacciones + +Cuando una transacción es firmada y transmitida, el `request` el método devuelve un objeto de respuesta que contiene información sobre la transacción: + +```ts +interface TransactionResponse { + txId: string; // The transaction ID + txRaw: string; // The raw transaction hex +} +``` + +Puedes usar el ID de la transacción para crear un enlace para ver la transacción en el explorador: + +```ts +async function handleTransaction() { + const response = await request('stx_transferStx', { + recipient: 'ST2EB9WEQNR9P0K28D2DC352TM75YG3K0GT7V13CV', + amount: '100', + }); + + const explorerUrl = `https://explorer.stacks.co/txid/${response.txId}`; + console.log('View transaction in explorer:', explorerUrl); +} +``` diff --git a/content/docs/es/reference/stacks.js/(connect)/connect-wallet.mdx b/content/docs/es/reference/stacks.js/(connect)/connect-wallet.mdx new file mode 100644 index 000000000..3c05f0861 --- /dev/null +++ b/content/docs/es/reference/stacks.js/(connect)/connect-wallet.mdx @@ -0,0 +1,135 @@ +--- +title: Conectar billetera +description: Aprende cómo conectarte a billeteras de Stacks y autenticar usuarios. +--- +Aprende cómo integrar conexiones de billetera en tu aplicación de Stacks. Conectar una billetera autentica a los usuarios y permite interacciones con la blockchain como transferencias y llamadas a contratos. + +## Lo que aprenderás + +:::objectives +* Instale el `@stacks/connect` paquete +* Conectar a una billetera y autenticar usuarios +* Gestionar el estado de autenticación +* Acceder a los datos de la cuenta del usuario +::: + +## Requisitos previos + +:::prerequisites +* Node.js instalado en tu máquina +* Una configuración de aplicación web (React, Vue o JavaScript puro) +* Comprensión básica de async/await +::: + +## Inicio rápido + + + + ### Instalar paquete + + Agregue el paquete Stacks Connect a su proyecto. + + ```package-install + @stacks/connect + ``` + + Este paquete proporciona todas las funciones necesarias para las conexiones de billeteras y la autenticación de usuarios. + + + + ### Conectar y autenticar + + El `connect` La función inicia la conexión de la billetera y almacena los datos del usuario en el almacenamiento local para la persistencia de la sesión. + + ```ts + import { connect, isConnected } from '@stacks/connect'; + + async function connectWallet() { + // Check if already connected + if (isConnected()) { + console.log('Already authenticated'); + return; + } + + // Connect to wallet + const response = await connect(); + console.log('Connected:', response.addresses); + } + ``` + + Gestiona el estado de autenticación en toda tu aplicación. + + ```ts + import { disconnect, isConnected } from '@stacks/connect'; + + // Check authentication status + const authenticated = isConnected(); + + // Logout function + function logout() { + disconnect(); // Clears storage and wallet selection + console.log('User disconnected'); + } + ``` + + + + ### Acceder a los datos del usuario + + Recuperar direcciones almacenadas y solicitar información detallada de la cuenta. + + ```ts + import { getLocalStorage, request } from '@stacks/connect'; + + // Get stored addresses from local storage + const userData = getLocalStorage(); + if (userData?.addresses) { + const stxAddress = userData.addresses.stx[0].address; + const btcAddress = userData.addresses.btc[0].address; + console.log('STX:', stxAddress); + console.log('BTC:', btcAddress); + } + ``` + + Obtenga información detallada de la cuenta, incluyendo las claves públicas. + + ```ts + // Request full account details + const accounts = await request('stx_getAccounts'); + const account = accounts.addresses[0]; + + console.log('Address:', account.address); + console.log('Public key:', account.publicKey); + console.log('Gaia URL:', account.gaiaHubUrl); + ``` + + + + ### Realiza tu primera transacción + + Utilice la conexión autenticada para enviar tokens STX. + + ```ts + import { request } from '@stacks/connect'; + + async function sendTransaction() { + const response = await request('stx_transferStx', { + amount: '1000000', // 1 STX in micro-STX + recipient: 'SP2MF04VAGYHGAZWGTEDW5VYCPDWWSY08Z1QFNDSN', + memo: 'First transfer', // optional + }); + + console.log('Transaction ID:', response.txid); + } + ``` + + La billetera solicitará al usuario que apruebe la transacción antes de transmitirla. + + + +## Próximos pasos + +:::next-steps +* [Firmar mensajes](/reference/stacks.js/message-signing): Demostrar la propiedad de la dirección +* [Transmitir transacciones](/reference/stacks.js/broadcast-transactions): Aprende sobre diferentes tipos de transacciones +::: diff --git a/content/docs/es/reference/stacks.js/(connect)/message-signing.mdx b/content/docs/es/reference/stacks.js/(connect)/message-signing.mdx new file mode 100644 index 000000000..7ed6944bf --- /dev/null +++ b/content/docs/es/reference/stacks.js/(connect)/message-signing.mdx @@ -0,0 +1,199 @@ +--- +title: Firmar mensajes +description: Aprende cómo firmar y verificar mensajes para demostrar la propiedad de una dirección y autorizar acciones +--- +Aprende cómo implementar la firma de mensajes en tu aplicación Stacks. La firma de mensajes permite a los usuarios probar criptográficamente que controlan una dirección sin realizar una transacción en la cadena, permitiendo autenticación, autorización y declaraciones verificables. + +:::objectives +* Conéctese a la billetera de un usuario y solicite firmas de mensajes +* Firme tanto mensajes de texto simples como datos estructurados +* Verificar firmas para garantizar la autenticidad +::: + +:::prerequisites +* Node.js instalado en tu máquina +* Un editor de código como VS Code +::: + +## Instalación + +Instale los paquetes necesarios para la firma y verificación de mensajes. + +```package-install +@stacks/connect @stacks/encryption +``` + +## Conectar a la billetera + +Antes de firmar mensajes, establezca una conexión con la billetera del usuario. La conexión persiste a través de las recargas de página. + +```ts +import { connect, isConnected } from '@stacks/connect'; + +async function connectWallet() { + if (!isConnected()) { + const response = await connect(); + console.log('Connected addresses:', response.addresses); + } +} +``` + +Llama a esta función cuando tu aplicación se cargue o cuando el usuario haga clic en un botón de conexión. + +## Firmar mensajes de texto + +Solicitar una firma para un mensaje de texto simple utilizando el `request` método. + +```ts +import { request } from '@stacks/connect'; + +async function signMessage() { + const message = 'Hello World'; + + const response = await request('stx_signMessage', { + message, + }); + + console.log('Signature:', response.signature); + console.log('Public key:', response.publicKey); + + return response; +} +``` + +La cartera mostrará el mensaje al usuario para su aprobación antes de firmar. + +## Firmar datos estructurados + +Para datos más complejos, utilice la firma de mensajes estructurados con valores de Clarity. + +```ts +import { request } from '@stacks/connect'; +import { Cl } from '@stacks/transactions'; + +async function signStructuredMessage() { + const message = Cl.tuple({ + action: Cl.stringAscii('transfer'), + amount: Cl.uint(1000), + recipient: Cl.stringAscii('alice.btc') + }); + + const domain = Cl.tuple({ + name: Cl.stringAscii('My App'), + version: Cl.stringAscii('1.0.0'), + 'chain-id': Cl.uint(1) // 1 for mainnet + }); + + const response = await request('stx_signStructuredMessage', { + message, + domain + }); + + return response; +} +``` + +Los mensajes estructurados proporcionan una mejor seguridad de tipos y son más fáciles de analizar en la cadena. + +## Verificar firmas + +Validar firmas para asegurar que coincidan con el mensaje esperado y la clave pública. + +```ts +import { verifyMessageSignatureRsv } from '@stacks/encryption'; + +async function verifySignature( + message: string, + signature: string, + publicKey: string +): Promise { + const isValid = verifyMessageSignatureRsv({ + message, + signature, + publicKey + }); + + if (isValid) { + console.log('✓ Signature verified successfully'); + } else { + console.log('✗ Invalid signature'); + } + + return isValid; +} +``` + +Siempre verifique las firmas antes de confiar en los datos firmados. + +### Completar el flujo de verificación + +```ts +async function signAndVerify() { + // Request signature + const message = 'Authorize login at ' + new Date().toISOString(); + const signResponse = await request('stx_signMessage', { message }); + + // Verify immediately + const isValid = await verifySignature( + message, + signResponse.signature, + signResponse.publicKey + ); + + if (isValid) { + // Proceed with authenticated action + console.log('Authentication successful'); + } +} +``` + +## Pruébalo + +Crea un sistema de autenticación simple utilizando firmas de mensajes. + +```ts +// Generate a unique challenge +function generateChallenge(): string { + const nonce = Math.random().toString(36).substring(7); + const timestamp = Date.now(); + return `Sign this message to authenticate:\nNonce: ${nonce}\nTime: ${timestamp}`; +} + +// Complete auth flow +async function authenticate() { + const challenge = generateChallenge(); + + try { + const response = await request('stx_signMessage', { + message: challenge + }); + + const isValid = verifyMessageSignatureRsv({ + message: challenge, + signature: response.signature, + publicKey: response.publicKey + }); + + if (isValid) { + // Store auth token or session + localStorage.setItem('auth', JSON.stringify({ + publicKey: response.publicKey, + timestamp: Date.now() + })); + + return { success: true }; + } + } catch (error) { + console.error('Authentication failed:', error); + } + + return { success: false }; +} +``` + +## Próximos pasos + +:::next-steps +* [Transmitir transacciones](/reference/stacks.js/broadcast-transactions): Aprende cómo firmar y transmitir transacciones +* [Referencia de la API de Connect](/reference/stacks.js/packages/connect): Explora todos los métodos disponibles +::: diff --git a/content/docs/es/reference/stacks.js/(connect)/migration-guide.mdx b/content/docs/es/reference/stacks.js/(connect)/migration-guide.mdx new file mode 100644 index 000000000..9c3cbebca --- /dev/null +++ b/content/docs/es/reference/stacks.js/(connect)/migration-guide.mdx @@ -0,0 +1,103 @@ +--- +title: Guía de Migración +description: Cómo migrar de v7.x.x a v8.x.x de @stacks/connect +--- +import { Steps, Step } from 'fumadocs-ui/components/steps' + +Durante un tiempo, la comunidad de Stacks ha estado trabajando en un nuevo estándar para la comunicación entre billeteras y dapps. +Stacks Connect y proyectos relacionados ahora utilizan estándares como [WBIPs](https://wbips.netlify.app/) y [SIP-030](https://github.com/janniks/sips/blob/main/sips/sip-030/sip-030-wallet-interface.md) para permitir que las billeteras se comuniquen con las dapps de una manera más simplificada y flexible. + +:::callout +### Estado de la Migración + +**Siéntete libre de seguir usando Stacks Connect `7.x.x` mientras las cosas se estabilizan.** +El `7.x.x` La versión puede seguir siendo mejor soportada por algunas billeteras. + +Para la versión heredada de `@stacks/connect` usando tokens JWT, puedes usar: + +```sh +npm install @stacks/connect@7.10.1 +``` +::: + +## Obsolescencias + +Las siguientes clases, métodos y tipos están obsoletos en favor de los nuevos `request` Métodos RPC: + +* `show...` y `open...` métodos +* `authenticate` método +* `UserSession` clase y funcionalidad relacionada +* `AppConfig` clase +* `SessionOptions` interfaz +* `SessionData` interfaz +* `UserData` interfaz +* `SessionDataStore` clase +* `InstanceDataStore` clase +* `LocalStorageStore` clase + +:::callout +### Compatibilidad hacia atrás + +Para facilitar la migración, el familiar `UserSession` & `AppConfig` la clase aún existe y es semi-compatible con versiones anteriores para el `8.x.x` lanzamiento. +"Almacenará en caché" la dirección del usuario en el almacenamiento local y permitirá el acceso a ella a través del `loadUserData` método (como se hizo anteriormente). +::: + +## Pasos de migración + +Para actualizar desde `<=7.x.x` a la última/`8.x.x`, sigue estos pasos: + + + + ```sh + npm install @stacks/connect@latest + ``` + + + + Cambiar de `showXyz`, `openXyz`, `doXyz` métodos al `request` método: + + * `request` sigue el patrón `request(method: string, params: object)`, ver [Uso](#usage) para más detalles + * `request` es una función asíncrona, así que reemplaza el `onFinish` y `onCancel` devoluciones de llamada con `.then().catch()` o `try & await` + + Ejemplos: + + * `showConnect()`, `authenticate()` → `connect()` + * `useConnect().doContractCall({})` → `request("stx_callContract", {})` + * `openContractDeploy()` → `request("stx_deployContract", {})` + + + + Cambiar de `showConnect` o `authenticate` a `connect()` métodos: + + * `connect()` es un alias para `request({forceWalletSelect: true}, 'getAddresses')` + * `connect()` por defecto almacena en caché la dirección del usuario en el almacenamiento local + + + + * Cambiar de `UserSession.isSignedIn()` a `isConnected()` + * Cambiar de `UserSession.signUserOut()` a `disconnect()` + + + + * Eliminar código que haga referencia a métodos obsoletos (`AppConfig`, `UserSession`, etc.) + * Elimina el `@stacks/connect-react` paquete + * Es posible que necesites recargar manualmente un componente para ver las actualizaciones del almacenamiento local + * Ya no se necesitan hooks personalizados para usar Stacks Connect + * Estamos trabajando en un nuevo `@stacks/react` paquete que hará que el uso sea aún más fácil en el futuro (por ejemplo, seguimiento del estado de las transacciones, recarga de componentes cuando se establece una conexión, actualización de la página cuando cambia la red, y más) + + + +## Acceso a Direcciones + +Anteriormente, el `UserSession` La clase se utilizaba para acceder a las direcciones y datos del usuario, lo cual abstraía los detalles de implementación subyacentes. +Ahora, el `request` El método se utiliza para interactuar directamente con la billetera, dando a los desarrolladores un control más explícito y claridad sobre lo que está sucediendo internamente. +Este enfoque manual hace que la interacción con la billetera sea más transparente y personalizable. +Los desarrolladores pueden gestionar manualmente la dirección del usuario actualmente conectado en, por ejemplo, almacenamiento local, jotai, etc. o usar el `connect()`/`request()` método para almacenar en caché la dirección en el almacenamiento local. + +:::callout +type: warn + +### Nota de seguridad + +Por razones de seguridad, el `8.x.x` release solo devuelve la dirección de la red actual (donde anteriormente se devolvían las direcciones tanto de mainnet como de testnet). +::: diff --git a/content/docs/es/reference/stacks.js/(connect)/wallet-support.mdx b/content/docs/es/reference/stacks.js/(connect)/wallet-support.mdx new file mode 100644 index 000000000..0ef88a5d3 --- /dev/null +++ b/content/docs/es/reference/stacks.js/(connect)/wallet-support.mdx @@ -0,0 +1,56 @@ +--- +title: Soporte de Billetera +description: Información de compatibilidad para diferentes proveedores de billeteras +--- +Esta página proporciona información detallada sobre qué métodos y eventos son compatibles con diferentes proveedores de billeteras en el ecosistema de Stacks. + +## Compatibilidad de Métodos + +* 🔴 Sin soporte (aún) +* 🟡 Soporte parcial +* 🟢 Soportado + +| Método | Cuero | Tipo Xverse | +|-----------------------------|----------------------------------------------|---------------------------------------------------------------| +| `getAddresses` | 🟡 Sin soporte para fines experimentales | 🟡 Uso `wallet_connect` en su lugar | +| `sendTransfer` | 🟡 Espera `amount` como cadena | 🟡 Espera `amount` como número | +| `signPsbt` | 🟡 Usa solo el array de índices de firma | 🟡 Usa `signInputs` registro en lugar de matriz | +| `stx_getAddresses` | 🟢 | 🔴 | +| `stx_getAccounts` | 🔴 | 🟢 | +| `stx_getNetworks` | 🔴 | 🔴 | +| `stx_transferStx` | 🟢 | 🟢 | +| `stx_transferSip10Ft` | 🟢 | 🔴 | +| `stx_transferSip9Nft` | 🟢 | 🔴 | +| `stx_callContract` | 🟡 Valores de Clarity codificados en hexadecimal solamente | 🟡 Valores de Clarity codificados en hexadecimal solamente, sin soporte para `postConditions` | +| `stx_deployContract` | 🟡 Valores de Clarity codificados en hexadecimal solamente | 🟡 Valores de Clarity codificados en hexadecimal solamente, sin soporte para `postConditions` | +| `stx_signTransaction` | 🟡 Valores de Clarity codificados en hexadecimal solamente | 🟡 Valores de Clarity codificados en hexadecimal solamente | +| `stx_signMessage` | 🟡 Valores de Clarity codificados en hexadecimal solamente | 🟡 Valores de Clarity codificados en hexadecimal solamente | +| `stx_signStructuredMessage` | 🟡 Valores de Clarity codificados en hexadecimal solamente | 🟡 Valores de Clarity codificados en hexadecimal solamente | +| `stx_updateProfile` | 🔴 | 🔴 | + +## Compatibilidad de Eventos + +| Evento | Leather | Xverse | +|---------------------|---------|--------| +| `stx_accountChange` | 🔴 | 🔴 | +| `stx_networkChange` | 🔴 | 🔴 | + +## Capa de Compatibilidad + +El `request` método en `@stacks/connect` agrega una capa de auto-compatibilidad para diferentes proveedores de billeteras. Esto ayuda a unificar la interfaz donde los proveedores de billeteras pueden implementar métodos y resultados de manera diferente. + +* 🟢 No se necesitan anulaciones para ninguna cartera +* 🔵 Tiene anulaciones de compatibilidad que mantienen la funcionalidad +* 🟡 Tiene anulaciones disruptivas que pueden perder cierta información + +| Método | Estado | Notas | +| --------------------------- | ------ | ---------------------------------------------------------------------------------------------------- | +| `getAddresses` | 🔵 | Se asigna a `wallet_connect` para billeteras tipo Xverse | +| `sendTransfer` | 🔵 | Convierte `amount` para número en Xverse, cadena en Leather | +| `signPsbt` | 🟡 | Transforma el formato PSBT para Leather (base64 a hex) con reestructuración con pérdidas de `signInputs` | +| `stx_getAddresses` | 🔵 | Se asigna a `wallet_connect` para billeteras tipo Xverse | +| `stx_callContract` | 🔵 | Transforma los valores de Clarity a formato codificado en hexadecimal para compatibilidad | +| `stx_deployContract` | 🔵 | Transforma los valores de Clarity a formato codificado en hexadecimal para compatibilidad | +| `stx_signTransaction` | 🔵 | Transforma los valores de Clarity a formato codificado en hexadecimal para compatibilidad | +| `stx_signMessage` | 🔵 | Transforma los valores de Clarity a formato codificado en hexadecimal para compatibilidad | +| `stx_signStructuredMessage` | 🔵 | Transforma los valores de Clarity a formato codificado en hexadecimal para compatibilidad | diff --git a/content/docs/es/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx b/content/docs/es/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx new file mode 100644 index 000000000..bdcad9224 --- /dev/null +++ b/content/docs/es/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx @@ -0,0 +1,201 @@ +--- +title: Integración del oráculo Pyth +sidebarTitle: Integración del oráculo Pyth +description: En esta guía, aprenderás cómo integrar las fuentes de precios de Pyth Network en tu aplicación frontend utilizando Stacks.js. +isNew: true +--- +import { File, Folder, Files } from 'fumadocs-ui/components/files'; +import { Steps, Step } from '@/components/steps'; +import { ArrowRight, Check } from 'lucide-react'; + +## Lo que aprenderás + +:::objectives +* Instalar y configurar el SDK de Pyth +* Obtener mensajes VAA de la API de Hermes +* Construir transacciones con datos de oráculo +* Manejar las post-condiciones para las tarifas del oráculo +::: + +## Requisitos previos + +:::prerequisites +* Una aplicación de React o Node.js con Stacks.js instalado +* Comprensión de [Contratos de oráculo Pyth](/resources/clarity/external-data) +::: + +## Inicio rápido + + + + ### Instalar dependencias + + Instale el SDK de Pyth junto con sus paquetes existentes de Stacks.js: + + ```package-install + @pythnetwork/price-service-client buffer + ``` + + El paquete buffer es necesario para la conversión de formato de datos en entornos de navegador. + + + + ### Configurar el cliente de Pyth + + Crear un servicio para manejar las interacciones del feed de precios de Pyth: + + ```typescript services/pyth.ts + import { PriceServiceConnection } from '@pythnetwork/price-service-client'; + import { Buffer } from 'buffer'; + + // Price feed IDs + export const PRICE_FEEDS = { + BTC_USD: '0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43', + STX_USD: '0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17', + ETH_USD: '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace', + USDC_USD: '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a' + }; + + // Initialize Pyth client + const pythClient = new PriceServiceConnection( + 'https://hermes.pyth.network', + { + priceFeedRequestConfig: { + binary: true // Request binary format for on-chain use + } + } + ); + + export async function fetchPriceUpdateVAA(priceFeedId: string): Promise { + try { + // Fetch the latest VAA for the price feed + const vaas = await pythClient.getLatestVaas([priceFeedId]); + + if (!vaas || vaas.length === 0) { + throw new Error('No VAA data received'); + } + + // Convert base64 to hex for Clarity + const messageBuffer = Buffer.from(vaas[0], 'base64'); + const hexString = messageBuffer.toString('hex'); + + return `0x${hexString}`; + } catch (error) { + console.error('Failed to fetch price VAA:', error); + throw error; + } + } + ``` + + + + ### Construir transacciones habilitadas por oráculo + + Crear una transacción que incluya datos de precios actualizados: + + ```typescript components/PythTransaction.tsx + import { request } from '@stacks/connect'; + import { + Cl, + PostConditionMode + } from '@stacks/transactions'; + import { fetchPriceUpdateVAA, PRICE_FEEDS } from '../services/pyth'; + import { useState } from 'react'; + + export function MintWithOraclePrice() { + const [loading, setLoading] = useState(false); + + const handleMint = async () => { + setLoading(true); + try { + // Fetch fresh price data + const priceVAA = await fetchPriceUpdateVAA(PRICE_FEEDS.BTC_USD); + + // Convert hex string to buffer Clarity value + const vaaBuffer = Cl.bufferFromHex(priceVAA.slice(2)); + + // Call contract with price data using request + const response = await request('stx_callContract', { + contract: 'SP1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRCBGD7R.benjamin-club', + functionName: 'mint-for-hundred-dollars', + functionArgs: [vaaBuffer], + postConditionMode: 'deny', + network: 'mainnet' + }); + + console.log('Transaction submitted:', response.txid); + alert(`NFT minted! Transaction ID: ${response.txid}`); + } catch (error) { + console.error('Minting failed:', error); + alert('Failed to mint NFT'); + } finally { + setLoading(false); + } + }; + + return ( + + ); + } + ``` + + + + ### Agregar post-condiciones para las tarifas del oráculo + + Las actualizaciones del oráculo de Pyth requieren una pequeña tarifa. Incluya condiciones posteriores al llamar a contratos: + + ```typescript components/MintWithPostConditions.tsx + import { request } from '@stacks/connect'; + import { Cl, Pc } from '@stacks/transactions'; + import { fetchPriceUpdateVAA, PRICE_FEEDS } from '../services/pyth'; + + export function MintWithPostConditions() { + const handleMint = async () => { + const userAddress = 'SP1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRCBGD7R'; + + // Create post-conditions + const postConditions = [ + // Oracle fee (1 uSTX) + Pc.principal(userAddress).willSendLte(1).ustx(), + // sBTC transfer for $100 worth (example: 100,000 sats) + Pc.principal(userAddress) + .willSendEq(100000) + .ft('SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sbtc-token', 'sbtc') + ]; + + try { + const priceVAA = await fetchPriceUpdateVAA(PRICE_FEEDS.BTC_USD); + + const response = await request('stx_callContract', { + contract: `${userAddress}.benjamin-club`, + functionName: 'mint-for-hundred-dollars', + functionArgs: [Cl.bufferFromHex(priceVAA.slice(2))], + postConditions, + postConditionMode: 'deny', + network: 'mainnet' + }); + + console.log('Transaction successful:', response.txid); + } catch (error) { + console.error('Transaction failed:', error); + } + }; + + return ; + } + ``` + + + +## Próximos pasos + +:::next-steps +* [Contratos de Clarity](/resources/clarity/external-data): Aprende cómo integrar el oráculo Pyth con contratos de Clarity. +* [Pruebas con Clarinet](/tools/clarinet/pyth-oracle-integration): Aprende cómo probar la integración del oráculo Pyth con Clarinet. +::: diff --git a/content/docs/es/reference/stacks.js/(integrations)/react-native-integration.mdx b/content/docs/es/reference/stacks.js/(integrations)/react-native-integration.mdx new file mode 100644 index 000000000..706d0004d --- /dev/null +++ b/content/docs/es/reference/stacks.js/(integrations)/react-native-integration.mdx @@ -0,0 +1,292 @@ +--- +title: Uso de Stacks.js con React Native +sidebarTitle: Integración de React Native +description: Aprende cómo integrar la funcionalidad de la blockchain de Stacks en aplicaciones móviles de React Native +--- +Stacks.js puede integrarse en aplicaciones de React Native para llevar la funcionalidad de blockchain a dispositivos móviles. Este tutorial te guía a través de la configuración de un proyecto de React Native con Expo y su configuración para trabajar con las bibliotecas de Stacks.js. + +:::objectives +* Configurar un proyecto Expo configurado para Stacks.js +* Instalar y configurar los polyfills necesarios para React Native +* Generar billeteras y firmar transacciones en una aplicación móvil +* Manejar las limitaciones del entorno JavaScript de React Native +* Construye una aplicación móvil funcional de Stacks +::: + +:::prerequisites +* Node.js y npm instalados en tu máquina de desarrollo +* Conocimiento básico de React Native y Expo +* Familiaridad con los conceptos de Stacks.js +* Dispositivo o simulador iOS o Android para pruebas +::: + +## Configurar el proyecto Expo + +Comience creando un nuevo proyecto de Expo. La última versión de Expo proporciona la mejor compatibilidad con los polyfills de Stacks.js. + +```terminal +$ npx create-expo-app@latest my-stacks-app +$ cd my-stacks-app +``` + +El proyecto de plantilla incluye todo lo necesario para comenzar a construir. Pruebe la configuración inicial ejecutando el servidor de desarrollo. + +```terminal +$ npm start +``` + +Conecte su dispositivo móvil usando la aplicación Expo Go y escanee el código QR para verificar que el proyecto base funciona correctamente. + +## Instalar las dependencias necesarias + +El entorno JavaScript de React Native carece de ciertas APIs de Node.js y del navegador que Stacks.js requiere. Instale las bibliotecas principales de Stacks junto con los polyfills necesarios. + +```terminal +$ npm install @stacks/transactions @stacks/wallet-sdk +``` + +Instale las dependencias del polyfill como dependencias de desarrollo para manejar las APIs faltantes. + +```terminal +$ npm install --save-dev buffer process react-native-get-random-values \ + text-encoding readable-stream crypto-browserify @peculiar/webcrypto +``` + +Estos polyfills proporcionan: + +* `buffer` y `process` - Globales de Node.js +* `react-native-get-random-values` - Valores aleatorios criptográficos +* `text-encoding` - APIs de TextEncoder/TextDecoder +* `crypto-browserify` y `@peculiar/webcrypto` - Funciones criptográficas + +## Configurar el empaquetador Metro + +El empaquetador Metro necesita configuración para resolver correctamente los módulos de Node.js. Cree un archivo de configuración personalizado de Metro. + +```terminal +$ npx expo customize metro.config.js +``` + +Actualice la configuración para mapear los módulos de Node.js a sus versiones compatibles con React Native. + +```js metro.config.js +const { getDefaultConfig } = require("expo/metro-config"); + +const config = getDefaultConfig(__dirname); + +config.resolver.extraNodeModules = { + stream: require.resolve("readable-stream"), + crypto: require.resolve("crypto-browserify"), +}; + +module.exports = config; +``` + +Esta configuración garantiza que cuando Stacks.js solicita módulos de Node.js, Metro proporciona los polyfills adecuados. + +## Configurar polyfills globales + +Crear un sistema de polyfill para hacer que las APIs del navegador y Node.js estén disponibles en React Native. Esto requiere modificar el punto de entrada de la aplicación. + +### Crear el archivo polyfill + +Cree un nuevo archivo para inicializar todos los objetos globales requeridos. + +```js polyfill.js +import { Buffer } from "buffer/"; +import process from "process"; +import "react-native-get-random-values"; +import { TextDecoder, TextEncoder } from "text-encoding"; + +global.process = process; +global.Buffer = Buffer; +global.TextEncoder = TextEncoder; +global.TextDecoder = TextDecoder; +``` + +### Crear punto de entrada personalizado + +Crear un nuevo punto de entrada que cargue polyfills antes de que la aplicación se inicie. + +```js index.js +import "./polyfill"; +import { Crypto } from "@peculiar/webcrypto"; + +Object.assign(global.crypto, new Crypto()); + +import "expo-router/entry"; +``` + +### Actualizar package.json + +Dirija la aplicación para que utilice el nuevo punto de entrada. + +```json package.json +{ + "main": "index.js", + // ... other configuration +} +``` + +:::callout +type: warn + +### Errores de inicialización en tiempo de ejecución + +Los polyfills deben cargarse en archivos separados como se muestra. Cargarlos en el mismo archivo puede causar errores de inicialización en tiempo de ejecución. +::: + +## Implementar la funcionalidad de pilas + +Con el entorno configurado, ahora puede utilizar Stacks.js en sus componentes de React Native. Actualice la pantalla principal para demostrar la generación de billeteras y la firma de transacciones. + +### Importar módulos de Stacks.js + +Edite el componente de la pantalla principal para importar las funciones necesarias de Stacks.js. + +```tsx app/(tabs)/index.tsx +import { + TransactionVersion, + getAddressFromPrivateKey, + makeSTXTokenTransfer, +} from "@stacks/transactions"; +import { Wallet, generateSecretKey, generateWallet } from "@stacks/wallet-sdk"; +import { useState } from "react"; +import { Button } from "react-native"; +``` + +### Configurar el estado del componente + +Crear variables de estado para gestionar los datos de la cartera y la retroalimentación del usuario. + +```tsx app/(tabs)/index.tsx +export default function HomeScreen() { + const [mnemonic, setMnemonic] = useState("Press button to generate"); + const [wallet, setWallet] = useState(null); + const [log, setLog] = useState(""); + + // Component implementation continues... +} +``` + +### Generar billetera y firmar transacción + +Implementar la funcionalidad principal para crear una billetera y firmar una transacción. + +```tsx app/(tabs)/index.tsx +const generate = async () => { + try { + // Generate a new seed phrase + const mnemonic = generateSecretKey(); + setMnemonic(mnemonic); + + // Create wallet from seed phrase + const wallet = await generateWallet({ + secretKey: mnemonic, + password: "", + }); + setWallet(wallet); + + // Create and sign a transaction + const txOptions = { + amount: 1000, + anchorMode: "any" as const, + recipient: "SP3W993D3BRDYB284CY3SBFDEGTC5XEDJPDEA21CN", + senderKey: wallet.accounts[0].stxPrivateKey, + fee: 300, + network: "testnet" as const, + nonce: 0, + }; + + const transaction = await makeSTXTokenTransfer(txOptions); + setLog("Transaction signed successfully ✓"); + } catch (error) { + setLog(`Error: ${error.message}`); + } +}; +``` + +### Construir la interfaz de usuario + +Crear una interfaz de usuario simple para mostrar información de la billetera y activar la generación de billeteras. + +```tsx app/(tabs)/index.tsx +return ( + + Stacks Wallet Demo + + + Seed Phrase + {mnemonic} + + ); + } + ``` + + Para obtener detalles completos sobre la integración del frontend, consulte nuestra [Guía de integración de Stacks.js](/reference/stacks.js/pyth-oracle-integration). + + + + ### Prueba tu implementación + + Escriba pruebas exhaustivas utilizando Clarinet: + + ```typescript tests/benjamin-club.test.ts + import { describe, expect, it } from "vitest"; + import { Cl } from '@stacks/transactions'; + + describe("Benjamin Club Tests", () => { + it("should calculate correct sBTC amount", () => { + // Set mock BTC price to $100,000 + simnet.callPublicFn( + "mock-pyth-oracle", + "set-mock-price", + [ + Cl.bufferFromHex(BTC_FEED_ID), + Cl.int(10000000000000), // $100,000 with 8 decimals + Cl.int(-8) + ], + deployer + ); + + // Test price calculation + const response = simnet.callReadOnlyFn( + "benjamin-club", + "get-required-sbtc-amount", + [], + wallet1 + ); + + // $100 at $100k/BTC = 0.001 BTC = 100,000 sats + expect(response.result).toBeOk(Cl.uint(100000)); + }); + }); + ``` + + Para estrategias avanzadas de pruebas, incluyendo simulación de mainnet, consulte nuestra [Guía de pruebas de Clarinet](/tools/clarinet/pyth-oracle-integration). + + + +## Mejores prácticas + +### Frescura del precio + +Siempre verifique que los datos de precios sean lo suficientemente recientes para su caso de uso: + +```clarity +(define-constant MAX-PRICE-AGE u300) ;; 5 minutes + +(define-private (verify-price-freshness (price-data (tuple))) + (let ((age (- block-height (get publish-time price-data)))) + (asserts! (<= age MAX-PRICE-AGE) ERR-STALE-PRICE) + (ok true))) +``` + +### Manejo de errores + +Implementar un manejo integral de errores para fallos del oráculo: + +```typescript +try { + const vaa = await fetchBTCPriceVAA(); + // Process VAA... +} catch (error) { + if (error.message.includes('Network')) { + // Retry with exponential backoff + await retryWithBackoff(() => fetchBTCPriceVAA()); + } else { + // Handle other errors + throw error; + } +} +``` + +### Optimización de gas + +Agrupe múltiples actualizaciones de precios cuando sea posible: + +```clarity +(define-public (update-multiple-prices + (btc-vaa (buff 8192)) + (eth-vaa (buff 8192)) + (stx-vaa (buff 8192))) + (let ((all-vaas (concat btc-vaa (concat eth-vaa stx-vaa)))) + (contract-call? PYTH-ORACLE verify-and-update-price-feeds all-vaas params))) +``` + +## Solución de problemas + +### Problemas comunes + + + + La verificación de VAA falla + + + Asegúrate de obtener datos VAA con `binary: true` opción y convirtiendo de base64 a hexadecimal correctamente. El VAA debe ser reciente (típicamente dentro de 5 minutos). + + + + + Los cálculos de precios son incorrectos + + + Verifica que estés manejando el exponente correctamente. Pyth utiliza una representación de punto fijo donde el precio real = precio\_bruto \* 10^exponente. Para exponentes negativos, divide por 10^(-exponente). + + + + + Se agota el gas de la transacción + + + Las actualizaciones del oráculo pueden consumir mucho gas. Asegúrese de que sus límites de gas tengan en cuenta tanto la actualización del oráculo como la lógica de su contrato. Considere almacenar en caché los precios cuando múltiples operaciones necesiten el mismo precio. + + + + +## Consideraciones de seguridad + +1. **Manipulación de precios**: Utiliza siempre intervalos de confianza e implementa comprobaciones de cordura +2. **Adelantamiento**: Considere utilizar esquemas de compromiso-revelación para operaciones sensibles al precio +3. **Tarifas del oráculo**: Establecer condiciones posteriores apropiadas para limitar la exposición a tarifas +4. **Obsolescencia**: Rechazar precios más antiguos que tu umbral de seguridad + +## Referencia rápida + +### Direcciones de contratos + +| Red | Contrato | Dirección | +|---------|----------|---------| +| Mainnet | pyth-oracle-v3 | `SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-oracle-v3` | +| Mainnet | pyth-storage-v3 | `SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-storage-v3` | +| Red de pruebas | pyth-oracle-v3 | `ST3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-oracle-v3` | + +### IDs de fuentes de precios + +| Activo | ID del Feed | +|-------|---------| +| BTC/USD | `0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43` | +| STX/USD | `0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17` | +| ETH/USD | `0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace` | +| USDC/USD | `0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a` | + +## Recursos adicionales + +* [Documentación de Pyth Network](https://docs.pyth.network) +* [Integración de Pyth en Trust Machines](https://github.com/Trust-Machines/stacks-pyth-bridge) +* [Especificación VAA de Wormhole](https://wormhole.com/docs/protocol/infrastructure/vaas/) + +## Próximos pasos + +:::next-steps +* [Inmersión profunda en Clarity](/resources/clarity/external-data): Patrones avanzados de oráculos y optimizaciones +* [Inmersión profunda en el frontend](/reference/stacks.js/pyth-oracle-integration): Construyendo interfaces de usuario de oráculos listas para producción +::: diff --git a/content/docs/es/resources/snippets/build-a-stx-pc.mdx b/content/docs/es/resources/snippets/build-a-stx-pc.mdx new file mode 100644 index 000000000..37a0ab4a8 --- /dev/null +++ b/content/docs/es/resources/snippets/build-a-stx-pc.mdx @@ -0,0 +1,47 @@ +--- +title: Construir una post-condición STX +description: Una función auxiliar que crea una post-condición para transferencias de tokens STX utilizando la clase constructora Pc, asegurando que se transfieran las cantidades exactas según lo esperado. +full: true +--- +```typescript +import { + AnchorMode, + broadcastTransaction, + makeSTXTokenTransfer, + Pc, + PostConditionMode, +} from "@stacks/transactions"; + +// Create a post-condition that ensures exactly 10 STX is sent +const pc = Pc.principal("ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM") + .willSendEq(10000000) // 10 STX in micro-STX + .ustx(); + +const txOptions = { + recipient: "ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5", + amount: 10000000, + senderKey: "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601", + network: "testnet", + postConditions: [pc], + postConditionMode: PostConditionMode.Deny, + anchorMode: AnchorMode.Any, +}; + +const transaction = await makeSTXTokenTransfer(txOptions); +const broadcastResponse = await broadcastTransaction(transaction); +console.log("Transaction ID:", broadcastResponse.txid); +``` + +## Casos de uso + +* Asegurando las transferencias de tokens STX con validación del monto de transferencia +* Protegiendo a los usuarios de transferencias de tokens inesperadas +* Asegurando que las interacciones del contrato se comporten como se espera + +## Conceptos clave + +El `Pc` builder proporciona una interfaz fluida para crear post-condiciones: + +* `Pc.principal()` - Especificar el principal que enviará los tokens +* `.willSendEq()` - Asegúrate de que se envíe exactamente esta cantidad (también admite `willSendGte`, `willSendLte`, `willSendGt`, `willSendLt`) +* `.ustx()` - Especificar el tipo de token (micro-STX) diff --git a/content/docs/es/resources/snippets/build-an-ft-pc.mdx b/content/docs/es/resources/snippets/build-an-ft-pc.mdx new file mode 100644 index 000000000..e2ed8a2ec --- /dev/null +++ b/content/docs/es/resources/snippets/build-an-ft-pc.mdx @@ -0,0 +1,33 @@ +--- +title: Construir una post-condición FT +description: Crear post-condiciones para transferencias de tokens fungibles para garantizar que se transfieran las cantidades exactas según lo esperado +--- +```typescript +import { Pc } from '@stacks/transactions'; + +// Create a post-condition for fungible token transfers +const postCondition = Pc.principal("ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM") + .willSendGte(500) // Amount in token's smallest unit + .ft("ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.token-ft", "my-token"); + +// Use in transaction options +const txOptions = { + // ... other transaction options + postConditions: [postCondition], + postConditionMode: PostConditionMode.Deny, +}; +``` + +## Casos de uso + +* Asegurando transferencias de tokens fungibles con validación de cantidad +* Protegiendo a los usuarios de transferencias inesperadas de tokens en protocolos DeFi +* Asegurando que los intercambios de tokens ocurran con las cantidades esperadas + +## Conceptos clave + +El `Pc` constructor para tokens fungibles acepta: + +* `.ft()` - Toma dos parámetros: + * Dirección del contrato con el nombre del activo (p. ej., `"contract.asset-name"`) + * Nombre del token según se define en el contrato diff --git a/content/docs/es/resources/snippets/build-an-nft-pc.mdx b/content/docs/es/resources/snippets/build-an-nft-pc.mdx new file mode 100644 index 000000000..9c85422a2 --- /dev/null +++ b/content/docs/es/resources/snippets/build-an-nft-pc.mdx @@ -0,0 +1,30 @@ +--- +title: Construir una post-condición NFT +description: Crear condiciones posteriores para transferencias de NFT para garantizar que tokens específicos sean o no sean transferidos +--- +```typescript +import { Pc, Cl } from '@stacks/transactions'; + +// Ensure a specific NFT will be sent +const sendPC = Pc.principal("ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM") + .willSendAsset() + .nft('ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.cool-nfts::nft-token', Cl.uint(42)); + +// Ensure a specific NFT will NOT be sent +const keepPC = Pc.principal("ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM") + .willNotSendAsset() + .nft('ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.cool-nfts::nft-token', Cl.uint(1)); +``` + +## Casos de uso + +* Protegiendo NFTs valiosos de transferencias accidentales +* Asegurando que NFTs específicos sean transferidos en transacciones de mercado +* Protegiendo colecciones NFT durante interacciones con contratos + +## Conceptos clave + +Las post-condiciones de NFT utilizan el `.nft()` método que requiere: + +* **Identificador de activo**: Dirección del contrato + nombre del activo con `::` separator +* **ID del token**: El ID específico del NFT como un valor de Clarity (usando `Cl.uint()`) diff --git a/content/docs/es/resources/snippets/build-an-unsigned-tx.mdx b/content/docs/es/resources/snippets/build-an-unsigned-tx.mdx new file mode 100644 index 000000000..a9f1ea8ab --- /dev/null +++ b/content/docs/es/resources/snippets/build-an-unsigned-tx.mdx @@ -0,0 +1,50 @@ +--- +title: Construir una transacción sin firmar +description: Crear transacciones sin firmar para billeteras de hardware o escenarios de firma múltiple +--- +```typescript +import { getPublicKeyFromPrivate } from "@stacks/encryption"; +import { + makeUnsignedSTXTokenTransfer, + makeUnsignedContractCall, + Cl, + AnchorMode, + PostConditionMode +} from "@stacks/transactions"; +import { STACKS_TESTNET } from "@stacks/network"; + +// Get public key from private key +const privateKey = "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601"; +const publicKey = getPublicKeyFromPrivate(privateKey); + +// Build unsigned STX transfer +const unsignedTx = await makeUnsignedSTXTokenTransfer({ + recipient: "ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5", + amount: 1000000n, // 1 STX in micro-STX + fee: 200n, + nonce: 0n, + network: STACKS_TESTNET, + memo: "Test transfer", + publicKey, + anchorMode: AnchorMode.Any, + postConditionMode: PostConditionMode.Deny, +}); + +// Transaction is ready for external signing +console.log("Unsigned transaction created:", unsignedTx.txid()); +``` + +## Casos de uso + +* Integración de billetera hardware (Ledger, Trezor) +* Transacciones de billetera multifirma +* Firma de transacciones sin conexión +* Sistemas de gestión de claves seguras + +## Conceptos clave + +Las transacciones sin firmar separan la creación de la transacción de la firma: + +* **Clave pública solamente**: No se necesita clave privada para la creación +* **Firma externa**: Firmar con cartera de hardware o enclave seguro +* **Serialización**: Se puede transportar y firmar en otro lugar diff --git a/content/docs/es/resources/snippets/check-for-duplicates.mdx b/content/docs/es/resources/snippets/check-for-duplicates.mdx new file mode 100644 index 000000000..8d60cc73d --- /dev/null +++ b/content/docs/es/resources/snippets/check-for-duplicates.mdx @@ -0,0 +1,39 @@ +--- +title: Comprobar duplicados +description: Detectar caracteres duplicados en cadenas y elementos duplicados en listas usando Clarity +--- +```clarity +;; Check for duplicate characters in a string +(define-read-only (has-duplicate-chars? (input (string-ascii 200))) + (is-none (fold dup input (slice? (concat input "|END") u1 (+ (len input) u4)))) +) + +(define-private (dup (ch (string-ascii 1)) (out (optional (string-ascii 204)))) + (match out out_some + (match (index-of? (unwrap-panic (slice? out_some u0 (- (len out_some) u4))) ch) + found none + (slice? out_some u1 (len out_some)) + ) + out + ) +) + +;; Example usage +(has-duplicate-chars? "hello") ;; Returns true (duplicate 'l') +(has-duplicate-chars? "world") ;; Returns false (no duplicates) +``` + +## Casos de uso + +* Validando nombres de usuario para la unicidad de caracteres +* Verificando la singularidad de los rasgos de NFT en colecciones +* Previniendo entradas duplicadas en sistemas de votación +* Asegurando identificadores únicos en listas + +## Conceptos clave + +La detección de duplicados utiliza diferentes estrategias: + +* **Cadenas**: Usos `fold` con `index-of?` para encontrar caracteres repetidos +* **Listas**: Comprueba si los elementos aparecen de nuevo en el resto de la lista +* **Optimización**: Salida temprana en el primer duplicado encontrado diff --git a/content/docs/es/resources/snippets/convert-btc-to-stx-address.mdx b/content/docs/es/resources/snippets/convert-btc-to-stx-address.mdx new file mode 100644 index 000000000..6f335488e --- /dev/null +++ b/content/docs/es/resources/snippets/convert-btc-to-stx-address.mdx @@ -0,0 +1,46 @@ +--- +title: Convertir dirección BTC a STX +description: Convierte direcciones de Bitcoin a sus correspondientes direcciones de Stacks utilizando decodificación base58 en Clarity +--- +```clarity +(define-read-only (btc-to-stx (input (string-ascii 60))) + (let ( + ;; Decode base58 string to numbers + (b58-numbers (map unwrap-uint (filter is-some-uint (map b58-to-uint input)))) + ;; Validate all characters are valid base58 + (t1 (asserts! (>= (len b58-numbers) (len input)) ERR_INVALID_CHAR)) + ;; Count leading '1's (zeros in base58) + (leading-ones-count (default-to (len input) (index-of? (map is-zero b58-numbers) false))) + ;; Convert to bytes + (decoded (concat (fold decode-outer to-decode LST) leading-zeros)) + (decoded-hex (fold to-hex-rev decoded 0x)) + ;; Verify checksum + (actual-checksum (unwrap-panic (slice? (sha256 (sha256 (unwrap-panic (slice? decoded-hex u0 (- decoded-hex-len u4))))) u0 u4))) + (expected-checksum (unwrap-panic (slice? decoded-hex (- decoded-hex-len u4) decoded-hex-len))) + (t3 (asserts! (is-eq actual-checksum expected-checksum) ERR_BAD_CHECKSUM)) + ;; Extract version and construct principal + (version (unwrap-panic (element-at? STX_VER (unwrap! (index-of? BTC_VER (unwrap-panic (element-at? decoded-hex u0))) ERR_INVALID_VERSION)))) + ) + (principal-construct? version (unwrap-panic (as-max-len? (unwrap-panic (slice? decoded-hex u1 (- decoded-hex-len u4))) u20))) + ) +) + +;; Example usage +(btc-to-stx "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa") ;; Returns Stacks address +``` + +## Casos de uso + +* Mapeo de direcciones entre cadenas para puentes Bitcoin-Stacks +* Verificando la propiedad en ambas cadenas +* Convirtiendo direcciones de Bitcoin heredadas al formato de Stacks +* Construyendo sistemas de autenticación entre cadenas + +## Conceptos clave + +El proceso de conversión implica: + +1. **Decodificación Base58**: Las direcciones de Bitcoin utilizan codificación base58 +2. **Verificación de suma de comprobación**: Los últimos 4 bytes son un checksum de doble SHA-256 +3. **Mapeo de versiones**: Los bytes de versión de Bitcoin se asignan a los bytes de versión de Stacks +4. **Construcción principal**: Construir Stacks principal a partir de datos decodificados diff --git a/content/docs/es/resources/snippets/convert-string-to-principal.mdx b/content/docs/es/resources/snippets/convert-string-to-principal.mdx new file mode 100644 index 000000000..c75e122cc --- /dev/null +++ b/content/docs/es/resources/snippets/convert-string-to-principal.mdx @@ -0,0 +1,52 @@ +--- +title: Convertir cadena a principal +description: Analizar direcciones de cadena en tipos principales utilizando decodificación c32 en Clarity +--- +```clarity +(define-read-only (string-to-principal? (input (string-ascii 82))) + (let ( + ;; Find the dot separator for contract addresses + (dot (default-to (len input) (index-of? input "."))) + ;; Extract address part (skip first char which is version) + (addr (unwrap! (slice? input u1 dot) ERR_INVALID_LENGTH)) + ;; Decode c32 characters to numbers + (addressc32 (map unwrap-panic-uint (filter is-some-uint (map c32-index addr)))) + ;; Validate all characters are valid c32 + (isValidChars (asserts! (is-eq (len addr) (len addressc32)) ERR_INVALID_CHAR)) + ;; Extract version and decode address data + (version (unwrap-panic (element-at? addressc32 u0))) + (decoded (decode-address addressc32)) + ;; Verify checksum + (checksum (verify-checksum decoded version)) + ) + ;; Construct principal with or without contract name + (match (slice? input (+ u1 dot) (len input)) contract + (principal-construct? (to-byte version) (get-address-bytes decoded) contract) + (principal-construct? (to-byte version) (get-address-bytes decoded)) + ) + ) +) + +;; Example usage +(string-to-principal? "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7") +;; Returns (some SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7) + +(string-to-principal? "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7.my-contract") +;; Returns (some SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7.my-contract) +``` + +## Casos de uso + +* Análisis de direcciones de entrada del usuario en contratos +* Convirtiendo direcciones de cadena almacenadas a principales +* Validando formatos de direcciones antes de su uso +* Construcción de llamadas de contrato dinámicas con entradas de cadena + +## Conceptos clave + +Las direcciones de Stacks utilizan codificación c32: + +* **alfabeto c32**: `0123456789ABCDEFGHJKMNPQRSTVWXYZ` (sin I, L, O, U) +* **Suma de verificación**: Los últimos 4 bytes verifican la integridad de la dirección +* **Byte de versión**: El primer carácter indica el tipo de dirección +* **Direcciones de contrato**: Incluir `.contract-name` sufijo diff --git a/content/docs/es/resources/snippets/create-a-random-burn-address.mdx b/content/docs/es/resources/snippets/create-a-random-burn-address.mdx new file mode 100644 index 000000000..c0f0218d2 --- /dev/null +++ b/content/docs/es/resources/snippets/create-a-random-burn-address.mdx @@ -0,0 +1,37 @@ +--- +title: Crear una dirección de quemado aleatoria +description: Generar direcciones de quemado para eliminar permanentemente tokens de la circulación +--- +```clarity +(define-read-only (generate-burn-address (entropy (string-ascii 40))) + (let ( + ;; Hash the entropy to create address bytes + (hash-bytes (hash160 (unwrap-panic (to-consensus-buff? entropy)))) + ;; Use version byte for current network + (version-byte (if is-in-mainnet 0x16 0x1a)) + ) + ;; Construct a valid principal that no one controls + (principal-construct? version-byte hash-bytes) + ) +) + +;; Example: Generate unique burn address +(generate-burn-address "BURN-2024-01-15-PROJECT-XYZ") +;; Returns: (ok SP1FJPSG7V4QMA7D4XVPZ3B2HQ8GY3EK8GC0NGNT3) +``` + +## Casos de uso + +* Mecanismos de quema de tokens +* Implementaciones de prueba de quemado +* Creación de direcciones no gastables para tarifas de protocolo +* Economía de tokens deflacionaria + +## Conceptos clave + +Las direcciones de quemado son principales válidos que: + +* **Sin clave privada**: Generado a partir de datos arbitrarios, no un par de claves +* **Verificable**: Cualquiera puede verificar los tokens enviados a estas direcciones +* **Único**: La entropía diferente crea direcciones diferentes +* **Permanente**: Los fondos enviados se pierden irremediablemente diff --git a/content/docs/es/resources/snippets/create-a-sponsored-tx.mdx b/content/docs/es/resources/snippets/create-a-sponsored-tx.mdx new file mode 100644 index 000000000..b7efa5859 --- /dev/null +++ b/content/docs/es/resources/snippets/create-a-sponsored-tx.mdx @@ -0,0 +1,68 @@ +--- +title: Crear una transacción patrocinada +description: Construye transacciones donde un patrocinador paga las tarifas en nombre de los usuarios +--- +```typescript +import { STACKS_TESTNET } from "@stacks/network"; +import { bytesToHex } from "@stacks/common"; +import { + broadcastTransaction, + deserializeTransaction, + makeContractCall, + sponsorTransaction, + BufferReader, + AnchorMode, + Cl, +} from "@stacks/transactions"; + +// Step 1: User creates the transaction with sponsored flag +const userTxOptions = { + contractAddress: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM", + contractName: "my-contract", + functionName: "my-function", + functionArgs: [Cl.uint(123)], + fee: 0, // User doesn't pay fees + senderKey: "b244296d5907de9864c0b0d51f98a13c52890be0404e83f273144cd5b9960eed01", + network: STACKS_TESTNET, + sponsored: true, // Mark as sponsored + anchorMode: AnchorMode.Any, +}; + +const transaction = await makeContractCall(userTxOptions); +const serializedTx = bytesToHex(transaction.serialize()); + +// Step 2: Send serialized transaction to sponsor +// (In practice, this would be sent to a sponsorship service) + +// Step 3: Sponsor signs and pays fees +const sponsorKey = "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601"; +const deserializedTx = deserializeTransaction(serializedTx); +const sponsoredTx = await sponsorTransaction({ + transaction: deserializedTx, + sponsorPrivateKey: sponsorKey, + fee: 1000, // Sponsor pays the fee + sponsorNonce: 0, +}); + +// Step 4: Broadcast the sponsored transaction +const broadcastResponse = await broadcastTransaction({ + transaction: sponsoredTx, + network: STACKS_TESTNET, +}); + +console.log("Sponsored transaction ID:", broadcastResponse.txid); +``` + +## Casos de uso + +* Incorporación de nuevos usuarios sin STX para tarifas +* Subsidiando los costos de transacción para usuarios de dApps +* Aplicaciones empresariales que pagan por transacciones de usuarios +* Aplicaciones de juegos con una experiencia de usuario fluida + +## Conceptos clave + +Las transacciones patrocinadas tienen dos partes: + +* **Usuario**: Crea y firma la transacción con `sponsored: true` +* **Patrocinador**: Paga las tarifas y transmite la transacción diff --git a/content/docs/es/resources/snippets/create-sha256-hash-clarity.mdx b/content/docs/es/resources/snippets/create-sha256-hash-clarity.mdx new file mode 100644 index 000000000..79a33844e --- /dev/null +++ b/content/docs/es/resources/snippets/create-sha256-hash-clarity.mdx @@ -0,0 +1,33 @@ +--- +title: Crear hash SHA256 en Clarity +description: Generar hashes SHA-256 a partir de datos de buffer en contratos inteligentes de Clarity +--- +```clarity +(define-read-only (create-sha256-hash (data (buff 4096))) + (sha256 (unwrap-panic (to-consensus-buff? data))) +) + +;; Example usage +(define-read-only (hash-message (message (string-utf8 200))) + (create-sha256-hash (unwrap-panic (to-consensus-buff? message))) +) + +;; Hash a simple string +(print (hash-message u"Hello World")) +``` + +## Casos de uso + +* Creando identificadores únicos a partir de datos +* Verificando la integridad de datos en contratos +* Implementación de esquemas de compromiso-revelación +* Construyendo árboles de Merkle para pruebas + +## Conceptos clave + +La implementación de SHA-256 en Clarity: + +* Toma un búfer como entrada (máximo 1MB) +* Devuelve un hash de búfer de 32 bytes +* Usos `to-consensus-buff?` para garantizar una codificación coherente +* Produce el mismo hash que las implementaciones fuera de la cadena diff --git a/content/docs/es/resources/snippets/create-sha256-hash-stacks-js.mdx b/content/docs/es/resources/snippets/create-sha256-hash-stacks-js.mdx new file mode 100644 index 000000000..686fba542 --- /dev/null +++ b/content/docs/es/resources/snippets/create-sha256-hash-stacks-js.mdx @@ -0,0 +1,45 @@ +--- +title: Crear hash SHA256 en Stacks.js +description: Generar hashes SHA-256 que coincidan con la salida de hash de Clarity +--- +```typescript +import { sha256 } from "@noble/hashes/sha256"; +import { bytesToHex, hexToBytes, utf8ToBytes } from "@stacks/common"; +import { bufferCV, stringUtf8CV, serializeCV } from "@stacks/transactions"; + +// Hash a string (matching Clarity's sha256 output) +function hashString(text: string) { + const clarityValue = stringUtf8CV(text); + const serialized = serializeCV(clarityValue); + return bytesToHex(sha256(serialized)); +} + +// Hash hex data (matching Clarity's sha256 output) +function hashHexData(hexData: string) { + const clarityValue = bufferCV(hexToBytes(hexData)); + const serialized = serializeCV(clarityValue); + return bytesToHex(sha256(serialized)); +} + +// Example usage +const hash1 = hashString("Hello World"); +console.log("String hash:", hash1); + +const hash2 = hashHexData("0x1234567890abcdef"); +console.log("Hex hash:", hash2); +``` + +## Casos de uso + +* Creando identificadores deterministas +* Verificando la integridad de los datos entre on-chain y off-chain +* Implementación de esquemas de compromiso-revelación fuera de la cadena +* Construyendo árboles de Merkle compatibles con Clarity + +## Conceptos clave + +Para que coincida con la salida SHA-256 de Clarity: + +1. **Convertir a valor de Clarity**: Utilice el tipo de CV apropiado (`stringUtf8CV`, `bufferCV`, etc.) +2. **Serializar**: Uso `serializeCV` para coincidir con la codificación de Clarity +3. **Hash**: Aplicar SHA-256 a los bytes serializados diff --git a/content/docs/es/resources/snippets/deploy-a-contract.mdx b/content/docs/es/resources/snippets/deploy-a-contract.mdx new file mode 100644 index 000000000..fe78ce09c --- /dev/null +++ b/content/docs/es/resources/snippets/deploy-a-contract.mdx @@ -0,0 +1,54 @@ +--- +title: Desplegar un contrato +description: Desplegar un contrato inteligente de Clarity en la cadena de bloques de Stacks utilizando Stacks.js +--- +```typescript +import { STACKS_TESTNET } from "@stacks/network"; +import { + makeContractDeploy, + broadcastTransaction, + AnchorMode, + PostConditionMode +} from "@stacks/transactions"; + +const contractCode = ` +(define-data-var counter uint u0) + +(define-public (increment) + (ok (var-set counter (+ (var-get counter) u1)))) + +(define-read-only (get-counter) + (ok (var-get counter))) +`; + +const txOptions = { + contractName: "my-counter", + codeBody: contractCode, + senderKey: "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601", + network: STACKS_TESTNET, + anchorMode: AnchorMode.Any, + postConditionMode: PostConditionMode.Allow, + fee: 100000n, // Set an appropriate fee +}; + +const transaction = await makeContractDeploy(txOptions); +const broadcastResponse = await broadcastTransaction({ transaction }); +console.log("Contract deployed!"); +console.log("Transaction ID:", broadcastResponse.txid); +``` + +## Casos de uso + +* Desplegando nuevos contratos inteligentes en la red principal o en la red de pruebas +* Automatizando despliegues de contratos en pipelines de CI/CD +* Despliegue programático de contratos para la inicialización de dApps +* Implementando actualizaciones o nuevas versiones de contratos + +## Conceptos clave + +El despliegue del contrato requiere: + +* **Nombre del contrato**: Identificador único para su contrato (letras, números, guiones) +* **Cuerpo del código**: El código del contrato Clarity como una cadena +* **Clave del remitente**: Clave privada de la cuenta que despliega el contrato +* **Red**: Red objetivo (mainnet, testnet o devnet) diff --git a/content/docs/es/resources/snippets/derive-principal-addresses-between-networks.mdx b/content/docs/es/resources/snippets/derive-principal-addresses-between-networks.mdx new file mode 100644 index 000000000..df6e5346a --- /dev/null +++ b/content/docs/es/resources/snippets/derive-principal-addresses-between-networks.mdx @@ -0,0 +1,64 @@ +--- +title: Derivar direcciones principales entre redes +description: Convierte direcciones entre mainnet y testnet extrayendo y reconstruyendo con diferentes bytes de versión +--- +```clarity +;; Extract hash bytes from an address +(define-read-only (get-address-hash-bytes (address principal)) + (get hash-bytes (unwrap-panic (principal-destruct? address))) +) + +;; Convert testnet address to mainnet +(define-read-only (testnet-to-mainnet (testnet-address principal)) + (let ( + ;; Extract the hash bytes from testnet address + (hash-bytes (get-address-hash-bytes testnet-address)) + ;; Mainnet version byte + (mainnet-version 0x16) + ) + ;; Reconstruct with mainnet version + (principal-construct? mainnet-version hash-bytes) + ) +) + +;; Convert mainnet address to testnet +(define-read-only (mainnet-to-testnet (mainnet-address principal)) + (let ( + ;; Extract the hash bytes from mainnet address + (hash-bytes (get-address-hash-bytes mainnet-address)) + ;; Testnet version byte + (testnet-version 0x1a) + ) + ;; Reconstruct with testnet version + (principal-construct? testnet-version hash-bytes) + ) +) + +;; Example usage +(testnet-to-mainnet 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) +;; Returns: (ok SP1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRCBGD7R) +``` + +## Casos de uso + +* Verificación de direcciones entre redes +* Construyendo dApps multi-red +* Herramientas de validación de direcciones +* Utilidades de migración de red + +## Conceptos clave + +Las direcciones de Stacks consisten en: + +* **Byte de versión**: Indica el tipo de red y dirección +* **Bytes de hash**: hash de 20 bytes de la clave pública +* **Suma de verificación**: Incorporado en la codificación c32 + +### Referencia de bytes de versión + +| Versión | Red | Tipo | Prefijo | +|---------|------|------|--------| +| 0x16 | Red principal | Estándar | SP | +| 0x17 | Red principal | Contrato | SM | +| 0x1a | Red de pruebas | Estándar | ST | +| 0x1b | Red de pruebas | Contrato | SN | diff --git a/content/docs/es/resources/snippets/derive-stacks-address-from-keys.mdx b/content/docs/es/resources/snippets/derive-stacks-address-from-keys.mdx new file mode 100644 index 000000000..9e1a816ac --- /dev/null +++ b/content/docs/es/resources/snippets/derive-stacks-address-from-keys.mdx @@ -0,0 +1,39 @@ +--- +title: Obtener dirección de Stacks a partir de claves +description: Generar direcciones de Stacks a partir de claves privadas o públicas utilizando múltiples métodos +--- +```typescript +import { getPublicKeyFromPrivate } from "@stacks/encryption"; +import { + getAddressFromPrivateKey, + getAddressFromPublicKey +} from "@stacks/transactions"; + +// Derive address from private key +const privateKey = process.env.PRIVATE_KEY; // Keep this secret! +const addressFromPrivate = getAddressFromPrivateKey(privateKey, "testnet"); + +// Derive public key and address +const publicKey = getPublicKeyFromPrivate(privateKey); +const addressFromPublic = getAddressFromPublicKey(publicKey, "testnet"); + +console.log("Address:", addressFromPrivate); +console.log("Public key:", publicKey); +console.log("Same address:", addressFromPrivate === addressFromPublic); // true +``` + +## Casos de uso + +* Generación de dirección de billetera +* Validación de par de claves +* Recuperación de dirección a partir de claves de respaldo +* Configuración de billetera multifirma + +## Conceptos clave + +Las direcciones de Stacks se derivan a través de: + +* **Clave privada**: número aleatorio de 32 bytes (¡mantenlo en secreto!) +* **Clave pública**: Derivado de la clave privada utilizando ECDSA +* **Dirección**: Hash de clave pública codificado en Base58check +* **Red**: Diferentes prefijos para mainnet (SP/SM) frente a testnet (ST/SN) diff --git a/content/docs/es/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx b/content/docs/es/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx new file mode 100644 index 000000000..1069135fd --- /dev/null +++ b/content/docs/es/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx @@ -0,0 +1,45 @@ +--- +title: Obtener Bitcoin de testnet en regtest +description: Solicita BTC de testnet desde el faucet de Hiro para desarrollo y pruebas locales +--- +```typescript +const TESTNET_ADDRESS = 'bcrt1q728h29ejjttmkupwdkyu2x4zcmkuc3q29gvwaa'; + +try { + const response = await fetch( + `https://api.testnet.hiro.so/extended/v1/faucets/btc?address=${TESTNET_ADDRESS}`, + { + method: 'POST', + headers: { + "Content-Type": "application/json", + }, + } + ); + + const result = await response.json(); + console.log("Faucet response:", result); + + if (result.success) { + console.log(`Transaction ID: ${result.txid}`); + console.log(`Amount sent: ${result.amount} sats`); + } +} catch (error) { + console.error("Faucet request failed:", error); +} +``` + +## Casos de uso + +* Desarrollo local con transacciones de Bitcoin +* Probando operaciones de sBTC +* Pruebas de integración para aplicaciones de cadenas cruzadas +* Desarrollando contratos inteligentes conscientes de Bitcoin + +## Conceptos clave + +El faucet de la testnet de Hiro: + +* **Limitado por tasa**: Una solicitud por dirección por hora +* **Cantidad**: Envía 0.5 BTC de testnet por solicitud +* **Red**: Funciona con direcciones de testnet/regtest de Bitcoin +* **Formato**: Admite direcciones legacy, segwit y taproot diff --git a/content/docs/es/resources/snippets/filter-items-from-a-list.mdx b/content/docs/es/resources/snippets/filter-items-from-a-list.mdx new file mode 100644 index 000000000..9c391185b --- /dev/null +++ b/content/docs/es/resources/snippets/filter-items-from-a-list.mdx @@ -0,0 +1,36 @@ +--- +title: Filtrar elementos de una lista +description: Eliminar elementos específicos de listas usando fold en Clarity +--- +```clarity +(define-read-only (filter-item (l (list 100 uint)) (remove uint)) + (get newList (fold remove-value l { compareTo: remove, newList: (list) })) +) + +(define-private (remove-value (listValue uint) (trackerTuple { compareTo: uint, newList: (list 100 uint) })) + (merge trackerTuple {newList: + (if (is-eq listValue (get compareTo trackerTuple)) + (get newList trackerTuple) + (unwrap-panic (as-max-len? (append (get newList trackerTuple) listValue) u100)) + ) + }) +) + +;; Example usage +(filter-item (list u1 u2 u3 u2 u4) u2) ;; Returns (u1 u3 u4) +``` + +## Casos de uso + +* Eliminando direcciones en la lista negra de las listas de acceso +* Filtrando tareas completadas de las listas de tareas pendientes +* Excluyendo tokens específicos de los portafolios +* Limpieza de datos en contratos inteligentes + +## Conceptos clave + +Este patrón utiliza `fold` para iterar a través de una lista y construir una nueva lista: + +* **Acumulador**: Rastrea el valor a eliminar y construye la nueva lista +* **Anexión condicional**: Solo agrega elementos que no coinciden con el filtro +* **Seguridad de tipos**: Mantiene el tipo de lista y la longitud máxima diff --git a/content/docs/es/resources/snippets/generate-a-secret-key.mdx b/content/docs/es/resources/snippets/generate-a-secret-key.mdx new file mode 100644 index 000000000..c82fdf0e3 --- /dev/null +++ b/content/docs/es/resources/snippets/generate-a-secret-key.mdx @@ -0,0 +1,31 @@ +--- +title: Generar una clave secreta +description: Crear frases semilla mnemotécnicas para la generación de billeteras +--- +```typescript +import { generateSecretKey } from '@stacks/wallet-sdk'; + +// Generate a 24-word mnemonic (256 bits of entropy) +const mnemonic24 = generateSecretKey(); +// Example: "aunt birth lounge misery utility blind holiday walnut fuel make gift parent gap picnic exact various express sphere family nerve oil drill engage youth" + +// Generate a 12-word mnemonic (128 bits of entropy) +const mnemonic12 = generateSecretKey(128); +// Example: "winter crash infant long upset beauty cram tank short remain obtain sauce" +``` + +## Casos de uso + +* Creando nuevas frases semilla de billetera +* Generando entropía segura para aplicaciones +* Creación de flujos de creación de billeteras +* Probando la funcionalidad de la billetera + +## Conceptos clave + +Las frases semilla mnemotécnicas siguen el estándar BIP39: + +* **Entropía**: Datos aleatorios utilizados para generar la frase +* **Recuento de palabras**: 12 palabras (128 bits) o 24 palabras (256 bits) +* **Lista de palabras**: Lista estandarizada de 2048 palabras +* **Suma de verificación**: Detección de errores incorporada diff --git a/content/docs/es/resources/snippets/generate-a-wallet.mdx b/content/docs/es/resources/snippets/generate-a-wallet.mdx new file mode 100644 index 000000000..29bbf91c7 --- /dev/null +++ b/content/docs/es/resources/snippets/generate-a-wallet.mdx @@ -0,0 +1,34 @@ +--- +title: Generar una cartera +description: Crea una nueva billetera con frase mnemotécnica o restaura desde una semilla existente +--- +```typescript +import { generateWallet, generateSecretKey } from '@stacks/wallet-sdk'; + +// Generate a new wallet with a new 24-word seed phrase +const secretKey = generateSecretKey(256); // 256 bits = 24 words +const wallet = await generateWallet({ + secretKey, + password: 'your-secure-password', +}); + +// Access the first account +const account = wallet.accounts[0]; +console.log('Address:', account.stxAddress); +console.log('Mnemonic:', secretKey); +``` + +## Casos de uso + +* Creando nuevas billeteras para usuarios +* Restauración de billeteras a partir de frases semilla +* Generando direcciones de billetera deterministas +* Creando aplicaciones de billetera + +## Conceptos clave + +El SDK de la billetera genera billeteras determinísticas jerárquicas (HD) siguiendo los estándares BIP32/BIP39: + +* **Clave secreta**: Puede ser una frase mnemotécnica o clave privada +* **Contraseña**: Cifra la cartera (diferente de la frase de contraseña mnemónica) +* **Cuentas**: Se pueden derivar múltiples cuentas de una sola semilla diff --git a/content/docs/es/resources/snippets/generate-random-number.mdx b/content/docs/es/resources/snippets/generate-random-number.mdx new file mode 100644 index 000000000..b8b6cba8c --- /dev/null +++ b/content/docs/es/resources/snippets/generate-random-number.mdx @@ -0,0 +1,46 @@ +--- +title: Generar número aleatorio +description: Crear números pseudo-aleatorios utilizando hashes de bloques para obtener aleatoriedad en contratos inteligentes +--- +```clarity +(define-read-only (generate-random (block-height uint)) + (let ( + ;; Get block header hash + (block-hash (unwrap! (get-stacks-block-info? id-header-hash block-height) (err u1001))) + ;; Take a slice of the hash for randomness + (hash-slice (unwrap-panic (slice? block-hash u16 u32))) + ;; Convert to uint + (random-value (buff-to-uint-be (unwrap-panic (as-max-len? hash-slice u16)))) + ) + (ok random-value) + ) +) + +;; Generate random number in range +(define-read-only (random-in-range (block-height uint) (min uint) (max uint)) + (let ( + (random (try! (generate-random block-height))) + (range (- max min)) + ) + (ok (+ min (mod random (+ u1 range)))) + ) +) + +;; Example: Random between 1-100 +(random-in-range block-height u1 u100) +``` + +## Casos de uso + +* Contratos de lotería y juegos de azar +* Generación aleatoria de rasgos de NFT +* Mecanismos de distribución justa +* Selección aleatoria de listas + +## Conceptos clave + +La aleatoriedad de la cadena de bloques es determinista pero impredecible: + +* **Hashes de bloque**: Usar datos históricos de bloques como fuente de entropía +* **Bloques futuros**: No se pueden predecir los futuros hashes de bloques +* **Esquemas de compromiso**: Combinar con commit-reveal para equidad diff --git a/content/docs/es/resources/snippets/get-account-details-from-wallet.mdx b/content/docs/es/resources/snippets/get-account-details-from-wallet.mdx new file mode 100644 index 000000000..641f1533b --- /dev/null +++ b/content/docs/es/resources/snippets/get-account-details-from-wallet.mdx @@ -0,0 +1,52 @@ +--- +title: Obtener detalles de la cuenta desde la billetera +description: Extraer direcciones, claves y otra información de cuenta de una instancia de billetera +--- +```typescript +import { STACKS_TESTNET, STACKS_MAINNET } from "@stacks/network"; +import { generateWallet, getStxAddress } from "@stacks/wallet-sdk"; + +// Generate or restore wallet +const wallet = await generateWallet({ + secretKey: "your twenty four word mnemonic phrase goes here...", + password: "wallet-password", +}); + +// Get first account +const account = wallet.accounts[0]; + +// Get addresses for different networks +const testnetAddress = getStxAddress({ + account, + transactionVersion: 0 // testnet +}); + +const mainnetAddress = getStxAddress({ + account, + transactionVersion: 1 // mainnet +}); + +// Get keys +const privateKey = account.stxPrivateKey; +const publicKey = account.stxPublicKey; + +console.log("Testnet address:", testnetAddress); +console.log("Mainnet address:", mainnetAddress); +console.log("Public key:", publicKey); +``` + +## Casos de uso + +* Mostrando direcciones de usuario en interfaces de billeteras +* Obtención de claves privadas para la firma de transacciones +* Derivando direcciones para diferentes redes +* Construyendo herramientas de gestión de billeteras + +## Conceptos clave + +Las cuentas de billetera contienen: + +* **Clave privada**: Se utiliza para firmar transacciones +* **Clave pública**: Derivado de la clave privada +* **Direcciones**: Específico de la red (red principal vs red de pruebas) +* **Ruta de derivación**: Ruta BIP44 utilizada para generar la cuenta diff --git a/content/docs/es/resources/snippets/helper-function-to-restrict-contract-calls.mdx b/content/docs/es/resources/snippets/helper-function-to-restrict-contract-calls.mdx new file mode 100644 index 000000000..ccf3ed392 --- /dev/null +++ b/content/docs/es/resources/snippets/helper-function-to-restrict-contract-calls.mdx @@ -0,0 +1,35 @@ +--- +title: Función auxiliar para restringir llamadas a contratos +description: Implementar control de acceso para garantizar que las funciones solo puedan ser llamadas por usuarios, no por otros contratos +--- +```clarity +;; Check if caller is a standard principal (user wallet) +(define-private (is-standard-principal-call) + (is-none (get name (unwrap! (principal-destruct? contract-caller) false))) +) + +;; Public function restricted to direct user calls +(define-public (user-only-function (amount uint)) + (begin + (asserts! (is-standard-principal-call) (err u401)) + ;; Function logic here + (ok true) + ) +) +``` + +## Casos de uso + +* Prevención de ataques de reentrada de contrato a contrato +* Garantizando transacciones iniciadas por humanos para la gobernanza +* Restringir la acuñación de tokens a acciones directas del usuario +* Protegiendo las funciones de administrador de llamadas automatizadas + +## Conceptos clave + +Tipos principales en Clarity: + +* **Directores estándar**: Billeteras de usuario (direcciones SP/ST) +* **Principales del contrato**: Contratos desplegados (dirección.nombre-del-contrato) +* **contrato-llamador**: El llamante inmediato de la función actual +* **tx-remitente**: El iniciador original de la transacción diff --git a/content/docs/es/resources/snippets/index.mdx b/content/docs/es/resources/snippets/index.mdx new file mode 100644 index 000000000..565a0db2f --- /dev/null +++ b/content/docs/es/resources/snippets/index.mdx @@ -0,0 +1,75 @@ +--- +title: Fragmentos +sidebarTitle: Visión general +description: Ejemplos de código listos para usar para construir en Stacks y Bitcoin +llm: false +--- +## Visión general + +Para explorar Snippets con IA, copie y pegue [llms.txt](/resources/snippets/llms.txt) en tu LLM de preferencia. + +## Transacciones + +### Transferencias de Tokens + +* [Transferir STX](/resources/snippets/transfer-stx) - Enviar tokens STX entre direcciones +* [Transferir un token SIP-10](/resources/snippets/transfer-a-sip10-token) - Transferir tokens fungibles + +### Construcción de Transacciones + +* [Construir una transacción sin firmar](/resources/snippets/build-an-unsigned-tx) - Crear transacciones para billeteras de hardware +* [Crear una transacción patrocinada](/resources/snippets/create-a-sponsored-tx) - Pagar tarifas en nombre de los usuarios + +### Poscondiciones + +* [Construir una post-condición STX](/resources/snippets/build-a-stx-pc) - Transferencias seguras de STX +* [Construir una post-condición FT](/resources/snippets/build-an-ft-pc) - Transferencias seguras de tokens fungibles +* [Construir una post-condición NFT](/resources/snippets/build-an-nft-pc) - Transferencias seguras de NFT + +## Contratos Inteligentes + +### Despliegue de Contratos + +* [Desplegar un contrato](/resources/snippets/deploy-a-contract) - Desplegar contratos en la cadena de bloques + +### Funciones de Clarity + +* [Crear hash SHA256](/resources/snippets/create-sha256-hash-clarity) - Generar hashes en Clarity +* [Filtrar elementos de una lista](/resources/snippets/filter-items-from-a-list) - Manipulación de listas en Clarity +* [Generar número aleatorio](/resources/snippets/generate-random-number) - Números pseudo-aleatorios en contratos +* [Comprobar duplicados](/resources/snippets/check-for-duplicates) - Encontrar elementos duplicados en listas +* [Devolver una entrada de un mapa](/resources/snippets/return-an-entry-from-a-map) - Acceder a estructuras de datos de mapas +* [Función auxiliar para restringir llamadas a contratos](/resources/snippets/helper-function-to-restrict-contract-calls) - Patrones de control de acceso + +## Cuentas y Direcciones + +### Gestión de Billetera + +* [Generar una cartera](/resources/snippets/generate-a-wallet) - Crear nueva cartera con mnemónico +* [Generar una clave secreta](/resources/snippets/generate-a-secret-key) - Crear claves privadas +* [Obtener detalles de la cuenta desde la billetera](/resources/snippets/get-account-details-from-wallet) - Extraer información de la cuenta + +### Utilidades de Dirección + +* [Convertir dirección BTC a STX](/resources/snippets/convert-btc-to-stx-address) - Conversión de direcciones entre cadenas +* [Convertir cadena a principal](/resources/snippets/convert-string-to-principal) - Analizar direcciones principales +* [Obtener dirección de Stacks a partir de claves](/resources/snippets/derive-stacks-address-from-keys) - Generar direcciones a partir de pares de claves +* [Derivar direcciones principales entre redes](/resources/snippets/derive-principal-addresses-between-networks) - Mapeo de direcciones de red +* [Crear una dirección de quemado aleatoria](/resources/snippets/create-a-random-burn-address) - Generar direcciones de quemado + +## Criptografía y Seguridad + +### Hashing + +* [Crear hash SHA256 (Stacks.js)](/resources/snippets/create-sha256-hash-stacks-js) - Generar hashes en JavaScript +* [Crear hash SHA256 (Clarity)](/resources/snippets/create-sha256-hash-clarity) - Generar hashes en contratos inteligentes + +### Integración de API + +* [Integrar claves de API usando Stacks.js](/resources/snippets/integrate-api-keys-using-stacksjs) - Uso seguro de claves API + +## Herramientas de Desarrollo + +### Probando + +* [Obtener Bitcoin de testnet en regtest](/resources/snippets/fetch-testnet-bitcoin-on-regtest) - Obtener BTC de prueba para desarrollo diff --git a/content/docs/es/resources/snippets/integrate-api-keys-using-stacksjs.mdx b/content/docs/es/resources/snippets/integrate-api-keys-using-stacksjs.mdx new file mode 100644 index 000000000..d273e0859 --- /dev/null +++ b/content/docs/es/resources/snippets/integrate-api-keys-using-stacksjs.mdx @@ -0,0 +1,37 @@ +--- +title: Integrar claves de API usando Stacks.js +description: Configurar Stacks.js para usar claves API para límites de tasa mejorados y monitoreo +--- +```typescript +import { createApiKeyMiddleware, createFetchFn } from "@stacks/common"; +import { StacksMainnet, StacksTestnet } from "@stacks/network"; + +// Create middleware with your API key +const apiMiddleware = createApiKeyMiddleware({ + apiKey: process.env.HIRO_API_KEY +}); + +// Create custom fetch function +const customFetch = createFetchFn(apiMiddleware); + +// Configure network with API key +const network = new StacksMainnet({ + fetchFn: customFetch +}); +``` + +## Casos de uso + +* Aumento de los límites de tasa de API para aplicaciones en producción +* Monitoreo y análisis del uso de API +* Acceso prioritario durante períodos de alto tráfico +* Funciones de soporte empresarial personalizadas + +## Conceptos clave + +Beneficios de la clave API: + +* **Límites de tasa más altos**: 500 solicitudes/minuto frente a 50 para anónimos +* **Seguimiento de uso**: Monitorea tu consumo de API +* **Cola de prioridad**: Mejor rendimiento durante las horas pico +* **Soporte**: Acceso a canales de soporte dedicados diff --git a/content/docs/es/resources/snippets/meta.json b/content/docs/es/resources/snippets/meta.json new file mode 100644 index 000000000..6c1e693f1 --- /dev/null +++ b/content/docs/es/resources/snippets/meta.json @@ -0,0 +1,38 @@ +{ + "title": "Snippets", + "root": true, + "pages": [ + "---Snippets---", + "index", + "---Transactions---", + "transfer-stx", + "transfer-a-sip10-token", + "build-an-unsigned-tx", + "create-a-sponsored-tx", + "build-a-stx-pc", + "build-an-ft-pc", + "build-an-nft-pc", + "---Smart Contracts---", + "deploy-a-contract", + "create-sha256-hash-clarity", + "filter-items-from-a-list", + "generate-random-number", + "check-for-duplicates", + "return-an-entry-from-a-map", + "helper-function-to-restrict-contract-calls", + "---Accounts & Addresses---", + "generate-a-wallet", + "generate-a-secret-key", + "get-account-details-from-wallet", + "convert-btc-to-stx-address", + "convert-string-to-principal", + "derive-stacks-address-from-keys", + "derive-principal-addresses-between-networks", + "create-a-random-burn-address", + "---Cryptography & Security---", + "create-sha256-hash-stacks-js", + "integrate-api-keys-using-stacksjs", + "---Development Tools---", + "fetch-testnet-bitcoin-on-regtest" + ] +} diff --git a/content/docs/es/resources/snippets/return-an-entry-from-a-map.mdx b/content/docs/es/resources/snippets/return-an-entry-from-a-map.mdx new file mode 100644 index 000000000..bdd5e16aa --- /dev/null +++ b/content/docs/es/resources/snippets/return-an-entry-from-a-map.mdx @@ -0,0 +1,46 @@ +--- +title: Devolver una entrada de un mapa +description: Consultar datos del mapa de contratos utilizando el endpoint map_entry de la API de Stacks +--- +```typescript +import { Cl, cvToHex } from "@stacks/transactions"; + +// Query a map entry from a contract +const contractAddress = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM"; +const contractName = "my-contract"; +const mapName = "user-balances"; + +// Create the map key (e.g., a principal) +const mapKey = Cl.standardPrincipal("ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5"); + +const response = await fetch( + `https://api.hiro.so/v2/map_entry/${contractAddress}/${contractName}/${mapName}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(cvToHex(mapKey)), + } +); + +const result = await response.json(); +const data = result.data ? Cl.deserialize(result.data) : null; + +console.log("Map value:", data); +``` + +## Casos de uso + +* Leyendo saldos de usuarios desde contratos de tokens +* Verificando registros de propiedad de NFT +* Recuperando valores de configuración de contratos +* Monitoreando el estado del contrato sin transacciones + +## Conceptos clave + +La API map\_entry: + +* **Solicitud POST**: Enviar la clave del mapa serializado +* **Codificación hexadecimal**: Las claves deben ser valores de Clarity codificados en hexadecimal +* **Formato de respuesta**: Devuelve el valor de Clarity codificado en hexadecimal o null diff --git a/content/docs/es/resources/snippets/transfer-a-sip10-token.mdx b/content/docs/es/resources/snippets/transfer-a-sip10-token.mdx new file mode 100644 index 000000000..444da7175 --- /dev/null +++ b/content/docs/es/resources/snippets/transfer-a-sip10-token.mdx @@ -0,0 +1,68 @@ +--- +title: Transferir un token SIP-10 +description: Transferir tokens fungibles utilizando el estándar SIP-10 con post-condiciones +--- +```typescript +import { STACKS_MAINNET } from "@stacks/network"; +import { + AnchorMode, + broadcastTransaction, + Cl, + makeContractCall, + Pc, + PostConditionMode, +} from "@stacks/transactions"; + +// Token contract details +const tokenAddress = "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9"; +const tokenName = "wrapped-bitcoin"; +const contractIdentifier = `${tokenAddress}.${tokenName}`; + +// Create post-condition to ensure exact amount is transferred +const postConditions = [ + Pc.principal("SP2C20XGZBAYFZ1NYNHT1J6MGBGVX9X7X3P7LAX7K") + .willSendEq(100000000) // 1 wBTC (8 decimals) + .ft(contractIdentifier, tokenName) +]; + +const txOptions = { + contractAddress: tokenAddress, + contractName: tokenName, + functionName: "transfer", + functionArgs: [ + Cl.uint(100000000), // amount (with decimals) + Cl.principal("SP2C20XGZBAYFZ1NYNHT1J6MGBGVX9X7X3P7LAX7K"), // sender + Cl.principal("SP31DA84DWTF6510EW6DCTC3GB3XH1EEBGP7MYT2"), // recipient + Cl.none(), // optional memo + ], + senderKey: "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601", + validateWithAbi: true, + network: STACKS_MAINNET, + postConditions, + postConditionMode: PostConditionMode.Deny, + anchorMode: AnchorMode.Any, +}; + +const transaction = await makeContractCall(txOptions); +const broadcastResponse = await broadcastTransaction({ + transaction, + network: STACKS_MAINNET, +}); + +console.log("Transaction ID:", broadcastResponse.txid); +``` + +## Casos de uso + +* Transferir tokens fungibles entre billeteras +* Integrando transferencias de tokens en dApps +* Construyendo funcionalidad de DEX o intercambio +* Implementación de sistemas de pago con tokens personalizados + +## Conceptos clave + +SIP-10 es el estándar de token fungible en Stacks, similar a ERC-20: + +* **Interfaz estándar**: Todos los tokens SIP-10 implementan `transfer`, `get-balance`, etc. +* **Postcondiciones**: Proteger a los usuarios asegurando que se transfieran cantidades exactas +* **Memorandos**: Campo opcional para incluir notas de transferencia diff --git a/content/docs/es/resources/snippets/transfer-stx.mdx b/content/docs/es/resources/snippets/transfer-stx.mdx new file mode 100644 index 000000000..3e825e9ed --- /dev/null +++ b/content/docs/es/resources/snippets/transfer-stx.mdx @@ -0,0 +1,49 @@ +--- +title: Transferir STX +description: Envía tokens STX entre direcciones con post-condiciones para transferencias seguras +--- +```typescript +import { STACKS_TESTNET } from "@stacks/network"; +import { + AnchorMode, + broadcastTransaction, + makeSTXTokenTransfer, + Pc, + PostConditionMode, +} from "@stacks/transactions"; + +// Define sender and recipient +const senderAddress = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM"; +const recipientAddress = "ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5"; + +// Create post-condition to ensure exact amount is sent +const postConditions = Pc.principal(senderAddress) + .willSendEq(1000000) // 1 STX in micro-STX + .ustx(); + +// Configure transaction options +const txOptions = { + recipient: recipientAddress, + amount: 1000000, // 1 STX in micro-STX + senderKey: "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601", + network: STACKS_TESTNET, + memo: "Transfer memo", // Optional memo field + postConditions: [postConditions], + postConditionMode: PostConditionMode.Deny, + anchorMode: AnchorMode.Any, +}; + +// Create and broadcast the transaction +const transaction = await makeSTXTokenTransfer(txOptions); +const broadcastResponse = await broadcastTransaction({ transaction }); +console.log("Transaction ID:", broadcastResponse.txid); +``` + +## Casos de uso + +* Transferir tokens STX de forma segura entre direcciones +* Validando montos de transacciones para transferencias seguras + +## Conceptos clave + +* **Postcondiciones**: Asegúrate de que se transfiera la cantidad exacta de STX diff --git a/content/docs/es/resources/templates/index.mdx b/content/docs/es/resources/templates/index.mdx new file mode 100644 index 000000000..6c2b10c5c --- /dev/null +++ b/content/docs/es/resources/templates/index.mdx @@ -0,0 +1,6 @@ +--- +title: Plantillas de proyectos +description: Plantillas de proyectos para construir en Stacks. +llm: false +--- +## Plantillas de proyectos diff --git a/content/docs/es/resources/templates/meta.json b/content/docs/es/resources/templates/meta.json new file mode 100644 index 000000000..1fe5c96f2 --- /dev/null +++ b/content/docs/es/resources/templates/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Project templates", + "root": true, + "pages": ["index", "..."] +} diff --git a/content/docs/es/start/index.mdx b/content/docs/es/start/index.mdx new file mode 100644 index 000000000..27252732a --- /dev/null +++ b/content/docs/es/start/index.mdx @@ -0,0 +1,101 @@ +--- +title: Empezar +description: Comienza a construir aplicaciones descentralizadas en Stacks con las herramientas de Hiro. +sidebarTitle: Visión general +full: true +llm: false +--- +import { Card as MainCard, SecondaryCard, SmallCard } from '@/components/card'; +import { ImageZoom } from 'fumadocs-ui/components/image-zoom'; +import { PageFooter } from '@/components/footer'; +import { MessageCircle, Braces, Brackets, ChevronRight, Code, Database, Play, Rocket, Star, Terminal, Wallet, NotebookIcon, TestTube, Layers, Calculator, Activity, Filter, Server, Package, Shield, Zap, Hammer } from 'lucide-react'; +import { API, Backend, BugIcon, Clarinet, Clarity, Cloud, Chainhook, Frontend, Hiro, Js, Newspaper, Pulse, QuestionIcon } from '@/components/ui/icon'; +import heroImage from '@/public/stacks-hero.svg'; + +
+ + } tag="Hiro" description="Aprende más sobre las características que ofrecen nuestras herramientas." /> + + } tag="Resources" description="Comienza con una colección de recursos seleccionados en todo el ecosistema de Stacks." /> + + +
+

+ + Inicios rápidos + +

+ +
+ + + } href="/creating-a-clarinet-project" title="Quiero escribir contratos inteligentes" description="Comienza con la configuración del proyecto y los fundamentos del desarrollo local." /> + + } href="/unit-testing" title="Quiero probar mis contratos" description="Aprende las mejores prácticas de pruebas y técnicas de depuración." /> + + } href="/contract-monitoring" title="Quiero monitorear datos de blockchain" description="Configura el monitoreo e indexación en tiempo real." /> + + } href="/building-transactions" title="Quiero interactuar con contratos" description="Aprende cómo construir y enviar transacciones de forma programática." /> + +
+ +
+

+ + Flujo de trabajo de desarrollo + +

+ +
+ + + } href="/creating-a-clarinet-project" title="Crea Tu Primer Proyecto" description="Configura un nuevo proyecto de Clarinet y comienza a construir contratos inteligentes localmente." /> + + } href="/configuring-clarity-vscode-extension" title="Configura Tu IDE" description="Configure VS Code con la extensión Clarity para una experiencia de desarrollo mejorada." /> + + } href="/using-local-accounts" title="Administrar Cuentas Locales" description="Trabaja con cuentas y billeteras de prueba en tu entorno de desarrollo local." /> + + } href="/working-with-devnet" title="Configuración de Red Local" description="Ejecuta y configura una blockchain local de Stacks para pruebas." /> + +
+ +
+

+ + Pruebas y Calidad + +

+ +
+ + + } href="/unit-testing" title="Pruebas Unitarias" description="Escriba pruebas unitarias exhaustivas para asegurarse de que la lógica de su contrato sea correcta." /> + + } href="/integration-testing" title="Pruebas de Integración" description="Prueba las interacciones del contrato y los escenarios complejos con pruebas de integración." /> + + } href="/cost-analysis-and-debugging" title="Análisis de Costos" description="Analizar los costos de transacción y depurar problemas de rendimiento del contrato." /> + +
+ +
+

+ + Datos y eventos en tiempo real + +

+ +
+ + + } href="/contract-monitoring" title="Monitorear Contratos" description="Rastrea la actividad y los eventos de contratos inteligentes en tiempo real." /> + + } href="/creating-predicates" title="Crear Filtros de Eventos" description="Construye predicados personalizados para filtrar eventos de blockchain." /> + + } href="/building-a-simple-indexer" title="Construir un Indexador" description="Crea tu propio indexador de datos de blockchain para aplicaciones personalizadas." /> + + } href="/working-with-events-and-transaction-payloads" title="Cargas útiles de eventos" description="Analiza y trabaja con datos de transacciones y cargas útiles de eventos." /> + +
+
+ + diff --git a/content/docs/es/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx b/content/docs/es/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx new file mode 100644 index 000000000..56cdee1b1 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx @@ -0,0 +1,168 @@ +--- +title: Archivo bootstrap +description: Sáltese semanas de indexación mediante el arranque desde los archivos preindexados de Hiro. +--- +## Resumen + +En lugar de indexar desde el bloque génesis, puedes iniciar tu indexador utilizando los archivos actualizados regularmente de Hiro. Esto reduce el tiempo de sincronización inicial de semanas a horas. + +## Archivos disponibles + +Hiro proporciona archivos para diferentes configuraciones: + +| Tipo de Archivo | Metaprotocolos | Tamaño | Tiempo de Sincronización | +|--------------|---------------|------|-----------| +| Completo | Ordinals, Runes, BRC-20 | ~800 GB | 2-4 horas | +| Solo Ordinals | Ordinals | ~450 GB | 1-2 horas | +| Solo Runes | Runes | ~80 GB | 30 minutos | +| Solo BRC-20 | BRC-20 | ~120 GB | 45 minutos | + +## Descargar archivos + +### Crear directorio de archivo + +```terminal +$ mkdir -p ~/bitcoin-indexer/archives +$ cd ~/bitcoin-indexer/archives +``` + +### Descargar archivos requeridos + +Descarga los archivos para los metaprotocolos que deseas indexar: + +```terminal +$ curl -O -C - https://archive.hiro.so/mainnet/bitcoin-indexer-adhoc/mainnet-bitcoin-indexer-ordinals-pg-latest.tar +$ curl -O -C - https://archive.hiro.so/mainnet/bitcoin-indexer-adhoc/mainnet-bitcoin-indexer-brc20-pg-latest.tar +$ curl -O -C - https://archive.hiro.so/mainnet/bitcoin-indexer-adhoc/mainnet-bitcoin-indexer-rocksdb-latest.tar.gz +$ curl -O -C - https://archive.hiro.so/mainnet/bitcoin-indexer-adhoc/mainnet-bitcoin-indexer-runes-pg-latest.tar +``` + +:::callout +### Tiempo de descarga + +Los archivos son grandes (100-800GB). Usar `-C -` bandera para habilitar la reanudación en caso de interrupción. Los tiempos de descarga varían de 2 a 8 horas dependiendo de la velocidad de conexión. +::: + +### Extraer archivos + +```terminal +$ tar -xzf mainnet-bitcoin-indexer-rocksdb-latest.tar.gz +$ tar -xf mainnet-bitcoin-indexer-ordinals-pg-latest.tar +$ tar -xf mainnet-bitcoin-indexer-brc20-pg-latest.tar +$ tar -xf mainnet-bitcoin-indexer-runes-pg-latest.tar +``` + +### Mover datos de RocksDB + +```terminal +$ mv rocksdb ~/bitcoin-indexer/rocksdb-chainstate +``` + +## Restaurar bases de datos PostgreSQL + +### Establecer permisos + +```terminal +$ sudo chown -R postgres:postgres ~/bitcoin-indexer/archives/brc20.dump +$ sudo chown -R postgres:postgres ~/bitcoin-indexer/archives/ordinals.dump +$ sudo chown -R postgres:postgres ~/bitcoin-indexer/archives/runes.dump +``` + +### Importar volcados de base de datos + +Restaure los archivos de PostgreSQL en sus bases de datos: + +```terminal +$ sudo -u postgres pg_restore --verbose --jobs=6 -d ordinals -c --if-exists ~/bitcoin-indexer/archives/ordinals.dump + +$ # Restore Runes database (if downloaded) +$ sudo -u postgres pg_restore --verbose --jobs=6 -d runes -c --if-exists ~/bitcoin-indexer/archives/runes.dump +``` + +:::callout +### Tiempo de restauración + +La restauración de la base de datos tarda entre 1 y 4 horas dependiendo del tamaño del archivo y la velocidad del disco. El `--jobs=6` flag utiliza procesamiento paralelo para acelerar la restauración. +::: + +### Verificar restauración + +Verifique que los datos se hayan importado correctamente: + +```terminal +$ sudo -u postgres psql -d ordinals -c "SELECT COUNT(*) FROM inscriptions;" +$ sudo -u postgres psql -d brc20 -c "SELECT COUNT(DISTINCT ticker) FROM tokens;" +``` + +## Verificar la altura del bloque de archivo + +Encuentra la altura del bloque de tu archivo restaurado: + +```terminal +$ ls -la ~/bitcoin-indexer/rocksdb-chainstate/rocksdb/ | grep -i manifest +``` + +## Configuración para el arranque del archivo + +¡No se necesita configuración especial! El indexador detecta automáticamente el estado del archivo y continúa desde donde se quedó. Solo asegúrate de que tus rutas coincidan: + +```toml title="bitcoin-indexer-config.toml" +[storage] +working_dir = "/home/bitcoin-indexer/bitcoin-indexer/rocksdb-chainstate" + +# ... rest of your configuration +``` + +## Comenzar indexación + +Con el archivo en su lugar, inicie el indexador: + +```terminal +$ bitcoin-indexer runes service start --config-path=bitcoin-indexer.toml +$ bitcoin-indexer ordinals service start --config-path=bitcoin-indexer.toml +``` + +El indexador: + +1. Cargar el estado del archivo +2. Conéctese a su nodo de Bitcoin +3. Procesar nuevos bloques desde la altura del archivo +4. Alcanzar la punta de la cadena + +## Creando archivos personalizados + +Exporte sus propios archivos para respaldo o migración: + +```terminal +$ bitcoin-indexer export \ + --data-dir /data/bitcoin-indexer \ + --output /backups/indexer-backup.tar.gz \ + --compress +``` + +## Solución de problemas + +### Error al extraer el archivo + +Asegúrese de tener suficiente espacio en disco - los archivos se extraen temporalmente al doble de su tamaño comprimido. + +### Errores de verificación + +```terminal +$ tar -tzf bitcoin-indexer-full-latest.tar.gz | wc -l +``` + +### Velocidades de descarga lentas + +Utilice un gestor de descargas con soporte de reanudación: + +```terminal +$ aria2c -x 16 -s 16 https://archive.hiro.so/bitcoin-indexer/mainnet/bitcoin-indexer-full-latest.tar.gz +``` + +## Próximos pasos + +:::next-steps +* [Configurar el indexador](/tools/bitcoin-indexer/configuration): Ajusta la configuración para tu caso de uso +* [Comience a usar la API de Ordinals](/tools/bitcoin-indexer/ordinals-api): Ejecutar consultas en sus datos indexados +::: diff --git a/content/docs/es/tools/bitcoin-indexer/(indexer)/configuration.mdx b/content/docs/es/tools/bitcoin-indexer/(indexer)/configuration.mdx new file mode 100644 index 000000000..e2ea5834a --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(indexer)/configuration.mdx @@ -0,0 +1,286 @@ +--- +title: Configuración +description: Configura el Indexador de Bitcoin para un rendimiento óptimo y personaliza la configuración del metaprotocolo. +--- +## Archivo de configuración + +El Indexador de Bitcoin utiliza un archivo de configuración TOML para controlar todos los aspectos de la operación. Cree el archivo de configuración: + +```terminal +$ nano ~/bitcoin-indexer/bitcoin-indexer/bitcoin-indexer-config.toml +``` + +## Ejemplo de configuración completa + +```toml title="bitcoin-indexer-config.toml" +[storage] +# Path to RocksDB data directory +working_dir = "/home/bitcoin-indexer/bitcoin-indexer/rocksdb-chainstate" + +[metrics] +# Enable Prometheus metrics +enabled = true +prometheus_port = 9153 + +[ordinals.db] +# PostgreSQL connection for Ordinals data +database = "ordinals" +host = "localhost" +port = 5432 +username = "postgres" +password = "postgres" + +[ordinals.meta_protocols.brc20] +# Enable BRC-20 indexing within Ordinals +enabled = true +lru_cache_size = 10000 + +[ordinals.meta_protocols.brc20.db] +# Separate database for BRC-20 data +database = "brc20" +host = "localhost" +port = 5432 +username = "postgres" +password = "postgres" + +[runes] +# LRU cache for Runes performance +lru_cache_size = 10000 + +[runes.db] +# PostgreSQL connection for Runes data +database = "runes" +host = "localhost" +port = 5432 +username = "postgres" +password = "postgres" + +[bitcoind] +# Bitcoin Core connection settings +network = "mainnet" +rpc_url = "http://127.0.0.1:8332" +rpc_username = "user" +rpc_password = "password" +zmq_url = "tcp://0.0.0.0:18543" + +[resources] +# Resource allocation +ulimit = 2048 +cpu_core_available = 6 +memory_available = 16 +bitcoind_rpc_threads = 6 +bitcoind_rpc_timeout = 15 +``` + +## Secciones de configuración + +### Configuración de almacenamiento + +Controla dónde el indexador almacena el estado de la blockchain: + +```toml +[storage] +working_dir = "/path/to/rocksdb-chainstate" +# Optional: Set RocksDB specific options +rocksdb_max_open_files = 10000 +rocksdb_cache_size = "8GB" +``` + +:::callout +### Rendimiento del almacenamiento + +Utilice almacenamiento NVMe rápido para el directorio de trabajo. El indexador realiza muchas lecturas/escrituras aleatorias durante la operación. +::: + +### Conexiones de base de datos + +Cada metaprotocolo puede usar una base de datos separada para aislamiento: + +```toml +[ordinals.db] +database = "ordinals" +host = "localhost" +port = 5432 +username = "postgres" +password = "postgres" +# Optional connection pool settings +max_connections = 50 +min_connections = 10 +connection_timeout = 30 +``` + +### Conexión de nodo Bitcoin + +Configura cómo el indexador se conecta a tu nodo de Bitcoin: + +```toml +[bitcoind] +network = "mainnet" # or "testnet", "regtest" +rpc_url = "http://127.0.0.1:8332" +rpc_username = "user" +rpc_password = "password" +zmq_url = "tcp://0.0.0.0:18543" +# Optional: Custom RPC timeout +rpc_timeout = 30 +``` + +### Asignación de recursos + +Optimiza el rendimiento según tu hardware: + +```toml +[resources] +# File descriptor limit +ulimit = 2048 + +# CPU cores to use for indexing +cpu_core_available = 6 + +# Memory in GB +memory_available = 16 + +# Bitcoin RPC connection pool +bitcoind_rpc_threads = 6 +bitcoind_rpc_timeout = 15 +``` + +### Configuración específica del metaprotocolo + +#### Configuración de ordinales + +```toml +[ordinals] +# Start indexing from specific height (optional) +start_block = 767430 + +# Enable inscription number calculation +track_numbers = true + +# Cursed inscription handling +index_cursed = true + +[ordinals.meta_protocols.brc20] +enabled = true +# Cache size for BRC-20 balance calculations +lru_cache_size = 10000 +# Track all operations or just valid ones +index_invalid_operations = false +``` + +#### Configuración de runas + +```toml +[runes] +# LRU cache for rune entries +lru_cache_size = 10000 + +# Start block for runes (mainnet activation) +start_block = 840000 + +# Index unspendable runes +index_unspendable = true +``` + +### Configuración de API + +Configurar el servidor de API REST: + +```toml +[api] +# API server settings +enabled = true +port = 3000 +host = "0.0.0.0" + +# CORS settings +cors_enabled = true +cors_origins = ["*"] + +# Rate limiting +rate_limit_enabled = true +rate_limit_requests_per_minute = 60 + +# API key authentication +require_auth = false +api_keys = ["your-api-key-here"] +``` + +### Configuración de monitoreo + +Habilitar métricas y monitoreo: + +```toml +[metrics] +enabled = true +prometheus_port = 9153 + +# Log settings +[logging] +level = "info" # debug, info, warn, error +format = "json" # json or pretty +directory = "/home/bitcoin-indexer/bitcoin-indexer/logs" +max_size = "100MB" +max_backups = 10 +``` + +## Ajuste de rendimiento + +### Para indexación de alto rendimiento + +```toml +[resources] +cpu_core_available = 16 +memory_available = 32 +bitcoind_rpc_threads = 16 + +[storage] +rocksdb_cache_size = "16GB" +rocksdb_max_open_files = 20000 + +[ordinals.db] +max_connections = 100 +``` + +### Para recursos limitados + +```toml +[resources] +cpu_core_available = 4 +memory_available = 8 +bitcoind_rpc_threads = 4 + +[storage] +rocksdb_cache_size = "2GB" +rocksdb_max_open_files = 5000 + +[ordinals.db] +max_connections = 20 +``` + +## Variables de entorno + +Los valores de configuración pueden ser anulados con variables de entorno: + +```bash +# Override database password +export BITCOIN_INDEXER_ORDINALS_DB_PASSWORD="secure_password" + +# Override RPC credentials +export BITCOIN_INDEXER_BITCOIND_RPC_USERNAME="myuser" +export BITCOIN_INDEXER_BITCOIND_RPC_PASSWORD="mypass" + +# Override API port +export BITCOIN_INDEXER_API_PORT="8080" +``` + +## Validar configuración + +Prueba tu configuración antes de comenzar: + +```terminal +$ bitcoin-indexer validate --config-path=~/bitcoin-indexer/bitcoin-indexer/bitcoin-indexer-config.toml +[32m✓[0m Configuration valid +[32m✓[0m Bitcoin node reachable +[32m✓[0m PostgreSQL databases accessible +[32m✓[0m Storage directory writable +``` diff --git a/content/docs/es/tools/bitcoin-indexer/(indexer)/full-sync.mdx b/content/docs/es/tools/bitcoin-indexer/(indexer)/full-sync.mdx new file mode 100644 index 000000000..d3e98d810 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(indexer)/full-sync.mdx @@ -0,0 +1,190 @@ +--- +title: Sincronización completa +sidebarTitle: Sincronización completa +description: Ejecutar el Indexador de Bitcoin desde cero. +isNew: true +--- +import { ArrowRight, Check } from 'lucide-react'; + +## Lo que aprenderás + +:::objectives +* Configurar e inicializar el Indexador de Bitcoin +* Ejecutar el indexador desde cero +* Monitorear el progreso de indexación de manera efectiva +::: + +:::prerequisites +* Bitcoin Core nodo ejecutándose con `txindex=1` +* PostgreSQL ejecutándose con bases de datos creadas +* Espacio de almacenamiento suficiente +::: + +:::callout +### Archivo bootstrap recomendado + +Si aún no lo has hecho, considera [arranque inicial desde archivos](/tools/bitcoin-indexer/archive-bootstrap) para ahorrar días de tiempo de indexación. +::: + +## Iniciar servicios de indexación + +El Indexador de Bitcoin ejecuta servicios separados para cada metaprotocolo. Navega a tu directorio del indexador: + +```terminal +$ cd ~/bitcoin-indexer/bitcoin-indexer +``` + +### Ordinales de Índice (incluye BRC-20) + +```terminal +$ ./target/release/bitcoin-indexer ordinals service start --config-path=bitcoin-indexer-config.toml +``` + +### Runas de Índice + +En una terminal separada: + +```terminal +$ ./target/release/bitcoin-indexer runes service start --config-path=bitcoin-indexer-config.toml +``` + +:::callout +type: info + +### Compilando desde el código fuente + +Si está descargando una versión de nuestro extremo, ejecute `cargo build --release` después de navegar a la carpeta para compilar el proyecto. Este paso es necesario para usar `/target/release/bitcoin-indexer` para iniciar servicios. +::: + +## Monitorear el progreso de indexación + +### Revisar los registros del servicio + +El indexador genera información detallada sobre el progreso: + +```terminal +$ tail -f ~/bitcoin-indexer/bitcoin-indexer/ordinals.log +``` + +### Consultar el estado del indexador a través de la API + +Una vez que el servidor API se inicia (generalmente después de unos pocos bloques): + +```terminal +$ curl http://localhost:3000/ordinals/v1/status +{ + "block_height": 819600, + "inscriptions_indexed": 52342567, + "latest_inscription_number": 52342567, + "sync_percentage": 99.93, + "blocks_behind": 523 +} +``` + +## Gestión de servicios + +### Detener servicios de manera controlada + +```terminal +$ ps aux | grep bitcoin-indexer +``` + +### Reiniciar después de la interrupción + +El indexador se reanuda automáticamente desde el último bloque procesado: + +```terminal +$ ./target/release/bitcoin-indexer ordinals service start --config-path=bitcoin-indexer-config.toml +``` + +## Configuración del servicio systemd + +Para implementaciones de producción, utilice systemd para gestionar servicios: + +### Crear servicio de Ordinales + +```bash title="/etc/systemd/system/bitcoin-indexer-ordinals.service" +[Unit] +Description=Bitcoin Indexer - Ordinals Service +After=network.target postgresql.service bitcoind.service + +[Service] +Type=simple +User=bitcoin-indexer +WorkingDirectory=/home/bitcoin-indexer/bitcoin-indexer +ExecStart=/home/bitcoin-indexer/bitcoin-indexer/target/release/bitcoin-indexer ordinals service start --config-path=bitcoin-indexer-config.toml +Restart=on-failure +RestartSec=30 + +[Install] +WantedBy=multi-user.target +``` + +### Crear servicio de Runas + +```bash title="/etc/systemd/system/bitcoin-indexer-runes.service" +[Unit] +Description=Bitcoin Indexer - Runes Service +After=network.target postgresql.service bitcoind.service + +[Service] +Type=simple +User=bitcoin-indexer +WorkingDirectory=/home/bitcoin-indexer/bitcoin-indexer +ExecStart=/home/bitcoin-indexer/bitcoin-indexer/target/release/bitcoin-indexer runes service start --config-path=bitcoin-indexer-config.toml +Restart=on-failure +RestartSec=30 + +[Install] +WantedBy=multi-user.target +``` + +### Habilitar e iniciar servicios + +```terminal +$ sudo systemctl daemon-reload +$ sudo systemctl enable bitcoin-indexer-ordinals bitcoin-indexer-runes +$ sudo systemctl start bitcoin-indexer-ordinals bitcoin-indexer-runes +$ sudo systemctl status bitcoin-indexer-ordinals +``` + +## Optimización del rendimiento + +### Durante la sincronización inicial + +Optimizar el rendimiento durante la puesta al día: + +```toml title="bitcoin-indexer-config.toml" +[resources] +# Use more cores during initial sync +cpu_core_available = 12 +bitcoind_rpc_threads = 10 +``` + +### Después de alcanzar la punta de la cadena + +Reducir el uso de recursos para la operación en estado estable: + +```toml +[resources] +# Reduce for normal operation +cpu_core_available = 4 +bitcoind_rpc_threads = 4 +``` + +## Verificar la indexación exitosa + +### Verificar puntos finales de API + +Prueba que las APIs estén devolviendo datos: + +```terminal -o +$ curl http://localhost:3000/ordinals/v1/inscriptions/0 +``` + +## Próximos pasos + +:::next-steps +* [Archivos de Hiro](/tools/bitcoin-indexer/archive-bootstrap): Salta semanas de indexación al iniciar desde los archivos preindexados de Hiro. +* [Configuración avanzada](/tools/bitcoin-indexer/configuration): Configura el Indexador de Bitcoin para un rendimiento óptimo y personaliza la configuración del metaprotocolo. +::: diff --git a/content/docs/es/tools/bitcoin-indexer/(indexer)/installation.mdx b/content/docs/es/tools/bitcoin-indexer/(indexer)/installation.mdx new file mode 100644 index 000000000..cda02d783 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(indexer)/installation.mdx @@ -0,0 +1,224 @@ +--- +title: Instalación +description: Instale PostgreSQL y compile el Indexador de Bitcoin desde el código fuente en sistemas Linux. +--- +## Requisitos previos + +Antes de instalar el Indexador de Bitcoin, asegúrese de tener: + +* Un nodo de Bitcoin completamente sincronizado (ver [Configuración de nodo de Bitcoin](/tools/bitcoin-indexer/full-sync)) +* Ubuntu 20.04+ o Debian 11+ +* Al menos 32GB de RAM +* 2TB+ de almacenamiento NVMe rápido + +Instalar los paquetes del sistema requeridos: + +```terminal +$ sudo apt update +$ sudo apt install -y build-essential git curl pkg-config libssl-dev +``` + +## Instalar PostgreSQL + +El Indexador de Bitcoin requiere PostgreSQL 14 o superior para almacenar datos de metaprotocolo. + +### Agregar repositorio de PostgreSQL + +```terminal +$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' +$ curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg +$ sudo apt update +``` + +### Instalar PostgreSQL 17 + +```terminal +$ sudo apt install postgresql-17 +$ echo 'export PATH=/usr/lib/postgresql/17/bin:$PATH' >> ~/.bashrc +$ source ~/.bashrc +``` + +### Configurar el directorio de datos de PostgreSQL + +Crear un directorio de datos personalizado para PostgreSQL: + +```terminal +$ mkdir -p ~/bitcoin-indexer/pgdata +$ sudo chown -R postgres:postgres ~/bitcoin-indexer/pgdata +``` + +Inicializar el clúster de base de datos: + +```terminal +$ sudo -u postgres env "PATH=$PATH" initdb -D ~/bitcoin-indexer/pgdata +[32mThe files belonging to this database system will be owned by user "postgres".[0m +[32mThis user must also own the server process.[0m +``` + +### Iniciar servidor PostgreSQL + +```terminal +$ sudo -u postgres env "PATH=$PATH" pg_ctl -D ~/bitcoin-indexer/pgdata start +[32mserver starting[0m +``` + +Verifique que PostgreSQL esté en ejecución: + +```terminal +$ sudo -u postgres psql -c "SELECT version();" +``` + +### Crear bases de datos + +Crear bases de datos separadas para cada metaprotocolo: + +```terminal +$ sudo -u postgres createdb -p 5432 ordinals +$ sudo -u postgres createdb -p 5432 brc20 +$ sudo -u postgres createdb -p 5432 runes +``` + +Establece la contraseña del usuario postgres: + +```terminal +$ sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'postgres';" +[32mALTER ROLE[0m +``` + +:::callout +type: warn + +### Nota de seguridad + +Utilice una contraseña fuerte en producción. La contraseña predeterminada 'postgres' es solo para desarrollo. +::: + +## Instalar Rust + +El Indexador de Bitcoin está escrito en Rust. Instale la última versión estable: + +```terminal +$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +$ source $HOME/.cargo/env +$ rustc --version +rustc 1.75.0 (82e1608df 2023-12-21) +``` + +## Construir Indexador de Bitcoin + +### Clonar el repositorio + +```terminal +$ cd ~/bitcoin-indexer +$ git clone https://github.com/hirosystems/bitcoin-indexer.git +$ cd bitcoin-indexer +``` + +### Compilar desde el código fuente + +```terminal +$ cargo build --release + [32mCompiling[0m bitcoin-indexer v0.1.0 + [32mFinished[0m release [optimized] target(s) in 4m 23s +``` + +El binario compilado estará en `target/release/bitcoin-indexer`. + +:::callout +### Tiempo de compilación + +La compilación inicial tarda entre 5 y 10 minutos. Las compilaciones posteriores son mucho más rápidas debido al almacenamiento en caché. +::: + +### Crear enlace simbólico para acceso global + +```terminal +$ sudo ln -s ~/bitcoin-indexer/bitcoin-indexer/target/release/bitcoin-indexer /usr/local/bin/bitcoin-indexer +``` + +Verificar instalación: + +```terminal +$ bitcoin-indexer --version +bitcoin-indexer 0.1.0 +``` + +## Crear estructura de directorios + +Configura los directorios necesarios para el indexador: + +```terminal +$ mkdir -p ~/bitcoin-indexer/{rocksdb-chainstate,archives,logs} +``` + +Propósitos del directorio: + +* `rocksdb-chainstate/` - Almacena el estado indexado de la cadena de bloques +* `archives/` - Archivos descargados del archivo comprimido para bootstrap +* `logs/` - Registros de aplicación y errores + +## Configurar servicio systemd + +Crear un servicio systemd para inicio automático: + +```bash title="/etc/systemd/system/bitcoin-indexer.service" +[Unit] +Description=Bitcoin Metaprotocol Indexer +After=network.target postgresql.service bitcoind.service + +[Service] +Type=simple +User=bitcoin-indexer +Group=bitcoin-indexer +WorkingDirectory=/home/bitcoin-indexer/bitcoin-indexer + +ExecStart=/usr/local/bin/bitcoin-indexer ordinals service start --config-path=/home/bitcoin-indexer/bitcoin-indexer/bitcoin-indexer-config.toml +Restart=on-failure +RestartSec=30 + +# Process management +KillMode=mixed +KillSignal=SIGTERM +TimeoutStopSec=300 + +# Security +NoNewPrivileges=true +PrivateTmp=true + +[Install] +WantedBy=multi-user.target +``` + +Habilitar el servicio: + +```terminal +$ sudo systemctl daemon-reload +$ sudo systemctl enable bitcoin-indexer +``` + +## Verificar instalación + +Verifique que todos los componentes estén instalados correctamente: + +```terminal +$ # Check Bitcoin node +$ bitcoin-cli getblockcount +820000 + +$ # Check PostgreSQL +$ sudo -u postgres psql -l | grep -E "ordinals|brc20|runes" + ordinals | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | + brc20 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | + runes | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | + +$ # Check indexer binary +$ bitcoin-indexer --help +Bitcoin Indexer - High-performance metaprotocol indexing engine +``` + +## Próximos pasos + +:::next-steps +* [Configurar el indexador](/tools/bitcoin-indexer/configuration): Configurar bitcoin-indexer-config.toml +* [Arranque desde archivos](/tools/bitcoin-indexer/archive-bootstrap): Acelerar la sincronización inicial con datos preindexados +::: diff --git a/content/docs/es/tools/bitcoin-indexer/(indexer)/node-installation.mdx b/content/docs/es/tools/bitcoin-indexer/(indexer)/node-installation.mdx new file mode 100644 index 000000000..55c3e6a50 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(indexer)/node-installation.mdx @@ -0,0 +1,221 @@ +--- +title: Instalación de Node +description: Configurar y sincronizar un nodo de Bitcoin Core optimizado para el Indexador de Bitcoin. +--- +## Visión general + +El Indexador de Bitcoin requiere un nodo de Bitcoin Core completamente sincronizado con la indexación de transacciones habilitada. Esta guía explica cómo configurar un nodo específicamente configurado para la operación del indexador. + +## Descargar Bitcoin Core + +Descargue Bitcoin Core versión 25.0 o superior. Elija la versión correcta para la arquitectura de su procesador. + +### Crear directorio de Bitcoin + +```terminal +$ mkdir -p ~/bitcoin-indexer/bitcoin +$ cd ~/bitcoin-indexer/bitcoin +``` + +### Descargar y extraer + + + + + Para x86\_64 (Intel/AMD) + + + + Para ARM64 + + + + Instalar globalmente con enlaces simbólicos + + + + + ```terminal + $ curl -O https://bitcoincore.org/bin/bitcoin-core-25.1/bitcoin-25.1-x86_64-linux-gnu.tar.gz + $ tar -xzf bitcoin-25.1-x86_64-linux-gnu.tar.gz + ``` + + + + ```terminal + $ curl -O https://bitcoincore.org/bin/bitcoin-core-25.1/bitcoin-25.1-aarch64-linux-gnu.tar.gz + $ tar -xzf bitcoin-25.1-aarch64-linux-gnu.tar.gz + ``` + + + + ```terminal + $ sudo ln -s ~/bitcoin-indexer/bitcoin/bitcoin-25.1/bin/bitcoind /usr/local/bin/bitcoind + $ sudo ln -s ~/bitcoin-indexer/bitcoin/bitcoin-25.1/bin/bitcoin-cli /usr/local/bin/bitcoin-cli + ``` + + + +Verificar instalación: + +```terminal +$ bitcoind --version +Bitcoin Core version v25.1.0 +``` + +## Configurar para indexación + +### Crear directorio de datos + +```terminal +$ mkdir -p ~/bitcoin-indexer/bitcoin/chainstate +``` + +### Crear archivo de configuración + +```terminal +$ nano ~/bitcoin-indexer/bitcoin/bitcoin.conf +``` + +Agregue la siguiente configuración: + +```console ~/bitcoin-indexer/bitcoin/bitcoin.conf +# Data directory +datadir=/home/$USER/bitcoin-indexer/bitcoin/chainstate + +# Core settings +server=1 +txindex=1 +daemon=1 + +# RPC settings +rpcuser=user +rpcpassword=password +rpcport=8332 +rpcallowip=127.0.0.1 +rpcthreads=16 + +# ZeroMQ settings (required for indexer) +zmqpubrawblock=tcp://0.0.0.0:18543 +zmqpubrawtx=tcp://0.0.0.0:18544 +zmqpubhashtx=tcp://0.0.0.0:18545 +zmqpubhashblock=tcp://0.0.0.0:18546 + +# Performance settings +# Set to 16384 (16GB) during initial sync, reduce to 2048 after +dbcache=16384 +maxmempool=1000 +mempoolexpiry=72 + +# Network settings +listen=1 +maxconnections=125 + +# Deprecated RPC +deprecatedrpc=warnings +``` + +:::callout +type: warn + +### Nota de seguridad + +Utilice siempre una contraseña fuerte y única para el acceso RPC. El indexador utilizará estas credenciales para comunicarse con su nodo. +::: + +## Sincronización inicial de la cadena de bloques + +Inicie Bitcoin Core con su configuración: + +```terminal +$ bitcoind -conf=$HOME/bitcoin-indexer/bitcoin/bitcoin.conf +``` + +:::callout +### Tiempo de sincronización inicial + +La sincronización inicial de la cadena de bloques tarda de 1 a 3 días dependiendo del hardware y la velocidad de la red. El nodo descargará aproximadamente 600GB de datos. +::: + +Monitorear el progreso de sincronización en otra terminal: + +```terminal +$ bitcoin-cli -conf=$HOME/bitcoin-indexer/bitcoin/bitcoin.conf getblockchaininfo | jq '{blocks, headers, verificationprogress}' +``` + +También puedes monitorear el estado detallado de sincronización: + +```terminal +$ bitcoin-cli -conf=$HOME/bitcoin-indexer/bitcoin/bitcoin.conf getblockchaininfo | jq '{chain, blocks, headers, bestblockhash, verificationprogress, size_on_disk}' +``` + +## Verificar la compatibilidad del indexador + +Una vez sincronizado, verifique que el nodo esté configurado correctamente: + +```terminal -o +$ bitcoin-cli -conf=$HOME/bitcoin-indexer/bitcoin/bitcoin.conf getindexinfo +{ + "txindex": { + "synced": true, + "best_block_height": 820000 + } +} +$ bitcoin-cli -conf=$HOME/bitcoin-indexer/bitcoin/bitcoin.conf getzmqnotifications +[ + { + "type": "pubrawblock", + "address": "tcp://0.0.0.0:18543", + "hwm": 1000 + }, + { + "type": "pubrawtx", + "address": "tcp://0.0.0.0:18544", + "hwm": 1000 + } +] +``` + +## Configuración del servicio systemd + +Crear un servicio systemd para inicio automático: + +```console /etc/systemd/system/bitcoind.service +[Unit] +Description=Bitcoin Core Daemon +After=network.target + +[Service] +Type=notify +ExecStart=/usr/local/bin/bitcoind -conf=/home/bitcoin-indexer/bitcoin/bitcoin.conf +User=bitcoin-indexer +Group=bitcoin-indexer +Restart=on-failure +RestartSec=30 + +# Security hardening +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ReadWritePaths=/home/bitcoin-indexer/bitcoin/chainstate + +[Install] +WantedBy=multi-user.target +``` + +Habilite e inicie el servicio: + +```terminal +$ sudo systemctl enable bitcoind +$ sudo systemctl start bitcoind +$ sudo systemctl status bitcoind +[32m●[0m bitcoind.service - Bitcoin Core Daemon + Active: [32mactive (running)[0m +``` + +## Próximos pasos + +:::next-steps +* [Configurar el indexador](/tools/bitcoin-indexer/configuration): Configurar el Indexador de Bitcoin para conectarse a tu nodo +* [Arrancar desde archivo](/tools/bitcoin-indexer/archive-bootstrap): Salta la espera con archivos pre-sincronizados +::: diff --git a/content/docs/es/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx b/content/docs/es/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx new file mode 100644 index 000000000..f68726c0a --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx @@ -0,0 +1,233 @@ +--- +title: Ejecutando tu propia API de Ordinals +sidebarTitle: Integración de API de Ordinales +description: Puntos finales de la API REST para consultar inscripciones de Ordinals, colecciones y rareza de satoshis. +--- +## Resumen + +La API de Ordinals proporciona acceso integral a datos de inscripciones, artefactos digitales y seguimiento de satoshis. Todos los puntos de acceso devuelven JSON y admiten paginación para conjuntos de resultados grandes. + +URL base: `http://localhost:3000/ordinals/v1` + +## Autenticación + +La API está abierta por defecto. Para implementaciones en producción, configure claves de API: + +```bash title="bitcoin-indexer.toml" +[api] +require_auth = true +api_keys = ["your-api-key-here"] +``` + +Incluya la clave API en las solicitudes: + +```bash +Authorization: Bearer your-api-key-here +``` + +## Puntos finales de inscripción + +### Obtener inscripción \[#get-inscription] + +`GET /inscriptions/{inscription_id}` recupera detalles de inscripción por ID o número. + +```terminal +$ curl http://localhost:3000/ordinals/v1/inscriptions/0 +``` + +```json +{ + "id": "6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0", + "number": 0, + "address": "bc1pxaneaf3w4d27hl2y93fuft2xk6m4u3wc4rafevc6slgd7f5tq2dqynekta", + "genesis_address": "bc1pxaneaf3w4d27hl2y93fuft2xk6m4u3wc4rafevc6slgd7f5tq2dqynekta", + "genesis_block_height": 767430, + "genesis_block_hash": "00000000000000000002a90330a99f67e3f01eb2ce070b45930581e82fb7ddad", + "genesis_tx_id": "6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799", + "genesis_fee": "0", + "genesis_timestamp": 1670913723, + "content_type": "text/plain;charset=utf-8", + "content_length": 793, + "sat_ordinal": "1252201400444387", + "sat_rarity": "common", + "sat_coinbase_height": 59291 +} +``` + +### Lista de inscripciones \[#list-inscriptions] + +`GET /inscriptions` devuelve una lista paginada de inscripciones. + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `limit` | número | Resultados por página (máx. 100) | +| `offset` | número | Número de resultados a omitir | +| `address` | string | Filtrar por dirección del propietario | +| `mime_type` | string | Filtrar por tipo MIME | +| `from_block` | número | Altura del bloque inicial | +| `to_block` | número | Altura final del bloque | + +```terminal +$ curl "http://localhost:3000/ordinals/v1/inscriptions?limit=5&mime_type=image/png" +``` + +### Obtener contenido de inscripción \[#get-content] + +`GET /inscriptions/{inscription_id}/content` devuelve el contenido bruto de la inscripción. + +```terminal +$ curl http://localhost:3000/ordinals/v1/inscriptions/0/content +hello world +``` + +Para contenido binario (imágenes, etc.), se establecen los encabezados Content-Type apropiados. + +## Puntos finales de colección + +### Listar colecciones \[#list-collections] + +`GET /collections` devuelve colecciones de Ordinals reconocidas. + +```terminal +$ curl http://localhost:3000/ordinals/v1/collections +``` + +```json +{ + "results": [ + { + "id": "bitcoin-punks", + "name": "Bitcoin Punks", + "inscription_count": 10000, + "holder_count": 3847, + "floor_price": 15000000, + "volume_24h": 580000000 + } + ], + "total": 156 +} +``` + +### Obtener detalles de la colección \[#get-collection] + +`GET /collections/{collection_id}` devuelve metadatos y estadísticas de la colección. + +## Puntos finales de Satoshi + +### Obtener información de satoshi \[#get-satoshi] + +`GET /sats/{ordinal}` devuelve detalles sobre un satoshi específico. + +```terminal +$ curl http://localhost:3000/ordinals/v1/sats/1252201400444387 +``` + +```json +{ + "ordinal": "1252201400444387", + "decimal": "59291.444387", + "rarity": "common", + "name": "ntwmwqcqfcb", + "block_height": 59291, + "offset": 444387, + "inscriptions": ["6fb976...42799i0"] +} +``` + +### Lista de rarezas de satoshi \[#list-rarities] + +`GET /sats/rarities` devuelve satoshis por clase de rareza. + +| Rareza | Descripción | +|--------|-------------| +| `mythic` | Primer bloque de génesis | +| `legendary` | Primer sat de la primera tx en el bloque | +| `epic` | Primer sábado después del halving | +| `rare` | Primer sábado después del ajuste de dificultad | +| `uncommon` | Primer sábado de cada bloque | +| `common` | Todos los demás sats | + +## Puntos finales de actividad + +### Obtener actividad reciente \[#recent-activity] + +`GET /activity` devuelve transferencias y ventas de inscripciones recientes. + +```terminal +$ curl "http://localhost:3000/ordinals/v1/activity?type=transfer&limit=10" +``` + +### Obtener actividad de dirección \[#address-activity] + +`GET /addresses/{address}/activity` devuelve la actividad para una dirección específica. + +## Puntos finales de estadísticas + +### Obtener estadísticas globales \[#global-stats] + +`GET /stats` devuelve estadísticas agregadas de Ordinals. + +```terminal +$ curl http://localhost:3000/ordinals/v1/stats +``` + +```json +{ + "total_inscriptions": 52342891, + "total_fees_paid": "4821.23", + "unique_mime_types": 847, + "holder_addresses": 892341, + "inscriptions_24h": 45123, + "volume_24h": "18.5" +} +``` + +## Suscripciones de Websocket + +Suscríbete a eventos de inscripción en tiempo real: + +```javascript +const ws = new WebSocket('ws://localhost:3000/ordinals/v1/subscribe'); + +ws.on('message', (data) => { + const event = JSON.parse(data); + // Handle inscription_revealed, inscription_transferred, etc. +}); + +// Subscribe to specific events +ws.send(JSON.stringify({ + type: 'subscribe', + events: ['inscription_revealed'], + filters: { mime_type: 'image/*' } +})); +``` + +## Respuestas de error + +Todos los errores devuelven una estructura JSON consistente: + +```json +{ + "error": { + "code": "NOT_FOUND", + "message": "Inscription not found", + "details": { + "inscription_id": "invalid123" + } + } +} +``` + +| Código | Estado HTTP | Descripción | +|------|-------------|-------------| +| `NOT_FOUND` | 404 | Recurso no encontrado | +| `INVALID_REQUEST` | 400 | Solicitud mal formada | +| `RATE_LIMITED` | 429 | Demasiadas solicitudes | +| `INTERNAL_ERROR` | 500 | Error del servidor | + +## Próximos pasos + +:::next-steps +* [API de Runas](/tools/bitcoin-indexer/runes-api): Consultar tokens y saldos de Runes +* [API de Ordinales](/tools/bitcoin-indexer/ordinals-api): Acceder a datos de Ordinales +::: diff --git a/content/docs/es/tools/bitcoin-indexer/(integrations)/runes-api.mdx b/content/docs/es/tools/bitcoin-indexer/(integrations)/runes-api.mdx new file mode 100644 index 000000000..b96daed24 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/(integrations)/runes-api.mdx @@ -0,0 +1,233 @@ +--- +title: Ejecutando tu propia API de Runas +sidebarTitle: Integración de API de runas +description: Puntos finales de la API REST para consultar grabados de Runas +--- +## Visión general + +La API de Runes proporciona acceso integral a datos de inscripciones, artefactos digitales y seguimiento de satoshis. Todos los puntos finales devuelven JSON y admiten paginación para conjuntos de resultados grandes. + +URL base: `http://localhost:3000/runes/v1` + +## Autenticación + +La API está abierta por defecto. Para implementaciones en producción, configure claves de API: + +```bash title="bitcoin-indexer.toml" +[api] +require_auth = true +api_keys = ["your-api-key-here"] +``` + +Incluya la clave API en las solicitudes: + +```bash +Authorization: Bearer your-api-key-here +``` + +## Puntos finales de inscripción + +### Obtener inscripción \[#get-inscription] + +`GET /inscriptions/{inscription_id}` recupera detalles de inscripción por ID o número. + +```terminal +$ curl http://localhost:3000/runes/v1/inscriptions/0 +``` + +```json +{ + "id": "6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0", + "number": 0, + "address": "bc1pxaneaf3w4d27hl2y93fuft2xk6m4u3wc4rafevc6slgd7f5tq2dqynekta", + "genesis_address": "bc1pxaneaf3w4d27hl2y93fuft2xk6m4u3wc4rafevc6slgd7f5tq2dqynekta", + "genesis_block_height": 767430, + "genesis_block_hash": "00000000000000000002a90330a99f67e3f01eb2ce070b45930581e82fb7ddad", + "genesis_tx_id": "6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799", + "genesis_fee": "0", + "genesis_timestamp": 1670913723, + "content_type": "text/plain;charset=utf-8", + "content_length": 793, + "sat_ordinal": "1252201400444387", + "sat_rarity": "common", + "sat_coinbase_height": 59291 +} +``` + +### Lista de inscripciones \[#list-inscriptions] + +`GET /inscriptions` devuelve una lista paginada de inscripciones. + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `limit` | número | Resultados por página (máx. 100) | +| `offset` | número | Número de resultados a omitir | +| `address` | string | Filtrar por dirección del propietario | +| `mime_type` | string | Filtrar por tipo MIME | +| `from_block` | número | Altura del bloque inicial | +| `to_block` | número | Altura final del bloque | + +```terminal +$ curl "http://localhost:3000/runes/v1/inscriptions?limit=5&mime_type=image/png" +``` + +### Obtener contenido de inscripción \[#get-content] + +`GET /inscriptions/{inscription_id}/content` devuelve el contenido bruto de la inscripción. + +```terminal +$ curl http://localhost:3000/runes/v1/inscriptions/0/content +hello world +``` + +Para contenido binario (imágenes, etc.), se establecen los encabezados Content-Type apropiados. + +## Puntos finales de colección + +### Listar colecciones \[#list-collections] + +`GET /collections` devuelve colecciones de Ordinals reconocidas. + +```terminal +$ curl http://localhost:3000/runes/v1/collections +``` + +```json +{ + "results": [ + { + "id": "bitcoin-punks", + "name": "Bitcoin Punks", + "inscription_count": 10000, + "holder_count": 3847, + "floor_price": 15000000, + "volume_24h": 580000000 + } + ], + "total": 156 +} +``` + +### Obtener detalles de la colección \[#get-collection] + +`GET /collections/{collection_id}` devuelve metadatos y estadísticas de la colección. + +## Puntos finales de Satoshi + +### Obtener información de satoshi \[#get-satoshi] + +`GET /sats/{ordinal}` devuelve detalles sobre un satoshi específico. + +```terminal +$ curl http://localhost:3000/runes/v1/sats/1252201400444387 +``` + +```json +{ + "ordinal": "1252201400444387", + "decimal": "59291.444387", + "rarity": "common", + "name": "ntwmwqcqfcb", + "block_height": 59291, + "offset": 444387, + "inscriptions": ["6fb976...42799i0"] +} +``` + +### Lista de rarezas de satoshi \[#list-rarities] + +`GET /sats/rarities` devuelve satoshis por clase de rareza. + +| Rareza | Descripción | +|--------|-------------| +| `mythic` | Primer sat del bloque génesis | +| `legendary` | Primer sat de la primera tx en el bloque | +| `epic` | Primer sábado después del halving | +| `rare` | Primer sábado después del ajuste de dificultad | +| `uncommon` | Primer sábado de cada bloque | +| `common` | Todos los demás sats | + +## Puntos finales de actividad + +### Obtener actividad reciente \[#recent-activity] + +`GET /activity` devuelve transferencias y ventas de inscripciones recientes. + +```terminal +$ curl "http://localhost:3000/runes/v1/activity?type=transfer&limit=10" +``` + +### Obtener actividad de la dirección \[#address-activity] + +`GET /addresses/{address}/activity` devuelve la actividad para una dirección específica. + +## Puntos finales de estadísticas + +### Obtener estadísticas globales \[#global-stats] + +`GET /stats` devuelve estadísticas agregadas de Ordinals. + +```terminal +$ curl http://localhost:3000/runes/v1/stats +``` + +```json +{ + "total_inscriptions": 52342891, + "total_fees_paid": "4821.23", + "unique_mime_types": 847, + "holder_addresses": 892341, + "inscriptions_24h": 45123, + "volume_24h": "18.5" +} +``` + +## Suscripciones de Websocket + +Suscríbete a eventos de inscripción en tiempo real: + +```javascript +const ws = new WebSocket('ws://localhost:3000/runes/v1/subscribe'); + +ws.on('message', (data) => { + const event = JSON.parse(data); + // Handle inscription_revealed, inscription_transferred, etc. +}); + +// Subscribe to specific events +ws.send(JSON.stringify({ + type: 'subscribe', + events: ['inscription_revealed'], + filters: { mime_type: 'image/*' } +})); +``` + +## Respuestas de error + +Todos los errores devuelven una estructura JSON consistente: + +```json +{ + "error": { + "code": "NOT_FOUND", + "message": "Inscription not found", + "details": { + "inscription_id": "invalid123" + } + } +} +``` + +| Código | Estado HTTP | Descripción | +|------|-------------|-------------| +| `NOT_FOUND` | 404 | Recurso no encontrado | +| `INVALID_REQUEST` | 400 | Solicitud mal formada | +| `RATE_LIMITED` | 429 | Demasiadas solicitudes | +| `INTERNAL_ERROR` | 500 | Error del servidor | + +## Próximos pasos + +:::next-steps +* [API de Runas](/tools/bitcoin-indexer/runes-api): Consultar tokens y saldos de Runes +* [API de Ordinales](/tools/bitcoin-indexer/ordinals-api): Acceder a datos de Ordinales +::: diff --git a/content/docs/es/tools/bitcoin-indexer/index.mdx b/content/docs/es/tools/bitcoin-indexer/index.mdx new file mode 100644 index 000000000..d15e15f32 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/index.mdx @@ -0,0 +1,44 @@ +--- +title: Indexador de Bitcoin +sidebarTitle: Visión general +description: El Indexador de Bitcoin es un motor de indexación de alto rendimiento, consciente de las reorganizaciones, que rastrea los metaprotocolos de Bitcoin y proporciona puntos finales de API para Ordinals, Runes y tokens BRC-20. +llm: false +--- +## Visión general + +El Indexador de Bitcoin se conecta a tu nodo de Bitcoin, procesa bloques en tiempo real, almacena datos de metaprotocolos en PostgreSQL y proporciona APIs REST para cada protocolo. + +## Características principales + +* **Indexación de metaprotocolo** - Soporte integrado para Ordinals, Runes y BRC-20 con arquitectura extensible +* **Procesamiento consciente de la reorganización** - Maneja automáticamente las bifurcaciones y reorganizaciones de la cadena +* **Puntos finales de la API REST** - APIs listas para producción para Ordinals y Runes +* **Arranque inicial del archivo** - Sincronización rápida desde los archivos de Hiro en lugar de indexación completa + +## Instalación + +```terminal +$ git clone https://github.com/hirosystems/bitcoin-indexer.git +$ cd bitcoin-indexer && cargo build --release +``` + +Las imágenes de Docker también están disponibles: + +```terminal +$ docker pull hirosystems/bitcoin-indexer:latest +``` + +## Próximos pasos + +:::next-steps +* [Instalación de Node](/tools/bitcoin-indexer/node-installation): Configurar y sincronizar un nodo de Bitcoin Core optimizado para el Indexador de Bitcoin. +* [Sincronización completa](/tools/bitcoin-indexer/full-sync): Ejecutar el indexador desde cero +::: + +:::callout +type: help + +### ¿Necesitas ayuda con el Indexador de Bitcoin? + +Contáctenos en el #ordinales canal encendido [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horario de oficina semanal](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/tools/bitcoin-indexer/meta.json b/content/docs/es/tools/bitcoin-indexer/meta.json new file mode 100644 index 000000000..68985c084 --- /dev/null +++ b/content/docs/es/tools/bitcoin-indexer/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Bitcoin Indexer", + "root": true, + "pages": ["---Bitcoin Indexer---", "index", "...(overview)", "...(indexer)"] +} diff --git a/content/docs/es/tools/chainhook/(chainhook-cli)/cli-reference.mdx b/content/docs/es/tools/chainhook/(chainhook-cli)/cli-reference.mdx new file mode 100644 index 000000000..ba69a50c9 --- /dev/null +++ b/content/docs/es/tools/chainhook/(chainhook-cli)/cli-reference.mdx @@ -0,0 +1,208 @@ +--- +title: Referencia de CLI +sidebarTitle: Referencia de CLI +description: Referencia completa de todos los comandos y opciones de Chainhook CLI. +--- +El CLI de Chainhook proporciona herramientas para crear, probar e implementar observadores de eventos de blockchain. Desde la creación de predicados hasta la gestión de servicios, Chainhook simplifica su flujo de trabajo de monitoreo de blockchain. + +* Generar configuración: [`chainhook config new`](#chainhook-config) +* Crear predicados: [`chainhook predicates new`](#chainhook-predicates) +* Probar predicados: [`chainhook predicates scan`](#chainhook-predicates) +* Ejecutar como un servicio: [`chainhook service start`](#chainhook-service) +* Administrar la base de datos de Stacks: [`chainhook stacks db`](#chainhook-stacks) + +## Gestión de configuración \[#configuration-management] + +### configuración de chainhook + +`chainhook config` genera archivos de configuración. + +| Comando | Descripción | +|---------|-------------| +| `new` | Generar nueva configuración | + +**Uso con `new`** + +```console +chainhook config new [OPTIONS] +``` + +```terminal +$ chainhook config new --mainnet +``` + +| Opción | Descripción | +|--------|-------------| +| `--mainnet` | Red Mainnet objetivo | +| `--testnet` | Red de prueba objetivo | +| `--devnet` | Red Devnet objetivo | + +## Gestión de predicados \[#predicate-management] + +### predicados de chainhook + +`chainhook predicates` genera y prueba predicados. + +| Comando | Descripción | +|---------|-------------| +| `new` | Generar nuevo predicado | +| `check` | Comprobar predicado dado | +| `scan` | Escanear bloques (una sola vez) desde la red especificada y aplicar el predicado proporcionado | + +**Uso con `new`** + +```console +chainhook predicates new [OPTIONS] +``` + +```terminal +$ chainhook predicates new my-predicate --stacks +$ chainhook predicates new bitcoin-transfers --bitcoin +``` + +| Opción | Descripción | +|--------|-------------| +| `--stacks` | Generar un predicado de Stacks | +| `--bitcoin` | Generar un predicado de Bitcoin | + +**Uso con `scan`** + +```console +chainhook predicates scan [OPTIONS] +``` + +```terminal +$ chainhook predicates scan my-predicate.json --mainnet +$ chainhook predicates scan transfers.json --testnet --config-path ./Chainhook.toml +``` + +| Opción | Descripción | +|--------|-------------| +| `--mainnet` | Red Mainnet objetivo | +| `--testnet` | Red de prueba objetivo | +| `--config-path ` | Ruta del archivo de configuración de carga | + +**Uso con `check`** + +```console +chainhook predicates check [OPTIONS] +``` + +```terminal +$ chainhook predicates check my-predicate.json --mainnet +``` + +| Opción | Descripción | +|--------|-------------| +| `--config-path ` | Ruta del archivo de configuración de carga | +| `--mainnet` | Red Mainnet objetivo | +| `--testnet` | Red de prueba objetivo | + +## Gestión de servicios \[#service-management] + +### servicio chainhook + +`chainhook service` ejecuta un servicio que transmite bloques y evalúa predicados registrados. + +| Comando | Descripción | +|---------|-------------| +| `start` | Iniciar chainhook-cli | + +**Uso con `start`** + +```console +chainhook service start [OPTIONS] +``` + +```terminal +$ chainhook service start --config-path=./Chainhook.toml +$ chainhook service start --predicate-path=./my-predicate.json --mainnet +``` + +| Opción | Descripción | +|--------|-------------| +| `--config-path ` | Ruta del archivo de configuración de carga | +| `--predicate-path ` | Especificar la ruta relativa de los chainhooks (formato yaml) a evaluar | +| `--start-http-api` | Iniciar API REST para gestionar predicados | +| `--prometheus-port ` | Si se proporciona, sirve métricas de Prometheus en `localhost:{port}/metrics` | +| `--mainnet` | Red Mainnet objetivo | +| `--testnet` | Red de prueba objetivo | +| `--devnet` | Red Devnet objetivo | + +## Integración de Stacks \[#stacks-integration] + +### chainhook stacks + +`chainhook stacks` proporciona comandos específicos de Stacks. + +| Comando | Descripción | +|---------|-------------| +| `db` | Comandos relacionados con el mantenimiento de la base de datos | + +**Uso con `db`** + +```console +chainhook stacks db +``` + +```terminal +$ chainhook stacks db check +$ chainhook stacks db update --config-path ./Chainhook.toml +``` + +| Subcomando | Descripción | +|------------|-------------| +| `check` | Comprobar integridad | +| `drop` | Actualizar bloques desde la base de datos | +| `get` | Recuperar un bloque de la base de datos de Stacks | +| `get-latest` | Obtener los bloques más recientes de la base de datos de bloques no confirmados y confirmados | +| `unconfirm` | Elimina un bloque de la base de datos de bloques confirmados y lo mueve a la base de datos de bloques no confirmados | +| `update` | Actualizar la base de datos utilizando el archivo de archivo Stacks más reciente | + +| Opción | Descripción | +|--------|-------------| +| `--config-path ` | Ruta del archivo de configuración de carga | + +## Utilidades \[#utilities] + +### documentación de chainhook + +`chainhook docs` genera documentación. + +| Comando | Descripción | +|---------|-------------| +| `api` | Generar nueva documentación para la API de registro de predicados | + +**Uso con `api`** + +```console +chainhook docs api +``` + +```terminal +$ chainhook docs api +``` + +### chainhook ayuda + +`chainhook help` imprime información de ayuda. + +**Uso** + +```console +chainhook help [SUBCOMMAND] +``` + +```terminal +$ chainhook help +$ chainhook help predicates +``` + +## Opciones globales \[#global-options] + +Estas opciones se pueden utilizar con el comando principal: + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--help` | `-h` | Imprimir información de ayuda | +| `--version` | `-V` | Imprimir información de versión | diff --git a/content/docs/es/tools/chainhook/(chainhook-cli)/event-scanning.mdx b/content/docs/es/tools/chainhook/(chainhook-cli)/event-scanning.mdx new file mode 100644 index 000000000..240cc3259 --- /dev/null +++ b/content/docs/es/tools/chainhook/(chainhook-cli)/event-scanning.mdx @@ -0,0 +1,201 @@ +--- +title: Escaneando eventos de blockchain +sidebarTitle: Escanear eventos +description: Prueba los predicados escaneando datos históricos de la cadena de bloques antes de implementarlos en producción. +--- +Esta guía te muestra cómo usar el modo de escaneo de Chainhook para probar predicados contra datos históricos de blockchain. El escaneo ayuda a validar la lógica de tu predicado y entender qué eventos serán capturados antes de entrar en funcionamiento. + +## Escaneo básico + +Prueba tu predicado contra datos históricos escaneando la cadena de bloques: + +```terminal +$ chainhook predicates scan my-predicate.json --mainnet +``` + +El comando scan descarga datos de la cadena de bloques desde Hiro Archive (almacenados en caché después de la primera ejecución) y evalúa tu predicado contra cada bloque en el rango especificado. + +### Escanear con redes específicas + +```terminal +$ chainhook predicates scan predicate.json --mainnet +$ chainhook predicates scan predicate.json --testnet +$ chainhook predicates scan predicate.json --devnet +``` + +## Escaneo de rango de bloques + +Limitar el escaneo a bloques específicos para pruebas más rápidas y análisis dirigido: + +```terminal +$ chainhook predicates scan my-predicate.json \ + --start-block 150000 \ + --end-block 150100 \ + --mainnet +``` + +### Configurar rangos en predicados + +```json block-range-predicate.json +{ + "chain": "stacks", + "networks": { + "mainnet": { + "start_block": 150000, + "end_block": 151000, + "if_this": { + "scope": "contract_call", + "contract_identifier": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-dao" + } + } + } +} +``` + +Este predicado escanea solo los bloques 150.000 a 151.000, reduciendo significativamente el tiempo de escaneo. + +## Configuración de salida + +Controla dónde se escriben los resultados del escaneo usando el `then_that` sección. + +### Salida de archivo + +```json file-output-predicate.json +{ + "then_that": { + "file_append": { + "path": "./scan-results.json" + } + } +} +``` + +### Salida de la consola + +```json console-output-predicate.json +{ + "then_that": { + "file_append": { + "path": "-" // Writes to stdout + } + } +} +``` + +## Optimización del rendimiento + +Acelera tus escaneos siendo específico sobre lo que estás buscando. + +### Utilice ámbitos específicos + +```json optimized-scope.json +{ + "if_this": { + "scope": "contract_call", + "contract_identifier": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-dao", + "method": "collateralize-and-mint" + } +} +``` + +Apuntar a contratos y métodos específicos escanea mucho más rápido que ámbitos amplios. + +### Limitar ocurrencias + +```json limited-occurrences.json +{ + "networks": { + "mainnet": { + "expire_after_occurrence": 100, + "if_this": { + "scope": "nft_event", + "actions": ["mint"] + } + } + } +} +``` + +Detener el escaneo después de encontrar 100 eventos coincidentes. + +## Patrones de escaneo comunes + +Aprende de estos ejemplos prácticos de escaneo de eventos específicos de blockchain. + +### Encuentra el primer despliegue del contrato + +```json find-deployment.json +{ + "chain": "stacks", + "networks": { + "mainnet": { + "expire_after_occurrence": 1, + "if_this": { + "scope": "contract_deployment", + "deployer": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR" + } + } + } +} +``` + +```terminal +$ chainhook predicates scan find-deployment.json --mainnet +``` + +### Recopilar actividad de NFT + +```json nft-activity.json +{ + "if_this": { + "scope": "nft_event", + "asset_identifier": "SP32AEEF6WW5Y0NMJ1S8SBSZDAY8R5J32NBZFPKKZ.free-punks-v0::free-punks", + "actions": ["mint", "transfer", "burn"] + }, + "then_that": { + "file_append": { + "path": "./nft-activity.json" + } + } +} +``` + +### Monitorear transacciones de direcciones + +```json address-monitor.json +{ + "if_this": { + "scope": "stx_event", + "actions": ["transfer"], + "predicate": { + "or": [ + { + "equals": { + "sender": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR" + } + }, + { + "equals": { + "recipient": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR" + } + } + ] + } + } +} +``` + +Rastrea todas las transferencias de STX que involucren una dirección específica como remitente o destinatario. + +## Escaneo de depuración + +Habilitar la salida detallada para entender por qué los eventos coinciden o no coinciden: + +```terminal +$ chainhook predicates scan my-predicate.json --mainnet --verbose +``` + +## Lecturas adicionales + +* [Despliegue en modo de servicio](/tools/chainhook/service-mode) +* [Ejemplos de uso](/tools/chainhook/usage) diff --git a/content/docs/es/tools/chainhook/(chainhook-cli)/service-mode.mdx b/content/docs/es/tools/chainhook/(chainhook-cli)/service-mode.mdx new file mode 100644 index 000000000..70da52569 --- /dev/null +++ b/content/docs/es/tools/chainhook/(chainhook-cli)/service-mode.mdx @@ -0,0 +1,151 @@ +--- +title: Ejecutar Chainhook como un servicio +sidebarTitle: Modo de servicio +description: Implementa Chainhook como un servicio para la transmisión de eventos de blockchain en tiempo real con nodos de Bitcoin y Stacks. +--- +Esta guía te muestra cómo ejecutar Chainhook como un servicio para el monitoreo continuo de eventos de blockchain. Aprenderás cómo configurar Chainhook con nodos de Bitcoin y Stacks, gestionar predicados de forma dinámica y optimizar para implementaciones en producción. + +## Configuración básica del servicio + +Inicie Chainhook como un servicio utilizando un archivo de configuración: + +```terminal +$ chainhook service start --config-path=./Chainhook.toml +``` + +El servicio se conecta a tus nodos de blockchain y comienza a monitorear eventos que coincidan con tus predicados registrados. + +### Configuración mínima + +```toml Chainhook.toml +[storage] +working_dir = "/var/chainhook" + +[network] +mode = "mainnet" + +[limits] +max_number_of_bitcoin_predicates = 100 +max_number_of_stacks_predicates = 10 +``` + +## Configuración del nodo Bitcoin + +Configurar Chainhook para trabajar con un nodo de Bitcoin para monitorear eventos de Bitcoin: + +```toml Chainhook.toml +[network] +mode = "mainnet" +bitcoind_rpc_url = "http://localhost:8332" +bitcoind_rpc_username = "devnet" +bitcoind_rpc_password = "devnet" + +# Option 1: Receive events via ZeroMQ (recommended for Bitcoin-only) +bitcoind_zmq_url = "tcp://0.0.0.0:18543" + +# Option 2: Receive events via Stacks node (if running both chains) +# stacks_node_rpc_url = "http://localhost:20443" +``` + +### Configuración de mapeo de Bitcoin + +| bitcoin.conf | Chainhook.toml | +|--------------|----------------| +| rpcuser | bitcoind\_rpc\_username | +| rpcpassword | bitcoind\_rpc\_password | +| rpcport | bitcoind\_rpc\_url | +| zmqpubhashblock | bitcoind\_zmq\_url | + +## Configuración del nodo Stacks + +Para monitorear eventos de Stacks, configure tanto el nodo de Stacks como Chainhook: + +### Configuración del nodo Stacks + +```toml Stacks.toml +[node] +working_dir = "/stacks-blockchain" +rpc_bind = "0.0.0.0:20443" +p2p_bind = "0.0.0.0:20444" + +[burnchain] +chain = "bitcoin" +mode = "mainnet" +peer_host = "localhost" +username = "devnet" # Must match bitcoin.conf rpcuser +password = "devnet" # Must match bitcoin.conf rpcpassword +rpc_port = 8332 # Must match bitcoin.conf rpcport + +[[events_observer]] +endpoint = "localhost:20455" +retry_count = 255 +events_keys = ["*"] +``` + +### Configuración de Chainhook para Stacks + +```toml Chainhook.toml +[network] +mode = "mainnet" +bitcoind_rpc_url = "http://localhost:8332" +bitcoind_rpc_username = "devnet" +bitcoind_rpc_password = "devnet" +stacks_node_rpc_url = "http://localhost:20443" +stacks_events_ingestion_port = 20455 +``` + +## Gestión de predicados + +Registre predicados con el servicio para comenzar a monitorear eventos específicos. + +### Comienza con predicados + +```terminal +$ chainhook service start --predicate-path=my-predicate.json --config-path=Chainhook.toml +``` + +### Registro dinámico + +Habilite la API HTTP para registrar predicados mientras el servicio está en ejecución: + +```toml Chainhook.toml +[http_api] +http_port = 20456 +database_uri = "redis://localhost:6379/" +``` + +Registrar un nuevo predicado a través de la API: + +```terminal +$ curl -X POST http://localhost:20456/v1/chainhooks \ + -H "Content-Type: application/json" \ + -d @predicate.json + +{"result":"f8d43129-dba1-4a6c-b368-21426de0f3cd","status":200} +``` + +## Monitoreo de servicios + +Monitoree la salud y el estado de su servicio Chainhook. + +### Chequeo de salud + +```terminal +$ curl http://localhost:20456/health +``` + +```json +{ + "status": "healthy", + "stacks_node": "connected", + "bitcoin_node": "connected", + "database": "connected", + "predicates_active": 3 +} +``` + +## Lecturas adicionales + +* [Diseño de predicados](/tools/chainhook/usage) +* [Ámbitos de eventos de Bitcoin](/tools/chainhook/reference/bitcoin-scopes) +* [Ámbitos de eventos de Stacks](/tools/chainhook/reference/stacks-scopes) diff --git a/content/docs/es/tools/chainhook/(event-handling)/custom-indexer.mdx b/content/docs/es/tools/chainhook/(event-handling)/custom-indexer.mdx new file mode 100644 index 000000000..90078bd88 --- /dev/null +++ b/content/docs/es/tools/chainhook/(event-handling)/custom-indexer.mdx @@ -0,0 +1,5 @@ +--- +title: Construye un indexador personalizado +description: Crea tu propio indexador de blockchain con Chainhook. +--- +Contenido provisional - nueva guía por crear diff --git a/content/docs/es/tools/chainhook/(event-handling)/example-indexers.mdx b/content/docs/es/tools/chainhook/(event-handling)/example-indexers.mdx new file mode 100644 index 000000000..e9d132555 --- /dev/null +++ b/content/docs/es/tools/chainhook/(event-handling)/example-indexers.mdx @@ -0,0 +1,5 @@ +--- +title: Indexadores de ejemplo +description: Implementaciones de referencia de indexadores Chainhook. +--- +Contenido provisional - nueva guía por crear diff --git a/content/docs/es/tools/chainhook/(event-handling)/payload-handling.mdx b/content/docs/es/tools/chainhook/(event-handling)/payload-handling.mdx new file mode 100644 index 000000000..34674958d --- /dev/null +++ b/content/docs/es/tools/chainhook/(event-handling)/payload-handling.mdx @@ -0,0 +1,5 @@ +--- +title: Manejo de carga útil +description: Procesar y manejar las cargas útiles del webhook de Chainhook. +--- +Contenido provisional - nueva guía por crear diff --git a/content/docs/es/tools/chainhook/(event-handling)/webhook-setup.mdx b/content/docs/es/tools/chainhook/(event-handling)/webhook-setup.mdx new file mode 100644 index 000000000..b376507d9 --- /dev/null +++ b/content/docs/es/tools/chainhook/(event-handling)/webhook-setup.mdx @@ -0,0 +1,5 @@ +--- +title: Configuración de webhook +description: Configura puntos finales de webhook para recibir eventos de blockchain. +--- +Contenido provisional - nueva guía por crear diff --git a/content/docs/es/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx b/content/docs/es/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx new file mode 100644 index 000000000..d3380f3a6 --- /dev/null +++ b/content/docs/es/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx @@ -0,0 +1,122 @@ +--- +title: Registrar Chainhooks en devnet +description: En esta guía, aprenderás cómo registrar automáticamente Chainhooks en devnet usando Clarinet. +--- +## Lo que aprenderás + +:::objectives +* Crear archivos de predicado Chainhook en tu proyecto Clarinet +* Registrar predicados automáticamente al iniciar devnet +* Monitorear la ejecución de Chainhook durante el desarrollo local +::: + +## Requisitos previos + +:::prerequisites +* Clarinet versión 2.1.0 o superior instalada +* Un proyecto de Clarinet con contratos inteligentes +* Comprensión básica de los predicados de Chainhook +::: + +## Registrar Chainhooks en devnet + + + + ### Crear archivos de predicado + + Cree sus archivos de predicado Chainhook en el directorio de su proyecto Clarinet. Puede colocarlos en la raíz del proyecto u organizarlos en una carpeta dedicada. + + ```json chainhooks/increment.json + { + "chain": "stacks", + "uuid": "1", + "name": "Increment Counter", + "version": 1, + "networks": { + "devnet": { + "if_this": { + "scope": "contract_call", + "contract_identifier": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.counter", + "method": "increment" + }, + "then_that": { + "http_post": { + "url": "http://localhost:3000/api/increment", + "authorization_header": "Bearer devnet-token" + } + } + } + } + } + ``` + + El predicado se activará cada vez que el `increment` el método es llamado en tu contrato de contador. + + + + ### Organizar la estructura del proyecto + + Estructure su proyecto con archivos Chainhook en una ubicación lógica. Aquí hay una disposición de proyecto recomendada: + + ``` + my-project/ + ├── contracts/ + │ └── counter.clar + ├── chainhooks/ + │ ├── increment.json + │ └── decrement.json + ├── tests/ + │ └── counter.test.ts + └── Clarinet.toml + ``` + + Clarinet descubrirá automáticamente los archivos de predicado en el directorio de su proyecto al iniciar devnet. + + + + ### Iniciar devnet con registro de Chainhook + + Inicie devnet desde la raíz de su proyecto. Clarinet inicia automáticamente un servicio Chainhook y registra todos los archivos de predicado que encuentra. + + ```terminal + $ clarinet devnet start + ``` + + Busque la confirmación de registro en la salida de su terminal: + + ```console + Computing deployment plan + ✔ Deployment plan completed + + INFO Feb 5 15:20:07.233382 2 chainhooks registered + ``` + + Este mensaje confirma que sus predicados están activos y monitoreando la cadena de bloques local. + + + + ### Verificar la ejecución de Chainhook + + Interactúe con sus contratos para activar los Chainhooks registrados. Supervise la terminal de devnet para obtener confirmaciones de ejecución. + + ```terminal + $ clarinet console + >> (contract-call? .counter increment) + ``` + + Observa la terminal de devnet para ver los hooks activados: + + ```console + INFO Feb 5 15:21:07.233382 1 hooks triggered + ``` + + Su punto final de webhook o salida de archivo recibirá la carga útil del evento según su `then_that` configuración. + + + +## Próximos pasos + +:::next-steps +* [Alcances de Bitcoin](/tools/chainhook/reference/bitcoin-scopes): Explora los tipos de eventos disponibles para Bitcoin +* [Ámbitos de pilas](/tools/chainhook/reference/stacks-scopes): Explora los tipos de eventos disponibles para Stacks +::: diff --git a/content/docs/es/tools/chainhook/(overview)/quickstart.mdx b/content/docs/es/tools/chainhook/(overview)/quickstart.mdx new file mode 100644 index 000000000..8700e8e37 --- /dev/null +++ b/content/docs/es/tools/chainhook/(overview)/quickstart.mdx @@ -0,0 +1,100 @@ +--- +title: Inicio rápido +description: En esta guía, crearás tu primer predicado Chainhook para monitorear transferencias de STX en la blockchain de Stacks. +--- +## Lo que aprenderás + +:::objectives +* Cómo crear un predicado Chainhook para rastrear transferencias de STX +* Cómo escanear datos históricos de blockchain utilizando Chainhook +::: + +## Requisitos previos + +:::prerequisites +* Para instrucciones de instalación, visite el [Guía de instalación de Chainhook](/tools/chainhook#installation). +::: + +## Inicio rápido + + + + ### Generar un archivo de predicado + + Chainhook utiliza predicados para definir qué eventos de la cadena de bloques se deben rastrear. Genere un archivo de predicado de plantilla: + + ```terminal + $ chainhook predicates new stx-transfer.json --stacks + ``` + + Esto crea un archivo JSON de plantilla con la estructura básica del predicado. El `--stacks` flag especifica que estás rastreando eventos de Stacks (usa `--bitcoin` para Bitcoin). + + + + ### Configurar el seguimiento de eventos + + Abrir `stx-transfer.json` y actualizar el `if_this` sección para rastrear eventos de transferencia de STX: + + ```json stx-transfer.json + { + "chain": "stacks", + "uuid": "87ac9bff-1052-4d02-9c79-3768a6f08a09", + "name": "STX Transfer", + "version": 1, + "networks": { + "mainnet": { + "start_block": 154670, + "if_this": { + "scope": "stx_event", + "actions": ["transfer"] + }, + "then_that": { + "file_append": { + "path": "stx-transfers.txt" + } + } + } + } + } + ``` + + Este predicado: + + * Rastrea todos los eventos de transferencia de STX (`scope: "stx_event"`, `actions: ["transfer"]`) + * Comience a escanear desde el bloque 154670 + * Agregar eventos coincidentes a `stx-transfers.txt` + + + + ### Escanear eventos + + Ejecute el comando de escaneo para buscar datos históricos de la cadena de bloques: + + ```terminal + $ chainhook predicates scan stx-transfer.json --mainnet + ``` + + :::callout + El primero `scan` descarga un archivo de estado de cadena desde el Archivo Hiro. Los escaneos posteriores utilizan los datos almacenados en caché para un rendimiento más rápido. + ::: + + + + ### Ver resultados + + Verifique el archivo de salida para ver los eventos de transferencia: + + ```terminal + $ head -5 stx-transfers.txt + ``` + + Cada línea contiene una carga útil JSON con detalles de transferencia que incluyen remitente, destinatario, cantidad e información del bloque. + + + +## Próximos pasos + +:::next-steps +* [Diseñar predicados personalizados](/tools/chainhook/usage): Aprende a crear predicados para llamadas de contratos, transferencias de NFT y más +* [Ejecutar Chainhook como un servicio](/tools/chainhook/service-mode): Configurar monitoreo continuo de blockchain con entrega por webhook +::: diff --git a/content/docs/es/tools/chainhook/(overview)/usage.mdx b/content/docs/es/tools/chainhook/(overview)/usage.mdx new file mode 100644 index 000000000..c65d88099 --- /dev/null +++ b/content/docs/es/tools/chainhook/(overview)/usage.mdx @@ -0,0 +1,264 @@ +--- +title: Ejemplos de uso +sidebarTitle: Uso +description: Aprende la funcionalidad central de Chainhook a través de ejemplos prácticos - predicados, ámbitos de eventos, manejo de reorganizaciones y modos de operación. +--- +## Predicados + +Los predicados son especificaciones JSON que indican a Chainhook qué eventos de blockchain monitorear y cómo responder. Siguen un patrón de si-esto-entonces-aquello. + +```json stx-transfer-predicate.json +{ + "chain": "stacks", + "uuid": "1", + "name": "Monitor STX Transfers", + "version": 1, + "networks": { + "mainnet": { + "if_this": { + "scope": "stx_event", + "actions": ["transfer"] + }, + "then_that": { + "http_post": { + "url": "https://api.example.com/stx-transfers", + "authorization_header": "Bearer secret-token" + } + }, + "start_block": 100000 + } + } +} +``` + +Este predicado monitorea todos los eventos de transferencia de STX a partir del bloque 100,000 y los envía a tu punto final de webhook. + +### Componentes del predicado + +```json +{ + "chain": "bitcoin", // Target blockchain: "bitcoin" or "stacks" + "uuid": "unique-id-123", // Unique identifier for tracking + "name": "My Bitcoin Monitor", // Human-readable name + "version": 1, // Predicate version + "networks": { // Network-specific configurations + "mainnet": { ... }, + "testnet": { ... } + } +} +``` + +## Ámbitos de eventos + +Cada blockchain admite diferentes tipos de eventos. Los ámbitos definen qué eventos específicos coincidirán con tu predicado. + +### Eventos de Stacks + +```json contract-call-predicate.json +{ + "if_this": { + "scope": "contract_call", + "contract_identifier": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-oracle-v2-3", + "method": "update-price" + } +} +``` + +Monitorea llamadas a funciones específicas de contratos. Ámbitos de Stacks disponibles: + +* `stx_event` - Transferencias de STX, acuñaciones, quemas +* `contract_call` - Llamadas a funciones de contratos inteligentes +* `contract_deployment` - Nuevos despliegues de contratos +* `print_event` - Declaraciones de impresión del contrato +* `ft_event` - Operaciones de tokens fungibles +* `nft_event` - Operaciones de tokens no fungibles + +### Eventos de Bitcoin + +```json bitcoin-ordinals-predicate.json +{ + "if_this": { + "scope": "ordinals_protocol", + "operation": "inscription_feed" + } +} +``` + +Rastrea inscripciones ordinales de Bitcoin. Ámbitos de Bitcoin disponibles: + +* `p2pkh`, `p2sh`, `p2wpkh`, `p2tr` - Tipos de dirección +* `ordinals_protocol` - Inscripciones ordinales +* `stacks_protocol` - Operaciones de Bitcoin específicas de Stacks + +## Manejadores de acciones + +Define cómo Chainhook responde cuando los eventos coinciden con tus criterios de predicado. + +### Entrega de webhook + +```json webhook-config.json +{ + "then_that": { + "http_post": { + "url": "https://api.myapp.com/events", + "authorization_header": "Bearer ${WEBHOOK_SECRET}" + } + } +} +``` + +Chainhook envía eventos coincidentes a tu endpoint mediante POST con el encabezado de autorización. + +### Salida de archivo + +```json file-output-config.json +{ + "then_that": { + "file_append": { + "path": "/data/blockchain-events.jsonl" + } + } +} +``` + +Agregar eventos a un archivo local, un objeto JSON por línea. + +## Reorganizaciones de blockchain + +Chainhook maneja automáticamente las reorganizaciones de la cadena de bloques (reorgs) enviando eventos tanto de retroceso como de aplicación. + +```json reorg-event.json +{ + "apply": [ + { + "block_identifier": { + "index": 792101, + "hash": "0x123..." + }, + "transactions": [ + // New canonical chain transactions + ] + } + ], + "rollback": [ + { + "block_identifier": { + "index": 792100, + "hash": "0x456..." + }, + "transactions": [ + // Transactions to rollback + ] + } + ] +} +``` + +Su aplicación debe manejar ambos tipos de eventos para mantener la consistencia de los datos durante las reorganizaciones. + +### Manejo de eventos de reorganización + +```typescript webhook-handler.ts +app.post('/chainhook-events', (req, res) => { + const { apply, rollback } = req.body; + + // First, rollback orphaned transactions + if (rollback) { + for (const block of rollback) { + await removeTransactions(block.transactions); + } + } + + // Then apply new canonical transactions + if (apply) { + for (const block of apply) { + await processTransactions(block.transactions); + } + } + + res.status(200).send('OK'); +}); +``` + +## Modos de operación + +Chainhook opera en dos modos principales según su caso de uso. + +### Modo de escaneo + +Analiza datos históricos de blockchain escaneando bloques archivados: + +```terminal +$ chainhook predicates scan my-predicate.json --mainnet +``` + +Utiliza el modo de escaneo para: + +* Probando predicados antes del despliegue +* Analizando eventos pasados de blockchain +* Rellenando datos históricos + +### Modo de servicio + +Monitorea eventos de blockchain en vivo en tiempo real: + +```terminal +$ chainhook service start --config-path=config.toml +``` + +```toml config.toml +[http_api] +http_port = 20456 +database_uri = "redis://localhost:6379" + +[network] +mode = "mainnet" +bitcoind_rpc_url = "http://localhost:8332" +stacks_node_rpc_url = "http://localhost:20443" +``` + +El modo de servicio mantiene conexiones persistentes con los nodos de la cadena de bloques y procesa nuevos bloques a medida que llegan. + +## Configuración de red + +Configura los predicados de manera diferente para cada entorno de red: + +```json multi-network-predicate.json +{ + "networks": { + "mainnet": { + "start_block": 100000, + "if_this": { + "scope": "stx_event", + "actions": ["transfer", "mint"] + } + }, + "testnet": { + "start_block": 1, + "decode_clarity_values": true, + "include_proof": true, + "if_this": { + "scope": "print_event" + } + } + } +} +``` + +### Opciones de configuración + +```json +{ + "start_block": 100000, // Begin scanning from this block + "end_block": 200000, // Stop at this block (optional) + "expire_after_occurrence": 5000, // Stop after N matches + "decode_clarity_values": true, // Decode Clarity data types + "include_proof": false, // Include merkle proofs + "include_contract_abi": true // Include contract interfaces +} +``` + +## Lecturas adicionales + +* [Diseñar predicados](/tools/chainhook/usage) +* [Ejecutar Chainhook como un servicio](/tools/chainhook/service-mode) diff --git a/content/docs/es/tools/chainhook/index.mdx b/content/docs/es/tools/chainhook/index.mdx new file mode 100644 index 000000000..c79464f23 --- /dev/null +++ b/content/docs/es/tools/chainhook/index.mdx @@ -0,0 +1,56 @@ +--- +title: Chainhook +sidebarTitle: Visión general +description: Chainhook es un indexador consciente de las reorganizaciones que proporciona datos confiables de blockchain para Bitcoin y Stacks. +llm: false +--- +## Visión general + +Chainhook es un indexador consciente de las reorganizaciones que te permite construir flujos de eventos personalizados de las cadenas de bloques de Bitcoin y Stacks. A diferencia de los indexadores tradicionales, Chainhook maneja automáticamente las reorganizaciones de la cadena de bloques, asegurando que tus datos se mantengan precisos sin necesidad de reindexación manual. + +Para explorar las características de Chainhook con IA, copie y pegue [llms.txt](/tools/chainhook/llms.txt) en tu LLM de elección. + +![Descripción general de Chainhook](/images/tools/chainhook/overview.svg) + +## Características principales + +* **Indexación consciente de la reorganización** - Maneja automáticamente las bifurcaciones y reorganizaciones de la cadena de bloques +* **Predicados si-esto-entonces-aquello** - Definir lógica personalizada para activar acciones en eventos específicos de la blockchain +* **Soporte para múltiples cadenas** - Funciona con las cadenas de bloques de Bitcoin y Stacks +* **Desarrollo local** - Probar predicados contra datos históricos de la cadena de bloques + +## Instalación + + + ```terminal !! macOS + $ brew install chainhook + ``` + + ```terminal !! Linux + $ sudo snap install chainhook + ``` + + ```terminal !! Windows + $ winget install HiroSystems.Chainhook + ``` + + ```terminal !! Cargo + $ git clone https://github.com/hirosystems/chainhook.git + $ cd chainhook && cargo chainhook-install + ``` + + +## Próximos pasos + +:::next-steps +* [Inicio rápido](/tools/chainhook/quickstart): Comienza con Chainhook. +* [Registrar chainhooks localmente](/tools/chainhook/register-chainhooks-on-devnet): Registrar chainhooks en tu blockchain local. +::: + +:::callout +type: help + +### ¿Necesitas ayuda para construir con Chainhook? + +Contáctenos en el **#chainhook** canal encendido [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horario de oficina semanal](https://www.addevent.com/event/oL21905919) llamada todos los jueves a las 11 am ET. +::: diff --git a/content/docs/es/tools/chainhook/meta.json b/content/docs/es/tools/chainhook/meta.json new file mode 100644 index 000000000..4ce4bb6a9 --- /dev/null +++ b/content/docs/es/tools/chainhook/meta.json @@ -0,0 +1,15 @@ +{ + "title": "Chainhook", + "root": true, + "pages": [ + "---Chainhook---", + "index", + "...(overview)", + "---Chainhook CLI---", + "...(chainhook-cli)", + "---Integrations---", + "...(integrations)", + "---Reference---", + "...reference" + ] +} diff --git a/content/docs/es/tools/chainhook/reference/bitcoin-scopes.mdx b/content/docs/es/tools/chainhook/reference/bitcoin-scopes.mdx new file mode 100644 index 000000000..1d9554c91 --- /dev/null +++ b/content/docs/es/tools/chainhook/reference/bitcoin-scopes.mdx @@ -0,0 +1,280 @@ +--- +title: Alcances de Bitcoin +sidebarTitle: Alcances de Bitcoin +description: Referencia para todos los ámbitos de eventos de Bitcoin disponibles en los predicados de Chainhook. +--- +Los alcances de Bitcoin definen el `if_this` condiciones en sus predicados de Chainhook. Cada tipo de alcance monitorea eventos específicos en cadena en la cadena de bloques de Bitcoin. + +## txid \[#txid] + +`txid` coincide las transacciones por su ID de transacción. + +### Firma + +```json +{ + "scope": "txid", + "equals": string +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `equals` | string | Sí | ID de transacción codificado en hexadecimal de 32 bytes para coincidir | + +### Ejemplo + +```json +{ + "if_this": { + "scope": "txid", + "equals": "0xfaaac1833dc4883e7ec28f61e35b41f896c395f8d288b1a177155de2abd6052f" + } +} +``` + +## salidas \[#outputs] + +`outputs` compara transacciones basadas en sus scripts de salida. + +### Operaciones disponibles + +| Operación | Descripción | +|-----------|-------------| +| `op_return` | Datos incrustados en transacciones | +| `p2pkh` | Salidas de Pago-a-Hash-de-Clave-Pública | +| `p2sh` | Salidas Pay-to-Script-Hash | +| `p2wpkh` | Salidas de Pago-a-Hash-de-Clave-Pública-Testigo | +| `p2wsh` | Salidas Pay-to-Witness-Script-Hash | +| `descriptor` | Descriptores de salida para la derivación de direcciones | + +### op\_return + +```json +{ + "scope": "outputs", + "op_return": { + "equals" | "starts_with" | "ends_with": string + } +} +``` + +| Parámetro | Tipo | Obligatorio | Descripción | +|-----------|------|-------------|-------------| +| `equals` | cadena | No\* | Coincidir datos exactos | +| `starts_with` | cadena | No\* | Prefijo de datos coincidentes | +| `ends_with` | cadena | No\* | Sufijo de datos coincidentes | + +\*Uno de estos parámetros es obligatorio + +```json +{ + "if_this": { + "scope": "outputs", + "op_return": { + "starts_with": "0xbtc2100" + } + } +} +``` + +### p2pkh + +```json +{ + "scope": "outputs", + "p2pkh": { + "equals": string + } +} +``` + +| Parámetro | Tipo | Obligatorio | Descripción | +|-----------|------|-------------|-------------| +| `equals` | string | Sí | Dirección de Bitcoin a coincidir | + +```json +{ + "if_this": { + "scope": "outputs", + "p2pkh": { + "equals": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" + } + } +} +``` + +### p2sh + +```json +{ + "scope": "outputs", + "p2sh": { + "equals": string + } +} +``` + +| Parámetro | Tipo | Obligatorio | Descripción | +|-----------|------|-------------|-------------| +| `equals` | string | Sí | Dirección de hash de script a coincidir | + +```json +{ + "if_this": { + "scope": "outputs", + "p2sh": { + "equals": "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy" + } + } +} +``` + +### p2wpkh + +```json +{ + "scope": "outputs", + "p2wpkh": { + "equals": string + } +} +``` + +| Parámetro | Tipo | Obligatorio | Descripción | +|-----------|------|-------------|-------------| +| `equals` | string | Sí | Dirección SegWit nativa para coincidir | + +```json +{ + "if_this": { + "scope": "outputs", + "p2wpkh": { + "equals": "bc1qexampleaddress" + } + } +} +``` + +### p2wsh + +```json +{ + "scope": "outputs", + "p2wsh": { + "equals": string + } +} +``` + +| Parámetro | Tipo | Obligatorio | Descripción | +|-----------|------|-------------|-------------| +| `equals` | string | Sí | Dirección de script SegWit nativa para coincidir | + +```json +{ + "if_this": { + "scope": "outputs", + "p2wsh": { + "equals": "bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3" + } + } +} +``` + +### descriptor + +```json +{ + "scope": "outputs", + "descriptor": { + "expression": string, + "range": [number, number] + } +} +``` + +| Parámetro | Tipo | Obligatorio | Descripción | +|-----------|------|-------------|-------------| +| `expression` | string | Sí | Cadena descriptora de salida | +| `range` | array | Sí | Rango de índices para derivar \[inicio, fin] | + +```json +{ + "if_this": { + "scope": "outputs", + "descriptor": { + "expression": "wpkh(xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL/0/*)", + "range": [0, 10] + } + } +} +``` + +Esto monitorea las direcciones derivadas del índice 0 al 10 de la clave pública extendida proporcionada. + +## stacks\_protocol \[#stacks\_protocol] + +`stacks_protocol` coincide con transacciones de Bitcoin relacionadas con operaciones de Prueba de Transferencia de Stacks. + +### Firma + +```json +{ + "scope": "stacks_protocol", + "operation": string +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `operation` | string | Sí | Tipo de operación PoT a coincidir | + +### Operaciones disponibles + +| Operación | Descripción | +|-----------|-------------| +| `block_committed` | Compromisos de bloque de Stacks | +| `leader_registered` | Registros de líderes mineros | +| `inscription_feed` | Eventos de inscripción ordinal | +| `stx_transferred` | Transferencias de tokens STX | +| `stx_locked` | Eventos de bloqueo de tokens STX | + +### Ejemplos + +#### Monitorear los compromisos de bloque + +```json +{ + "if_this": { + "scope": "stacks_protocol", + "operation": "block_committed" + } +} +``` + +#### Seguimiento de transferencias de STX + +```json +{ + "if_this": { + "scope": "stacks_protocol", + "operation": "stx_transferred" + } +} +``` + +#### Monitorear eventos de inscripción + +```json +{ + "if_this": { + "scope": "stacks_protocol", + "operation": "inscription_feed" + } +} +``` diff --git a/content/docs/es/tools/chainhook/reference/stacks-scopes.mdx b/content/docs/es/tools/chainhook/reference/stacks-scopes.mdx new file mode 100644 index 000000000..355b479a0 --- /dev/null +++ b/content/docs/es/tools/chainhook/reference/stacks-scopes.mdx @@ -0,0 +1,350 @@ +--- +title: Ámbitos de pilas +sidebarTitle: Ámbitos de pilas +description: Referencia para todos los ámbitos de eventos de Stacks disponibles en los predicados de Chainhook. +--- +Las áreas de alcance de Stacks definen el `if_this` condiciones en sus predicados de Chainhook. Cada tipo de alcance monitorea eventos específicos en cadena en la blockchain de Stacks. + +## txid \[#txid] + +`txid` coincide las transacciones por su ID de transacción. + +### Firma + +```json +{ + "scope": "txid", + "equals": string +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `equals` | string | Sí | ID de transacción codificado en hexadecimal de 32 bytes para coincidir | + +### Ejemplo + +```json +{ + "if_this": { + "scope": "txid", + "equals": "0xfaaac1833dc4883e7ec28f61e35b41f896c395f8d288b1a177155de2abd6052f" + } +} +``` + +## altura\_del\_bloque \[#block\_height] + +`block_height` coincide con los bloques por su altura. + +### Firma + +```json +{ + "scope": "block_height", + "equals" | "higher_than" | "lower_than" | "between": value +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `equals` | entero | No\* | Coincide con la altura exacta del bloque | +| `higher_than` | entero | No\* | Coincide con bloques por encima de la altura | +| `lower_than` | entero | No\* | Coincide con bloques por debajo de la altura | +| `between` | \[entero, entero] | No\* | Coincide con bloques en el rango \[inicio, fin] | + +\*Uno de estos parámetros es obligatorio + +### Ejemplos + +#### Igualar altura exacta + +```json +{ + "if_this": { + "scope": "block_height", + "equals": 141200 + } +} +``` + +#### Coincidir rango de bloques + +```json +{ + "if_this": { + "scope": "block_height", + "between": [100000, 110000] + } +} +``` + +## ft\_transfer \[#ft\_transfer] + +`ft_transfer` coincide con eventos de tokens fungibles. + +### Firma + +```json +{ + "scope": "ft_transfer", + "asset_identifier": string, + "actions": string[] +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `asset_identifier` | cadena | Sí | Identificador de token completamente calificado | +| `actions` | string\[] | Sí | Acciones de token: `mint`, `transfer`, `burn` | + +### Ejemplos + +#### Monitorear transferencias de tokens + +```json +{ + "if_this": { + "scope": "ft_transfer", + "asset_identifier": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.cbtc-token::cbtc", + "actions": ["transfer"] + } +} +``` + +#### Rastrea todas las actividades de tokens + +```json +{ + "if_this": { + "scope": "ft_transfer", + "asset_identifier": "SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-10-token::token", + "actions": ["mint", "transfer", "burn"] + } +} +``` + +## nft\_transfer \[#nft\_transfer] + +`nft_transfer` coincide con eventos de tokens no fungibles. + +### Firma + +```json +{ + "scope": "nft_transfer", + "asset_identifier": string, + "actions": string[] +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `asset_identifier` | string | Sí | Identificador NFT completamente calificado | +| `actions` | string\[] | Sí | Acciones NFT: `mint`, `transfer`, `burn` | + +### Ejemplos + +#### Monitorear acuñaciones de NFT + +```json +{ + "if_this": { + "scope": "nft_transfer", + "asset_identifier": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.monkey-sip09::monkeys", + "actions": ["mint"] + } +} +``` + +#### Rastrea todas las actividades de NFT + +```json +{ + "if_this": { + "scope": "nft_transfer", + "asset_identifier": "SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.megapont-ape-club::apes", + "actions": ["mint", "transfer", "burn"] + } +} +``` + +## stx\_transfer \[#stx\_transfer] + +`stx_transfer` coincide con eventos de token STX. + +### Firma + +```json +{ + "scope": "stx_transfer", + "actions": string[] +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `actions` | string\[] | Sí | Acciones STX: `mint`, `transfer`, `burn`, `lock` | + +### Ejemplos + +#### Monitorear transferencias STX + +```json +{ + "if_this": { + "scope": "stx_transfer", + "actions": ["transfer"] + } +} +``` + +#### Rastrea todas las actividades de STX + +```json +{ + "if_this": { + "scope": "stx_transfer", + "actions": ["mint", "transfer", "burn", "lock"] + } +} +``` + +## print\_event \[#print\_event] + +`print_event` coincide con los eventos de impresión del contrato. + +### Firma + +```json +{ + "scope": "print_event", + "contract_identifier": string, + "contains" | "matches_regex": string +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `contract_identifier` | string | Sí | Identificador de contrato completamente calificado | +| `contains` | cadena | No\* | Coincide con eventos que contienen la cadena | +| `matches_regex` | cadena | No\* | Coincidencia de eventos por patrón regex | + +\*Uno de estos parámetros es obligatorio + +### Ejemplos + +#### Coincidencia por subcadena + +```json +{ + "if_this": { + "scope": "print_event", + "contract_identifier": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.monkey-sip09", + "contains": "monkey" + } +} +``` + +#### Coincidencia por patrón de expresión regular + +```json +{ + "if_this": { + "scope": "print_event", + "contract_identifier": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-dao", + "matches_regex": "vault-liquidated-.*" + } +} +``` + +## contract\_call \[#contract\_call] + +`contract_call` coincide con llamadas a funciones de contrato específicas. + +### Firma + +```json +{ + "scope": "contract_call", + "contract_identifier": string, + "method": string +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `contract_identifier` | cadena | Sí | Identificador de contrato completamente calificado | +| `method` | string | Sí | Nombre del método del contrato | + +### Ejemplo + +```json +{ + "if_this": { + "scope": "contract_call", + "contract_identifier": "SP000000000000000000002Q6VF78.pox", + "method": "stack-stx" + } +} +``` + +## despliegue\_de\_contrato \[#despliegue\_de\_contrato] + +`contract_deployment` coincide con las implementaciones de contratos. + +### Firma + +```json +{ + "scope": "contract_deployment", + "deployer" | "implement_trait": string +} +``` + +### Parámetros + +| Nombre | Tipo | Obligatorio | Descripción | +|--------|------|-------------|-------------| +| `deployer` | string | No\* | Dirección STX del implementador | +| `implement_trait` | cadena | No\* | Rasgo que el contrato debe implementar | + +\*Uno de estos parámetros es obligatorio + +### Ejemplos + +#### Monitorear despliegues por dirección + +```json +{ + "if_this": { + "scope": "contract_deployment", + "deployer": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM" + } +} +``` + +#### Monitorear implementaciones de traits + +```json +{ + "if_this": { + "scope": "contract_deployment", + "implement_trait": "SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-09-trait" + } +} +``` diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx new file mode 100644 index 000000000..624eb25de --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx @@ -0,0 +1,165 @@ +--- +title: Formateador de claridad +sidebarTitle: Formateador de claridad +description: El formateador de Clarity es una herramienta diseñada para formatear automáticamente el código de tu contrato inteligente en Clarity según reglas de estilo estandarizadas. Usar un formato consistente mejora la legibilidad y mantenibilidad del código, facilitando a los desarrolladores entender, colaborar y aprender de proyectos existentes en Clarity. +--- +## Filosofía de formato + +El formateador aplica un estándar predefinido diseñado para hacer que el código de Clarity sea más legible: + +* **Longitud de línea** - Las líneas se ajustan a 80 caracteres por defecto +* **Sangría** - Usa 2 espacios para consistencia +* **Estructura** - Impone patrones consistentes para funciones, enlaces let y flujo de control + +Estos valores predeterminados son configurables para adaptarse a tus preferencias. + +### Puntos de integración + +El formateador está disponible en dos herramientas de desarrollo principales: + +1. **Extensión Clarity para VS Code** - Formatear directamente dentro de tu editor +2. **Clarinet CLI** - Formatear a través de la línea de comandos, incluyendo proyectos completos + +## Tabla de comparación + +| Aspecto | Formato Manual | Formateador de Clarity | +|--------|------------------|-------------------| +| Consistencia | Varía según el desarrollador | Uniforme en toda la base de código | +| Velocidad | Consume tiempo | Instantáneo | +| Propenso a errores | Sí | No | +| Coordinación del equipo | Requiere guía de estilo | Aplicación automática | + +## Mejores prácticas + +* **Formatear al guardar** - Habilitar el formato automático en VS Code +* **Ganchos pre-commit** - Asegúrate de que todo el código esté formateado antes de los commits +* **Adopción del equipo** - Utiliza configuraciones consistentes en todo tu equipo + +## Lecturas adicionales + +### Reglas de formato en detalle + +El formateador maneja muchas construcciones de Clarity con reglas específicas: + + + + Definiciones de funciones + + + Las funciones siempre abarcan múltiples líneas con sangría consistente: + + ```clarity + (define-public (my-func + (amount uint) + (sender principal) + ) + (ok true) + ) + ``` + + Los argumentos individuales pueden permanecer en la primera línea: + + ```clarity + (define-read-only (get-balance (who principal)) + (ok u0) + ) + ``` + + + + + Expresiones let + + + Los enlaces se colocan en líneas separadas con sangría consistente: + + ```clarity + (let ( + (a u1) + (b u2) + ) + (body-expression) + ) + ``` + + + + + Control de flujo (if, match) + + + Cada rama obtiene su propia línea: + + ```clarity + (if condition + (then-expression) + (else-expression) + ) + + (match optional-value + value (handle-some value) + (handle-none) + ) + ``` + + + + + Tuplas y mapas + + + Convierte automáticamente a sintaxis endulzada con formato adecuado: + + ```clarity + ;; Input: (tuple (n1 u1) (n2 u2)) + ;; Output: + { + n1: u1, + n2: u2, + } + ``` + + + + +### Ejemplos de uso + +#### Integración con VS Code + +```json +// settings.json +"[clarity]": { + "editor.formatOnSave": true, +}, +``` + +#### Uso de la CLI + +```terminal +$ clarinet format --in-place +``` + +Formato con configuraciones personalizadas: + +```terminal +$ clarinet format -i 4 -l 120 --in-place +``` + +Verificar el formato en los pipelines de CI/CD: + +```terminal +$ clarinet format --check +``` + +El `--check` flag valida que todos los archivos de Clarity estén correctamente formateados sin modificarlos. Esto es perfecto para flujos de trabajo de integración continua donde se desea garantizar la consistencia del estilo de código. + +### Ignorando bloques de código + +Evitar el formato de bloques de código específicos: + +```clarity +;; @format-ignore +(define-constant something (list + 1 2 3 ;; Preserves custom spacing + 4 5 )) +``` diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/cli-reference.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/cli-reference.mdx new file mode 100644 index 000000000..b43689e39 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/cli-reference.mdx @@ -0,0 +1,414 @@ +--- +title: Referencia de la CLI +sidebarTitle: Referencia de la CLI +isNew: true +--- +El CLI de Clarinet proporciona un conjunto completo de herramientas para el desarrollo de contratos inteligentes en Clarity. Desde la inicialización del proyecto hasta la implementación, Clarinet optimiza todo tu flujo de trabajo de desarrollo. + +* Crear un nuevo proyecto: [`clarinet new`](#clarinet-new) +* Generar un nuevo contrato inteligente: [`clarinet contracts new`](#clarinet-contracts) +* Validar la sintaxis y los tipos del contrato: [`clarinet check`](#clarinet-check) +* Interactive REPL for testing contracts: [`clarinet console`](#clarinet-console) +* Lanza una red de desarrollo local: [`clarinet devnet start`](#clarinet-devnet) +* Gestionar despliegues: [`clarinet deployments`](#clarinet-deployments) + +## Inicializar un nuevo proyecto \[#initialize-a-new-project] + +### clarinet new + +`clarinet new` crea un nuevo proyecto con todos los archivos de configuración y la estructura de directorios necesarios. + +**Uso** + +```console +clarinet new [OPTIONS] +``` + +```terminal +$ clarinet new my-defi-protocol +Create directory my-defi-protocol +Create directory contracts +Create directory settings +Create directory tests +Create file Clarinet.toml +Create file settings/Mainnet.toml +Create file settings/Testnet.toml +Create file settings/Devnet.toml +Create directory .vscode +Create file .vscode/settings.json +Create file .vscode/tasks.json +Create file .gitignore +Create file .gitattributes +Create file package.json +Create file tsconfig.json +Create file vitest.config.js +``` + +| Opción | Descripción | +|--------|-------------| +| `--disable-telemetry` | No proporcionar telemetría de uso del desarrollador para este proyecto | + +## Gestiona tus contratos \[#manage-your-contracts] + +### contratos de Clarinet + +`clarinet contracts` es un subcomando para trabajar con contratos. Tiene dos subcomandos: + +| Comando | Descripción | +|---------|-------------| +| `new` | Generar archivos y configuraciones para un nuevo contrato | +| `rm` | Eliminar archivos y configuraciones de un contrato | + +**Uso con `new`** + +```console +clarinet contracts new +``` + +```terminal +$ clarinet contracts new fungible-token +Created file contracts/fungible-token.clar +Created file tests/fungible-token.test.ts +Updated Clarinet.toml +``` + +**Uso con `rm`** + +```console +clarinet contracts rm +``` + +```terminal +$ clarinet contracts rm old-token +Removed file contracts/old-token.clar +Removed file tests/old-token.test.ts +Updated Clarinet.toml +``` + +| Opción | Descripción | +|--------|-------------| +| `--manifest-path ` | Ruta a Clarinet.toml | + +## Valide sus contratos \[#validate-your-contracts] + +### clarinet check + +`clarinet check` verifica la sintaxis de los contratos y realiza la comprobación de tipos. + +**Uso** + +```console +$ clarinet check [FILE] [OPTIONS] +``` + +```terminal +$ clarinet check +✔ 3 contracts checked +$ clarinet check contracts/token.clar +✔ contracts/token.clar syntax checks passed +``` + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--manifest-path ` | `-m` | Ruta a Clarinet.toml | +| `--deployment-plan-path ` | `-p` | Si se especifica, utilizar este archivo de implementación | +| `--use-on-disk-deployment-plan` | `-d` | Usar plan de implementación en disco (evitar cálculos de actualizaciones) | +| `--use-computed-deployment-plan` | `-c` | Usar plan de despliegue calculado (sobrescribirá la versión en disco si hay alguna actualización) | +| `--enable-clarity-wasm` | | Permitir que la vista previa de Clarity Wasm se ejecute en paralelo con el intérprete de Clarity (beta) | + +## Interact with your contracts in a local REPL \[#interact-with-your-contracts-in-a-local-repl] + +### consola de clarinet + +`clarinet console` loads contracts in a REPL for an interactive session. + +**Uso** + +```console +$ clarinet console [OPTIONS] +``` + +```terminal +$ clarinet console +clarity-repl v1.0.0 +Enter ".help" for usage hints. +Connected to a transient in-memory database. +``` + +La consola de Clarinet ofrece una variedad de comandos para la interacción con contratos: + +* `::help`: Enumera todos los comandos de consola +* `::functions`: Mostrar todas las funciones nativas disponibles en Clarity +* `::keywords`: Mostrar todas las palabras clave nativas disponibles en Clarity +* `::describe | `: Mostrar documentación para una función nativa o palabra clave determinada +* `::toggle_costs`: Mostrar análisis de costo después de cada expresión +* `::toggle_timings`: Mostrar la duración de la ejecución +* `::mint_stx `: Acuñar saldo de STX para un principal dado +* `::set_tx_sender `: Establecer la variable tx-sender al principal +* `::get_assets_maps`: Obtener mapas de activos para cuentas activas +* `::get_contracts`: Obtener contratos +* `::get_block_height`: Obtener la altura actual del bloque +* `::advance_chain_tip `: Simular la minería de `` bloques +* `::advance_stacks_chain_tip `: Simular la minería de `` bloques de Stacks +* `::advance_burn_chain_tip `: Simular la minería de `` bloques de burnchain +* `::set_epoch `: Actualizar la época actual +* `::get_epoch`: Obtener la época actual +* `::debug `: Iniciar una sesión de depuración interactiva ejecutando `` +* `::trace `: Generar un rastro de ejecución para `` +* `::get_costs `: Mostrar el análisis de costos +* `::reload`: Recargar el contrato o contratos existentes en la sesión +* `::read `: Leer expresiones desde un archivo +* `::encode `: Codificar una expresión a una representación en bytes de Valor Clarity +* `::decode `: Decodificar una representación en bytes de un valor de Clarity + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--manifest-path ` | `-m` | Ruta a Clarinet.toml | +| `--deployment-plan-path ` | `-p` | Si se especifica, utilizar este archivo de implementación | +| `--use-on-disk-deployment-plan` | `-d` | Usar plan de implementación en disco (evitar cálculos de actualizaciones) | +| `--use-computed-deployment-plan` | `-c` | Usar plan de despliegue calculado (sobrescribirá la versión en disco si hay alguna actualización) | +| `--enable-remote-data` | `-r` | Habilitar la obtención de datos remotos desde la red principal o una red de pruebas | +| `--remote-data-api-url ` | `-a` | Establecer una URL personalizada de la API de Stacks Blockchain para la obtención de datos remotos | +| `--remote-data-initial-height ` | `-b` | Altura inicial del bloque remoto de Stacks | +| `--enable-clarity-wasm` | | Permitir que la vista previa de Clarity Wasm se ejecute en paralelo con el intérprete de Clarity (beta) | + +## Iniciar una red de desarrollo local \[#start-a-local-development-network] + +### clarinet devnet + +`clarinet devnet` es un subcomando para trabajar con Devnet. Tiene dos subcomandos: + +| Comando | Descripción | +|----------|-------------------------------------------------------| +| `start` | Inicie una red Devnet local para interactuar con sus contratos | +| `package`| Generar paquete de todos los artefactos requeridos para devnet | + +**Uso con `start`** + +```console +$ clarinet devnet start [OPTIONS] +``` + +```terminal +$ clarinet devnet start +``` + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--manifest-path ` | `-m` | Ruta a Clarinet.toml | +| `--no-dashboard` | | Mostrar flujos de registros en lugar del panel de interfaz de usuario de la terminal | +| `--deployment-plan-path ` | `-p` | Si se especifica, utilizar este archivo de implementación | +| `--use-on-disk-deployment-plan` | `-d` | Usar plan de implementación en disco (evitar cálculos de actualizaciones) | +| `--use-computed-deployment-plan` | `-c` | Usar plan de despliegue calculado (sobrescribirá la versión en disco si hay alguna actualización) | +| `--package ` | | Ruta al Package.json producido por 'clarinet devnet package' | + +**Uso con `package`** + +```console +$ clarinet devnet package [OPTIONS] +``` + +```terminal +$ clarinet devnet package --name my-devnet +Packaging devnet artifacts... +Created file my-devnet.json +``` + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--name ` | `-n` | Nombre del archivo json de salida | +| `--manifest-path ` | `-m` | Ruta a Clarinet.toml | + +## Gestiona tus implementaciones \[#manage-your-deployments] + +### despliegues de Clarinet + +`clarinet deployments` es un subcomando para gestionar despliegues en Devnet/Testnet/Mainnet. + +| Comando | Descripción | +|------------|-------------| +| `check` | Verificar el formato de implementaciones | +| `generate` | Generar nuevo despliegue | +| `apply` | Aplicar despliegue | + +**Uso con `check`** + +```console +$ clarinet deployments check [OPTIONS] +``` + +```terminal +$ clarinet deployments check +✔ Deployment files are valid +``` + +| Opción | Descripción | +|--------|-------------| +| `--manifest-path ` | Ruta a Clarinet.toml | + +**Uso con `generate`** + +```console +$ clarinet deployments generate [OPTIONS] +``` + +```terminal +$ clarinet deployments generate --testnet +Generated deployment plan +Created file deployments/default.testnet-plan.yaml +``` + +| Opción | Descripción | +|--------|-------------| +| `--simnet` | Generar un archivo de despliegue para entornos simnet (consola, pruebas) | +| `--devnet` | Generar un archivo de implementación para devnet, utilizando settings/Devnet.toml | +| `--testnet` | Generar un archivo de despliegue para testnet, utilizando settings/Testnet.toml | +| `--mainnet` | Generar un archivo de despliegue para mainnet, utilizando settings/Mainnet.toml | +| `--manifest-path ` | Ruta a Clarinet.toml | +| `--no-batch` | Generar un archivo de despliegue sin intentar agrupar transacciones (solo simnet) | +| `--low-cost` | Calcular y establecer el costo, utilizando baja prioridad (se requiere conexión de red) | +| `--medium-cost` | Calcular y establecer el costo, utilizando prioridad media (se requiere conexión de red) | +| `--high-cost` | Calcular y establecer el costo, utilizando alta prioridad (se requiere conexión de red) | +| `--manual-cost` | Dejar la estimación de costos manual | + +**Uso con `apply`** + +```console +$ clarinet deployments apply [OPTIONS] +``` + +```terminal +$ clarinet deployments apply --testnet +Applying deployment to testnet +✔ Broadcasting transaction for token.clar + Transaction ID: 0x3d4f5... + Contract: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.token +✔ All contracts deployed successfully +``` + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--devnet` | | Aplicar configuración de implementación predeterminada/default.devnet-plan.toml | +| `--testnet` | | Aplicar configuración de implementación predeterminada/default.testnet-plan.toml | +| `--mainnet` | | Aplicar configuración de implementación predeterminada/default.mainnet-plan.toml | +| `--manifest-path ` | `-m` | Ruta a Clarinet.toml | +| `--deployment-plan-path ` | `-p` | Aplicar el plan de implementación especificado | +| `--no-dashboard` | | Mostrar flujos de registros en lugar del panel de interfaz de usuario de la terminal | +| `--use-on-disk-deployment-plan` | `-d` | Usar plan de implementación en disco (evitar cálculos de actualizaciones) | +| `--use-computed-deployment-plan` | `-c` | Usar plan de despliegue calculado (sobrescribirá la versión en disco si hay alguna actualización) | + +## Interactuar con contratos de Mainnet \[#interact-with-mainnet-contracts] + +### requisitos de Clarinet + +`clarinet requirements` es un subcomando para interactuar con contratos de Mainnet. + +| Comando | Descripción | +|---------|-------------| +| `add` | Añada un contrato de mainnet como dependencia a su proyecto | + +**Uso** + +```console +$ clarinet requirements +``` + +```terminal +$ clarinet requirements add SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait +Added requirement SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait +Updated Clarinet.toml +``` + +| Opción | Descripción | +|--------|-------------| +| `--manifest-path ` | Ruta a Clarinet.toml | + +## Integraciones del Editor \[#editor-integrations] + +### clarinet lsp + +`clarinet lsp` inicia el servicio del Protocolo de Servidor de Lenguaje para Clarity, habilitando la finalización inteligente de código, el resaltado de errores y otras características de IDE en editores compatibles. + +**Uso** + +```console +$ clarinet lsp +``` + +## Depuración \[#debugging] + +### clarinet dap + +`clarinet dap` inicia el servicio del Protocolo de Adaptador de Depuración, habilitando funciones de depuración como puntos de interrupción, ejecución paso a paso e inspección de variables en editores compatibles. + +**Uso** + +```console +$ clarinet dap +``` + +## Formatea tu código \[#format-your-code] + +### formato de clarinet + +`clarinet format` da formato a los archivos de código Clarity según las convenciones estándar. + +**Uso** + +```console +$ clarinet format [OPTIONS] +``` + +```terminal +$ clarinet format --check +$ clarinet format --dry-run +$ clarinet format --file contracts/token.clar --in-place +``` + +| Opción | Corto | Descripción | Requerido | +|--------|-------|-------------|----------| +| `--check` | | Comprobar si el código está formateado sin modificar archivos | No | +| `--dry-run` | | Solo reproducir el resultado del formato | No | +| `--in-place` | | Reemplazar el contenido de un archivo con el código formateado | No | +| `--manifest-path ` | `-m` | Ruta a Clarinet.toml | No | +| `--file ` | `-f` | Si se especifica, formatear solo este archivo | No | +| `--max-line-length ` | `-l` | Longitud máxima de línea | No | +| `--indent ` | `-i` | Tamaño de sangría, p. ej. 2 | No | +| `--tabs` | `-t` | Usar tabulaciones en lugar de espacios | No | + +## Utilidades \[#utilities] + +### completaciones de clarinet + +`clarinet completions` genera scripts de completado de shell para tu shell. + +**Uso** + +```console +$ clarinet completions +``` + +```terminal +$ clarinet completions zsh > ~/.zsh/completions/_clarinet +$ source ~/.zshrc +``` + +**Shells compatibles** + +* `bash` +* `zsh` +* `fish` +* `powershell` +* `elvish` + +| Opción | Corto | Descripción | +|--------|-------|-------------| +| `--shell ` | `-s` | Especifique para qué shell generar el script de completado | + +## Variables de entorno \[#environment-variables] + +Clarinet admite variables de entorno para la configuración. Todas las variables de entorno tienen el prefijo `CLARINET_`: + +```terminal +$ export CLARINET_MANIFEST_PATH=/path/to/project +``` diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/contract-interaction.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/contract-interaction.mdx new file mode 100644 index 000000000..efd4bc9c3 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/contract-interaction.mdx @@ -0,0 +1,193 @@ +--- +title: Interacción con contratos +sidebarTitle: Interacción con contratos +description: Clarinet proporciona herramientas poderosas para interactuar con tus contratos durante el desarrollo. La consola te ofrece un entorno REPL interactivo donde puedes llamar funciones, verificar el estado y depurar problemas en tiempo real. +--- +## Iniciando la consola + +El `clarinet console` el comando inicia una sesión interactiva con todos sus contratos implementados en una cadena de bloques local simulada: + +```terminal +$ clarinet console +clarity-repl v3.3.0 +Enter "::help" for usage hints. +Connected to a transient in-memory database. +``` + +Once in the console, you have access to a Clarity REPL with your project's contracts already deployed and ready to interact with. The console supports several powerful options for different development scenarios: + +| Opción | Descripción | +|--------|-------------| +| `--enable-remote-data` | Conéctese a la red principal/red de pruebas para consultar contratos reales | +| `--deployment-plan-path ` | Usar plan de despliegue específico | +| `--manifest-path ` | Usar ubicación alternativa de Clarinet.toml | +| `--remote-data-api-url ` | Usar punto final de API de Stacks personalizado | +| `--remote-data-initial-height ` | Establecer la altura del bloque inicial para datos remotos | + +## Trabajando con datos remotos + +Una de las características más poderosas es la capacidad de interactuar con contratos reales de mainnet o testnet desde tu consola local. Esto te permite probar contra contratos realmente desplegados: + +```terminal +$ clarinet console --enable-remote-data +``` + +Ahora puedes interactuar directamente con contratos de la red principal: + +```terminal -o +$ (contract-call? 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token get-decimals) +(ok u8) +$ (contract-call? 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-token get-name) +(ok "Arkadiko Token") +``` + +Esto es invaluable para: + +* Probando integraciones con protocolos existentes +* Verificando el comportamiento del contrato contra el estado de la red principal +* Desarrollando contratos que dependen de contratos de mainnet + +:::callout +type: warn + +### Requisitos de datos remotos + +Antes de usar datos remotos, asegúrese de agregar el contrato remoto a su `Clarinet.toml` archivo con `clarinet requirements add SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token`. +::: + +### Uso de la clave API de Hiro + +Para evitar límites de tasa al usar datos remotos, establezca el `HIRO_API_KEY` variable de entorno. Clarinet incluye automáticamente esta clave en todas las solicitudes de API: + +```terminal +$ export HIRO_API_KEY=your_api_key_here +$ clarinet console --enable-remote-data +``` + +La clave de API se envía como el `x-api-key` encabezado en todas las solicitudes a las APIs de Hiro. Puede obtener una clave API gratuita desde el [Plataforma Hiro](https://platform.hiro.so). + +### Trabajando con contratos + +El `::get_contracts` command muestra todos los contratos disponibles: + +```terminal -o +$ ::get_contracts ++---------------------------------------------------------+----------------+ +| Contract identifier | Public functions | +|---------------------------------------------------------+----------------------| +| ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.counter | (count-up) | +| | (get-count (who principal))| ++---------------------------------------------------------+----------------------+ +$ (contract-call? .counter count-up) +(ok true) +$ (contract-call? .counter get-count tx-sender) +u1 +``` + +### Trabajando con diferentes principales + +La consola proporciona varias carteras de prueba que puede utilizar. Cambie entre ellas para probar escenarios de múltiples usuarios: + +```terminal -o +$ ::get_assets_maps ++-------------------------------------------+-----------------+ +| Address | uSTX | +|-------------------------------------------+-----------------| +| ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM | 100000000000000 | +|-------------------------------------------+-----------------| +| ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 | 100000000000000 | +|-------------------------------------------+-----------------| +| ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG | 100000000000000 | +|-------------------------------------------+-----------------| +| ST2JHG361ZXG51QTKY2NQCVBPPRRE2KZB1HR05NNC | 100000000000000 | +|-------------------------------------------+-----------------| +| ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND | 100000000000000 | +|-------------------------------------------+-----------------| +| ST2REHHS5J3CERCRBEPMGH7921Q6PYKAADT7JP2VB | 100000000000000 | +|-------------------------------------------+-----------------| +| ST3AM1A56AK2C1XAFJ4115ZSV26EB49BVQ10MGCS0 | 100000000000000 | +|-------------------------------------------+-----------------| +| ST3NBRSFKX28FQ2ZJ1MAKX58HKHSDGNV5N7R21XCP | 100000000000000 | +|-------------------------------------------+-----------------| +| ST3PF13W7Z0RRM42A8VZRVFQ75SV1K26RXEP8YGKJ | 100000000000000 | +|-------------------------------------------+-----------------| +| STNHKEPYEPJ8ET55ZZ0M5A34J0R3N5FM2CMMMAZ6 | 100000000000000 | ++-------------------------------------------+-----------------+ +$ ::set_tx_sender ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 +tx-sender switched to ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 +``` + +### Trabajando con alturas de bloques + +Prueba la lógica "dependiente del tiempo" avanzando la cadena: + +```terminal -o +$ ::get_block_height +Current block height: 4 +$ ::advance_chain_tip 100 +new burn height: 3 +new stacks height: 104 +$ ::get_block_height +Current block height: 104 +``` + +:::callout +### Comandos de consola + +Para obtener una lista completa de los comandos de consola disponibles y su uso, consulte el [Referencia de la CLI](/tools/clarinet/cli-reference#clarinet-console). +::: + +## Problemas comunes + + + + Errores de contrato no encontrado + + +
+ Si ve errores de "uso de contrato no resuelto": + + ```terminal + $ (contract-call? .missing-contract get-value) + error: use of unresolved contract + ``` + + **Causas comunes:** + + * Nombre del contrato con error tipográfico + * Contrato no desplegado en la sesión + * Uso del prefijo de contrato incorrecto (`.` para contratos locales) + + **Solución**: Verificar contratos desplegados con `::get_contracts` y use el nombre correcto. +
+
+
+ + + Problemas de conexión de datos remotos + + +
+ Cuando se usa `--enable-remote-data`, es posible que encuentres límites de velocidad o errores de conexión: + + ```terminal + $ (contract-call? 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-token get-name) + error: API rate limit exceeded + ``` + + **Soluciones:** + + 1. Establece tu clave API de Hiro: `export HIRO_API_KEY=your_key_here` + 2. Utilizar un punto final de API personalizado: `--remote-data-api-url https://your-node.com` + 3. Esperar a que se restablezca el límite de tasa (generalmente 1 minuto) +
+
+
+
+ +## Próximos pasos + +:::next-steps +* [Validación y análisis](/tools/clarinet/validation-and-analysis): Aprende cómo probar y validar tu proyecto de Clarinet. +* [Despliegue](/tools/clarinet/deployment): Aprende cómo desplegar tu proyecto de Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/deployment.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/deployment.mdx new file mode 100644 index 000000000..568c1d16e --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/deployment.mdx @@ -0,0 +1,447 @@ +--- +title: Desplegando tus contratos +sidebarTitle: Despliegue de contratos +description: Clarinet proporciona herramientas de implementación completas para ayudarte a mover tus contratos desde el desarrollo local a las redes de producción. Ya sea que estés probando en devnet, preparando en testnet o lanzando en mainnet, Clarinet simplifica todo el proceso de implementación. +--- +## Generando planes de despliegue + +Los planes de despliegue son archivos YAML que definen exactamente cómo se desplegarán tus contratos. Especifican el orden, la configuración y los detalles de red para cada contrato, asegurando despliegues reproducibles en todos los entornos. Para crear un plan de despliegue para cualquier red, ejecuta el siguiente comando: + +```terminal +$ clarinet deployments generate --testnet +Analyzing contracts... +Calculating deployment costs... +Generating deployment plan +Created file deployments/default.testnet-plan.yaml +``` + +Esto crea un plan de despliegue basado en la configuración de su proyecto: + +```yaml deployments/default.devnet-plan.yaml +--- +id: 0 +name: Devnet deployment +network: devnet +stacks-node: "http://localhost:20443" +bitcoin-node: "http://devnet:devnet@localhost:18443" +plan: + batches: + - id: 0 + transactions: + - contract-publish: + contract-name: counter + expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + cost: 6940 + path: contracts/counter.clar + anchor-block-only: true + clarity-version: 2 + epoch: "2.5" +``` + +### Estructura del plan de despliegue + +Componentes clave de un plan de despliegue: + +| Campo | Descripción | +|-------|-------------| +| `id` | Identificador único para el despliegue | +| `name` | Nombre de implementación legible por humanos | +| `network` | Red objetivo (devnet/testnet/mainnet) | +| `stacks-node` | Punto final RPC para el nodo Stacks | +| `bitcoin-node` | Punto final RPC para el nodo de Bitcoin | +| `plan.batches` | Matriz de lotes de implementación | + +### Especificaciones de despliegue + +El comportamiento de implementación se configura en dos lugares: + +**Configuración del proyecto** (`Clarinet.toml`): + +* Versión de Clarity para contratos +* Dependencias contractuales +* Requisitos de época + +**Configuración de red** (`settings/.toml`): + +* Detalles y saldos de la cuenta +* Puntos finales de red +* Cuentas de implementación personalizadas + +Ejemplo de configuración de red: + +```toml settings/Testnet.toml +[network] +name = "testnet" +deployment_fee_rate = 10 + +[accounts.deployer] +mnemonic = "" +balance = 100_000_000_000_000 +derivation = "m/44'/5757'/0'/0/0" +``` + +## Trabajando con requisitos contractuales + +Su proyecto puede hacer referencia a contratos que ya existen en la blockchain. Esto es especialmente útil para implementar rasgos estandarizados. + +### Añadiendo requisitos + +Agregar dependencias de contratos externos: + +```terminal +$ clarinet requirements add SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait +Added requirement SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait +Updated Clarinet.toml +``` + +Esto actualiza la configuración de tu proyecto: + +```toml Clarinet.toml +[project] +name = "my-nft-project" +requirements = [ + { contract_id = "SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait" } +] +``` + +Al implementar, Clarinet automáticamente: + +* Descarga el contrato a través de la API de Stacks +* Reasigna el principal a una cuenta local para devnet +* Garantiza que el requisito esté disponible antes de desplegar tus contratos + +## Implementación en diferentes redes + + + + + Devnet + + + + Testnet + + + + Mainnet + + + + + **Implementación rápida para desarrollo local** + + Devnet despliega automáticamente los contratos cuando se inicia: + + ```terminal + $ clarinet devnet start + [32mStarting devnet...[0m + [32mDeploying contracts...[0m + [90mDeploying[0m counter.clar [32m✓[0m ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.counter + [90mDeploying[0m token.clar [32m✓[0m ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.token + ``` + + Para el despliegue manual a una devnet en ejecución: + + ```terminal + $ clarinet deployments apply --devnet + ``` + + Ver [desarrollo local](/tools/clarinet/local-development) para una configuración detallada de devnet. + + + + :::callout + ### Requisitos previos + + Antes de implementar en la red de pruebas: + + * Obtén STX de testnet desde el [grifo](https://explorer.hiro.so/sandbox/faucet?chain=testnet) + * Configura tu cuenta en `settings/Testnet.toml` + * Validar contratos con `clarinet check` + ::: + + **Generar plan de despliegue con estimación de costos**: + + ```terminal + $ clarinet deployments generate --testnet --medium-cost + ``` + + **Implementar contratos**: + + ```terminal + $ clarinet deployments apply --testnet + ``` + + + + :::callout + type: warn + + ### Lista de verificación de la red principal + + Antes de implementar en la red principal: + + 1. Completar pruebas exhaustivas en la red de pruebas + 2. Audite sus contratos para detectar vulnerabilidades de seguridad + 3. Asegúrate de tener suficiente STX para las tarifas de implementación + 4. Haga una copia de seguridad de sus claves de implementación de forma segura + 5. Considere usar una billetera de hardware para el despliegue + ::: + + **Generar plan de despliegue de red principal**: + + ```terminal + $ clarinet deployments generate --mainnet --high-cost + ``` + + **Desplegar con confirmación**: + + ```terminal + $ clarinet deployments apply --mainnet + ``` + + + +## Estimación y optimización de costos + +### Niveles de tarifas + +Elija el nivel de tarifa adecuado para su implementación: + +```terminal +$ clarinet deployments generate --testnet --manual-cost +``` + +Opciones de nivel de tarifa: + +* `--low-cost`: Minimizar comisiones, confirmación más lenta +* `--medium-cost`: Tarifas y velocidad equilibradas +* `--high-cost`: Inclusión prioritaria +* `--manual-cost`: Elegir interactivamente + +### Analizando los costos de implementación + +Obtenga un desglose detallado de costos antes de implementar: + +```terminal +$ clarinet deployments generate --testnet --medium-cost +``` + +## Configuraciones avanzadas de implementación + +### Despliegues de múltiples lotes + +Despliegue sistemas complejos con dependencias utilizando lotes: + +```yaml deployments/defi-protocol.yaml +plan: + batches: + - id: 0 + transactions: + - contract-publish: + contract-name: trait-definitions + path: contracts/traits.clar + clarity-version: 2 + - id: 1 + transactions: + - contract-publish: + contract-name: token + path: contracts/token.clar + - contract-publish: + contract-name: oracle + path: contracts/oracle.clar + - id: 2 + transactions: + - contract-publish: + contract-name: defi-pool + path: contracts/defi-pool.clar +``` + +Los lotes garantizan: + +* Las dependencias se implementan primero +* Despliegue paralelo dentro de lotes +* Ejecución secuencial entre lotes + +### Tipos de transacciones + +Los planes de implementación admiten varios tipos de transacciones: + +| Transaction Type | Descripción | +|--------------------|--------------------------------------------------------------------------------------------| +| Contract Operations| Implica publicar y llamar contratos, especificando remitente, costo y ruta | +| Asset Transfers | Transfiere activos como STX o BTC, especificando remitente, destinatario y cantidades | + +**Con operaciones de contrato**: + +```yaml +- contract-publish: + contract-name: my-contract + expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + cost: 5960 + path: contracts/my-contract.clar + clarity-version: 2 + +- contract-call: + contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.my-contract + expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + method: initialize + parameters: + - u1000000 + - "Token Name" + cost: 5960 +``` + +**Con transferencias de activos**: + +```yaml +- stx-transfer: + expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + recipient: ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG + mstx-amount: 1000000 + memo: '0x48656c6c6f' # "Hello" in hex + +- btc-transfer: + expected-sender: mjSrB3wS4xab3kYqFktwBzfTdPg367ZJ2d + recipient: bcrt1qnxknq3wqtphv7sfwy07m7e4sr6ut9yt6ed99jg + sats-amount: 100000000 + sats-per-byte: 10 +``` + +### Personalización manual del plan + +Puede editar manualmente los planes de implementación para escenarios complejos: + +:::callout +### Ediciones manuales + +Al implementar, Clarinet solicita sobrescribir los cambios manuales. Escriba `no` para mantener tus personalizaciones. +::: + +**Ejemplo de inicialización de contrato**: + +```yaml +- id: 3 + transactions: + - contract-call: + contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.token + method: initialize + parameters: + - u1000000 # Initial supply + - { name: "My Token", symbol: "MTK", decimals: u6 } + expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM +``` + +## Problemas comunes + + + + Saldo de STX insuficiente + + +
+ **Error**: "Saldo de STX insuficiente para el despliegue" + + **Soluciones**: + + 1. **Obtener STX de testnet**: Visita el [faucet de testnet](https://explorer.hiro.so/sandbox/faucet?chain=testnet) + 2. **Reducir la tasa de comisión**: Usar `--low-cost` opción + 3. **Consultar saldo**: + + ```terminal + $ clarinet console --testnet + >> stx-account 'ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG + ``` +
+
+
+ + + El contrato ya existe + + +
+ **Error**: "Contrato 'token' ya desplegado en esta dirección" + + **Causas**: + + * Contrato con el mismo nombre ya desplegado + * Intento de implementación anterior exitoso + + **Soluciones**: + + 1. Utilice un nombre de contrato diferente + 2. Desplegar desde una dirección diferente + 3. Si está realizando pruebas, utilice una cuenta nueva de testnet +
+
+
+ + + Fallos de conexión de red + + +
+ **Error**: "No se pudo conectar al nodo de testnet" + + **Comprobar la configuración de red**: + + ```toml settings/Testnet.toml + [network] + name = "testnet" + node_rpc_address = "https://stacks-node-api.testnet.stacks.co" + ``` + + **Probar puntos finales alternativos**: + + * Hiro: `https://api.testnet.hiro.so` + * Usa tu propio nodo + + **Depurar conexión**: + + ```terminal + $ curl -I https://api.testnet.hiro.so/v2/info + ``` +
+
+
+ + + Plan de despliegue no válido + + +
+ **Errores comunes de YAML**: + + * Sangría incorrecta + * Faltan campos obligatorios + * Rutas de contrato inválidas + + **Valide su plan**: + + ```terminal + $ clarinet deployments check + ``` + + **Regenerar si es necesario**: + + ```terminal + $ clarinet deployments generate --testnet + ``` + + **Verificar que existan las rutas de los contratos**: + + ```terminal + $ ls contracts/ + ``` +
+
+
+
+ +## Próximos pasos + +:::next-steps +* [Chainhook](/tools/chainhook): Aprende cómo monitorear tus contratos con Chainhook. +* [Monitoreo de contratos](/tools/contract-monitoring): Aprende cómo monitorear tus contratos con Chainhook. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx new file mode 100644 index 000000000..fdbb47016 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx @@ -0,0 +1,491 @@ +--- +title: Trabajando con una blockchain local +sidebarTitle: Desarrollo de blockchain local +description: Clarinet proporciona un entorno de blockchain local completo, ofreciendo todos los servicios que necesitas para el desarrollo de contratos inteligentes sin necesidad de desplegar en una red pública. +--- +## Iniciando tu blockchain local + +Para iniciar devnet con todos los servicios requeridos, ejecute el siguiente comando: + +```terminal +$ clarinet devnet start +``` + +| Opción | Descripción | +|--------|-------------| +| `--manifest-path ` | Usar ubicación alternativa de Clarinet.toml | +| `--no-dashboard` | Mostrar registros en lugar de interfaz de usuario interactiva | +| `--deployment-plan-path ` | Usar plan de despliegue específico | +| `--use-on-disk-deployment-plan` | Usar el plan de despliegue existente sin actualizaciones | +| `--use-computed-deployment-plan` | Calcular y sobrescribir el plan de implementación | +| `--package ` | Usar configuración preempaquetada de devnet | + +:::callout +### Requisitos previos + +Devnet requiere que Docker esté en ejecución. Si ves "clarinet was unable to create network", asegúrate de que Docker Desktop esté funcionando o que el demonio de Docker se haya iniciado. +::: + +Por defecto, devnet inicia con un panel interactivo que muestra: + +* Estado del servicio y salud +* Transacciones recientes +* Producción de bloques +* Despliegues de contratos +* Uso de recursos + +Usa el `--no-dashboard` bandera para entornos de CI/CD o cuando prefieres registros en streaming. + +## Servicios y características principales + +Devnet crea un entorno blockchain completo con estos servicios: + +| Servicio | Puerto | Propósito | +|---------|------|---------| +| **Nodo de Stacks** | 20443 | Procesa transacciones y mina bloques | +| **Nodo de Bitcoin** | 18443 | Proporciona anclaje de bloques en modo regtest | +| **API de Stacks** | 3999 | REST API for querying blockchain data | +| **Base de datos Postgres** | 5432 | Indexa los datos de la cadena de bloques para consultas rápidas | +| **Explorador de Stacks** | 8000 | Interfaz web para navegar transacciones | +| **Explorador de Bitcoin** | 8001 | Interfaz de usuario web para la cadena regtest de Bitcoin | + +Devnet incluye cuentas prefinanciadas con saldos de STX: + +```terminal -o +$ clarinet console +$ ::get_assets_maps ++-------------------------------------------+-----------------+ +| Address | STX Balance | +|-------------------------------------------+-----------------| +| ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM | 100000000000000 | +| ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 | 100000000000000 | +| ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG | 100000000000000 | +| ST2JHG361ZXG51QTKY2NQCVBPPRRE2KZB1HR05NNC | 100000000000000 | +| ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND | 100000000000000 | ++-------------------------------------------+-----------------+ +``` + +Cuando se inicia devnet, automáticamente despliega los contratos de tu proyecto: + +```terminal -o +$ clarinet devnet start +Deploying contracts... +Deploying counter.clar ✓ ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.counter +Deploying token.clar ✓ ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.token +Deploying marketplace.clar ✓ ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.marketplace + +All contracts deployed successfully +``` + +## Configuración y personalización + +El comportamiento de Devnet se controla a través de archivos de configuración en su proyecto. + +### Configuración básica + +El `settings/Devnet.toml` archivo controla la configuración de red: + +```toml settings/Devnet.toml +[network] +name = "devnet" + +# Service ports +stacks_node_rpc_port = 20443 +stacks_api_port = 3999 +stacks_explorer_port = 8000 +bitcoin_node_rpc_port = 18443 + +# Mining configuration +[network.devnet] +bitcoin_controller_block_time = 30_000 # 30 seconds + +# Disable services you don't need +disable_bitcoin_explorer = false +disable_stacks_explorer = false +disable_stacks_api = false +``` + +### Configuración del puerto + +Personalice los puertos para evitar conflictos: + +```toml +# Change default ports +stacks_node_rpc_port = 30443 +stacks_api_port = 4999 +postgres_port = 6432 +stacks_explorer_port = 4020 +``` + +### Intervalos de minería + +Controlar la velocidad de producción de bloques: + +```toml +# Fast blocks for development (1 second) +bitcoin_controller_block_time = 1_000 + +# Standard testing (30 seconds) +bitcoin_controller_block_time = 30_000 + +# Realistic timing (2 minutes) +bitcoin_controller_block_time = 120_000 +``` + +### Cuentas personalizadas + +Agregar cuentas con saldos específicos: + +```toml Clarinet.toml +[accounts.treasury] +mnemonic = "twice kind fence tip hidden tilt action fragile skin nothing glory cousin" +balance = 10_000_000_000_000 # 10M STX + +[accounts.alice] +mnemonic = "female adjust gallery certain visit token during great side clown fitness like" +balance = 5_000_000_000_000 # 5M STX +``` + +## Accediendo a los servicios + +Accede a varios servicios para interactuar con la blockchain, incluyendo la navegación de datos, consulta de APIs y envío de transacciones directamente. + + + + + Explorador de Stacks + + + + Puntos finales de la API + + + + RPC directo + + + + + Explore transacciones, bloques y el estado de los contratos a través de la interfaz web: + + ``` + http://localhost:8000 + ``` + + El explorador proporciona: + + * Historial y detalles de transacciones + * Información del bloque + * Código fuente y estado del contrato + * Saldos de cuenta + + + + Consulta datos de blockchain utilizando la API de Stacks: + + ```terminal + $ curl http://localhost:3999/v2/info + { + "peer_version": 4207599113, + "burn_block_height": 102, + "stacks_tip_height": 68, + "network_id": 2147483648 + } + ``` + + Puntos finales comunes: + + * `/v2/info` - Información de la red + * `/v2/accounts/{address}` - Detalles de la cuenta + * `/v2/contracts/source/{address}/{name}` - Fuente del contrato + * `/extended/v1/tx/{txid}` - Detalles de la transacción + + + + Enviar transacciones directamente al nodo de Stacks: + + ```terminal + $ curl -X POST http://localhost:20443/v2/transactions \ + -H "Content-Type: application/json" \ + -d @transaction.json + ``` + + Puntos finales RPC: + + * `/v2/transactions` - Transmitir transacciones + * `/v2/contracts/call-read` - Llamar funciones de solo lectura + * `/v2/fees/transfer` - Obtener estimaciones de tarifas + + + +## Configuración avanzada + +### Optimización del rendimiento + +Para ciclos de desarrollo rápidos: + +```toml settings/Devnet.toml +[network.devnet] +# 1 second blocks +bitcoin_controller_block_time = 1_000 + +# Disable explorers for speed +disable_bitcoin_explorer = true +disable_stacks_explorer = true + +# Keep API for contract interaction +disable_stacks_api = false +``` + +### Configuración de época + +Prueba diferentes versiones de Stacks: + +```toml +[epochs] +epoch_2_0 = 0 # Stacks 2.0 from genesis +epoch_2_05 = 0 # Stacks 2.05 from genesis +epoch_2_1 = 0 # Stacks 2.1 from genesis +epoch_2_2 = 0 # Pox-2 from genesis +epoch_2_3 = 0 # Pox-3 from genesis +epoch_2_4 = 0 # Pox-4 from genesis +epoch_3_0 = 101 # Nakamoto activation at block 101 +``` + +### Despliegue de paquetes + +Crear configuraciones de devnet reutilizables: + +```terminal +$ clarinet devnet package --name demo-env +Packaging devnet configuration... +Created demo-env.json +``` + +Usar configuración empaquetada: + +```terminal +$ clarinet devnet start --package demo-env.json +``` + +## Problemas comunes + + + + Errores de conexión de Docker + + +
+ **Error**: "clarinet no pudo crear la red" + + **Soluciones**: + + 1. Asegúrese de que Docker Desktop esté en ejecución (macOS/Windows) + 2. Iniciar el daemon de Docker: `sudo systemctl start docker` (Linux) + 3. Verificar los permisos de Docker: `docker ps` + 4. Restablecer Docker a los valores predeterminados de fábrica si los problemas persisten + + **Verificar Docker**: + + ```terminal + $ docker --version + Docker version 24.0.7, build afdd53b + $ docker ps + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + ``` +
+
+
+ + + Puerto ya en uso + + +
+ **Error**: "bind: dirección ya en uso" + + **Encontrar proceso usando puerto**: + + Para macOS/Linux: + + ```terminal + $ lsof -i :3999 + $ kill -9 $(lsof -t -i:3999) + ``` + + Para Windows: + + ```terminal + $ netstat -ano | findstr :3999 + $ taskkill /PID /F + ``` + + **O configura puertos diferentes** en `settings/Devnet.toml`: + + ```toml + stacks_api_port = 4999 + stacks_explorer_port = 4020 + postgres_port = 6432 + ``` +
+
+
+ + + Alto uso de recursos + + +
+ **Síntomas**: Rendimiento lento, alto uso de CPU/memoria + + **Optimizar recursos**: + + ```toml + # Disable unused services + disable_bitcoin_explorer = true + disable_stacks_explorer = true + + # Slower block production + bitcoin_controller_block_time = 60_000 + ``` + + **Límites de recursos de Docker**: + + ```terminal + $ docker update --memory="2g" --cpus="1" + ``` + + **Limpiar datos antiguos**: + + ```terminal + $ clarinet devnet stop + $ docker system prune -a + $ rm -rf tmp/devnet + ``` +
+
+
+ + + Error: la red ya existe + + +
+ **Error**: "Docker respondió con el código de estado 409: red con nombre `.devnet` ya existe" + + Esto ocurre cuando una sesión anterior de devnet no se limpió correctamente, dejando una red Docker atrás. + + **Solución - Eliminar la red existente**: + + ```terminal + $ docker network rm .devnet + ``` + + O si no estás seguro del nombre exacto de la red: + + ```terminal + $ docker network ls | grep devnet + $ docker network rm + ``` + + **Prevención**: + + * Usar `Ctrl+C` para detener elegantemente devnet + * Verificar si hay redes huérfanas después de bloqueos: + + ```terminal + $ docker network prune + ``` + + **Nota**: El nombre de la red se basa en el nombre del directorio de su proyecto, por lo que un `clarinet new hello-world` el proyecto tendrá un nombre de red de `hello-world.devnet`. +
+
+
+ + + Error de flujo de Docker durante el inicio + + +
+ **Error**: "Fatal: no se puede crear la imagen: error de flujo de Docker" + + Este error suele ocurrir cuando las imágenes de Docker están dañadas o cuando los exploradores no logran iniciarse correctamente. + + **Solución 1 - Desactivar exploradores**: + + Si no necesitas los exploradores web, desactívalos en `settings/Devnet.toml`: + + ```toml + disable_bitcoin_explorer = true + disable_stacks_explorer = true + ``` + + **Solución 2 - Limpiar el entorno de Docker**: + + Eliminar todos los contenedores e imágenes, luego reiniciar: + + ```terminal + $ docker stop $(docker ps -a -q) + $ docker system prune -a + $ docker volume prune + ``` + + **Solución 3 - Limpieza completa y reinicio**: + + ```terminal + $ docker stop $(docker ps -a -q) + $ docker network rm .devnet + $ docker system prune --all --volumes + $ clarinet devnet start + ``` + + Esto garantiza un entorno Docker limpio para que devnet comience de cero. +
+
+
+ + + Fallos en el despliegue de contratos + + +
+ **Verificar el orden de despliegue** en `Clarinet.toml`: + + ```toml + # Deploy dependencies first + [contracts.sip-010-trait] + path = "contracts/sip-010-trait.clar" + + [contracts.token] + path = "contracts/token.clar" + ``` + + **Validar contratos primero**: + + ```terminal + $ clarinet check + ``` + + **Revisar los registros de implementación**: + + ```terminal + $ clarinet devnet start --no-dashboard + ``` + + **Despliegue manual**: + + ```terminal + $ clarinet deployments generate --devnet + $ clarinet deployments apply --devnet + ``` +
+
+
+
+ +## Próximos pasos + +:::next-steps +* [Interacción con contratos](/tools/clarinet/contract-interaction): Aprende cómo interactuar con tus contratos. +* [Despliegue](/tools/clarinet/deployment): Aprende cómo desplegar tu proyecto de Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/project-development.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/project-development.mdx new file mode 100644 index 000000000..3e7bafad5 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/project-development.mdx @@ -0,0 +1,174 @@ +--- +title: Administrando tus proyectos +sidebarTitle: Desarrollo del proyecto +description: Clarinet agiliza todo el ciclo de vida del desarrollo de contratos inteligentes en Clarity. Desde la inicialización del proyecto hasta la gestión de contratos y el formateo de código, tendrás todas las herramientas necesarias para un desarrollo profesional. +--- +## Creando un proyecto nuevo + +El `clarinet new` el comando crea una estructura de proyecto completa con todos los archivos de configuración necesarios: + +```terminal +$ clarinet new my-defi-app +Create directory my-defi-app +Create directory contracts +Create directory settings +Create directory tests +Create file Clarinet.toml +Create file settings/Mainnet.toml +Create file settings/Testnet.toml +Create file settings/Devnet.toml +Create directory .vscode +Create file .vscode/settings.json +Create file .vscode/tasks.json +Create file .gitignore +Create file .gitattributes +Create file package.json +Create file tsconfig.json +Create file vitest.config.js +``` + +| Opción | Descripción | Ejemplo | +|--------|-------------|---------| +| `--disable-telemetry` | Optar por no participar en la recopilación de telemetría | `clarinet new my-app --disable-telemetry` | + +Para una mirada más profunda a la estructura del proyecto generada, consulte el [estructura del proyecto](/tools/clarinet/project-structure) guía. + +## Gestionando contratos + +### Creando nuevos contratos + +El `clarinet contract new` el comando genera tanto un archivo de contrato como su archivo de prueba correspondiente: + +```terminal +$ clarinet contract new token +Created file contracts/token.clar +Created file tests/token.test.ts +Updated Clarinet.toml +``` + +El contrato generado incluye una plantilla mínima: + +```clarity contracts/token.clar +;; token +;; + +;; constants +;; + +;; data vars +;; + +;; data maps +;; + +;; public functions +;; + +;; read only functions +;; + +;; private functions +;; +``` + +### Eliminando contratos + +Limpiar contratos no utilizados con el `rm` comando: + +```terminal +$ clarinet contract rm old-token +Removed file contracts/old-token.clar +Removed file tests/old-token.test.ts +Updated Clarinet.toml +``` + +## Verificando la sintaxis de los contratos del proyecto + +Valide la configuración completa de su proyecto: + +```terminal +$ clarinet check +✔ 3 contracts checked +``` + +Verificar contratos específicos: + +```terminal +$ clarinet check contracts/token.clar +✔ contracts/token.clar Syntax of contract successfully checked +``` + +## Formato de código + +Clarinet incluye un potente formateador de código para mantener un estilo consistente en todo su proyecto: + +Formatear todos los contratos en tu proyecto: + +```terminal +$ clarinet format --in-place +Formatted 5 contracts +``` + +### Opciones de formato + +Personaliza el formato para que coincida con la guía de estilo de tu equipo: + +| Opción | Descripción | Ejemplo | +|--------|-------------|---------| +| `--dry-run` | Vista previa de cambios sin modificar archivos | `clarinet format --dry-run` | +| `--in-place` | Reemplazar contenido del archivo (requerido para el formato real) | `clarinet format --in-place` | +| `--max-line-length` | Establecer longitud máxima de línea | `clarinet format --max-line-length 100` | +| `--indent` | Establecer tamaño de sangría | `clarinet format --indent 2` | +| `--tabs` | Utilice tabulaciones en lugar de espacios | `clarinet format --tabs` | + +### Dar formato a archivos individuales + +```terminal +$ clarinet format contracts/messy-contract.clar --in-place +Formatted contracts/messy-contract.clar +``` + +Formatear contratos específicos utilizando patrones glob: + +```terminal +$ clarinet format contracts/token*.clar --in-place +Formatted contracts/token-trait.clar +Formatted contracts/token-impl.clar +``` + +## Configuración del proyecto + +### Trabajando con requisitos + +Agregar contratos de mainnet como dependencias: + +```terminal +$ clarinet requirements add SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait +Added requirement SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait +Updated Clarinet.toml +``` + +Esto actualiza tu configuración: + +```toml Clarinet.toml +[project] +requirements = [ + { contract_id = "SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait" } +] +``` + +Ahora puedes implementar rasgos de contratos de la red principal: + +```clarity contracts/my-nft.clar +(impl-trait 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait) + +(define-non-fungible-token my-nft uint) +;; ... implement required functions +``` + +## Próximos pasos + +:::next-steps +* [Interacción con contratos](/tools/clarinet/contract-interaction): Aprende cómo interactuar con tus contratos. +* [Pruebas y validación](/tools/clarinet/validation-and-analysis): Aprende cómo probar y validar tu proyecto de Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx b/content/docs/es/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx new file mode 100644 index 000000000..16232d6b5 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx @@ -0,0 +1,242 @@ +--- +title: Validando tus contratos +sidebarTitle: Validación y análisis +description: Clarinet proporciona herramientas poderosas para validar, analizar y depurar sus contratos inteligentes. Desde la comprobación estática de tipos hasta el análisis de costos en tiempo real, puede asegurarse de que sus contratos sean correctos y eficientes antes de la implementación. +--- +La validación de contratos en el desarrollo de Clarity abarca análisis estático, depuración en tiempo de ejecución y optimización de costos. Cada enfoque sirve para diferentes propósitos en la garantía de la corrección y eficiencia del contrato. + +## Comprendiendo la validación de contratos + +**Análisis Estático vs Depuración en Tiempo de Ejecución** + +| Static Analysis | Runtime Debugging | +|-----------------------------|------------------------------| +| Detecta errores antes del despliegue | Revela el comportamiento durante la ejecución | +| Incompatibilidades de tipos, errores de sintaxis | Costos reales de ejecución | +| Violaciones de cumplimiento de rasgos | Cambios de estado y efectos secundarios | +| Uso de variables no definidas | Flujo y resultados de transacciones | +| Problemas con firmas de funciones | Cuellos de botella de rendimiento | + +## Análisis estático + +El `clarinet check` el comando realiza una validación exhaustiva de sus contratos sin ejecutarlos: + +```terminal +$ clarinet check +✔ 3 contracts checked +``` + +Cuando la validación falla, Clarinet proporciona diagnósticos detallados: + +```terminal +$ clarinet check +✖ 1 error detected +Error in contracts/token.clar:15:10 + | +15| (ok (+ balance amount)) + | ^^^^^^^ + | + = Type error: expected uint, found (response uint uint) +``` + +**Alcance de validación** + +Clarinet valida múltiples aspectos de tus contratos: + +| Tipo de validación | Qué verifica | +|----------------|----------------| +| **Seguridad de tipos** | Parámetros de función, valores de retorno, tipos de variables | +| **Cumplimiento de rasgos** | La implementación coincide con las definiciones de rasgos | +| **Consistencia de respuesta** | Las ramas ok/err devuelven los mismos tipos | +| **Ámbito de variables** | Todas las variables definidas antes de su uso | +| **Visibilidad de funciones** | Modificadores públicos/privados/de solo lectura | + +**Verificando contratos específicos** + +Validar contratos individuales durante el desarrollo enfocado: + +```terminal +$ clarinet check contracts/nft.clar +✔ contracts/nft.clar Syntax of contract successfully checked +``` + +**Integración con CI** + +Automatice la validación en su pipeline de integración continua. Por ejemplo, utilice GitHub Actions: + +```yaml .github/workflows/validate.yml -c +name: Contract Validation +on: [push, pull_request] + +jobs: + sanity-checks: + runs-on: ubuntu-latest + container: hirosystems/clarinet:latest + steps: + - uses: actions/checkout@v4 + - name: Check Clarity contracts check + run: clarinet check --use-on-disk-deployment-plan + - name: Check Clarity contracts format + run: clarinet format --check +``` + +## Análisis de tiempo de ejecución + +La consola de Clarinet proporciona potentes herramientas de análisis en tiempo de ejecución que le permiten inspeccionar el comportamiento del contrato durante la ejecución. + +### **Análisis de costos con `::toggle_costs`** + +Habilitar la visualización automática del costo después de cada expresión: + +```terminal +$ clarinet console +$ ::toggle_costs +Always show costs: true +$ (contract-call? .counter count-up) ++----------------------+----------+------------+------------+ +| | Consumed | Limit | Percentage | +|----------------------+----------+------------+------------| +| Runtime | 4775 | 5000000000 | 0.00 % | +|----------------------+----------+------------+------------| +| Read count | 5 | 15000 | 0.03 % | +|----------------------+----------+------------+------------| +| Read length (bytes) | 268 | 100000000 | 0.00 % | +|----------------------+----------+------------+------------| +| Write count | 1 | 15000 | 0.01 % | +|----------------------+----------+------------+------------| +| Write length (bytes) | 41 | 15000000 | 0.00 % | ++----------------------+----------+------------+------------+ +(ok true) +``` + +### **Trazado de ejecución con `::trace`** + +Rastree las llamadas de función para comprender el flujo de ejecución: + +```terminal +$ ::trace (contract-call? .defi-pool swap u100 'token-a 'token-b) +(contract-call? .defi-pool swap u100 'token-a 'token-b)  +( get-pool-balance 'token-a ) defi-pool:15:8 + ↳ args: 'token-a + u50000 +( get-pool-balance 'token-b ) defi-pool:16:8 + ↳ args: 'token-b + u75000 +( calculate-output u100 u50000 u75000 ) defi-pool:18:12 + ↳ args: u100, u50000, u75000 + u149 +(ok u149) +``` + +### **Depuración interactiva con `::debug`** + +Establece puntos de interrupción y avanza paso a paso por la ejecución: + +```terminal +$ ::debug (contract-call? .complex-contract process-batch) +$ break validate-input +Breakpoint set at validate-input +$ continue +Hit breakpoint at validate-input:23 +``` + +Comandos de navegación de depuración: + +* `step` o `s` - Entrar en sub-expresiones +* `finish` o `f` - Completar la expresión actual +* `next` o `n` - Pasar por encima de sub-expresiones +* `continue` o `c` - Continuar hasta el siguiente punto de interrupción + +### **Usando `::get_costs` para analizar los costos de funciones específicas** + +```terminal +$ ::get_costs (contract-call? .defi-pool add-liquidity u1000 u1000) ++----------------------+----------+------------+------------+ +| | Consumed | Limit | Percentage | +|----------------------+----------+------------+------------| +| Runtime | 12250 | 5000000000 | 0.00 % | +|----------------------+----------+------------+------------| +| Read count | 6 | 15000 | 0.04 % | +|----------------------+----------+------------+------------| +| Read length (bytes) | 192 | 100000000 | 0.00 % | +|----------------------+----------+------------+------------| +| Write count | 3 | 15000 | 0.02 % | +|----------------------+----------+------------+------------| +| Write length (bytes) | 96 | 15000000 | 0.00 % | ++----------------------+----------+------------+------------+ +(ok {lp-tokens: u1000}) +``` + +### **Identificando y optimizando operaciones costosas utilizando `::trace`** + +```terminal +$ ::trace (contract-call? .complex-algo process-large-dataset) +``` + +Buscar: + +* Bucles con altos conteos de iteración +* Operaciones anidadas de mapeo/filtrado +* Llamadas repetidas a contratos +* Manipulaciones de estructuras de datos grandes + +## Flujos de trabajo de depuración + +Domina la depuración interactiva para identificar problemas rápidamente iniciando una sesión de depuración: + +```terminal +$ clarinet console +$ ::debug (contract-call? .counter count-up) +ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.counter:9:3 + 6 + 7 ;; Increment the count for the caller + 8 (define-public (count-up) +-> 9 (ok (map-set counters tx-sender (+ (get-count tx-sender) u1))) + ^ + 10 ) + 11 + 12 ;; Get the current count for a user +(debug) +$ continue +``` + +### **Analizando transacciones fallidas usando `::trace`** + +```terminal +$ ::trace (contract-call? .marketplace purchase u999) +(contract-call? .marketplace purchase u999)  +( get-listing u999 ) marketplace:45:12 + ↳ args: u999 + none +(err u404) # Listing not found +``` + +### **Usando `::encode` y `::decode` para inspección de datos** + +Depurar estructuras de datos complejas: + +```terminal +$ ::encode { id: u1, active: true } +0c0000000206616374697665030269640100000000000000000000000000000001 +$ ::decode 0d0000000b48656c6c6f20776f726c64 +"Hello world" +``` + +### **Probando la lógica dependiente del tiempo** + +```terminal +$ ::get_block_height +Current block height: 4 +$ ::advance_chain_tip 100 +new burn height: 3 +new stacks height: 104 +$ (contract-call? .vesting claim) +(ok {claimed: u2500, remaining: u7500}) +``` + +## Próximos pasos + +:::next-steps +* [Despliegue](/tools/clarinet/deployment): Aprende cómo desplegar tu proyecto de Clarinet. +* [SDK de Clarinet](/tools/clarinet/sdk-introduction): Aprende cómo usar el SDK de Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx new file mode 100644 index 000000000..d162cd38b --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx @@ -0,0 +1,118 @@ +--- +title: Referencia del SDK de navegador JS de Clarinet +sidebarTitle: Referencia del SDK del navegador +description: Utilice el SDK de Clarinet directamente en entornos de navegador +isNew: true +--- +El SDK de Clarinet se puede utilizar para interactuar con la simnet directamente desde navegadores web, permitiendo pruebas y simulaciones de contratos inteligentes de Clarity sin un backend o entorno de Node.js. + +## Instalación + +```package-install +@hirosystems/clarinet-sdk-browser +``` + +## Uso + +El SDK del navegador implementa la misma API que el Node.js [SDK de Clarinet](/tools/clarinet/sdk-reference). Todos los métodos, propiedades y comparadores personalizados funcionan de manera idéntica. + +### Sesión vacía + +Para pruebas rápidas y experimentación sin un proyecto de Clarinet: + +```ts +import { initSimnet } from '@hirosystems/clarinet-sdk-browser'; + +const simnet = await initSimnet(); +await simnet.initEmptySession(); + +// Execute Clarity code directly +const result = simnet.runSnippet("(+ 1 2)"); +console.log(result); // 3 +``` + +### Con un proyecto de Clarinet + +Para probar con un proyecto Clarinet existente utilizando un sistema de archivos virtual: + +```ts +import { initSimnet } from '@hirosystems/clarinet-sdk-browser'; + +const simnet = await initSimnet(); +await simnet.initSession("/project", "Clarinet.toml"); + +// Your contracts are now available +const count = simnet.getDataVar('counter', 'count'); +``` + +:::callout +### Sistema de archivos virtual + +El uso de un proyecto Clarinet en el navegador requiere configurar un sistema de archivos virtual. La documentación y ejemplos para este caso de uso avanzado estarán disponibles próximamente. +::: + +## Casos de uso comunes + +### Área de juego interactiva de contratos + +```ts +import { initSimnet } from '@hirosystems/clarinet-sdk-browser'; +import { Cl } from '@stacks/transactions'; + +// Initialize simnet +const simnet = await initSimnet(); +await simnet.initEmptySession(); + +// Deploy a simple contract +const sourceCode = ` +(define-data-var counter uint u0) + +(define-public (increment) + (ok (var-set counter (+ (var-get counter) u1)))) + +(define-read-only (get-counter) + (ok (var-get counter))) +`; + +simnet.deployContract('counter', sourceCode, null, simnet.deployer); + +// Interact with the contract +simnet.callPublicFn('counter', 'increment', [], simnet.deployer); +const count = simnet.callReadOnlyFn('counter', 'get-counter', [], simnet.deployer); +console.log(count.result); // (ok u1) +``` + +### Pruebas en IDEs basados en navegador + +```ts +import { initSimnet } from '@hirosystems/clarinet-sdk-browser'; +import { expect } from 'vitest'; + +const simnet = await initSimnet(); +await simnet.initEmptySession(); + +// Run tests directly in the browser +test('counter increments correctly', () => { + simnet.deployContract('counter', counterCode, null, simnet.deployer); + + const result = simnet.callPublicFn('counter', 'increment', [], simnet.deployer); + expect(result.result).toBeOk(Cl.uint(1)); + + const count = simnet.getDataVar('counter', 'counter'); + expect(count).toBeUint(1); +}); +``` + +## Compatibilidad del navegador + +El SDK del navegador funciona en todos los navegadores modernos que admiten: + +* ES2020+ JavaScript features +* WebAssembly +* Importaciones dinámicas + +Los navegadores probados incluyen: + +* Chrome/Edge 90+ +* Firefox 89+ +* Safari 15+ diff --git a/content/docs/es/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx new file mode 100644 index 000000000..70cfe6dba --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx @@ -0,0 +1,218 @@ +--- +title: Escribiendo pruebas de integración +sidebarTitle: Pruebas de integración +description: Las pruebas de integración son un paso crucial en el desarrollo de contratos inteligentes que implica probar cómo funcionan juntos los diferentes componentes de su sistema. El SDK de Clarinet JS proporciona herramientas poderosas para escribir y ejecutar pruebas de integración, permitiéndole simular escenarios complejos e interacciones entre múltiples contratos. +--- +import { ArrowRight, Check } from 'lucide-react'; + +## Lo que aprenderás + +:::objectives +* Configurar pruebas de integración para flujos de trabajo de múltiples pasos +* Probando interacciones y dependencias de contratos +* Simular escenarios del mundo real +* Verificar cambios de estado en todo el sistema +::: + +## Configura tu proyecto + +Crea un nuevo proyecto de Clarinet e instala las dependencias: + +```terminal +$ clarinet new stx-defi +$ cd stx-defi +$ npm install +``` + +## Crear el contrato mejorado + +Utilizaremos un contrato DeFi mejorado que admite tanto depósitos como préstamos. Cree el contrato: + +```terminal +$ clarinet contract new defi +``` + +Reemplazar `contracts/defi.clar` con esta versión mejorada: + +```clarity contracts/defi.clar +;; Error constants +(define-constant err-overborrow (err u300)) + +;; Interest rate (10%) +(define-data-var loan-interest-rate uint u10) + +;; Total deposits in the contract +(define-data-var total-deposits uint u0) + +;; User deposits +(define-map deposits { owner: principal } { amount: uint }) + +;; User loans +(define-map loans principal { amount: uint, last-interaction-block: uint }) + +;; Deposit STX into the contract +(define-public (deposit (amount uint)) + (let + ( + (current-balance (default-to u0 (get amount (map-get? deposits { owner: tx-sender })))) + ) + (try! (stx-transfer? amount tx-sender (as-contract tx-sender))) + (map-set deposits { owner: tx-sender } { amount: (+ current-balance amount) }) + (var-set total-deposits (+ (var-get total-deposits) amount)) + (ok true) + ) +) + +;; Borrow STX based on deposits (up to 50% of deposit) +(define-public (borrow (amount uint)) + (let + ( + (user-deposit (default-to u0 (get amount (map-get? deposits { owner: tx-sender })))) + (allowed-borrow (/ user-deposit u2)) + (current-loan-details (default-to { amount: u0, last-interaction-block: u0 } + (map-get? loans tx-sender))) + (accrued-interest (calculate-accrued-interest + (get amount current-loan-details) + (get last-interaction-block current-loan-details))) + (total-due (+ (get amount current-loan-details) (unwrap-panic accrued-interest))) + (new-loan (+ amount)) + ) + (asserts! (<= new-loan allowed-borrow) err-overborrow) + (try! (as-contract (stx-transfer? amount tx-sender tx-sender))) + (map-set loans tx-sender { amount: new-loan, last-interaction-block: block-height }) + (ok true) + ) +) + +;; Get user's balance +(define-read-only (get-balance-by-sender) + (ok (map-get? deposits { owner: tx-sender })) +) + +;; Get amount owed including interest +(define-read-only (get-amount-owed) + (let + ( + (current-loan-details (default-to { amount: u0, last-interaction-block: u0 } + (map-get? loans tx-sender))) + (accrued-interest (calculate-accrued-interest + (get amount current-loan-details) + (get last-interaction-block current-loan-details))) + (total-due (+ (get amount current-loan-details) (unwrap-panic accrued-interest))) + ) + (ok total-due) + ) +) + +;; Calculate interest +(define-private (calculate-accrued-interest (principal uint) (start-block uint)) + (let + ( + (elapsed-blocks (- block-height start-block)) + (interest (/ (* principal (var-get loan-interest-rate) elapsed-blocks) u10000)) + ) + (asserts! (not (is-eq start-block u0)) (ok u0)) + (ok interest) + ) +) +``` + +Correr `clarinet check` para asegurar que su contrato sea válido: + +```terminal +$ clarinet check +[32m✔ 1 contract checked[0m +``` + +## Escribir pruebas de integración + +Crea una prueba que simule un flujo de trabajo completo del usuario - depositar y luego pedir prestado: + +```typescript tests/defi.test.ts +import { describe, it, expect } from 'vitest'; +import { Cl } from '@stacks/transactions'; + +const accounts = simnet.getAccounts(); +const wallet1 = accounts.get('wallet_1')!; + +describe('stx-defi integration', () => { + it('allows deposit and borrow workflow', () => { + // Step 1: User deposits STX + const depositResult = simnet.callPublicFn( + 'defi', + 'deposit', + [Cl.uint(1000)], + wallet1 + ); + expect(depositResult.result).toBeOk(Cl.bool(true)); + + // Verify deposit was recorded + const totalDeposits = simnet.getDataVar('defi', 'total-deposits'); + expect(totalDeposits).toBeUint(1000); + + // Step 2: User borrows against deposit + const borrowResult = simnet.callPublicFn( + 'defi', + 'borrow', + [Cl.uint(400)], // Borrowing 40% of deposit + wallet1 + ); + expect(borrowResult.result).toBeOk(Cl.bool(true)); + + // Step 3: Check amount owed + const { result } = simnet.callReadOnlyFn( + 'defi', + 'get-amount-owed', + [], + wallet1 + ); + expect(result).toBeOk(Cl.uint(400)); // No interest yet at same block + }); + + it('prevents over-borrowing', () => { + // Setup: deposit first + simnet.callPublicFn('defi', 'deposit', [Cl.uint(1000)], wallet1); + + // Attempt to borrow more than allowed (>50%) + const borrowResult = simnet.callPublicFn( + 'defi', + 'borrow', + [Cl.uint(600)], + wallet1 + ); + + // Should fail with err-overborrow + expect(borrowResult.result).toBeErr(Cl.uint(300)); + }); +}); +``` + +En esta prueba de integración, estamos simulando un escenario donde un usuario deposita STX en el contrato DeFi y luego pide un préstamo contra ese depósito. Analicemos los aspectos clave: + +* **`callPublicFn`** - Simula la llamada a funciones públicas tal como en la cadena de bloques real +* **`getDataVar`** - Recupera el valor de las variables de datos del contrato +* **`callReadOnlyFn`** - Llama a funciones de solo lectura sin modificar el estado +* **Comparadores personalizados** - `toBeOk()` y `toBeErr()` validar tipos de respuesta de Clarity + +## Pruébalo + +Ejecute sus pruebas de integración: + +```terminal +$ npm run test +``` + +## Problemas comunes + +| Problema | Solución | +|-------|----------| +| Contaminación del estado entre pruebas | Cada prueba se ejecuta de forma aislada - el estado no se transfiere | +| Problemas de sincronización | Usar `simnet.mineEmptyBlocks()` para avanzar la altura del bloque | +| Afirmaciones complejas | Desglosar en pruebas más pequeñas y enfocadas | + +## Próximos pasos + +:::next-steps +* [Referencia del SDK](/tools/clarinet/sdk-reference): Aprende más sobre el SDK de Clarinet JS. +* [Integración de Stacks.js](/tools/clarinet/stacks-js-integration): Aprende cómo integrar Stacks.js con tu proyecto de Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx new file mode 100644 index 000000000..273a16d0b --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx @@ -0,0 +1,132 @@ +--- +title: Pruebas con datos de la red principal +sidebarTitle: Simulación de ejecución de la red principal +description: Mainnet Execution Simulation (MXS) te permite probar tus contratos inteligentes de Clarity utilizando datos y estados reales de la red principal de Stacks. Esta poderosa función ayuda a garantizar que tus contratos se comporten como se espera en un entorno en vivo. +--- +:::objectives +* Configurando MXS en tu proyecto de Clarinet +* Escribiendo pruebas que interactúan con contratos de la red principal +* Simulando transacciones históricas +* Entendiendo las limitaciones de MXS +::: + +## ¿Qué es la simulación de ejecución de Mainnet? + +Probar contratos inteligentes en condiciones realistas es esencial. Simnet ofrece un entorno aislado pero carece de la complejidad y el historial de la red principal de Stacks en vivo. + +MXS llena este vacío al permitir pruebas unitarias con el SDK de Clarinet JS y Vitest para simular el estado de la red principal de Stacks en una altura de bloque específica. Esto te permite: + +* **Validar la lógica del contrato con datos reales:** Prueba directamente contratos o datos de la red principal dentro de tus pruebas. +* **(Re)simular transacciones:** Analiza los resultados, la ejecución o los costos de las transacciones de la red principal sin implementar ni usar STX reales. + +## Habilitar MXS en su proyecto + +Agregue la siguiente configuración a su `Clarinet.toml` archivo: + +```toml Clarinet.toml +[repl.remote_data] +# Enable mainnet execution simulation +enabled = true +# Specify the Stacks block height to fork from +initial_height = 522000 +# API URL (optional, defaults to https://api.hiro.so) +api_url = 'https://api.hiro.so' +``` + +:::callout +type: tip + +### Consejo profesional + +Estableciendo un específico `initial_height` garantiza resultados de pruebas consistentes y reproducibles. +::: + +## Uso de direcciones de mainnet + +Cuando se prueban contratos que verifican o requieren direcciones de la red principal, establezca `use_mainnet_wallets = true`. Esto permite que tus pruebas de simnet utilicen direcciones de mainnet (SP/SM) en lugar de direcciones de testnet (ST). + +```toml Clarinet.toml +[repl.remote_data] +enabled = true +initial_height = 522000 +use_mainnet_wallets = true # !mark +``` + +Esto es particularmente útil cuando: + +* Pruebas contra contratos exclusivos de mainnet como protocolos DEX +* Su contrato incluye [`(is-standard standard-or-contract-principal)`](/resources/clarity/reference/functions#is-standard) validación +* Simulando transacciones que requieren formatos de dirección de mainnet + +## Configurar el acceso a la API + +Aunque MXS funciona sin una clave de API, es posible que encuentre límites de velocidad. Configure una clave de API para un acceso confiable: + +```terminal +$ export HIRO_API_KEY="" +``` + +## Escribir pruebas con datos de la red principal + +Una vez que MXS está habilitado, tus pruebas operan automáticamente contra la instantánea del estado de la red principal. Aquí tienes un ejemplo de prueba contra la red principal `pox-4` contrato: + +```ts tests/pox-4.test.ts +import { describe, it, expect } from "vitest"; +import { Cl } from "@stacks/transactions"; + +const accounts = simnet.getAccounts(); +const deployer = accounts.get("deployer")!; + +describe("pox-4 mainnet interaction", () => { + it("reads current reward cycle from mainnet", () => { + // Call the mainnet pox-4 contract + const call = simnet.callReadOnlyFn( + "SP000000000000000000002Q6VF78.pox-4", // Mainnet contract + "current-pox-reward-cycle", + [], + deployer + ); + + // Assert the result (adjust based on your initial_height) + expect(call.result).toBeUint(109); + + console.log("Current POX reward cycle:", Cl.prettyPrint(call.result)); + }); +}); +``` + +La prueba utiliza `simnet.callReadOnlyFn` al igual que en las pruebas unitarias estándar, pero debido a que MXS está habilitado, se dirige al real `pox-4` estado del contrato en la altura de bloque especificada. + +## Pruébalo + +Ejecuta tu prueba para ver MXS en acción: + +```terminal +$ npm run test +``` + +## Problemas comunes + +| Problema | Solución | +|----------|----------| +| Errores de límite de tasa | Configurar `HIRO_API_KEY` variable de entorno | +| Resultados inconsistentes | Corregir `initial_height` en configuración | +| Función no encontrada | Verifique que el contrato exista en su altura de bloque | + +## Probando en el área de pruebas + +Experimente rápidamente con MXS sin configurar un proyecto: + +1. Visitar [https://play.hiro.so/?remote\_data=true](https://play.hiro.so/?remote_data=true) +2. Ejecutar llamadas de contrato en la red principal: + +```terminal +$ contract-call? 'SP000000000000000000002Q6VF78.pox-4 current-pox-reward-cycle +``` + +## Próximos pasos + +:::next-steps +* [Integración del oráculo Pyth](/tools/clarinet/pyth-oracle-integration): Aprende cómo integrar el oráculo Pyth con tu proyecto Clarinet. +* [Integración de sBTC](/tools/clarinet/sbtc-integration): Aprende cómo integrar el sBTC con tu proyecto Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx new file mode 100644 index 000000000..a3f542a8d --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx @@ -0,0 +1,301 @@ +--- +title: SDK de JavaScript para Clarinet +sidebarTitle: Introducción +description: Guía práctica para probar contratos inteligentes con el SDK JS de Clarinet +type: concept +--- +import { File, Folder, Files } from 'fumadocs-ui/components/files'; + +El SDK de Clarinet JS proporciona un potente marco de pruebas para contratos inteligentes de Clarity. Se integra perfectamente con Vitest para permitir pruebas exhaustivas de la lógica de tu contrato en un entorno simulado. + +## Configuración inicial + +Comience creando un nuevo proyecto de Node.js o utilizando uno existente: + +```package-install +$ init -y +``` + +Instale el SDK de Clarinet JS y las dependencias requeridas: + +```package-install +@hirosystems/clarinet-sdk vitest @stacks/transactions +``` + +## Estructura del proyecto + +Crea la siguiente estructura para tus pruebas de contratos inteligentes: + + + + + + + + + + + + + + + + + + + + + +## Prueba simple + +Crea un archivo de prueba simple para verificar que tu contrato funciona: + +```ts tests/counter.test.ts +import { describe, expect, it } from "vitest"; +import { Cl } from "@stacks/transactions"; + +const accounts = simnet.getAccounts(); +const wallet = accounts.get("wallet_1")!; + +describe("counter contract", () => { + it("increments the count", () => { + const countUpCall = simnet.callPublicFn("counter", "count-up", [], wallet); + expect(countUpCall.result).toBeOk(Cl.bool(true)); + }); +}); +``` + +El `simnet` El objeto está disponible automáticamente en tus pruebas y proporciona un entorno simulado de la cadena de bloques de Stacks. + +## Opciones de configuración + +### Configuración de Clarinet + +Crear un `Clarinet.toml` archivo para definir tus contratos: + +```toml Clarinet.toml +[project] +name = "my-project" + +[contracts.counter] +path = "contracts/counter.clar" +``` + +### Configuración de TypeScript + +Configurar TypeScript para el SDK: + +```json tsconfig.json +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "node", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "types": ["vitest/globals"] + }, + "include": ["tests/**/*.ts"], + "exclude": ["node_modules"] +} +``` + +### Configuración de Vitest + +Configura Vitest para que funcione con el SDK: + +```js vitest.config.js +import { defineConfig } from "vitest/config"; +import { vitestSetupFilePath } from "@hirosystems/clarinet-sdk/vitest"; + +export default defineConfig({ + test: { + environment: "node", + globals: true, + setupFiles: [vitestSetupFilePath], + }, +}); +``` + +:::callout +type: warn + +### Importante + +El `vitestSetupFilePath` debe ser incluido en su `setupFiles` matriz para que el SDK funcione correctamente. +::: + +### Scripts de paquete + +Añade scripts de prueba a tu `package.json`: + +```json package.json +"scripts": { + "test": "vitest run", + "test:watch": "vitest", + "test:coverage": "vitest run --coverage" +} +``` + +## Patrones comunes + +### Probando funciones de solo lectura + +Cuando se prueban funciones que no modifican el estado, use `callReadOnlyFn`: + +```ts +const getCountCall = simnet.callReadOnlyFn( + "counter", + "get-count", + [Cl.principal(wallet)], + wallet +); +expect(getCountCall.result).toBeUint(1); +``` + +### Probando funciones públicas con parámetros + +Pasa parámetros utilizando los ayudantes de tipo Clarity apropiados: + +```ts +const depositCall = simnet.callPublicFn( + "defi", + "deposit", + [Cl.uint(1000)], // Convert JS number to Clarity uint + wallet +); +expect(depositCall.result).toBeOk(Cl.bool(true)); +``` + +### Accediendo al estado del contrato + +Verificar variables de datos y mapas directamente: + +```ts +// Get a data variable +const totalDeposits = simnet.getDataVar("defi", "total-deposits"); +expect(totalDeposits).toBeUint(1000); + +// Get a map entry +const balance = simnet.getMapEntry("defi", "balances", Cl.principal(wallet)); +expect(balance).toBeUint(1000); +``` + +## Ejemplos + +### Probando el despliegue de contratos + +Asegúrese de que su contrato esté correctamente desplegado antes de probar sus funciones: + +```ts +it("ensures the contract is deployed", () => { + const contractSource = simnet.getContractSource("counter"); + expect(contractSource).toBeDefined(); +}); +``` + +### Probando condiciones de error + +Verifique que su contrato maneje los errores correctamente: + +```ts +it("fails when borrowing too much", () => { + const borrowCall = simnet.callPublicFn( + "defi", + "borrow", + [Cl.uint(10000)], // Amount exceeds allowed + wallet + ); + expect(borrowCall.result).toBeErr(Cl.uint(300)); // err-overborrow +}); +``` + +### Pruebas con múltiples cuentas + +Simular interacciones entre diferentes usuarios: + +```ts +const wallet1 = accounts.get("wallet_1")!; +const wallet2 = accounts.get("wallet_2")!; + +// Wallet 1 deposits +simnet.callPublicFn("defi", "deposit", [Cl.uint(1000)], wallet1); + +// Wallet 2 tries to withdraw wallet 1's funds (should fail) +const withdrawCall = simnet.callPublicFn( + "defi", + "withdraw", + [Cl.uint(1000)], + wallet2 +); +expect(withdrawCall.result).toBeErr(Cl.uint(401)); // err-unauthorized +``` + +## Ejecutando pruebas + +Ejecute su conjunto de pruebas: + +```terminal +$ npm test +``` + +Generar informes de cobertura: + +```terminal +$ npm run test:coverage +``` + +Esto crea un análisis detallado de cobertura y costos para las funciones de tu contrato. + +## Uso avanzado + +### Uso del SDK en proyectos existentes + +Si tienes un proyecto existente de JavaScript/TypeScript con una estructura personalizada, aún puedes utilizar el SDK: + + + + + + + + + + + + + + + + + + + + + + + + + +Especifique la ubicación de Clarinet.toml en su configuración de Vitest: + +```js vitest.config.js +export default defineConfig({ + test: { + environment: "node", + globals: true, + setupFiles: [vitestSetupFilePath], + env: { + CLARINET_MANIFEST_PATH: "./blockchain/Clarinet.toml" + } + }, +}); +``` + +## Próximos pasos + +:::next-steps +* [Pruebas unitarias](/tools/clarinet/unit-testing): Aprende cómo probar tu contrato con pruebas unitarias. +* [Referencia del SDK](/tools/clarinet/sdk-reference): Aprende más sobre el SDK de JS de Clarinet. +::: diff --git a/content/docs/es/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx new file mode 100644 index 000000000..11998a550 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx @@ -0,0 +1,617 @@ +--- +title: Referencia del SDK de Clarinet JS +sidebarTitle: Referencia del SDK +isNew: true +--- +El SDK de Clarinet JS proporciona una suite completa de métodos para probar e interactuar con contratos inteligentes de Clarity. Desde la inicialización del simnet hasta el despliegue de contratos, el SDK simplifica todo tu flujo de trabajo de pruebas. + +* Inicializar una red simulada: [`initSimnet`](#initSimnet) +* Gestionar el estado del contrato: [`getDataVar`](#getDataVar), [`getMapEntry`](#getMapEntry) +* Llamar a funciones de contrato: [`callReadOnlyFn`](#callReadOnlyFn), [`callPublicFn`](#callPublicFn) +* Transferir STX: [`transferSTX`](#transferSTX) +* Desplegar contratos: [`deployContract`](#deployContract) +* Mina bloques: [`mineBlock`](#mineBlock), [`mineEmptyBlock`](#mineEmptyBlock) +* Aserciones personalizadas: [`toBeOk`](#toBeOk), [`toBeErr`](#toBeErr) + +## Instalación + +```package-install +@hirosystems/clarinet-sdk +``` + +## Inicializar red simulada \[#initalize-simnet] + +### iniciarSimnet + +`initSimnet` inicializa una red simulada para probar tus contratos inteligentes. + +**Uso** + +```console +initSimnet(manifestPath?: string): Promise +``` + +```ts -c +import { initSimnet } from '@hirosystems/clarinet-sdk'; + +const simnet = await initSimnet(); +``` + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `manifestPath` | `string` | Ruta opcional al archivo de manifiesto Clarinet.toml | + +## Propiedades de Simnet \[#properties] + +### altura del bloque \[#blockHeight] + +Devuelve la altura actual del bloque de simnet. + +```ts -c +const currentBlockHeight = simnet.blockHeight; +// Returns: 1 +``` + +### desplegador \[#deployer] + +Devuelve la dirección del deployer predeterminado según se define en el archivo del proyecto. + +```ts -c +const deployerAddress = simnet.deployer; +// Returns: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM +``` + +También puedes actualizar el deployer: + +```ts -c +simnet.deployer = 'ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5'; +``` + +### épocaActual \[#épocaActual] + +Devuelve la época actual de simnet (por ejemplo, 2.5 para Stacks 2.5). + +```ts -c +const epoch = simnet.currentEpoch; +// Returns: 2.5 +``` + +## Gestión de cuenta \[#account-management] + +### getAccounts \[#getAccounts] + +`getAccounts` recupera todas las direcciones de Stacks configuradas, incluyendo billeteras, implementadores y faucets. + +**Uso** + +```console +getAccounts(): Map +``` + +```ts -c +const accounts = simnet.getAccounts(); +const wallet1 = accounts.get('wallet_1')!; +// Returns: ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 +``` + +## Saldos de activos \[#asset-balances] + +### getAssetsMap \[#getAssetsMap] + +`getAssetsMap` recupera los saldos de activos para todas las direcciones, incluyendo STX, tokens fungibles y no fungibles. + +**Uso** + +```console +getAssetsMap(): Map> +``` + +```ts -c +const assets = simnet.getAssetsMap(); +const stxBalances = assets.get('STX')!; +const deployerBalance = stxBalances.get(simnet.deployer)!; +// Returns: 100000000000000n +``` + +## Leer el estado del contrato \[#state-reading] + +### getDataVar \[#getDataVar] + +`getDataVar` recupera el valor de una variable de datos de un contrato. + +**Uso** + +```console +getDataVar(contract: string, dataVar: string): ClarityValue +``` + +```ts -c +const count = simnet.getDataVar('counter', 'count'); +// Returns: { type: 1, value: 1n } +``` + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `contract` | `string` | Identificador del contrato | +| `dataVar` | `string` | Nombre de la variable de datos | + +### getMapEntry \[#getMapEntry] + +`getMapEntry` recupera un valor de un mapa de contrato por su clave. + +**Uso** + +```console +getMapEntry(contract: string, mapName: string, mapKey: ClarityValue): ClarityValue +``` + +```ts -c +import { Cl } from '@stacks/transactions'; + +const hasParticipated = simnet.getMapEntry( + "pool", + "Participants", + Cl.standardPrincipal(wallet) +); +// Returns: { type: 10, value: { type: 3 } } +``` + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `contract` | `string` | Identificador del contrato | +| `mapName` | `string` | Nombre del mapa | +| `mapKey` | `ClarityValue` | Clave para buscar | + +## Llamar a funciones de contrato \[#function-calls] + +### callReadOnlyFn \[#callReadOnlyFn] + +`callReadOnlyFn` llama a funciones de solo lectura sin minar un bloque. + +**Uso** + +```console +callReadOnlyFn( + contract: string, + method: string, + args: ClarityValue[], + sender: string +): ParsedTransactionResult +``` + +```ts -c +import { Cl } from '@stacks/transactions'; + +const result = simnet.callReadOnlyFn( + 'pool', + 'get-contribution-amount', + [Cl.standardPrincipal(wallet)], + wallet +); +// Returns: { result: { type: 1, value: 42000000n }, events: [] } +``` + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `contract` | `string` | Identificador del contrato | +| `method` | `string` | Nombre de la función | +| `args` | `ClarityValue[]` | Argumentos de función | +| `sender` | `string` | Dirección del remitente | + +### callPublicFn \[#callPublicFn] + +`callPublicFn` llama a funciones públicas y mina un bloque. + +**Uso** + +```console +callPublicFn( + contract: string, + method: string, + args: ClarityValue[], + sender: string +): ParsedTransactionResult +``` + +```ts -c +import { Cl } from '@stacks/transactions'; + +const result = simnet.callPublicFn( + 'pool', + 'register-participant', + [Cl.standardPrincipal(wallet)], + wallet +); +// Mines block and returns result +``` + +### callPrivateFn \[#callPrivateFn] + +`callPrivateFn` llama a funciones privadas (solo para pruebas) y mina un bloque. + +**Uso** + +```console +callPrivateFn( + contract: string, + method: string, + args: ClarityValue[], + sender: string +): ParsedTransactionResult +``` + +```ts -c +const result = simnet.callPrivateFn( + "pool", + "reward-participant-points", + [Cl.standardPrincipal(address1)], + wallet +); +``` + +## Transferir STX \[#transferSTX] + +`transferSTX` transfiere STX entre direcciones y mina un bloque. + +**Uso** + +```console +transferSTX( + amount: number | bigint, + recipient: string, + sender: string +): ParsedTransactionResult +``` + +```ts -c +const transfer = simnet.transferSTX( + 42000000, // 42 STX in microSTX + recipient, + simnet.deployer +); +// Returns transaction result with transfer event +``` + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `amount` | `number \| bigint` | Cantidad en microSTX | +| `recipient` | `string` | Dirección del destinatario | +| `sender` | `string` | Dirección del remitente | + +## Desplegar contratos \[#deployContract] + +`deployContract` despliega un nuevo contrato en simnet y mina un bloque. + +**Uso** + +```console +deployContract( + name: string, + content: string, + options: DeployContractOptions | null, + sender: string +): ParsedTransactionResult +``` + +```ts -c +const sourceCode = '(define-read-only (say-hi) (ok "Hello World"))'; + +const contract = simnet.deployContract( + 'hello-world', + sourceCode, + { clarityVersion: 2 }, + simnet.deployer +); +``` + +| Parámetro | Tipo | Descripción | +|-----------|------|-------------| +| `name` | `string` | Nombre del contrato | +| `content` | `string` | Código fuente de Clarity | +| `options` | `object \| null` | Opciones de implementación | +| `sender` | `string` | Dirección del implementador | + +## Minería de bloques \[#block-mining] + +### minarBloque \[#mineBlock] + +`mineBlock` mina un bloque con múltiples transacciones. + +**Uso** + +```console +mineBlock(txs: Tx[]): ParsedTransactionResult[] +``` + +```ts -c +import { tx } from '@hirosystems/clarinet-sdk'; +import { Cl } from '@stacks/transactions'; + +const block = simnet.mineBlock([ + tx.callPublicFn("counter", "increment", [], simnet.deployer), + tx.transferSTX(19000000, wallet, simnet.deployer), +]); +``` + +### minarBloqueVacío \[#mineEmptyBlock] + +`mineEmptyBlock` mina un bloque vacío y aumenta la altura del bloque. + +**Uso** + +```console +mineEmptyBlock(): number +``` + +```ts -c +simnet.mineEmptyBlock(); +const newHeight = simnet.blockHeight; +// Returns: 2 +``` + +### minarBloquesVacíos \[#mineEmptyBlocks] + +`mineEmptyBlocks` mina múltiples bloques vacíos. + +**Uso** + +```console +mineEmptyBlocks(count?: number): number +``` + +```ts -c +simnet.mineEmptyBlocks(5); +const newHeight = simnet.blockHeight; +// Returns: 6 +``` + +## Métodos de utilidad \[#utility-methods] + +### ejecutarFragmento \[#ejecutarFragmento] + +`runSnippet` ejecuta código Clarity arbitrario sin desplegar. + +**Uso** + +```console +runSnippet(snippet: string): string | ClarityValue +``` + +```ts -c +const result = simnet.runSnippet('(stx-account tx-sender)'); +// Returns account balance information +``` + +### getContractsInterfaces \[#getContractsInterfaces] + +`getContractsInterfaces` devuelve interfaces de contrato con firmas de funciones y almacenamiento. + +**Uso** + +```console +getContractsInterfaces(): Map +``` + +```ts -c +const interfaces = simnet.getContractsInterfaces(); +const poolInterface = interfaces.get(`${simnet.deployer}.pool`); +// Returns contract interface with functions, maps, variables +``` + +### getContractSource \[#getContractSource] + +`getContractSource` recupera el código fuente de un contrato implementado. + +**Uso** + +```console +getContractSource(contract: string): string | undefined +``` + +```ts -c +const source = simnet.getContractSource('pool'); +// Returns Clarity source code as string +``` + +### getContractAST \[#getContractAST] + +`getContractAST` devuelve el Árbol de Sintaxis Abstracta de un contrato. + +**Uso** + +```console +getContractAST(contractId: string): ContractAST +``` + +```ts -c +const ast = simnet.getContractAST('pool'); +// Returns parsed AST structure +``` + +## Comparadores personalizados \[#custom-matchers] + +El SDK proporciona comparadores de Vitest para aserciones de valores de Clarity. + +### Comparadores de respuesta \[#response-matchers] + +#### toBeOk \[#toBeOk] + +Afirma que una respuesta es `(ok )`. + +```ts +expect(result).toBeOk(Cl.uint(1)); +``` + +#### toBeErr \[#toBeErr] + +Afirma que una respuesta es `(err )`. + +```ts +expect(result).toBeErr(Cl.uint(500)); +``` + +#### toBeSome \[#toBeSome] + +Afirma que una respuesta es `(some )`. + +```ts +expect(result).toBeSome(Cl.bool(true)); +``` + +#### toBeNone \[#toBeNone] + +Afirma que una respuesta es `(none)`. + +```ts +expect(result).toBeNone(); +``` + +### Comparadores de valor \[#value-matchers] + +#### toBeBool \[#toBeBool] + +Afirma un valor booleano. + +```ts +expect(result).toBeBool(true); +``` + +#### toBeInt \[#toBeInt] + +Afirma un valor entero con signo. + +```ts +expect(result).toBeInt(1); // or 1n +``` + +#### toBeUint \[#toBeUint] + +Afirma un valor entero sin signo. + +```ts +expect(result).toBeUint(1); // or 1n +``` + +#### toBeAscii \[#toBeAscii] + +Afirma un valor de cadena ASCII. + +```ts +expect(result).toBeAscii('Hello World'); +``` + +#### toBeUtf8 \[#toBeUtf8] + +Afirma un valor string-utf8. + +```ts +expect(result).toBeUtf8('Hello World'); +``` + +#### serPrincipal \[#serPrincipal] + +Afirma un valor principal. + +```ts +expect(Cl.standardPrincipal(deployer)).toBePrincipal(deployer); +``` + +#### toBeBuff \[#toBeBuff] + +Afirma un valor de búfer. + +```ts +const buffer = Uint8Array.from([1, 2, 3, 4]); +expect(result).toBeBuff(buffer); +``` + +#### Lista de ser \[#toBeList] + +Afirma una lista de valores de Clarity. + +```ts +expect(result).toBeList([ + Cl.standardPrincipal('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM'), + Cl.standardPrincipal('ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5') +]); +``` + +#### toBeTupla \[#toBeTupla] + +Afirma un valor de tupla. + +```ts +expect(result).toBeTuple({ + enrollmentBlock: Cl.some(Cl.uint(1)), + contributionAmount: Cl.some(Cl.uint(19000000)) +}); +``` + +### Comprobación de tipos \[#type-checking] + +#### toTenerTipoDeClarity \[#toTenerTipoDeClarity] + +Comprueba que un valor tiene el tipo de Clarity esperado. + +```ts +expect(result).toHaveClarityType(ClarityType.ResponseOk); +``` + +### Comparadores de eventos \[#event-matchers] + +#### toContainEqual \[#toContainEqual] + +Afirma que un array de eventos contiene un evento específico. Esto es útil para verificar eventos de transacciones. + +```ts +// STX transfer event +expect(events).toContainEqual({ + event: "stx_transfer_event", + data: { + amount: "1000000", + memo: "", + recipient: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM", + sender: "ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5", + }, +}); + +// Fungible token transfer event +expect(events).toContainEqual({ + event: "ft_transfer_event", + data: { + amount: "1000", + asset_identifier: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.token::my-token", + recipient: recipientAddress, + sender: senderAddress, + }, +}); + +// NFT transfer event +expect(events).toContainEqual({ + event: "nft_transfer_event", + data: { + asset_identifier: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.nft::my-nft", + value: Cl.serialize(Cl.uint(1)), + recipient: newOwner, + sender: previousOwner, + }, +}); + +// Print event +expect(events).toContainEqual({ + event: "print_event", + data: { + contract_id: `${deployer}.my-contract`, + value: Cl.serialize(Cl.tuple({ message: Cl.stringAscii("Hello") })), + }, +}); + +// Check only specific properties with objectContaining +expect(events).toContainEqual({ + event: "stx_transfer_event", + data: expect.objectContaining({ + sender: senderAddress, + recipient: recipientAddress, + }), +}); +``` diff --git a/content/docs/es/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx new file mode 100644 index 000000000..212b86f78 --- /dev/null +++ b/content/docs/es/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx @@ -0,0 +1,217 @@ +--- +title: Escribiendo pruebas unitarias +sidebarTitle: Pruebas unitarias +description: El testing unitario es el proceso de probar componentes o funciones individuales de contratos inteligentes para asegurar que funcionen como se espera. El SDK de Clarinet JS proporciona un marco de pruebas que te permite escribir estas pruebas utilizando el framework de testing Vitest, ayudándote a detectar errores y fallos temprano en el proceso de desarrollo. +--- +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'; + +import { ArrowRight, Check } from 'lucide-react'; + +## Lo que aprenderás + +:::objectives +* Configurar un proyecto de Clarinet para pruebas unitarias +* Escribir pruebas unitarias para funciones públicas y de solo lectura +* Probar condiciones de error y casos límite +* Ejecutar pruebas y generar informes de cobertura +::: + +## Configura tu proyecto + +Comience creando un nuevo proyecto con la CLI de Clarinet. Este comando crea una estructura de proyecto con los archivos y carpetas necesarios, incluyendo el SDK JS de Clarinet ya configurado para pruebas: + +```terminal +$ clarinet new stx-defi +$ cd stx-defi +``` + +Después de cambiar al directorio de su proyecto, instale las dependencias del paquete: + +```terminal +$ npm install +``` + +## Crear el contrato + +Generar un nuevo archivo de contrato utilizando la CLI de Clarinet: + +```terminal +$ clarinet contract new defi +``` + +Reemplace el contenido de `contracts/defi.clar` con este contrato DeFi: + +```clarity contracts/defi.clar +;; Holds the total amount of deposits in the contract +(define-data-var total-deposits uint u0) + +;; Maps a user's principal address to their deposited amount +(define-map deposits { owner: principal } { amount: uint }) + +;; Public function for users to deposit STX into the contract +(define-public (deposit (amount uint)) + (let + ( + ;; Fetch the current balance or default to 0 if none exists + (current-balance (default-to u0 (get amount (map-get? deposits { owner: tx-sender })))) + ) + ;; Transfer the STX from sender to contract + (try! (stx-transfer? amount tx-sender (as-contract tx-sender))) + ;; Update the user's deposit amount in the map + (map-set deposits { owner: tx-sender } { amount: (+ current-balance amount) }) + ;; Update the total deposits variable + (var-set total-deposits (+ (var-get total-deposits) amount)) + ;; Return success + (ok true) + ) +) + +;; Read-only function to get the balance by tx-sender +(define-read-only (get-balance-by-sender) + (ok (map-get? deposits { owner: tx-sender })) +) +``` + +Correr `clarinet check` para garantizar que su contrato sea válido: + +```terminal +$ clarinet check +[32m✔ 1 contract checked[0m +``` + +## Escriba su prueba unitaria + +Las pruebas clave que queremos cubrir son que el depósito sea exitoso y que el saldo del usuario, así como los depósitos totales del contrato, se actualicen correctamente. + +Reemplace el contenido de `tests/defi.test.ts`: + +```typescript tests/defi.test.ts +import { describe, it, expect } from 'vitest'; +import { Cl } from '@stacks/transactions'; + +const accounts = simnet.getAccounts(); +const wallet1 = accounts.get('wallet_1')!; + +describe('stx-defi', () => { + it('allows users to deposit STX', () => { + // Define the amount to deposit + const amount = 1000; + + // Call the deposit function + const deposit = simnet.callPublicFn('defi', 'deposit', [Cl.uint(amount)], wallet1); + + // Assert the deposit was successful + expect(deposit.result).toBeOk(Cl.bool(true)); + + // Verify the contract's total deposits + const totalDeposits = simnet.getDataVar('defi', 'total-deposits'); + expect(totalDeposits).toBeUint(amount); + + // Check the user's balance + const balance = simnet.callReadOnlyFn('defi', 'get-balance-by-sender', [], wallet1); + expect(balance.result).toBeOk( + Cl.some( + Cl.tuple({ + amount: Cl.uint(amount), + }) + ) + ); + }); +}); +``` + +Analicemos las partes clave de esta prueba: + +* **`simnet.callPublicFn`** - Llama a una función pública en tu contrato +* **`expect().toBeOk()`** - Comparador personalizado que verifica la claridad `ok` respuesta +* **`simnet.getDataVar`** - Recupera el valor de una variable de datos +* **`Cl` ayudantes** - Crear valores de Clarity en JavaScript + +## Pruébalo + +Ejecuta tu prueba para verla en acción: + +```terminal +$ npm run test + PASS tests/defi.test.ts + stx-defi + allows users to deposit STX (5 ms) + +Test Files 1 passed (1) + Tests 1 passed (1) +``` + +## Problemas comunes + +| Problema | Solución | +|----------|----------| +| `toBeOk is not a function` | Asegúrese de estar utilizando los comparadores personalizados del SDK | +| `Contract not found` | Correr `clarinet check` para validar su contrato | +| `Type errors` | Utilice el `Cl` ayudantes para crear valores de Clarity adecuados | + + + + Generar informes de cobertura + + +
+ Ejecutar pruebas con cobertura para identificar código no probado: + + ```terminal + $ npm run test:report + ``` + + Esto genera: + + * `lcov.info` - Datos de cobertura de código + * `costs-reports.json` - Análisis de costo de gas + + Para ver el informe de cobertura: + + ```terminal + $ brew install lcov + $ genhtml lcov.info --branch-coverage -o coverage + $ open coverage/index.html + ``` +
+
+
+ + + Patrones de pruebas avanzados + + +
+ Probar condiciones de error: + + ```typescript + it('fails when depositing zero', () => { + const deposit = simnet.callPublicFn('defi', 'deposit', [Cl.uint(0)], wallet1); + expect(deposit.result).toBeErr(Cl.uint(100)); // err-invalid-amount + }); + ``` + + Prueba con múltiples cuentas: + + ```typescript + const wallet2 = accounts.get('wallet_2')!; + + it('tracks deposits from multiple users', () => { + simnet.callPublicFn('defi', 'deposit', [Cl.uint(1000)], wallet1); + simnet.callPublicFn('defi', 'deposit', [Cl.uint(2000)], wallet2); + + const total = simnet.getDataVar('defi', 'total-deposits'); + expect(total).toBeUint(3000); + }); + ``` +
+
+
+
+ +## Próximos pasos + +:::next-steps +* [Pruebas de integración](/tools/clarinet/integration-testing): Aprende cómo probar tu contrato con pruebas de integración. +* [Simulación de ejecución de la red principal](/tools/clarinet/mainnet-execution-simulation): Aprende cómo probar tu contrato con el estado de la red principal. +::: diff --git a/content/docs/es/tools/clarinet/(integrations)/chainhook-integration.mdx b/content/docs/es/tools/clarinet/(integrations)/chainhook-integration.mdx new file mode 100644 index 000000000..534192999 --- /dev/null +++ b/content/docs/es/tools/clarinet/(integrations)/chainhook-integration.mdx @@ -0,0 +1,164 @@ +--- +title: Registrar Chainhooks en devnet +sidebarTitle: Integración de Chainhook +description: En esta guía, aprenderás cómo registrar Chainhooks en devnet para monitorear y reaccionar a eventos de contratos inteligentes durante el desarrollo local. +--- +## Lo que aprenderás + +:::objectives +* Crear archivos de predicado Chainhook para monitoreo de eventos +* Registrar Chainhooks con Clarinet devnet +* Monitorear llamadas de contrato y eventos de blockchain +* Configurar webhooks para notificaciones en tiempo real +::: + +## Requisitos previos + +:::prerequisites +* Se requiere Clarinet versión 2.1.0 o superior. Verificar con `clarinet --version`. +* Se requiere Node.js versión 16 o superior. Verifique con `node --version`. +::: + +## Inicio rápido + + + + ### Crea tus predicados de Chainhook + + Crea archivos de predicado Chainhook en la raíz de tu proyecto o en una carpeta dedicada: + + + + + + + + + + + + + + + + + + + + Ejemplo de predicado para monitorear eventos de incremento: + + ```json chainhooks/increment.json + { + "chain": "stacks", + "uuid": "increment-hook", + "name": "Increment Counter Hook", + "version": 1, + "networks": { + "devnet": { + "if_this": { + "scope": "contract_call", + "contract_identifier": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.counter", + "method": "increment" + }, + "then_that": { + "http_post": { + "url": "http://localhost:3000/api/increment", + "authorization_header": "Bearer my-secret" + } + } + } + } + } + ``` + + + + ### Iniciar devnet con Chainhooks + + Inicie devnet desde la raíz de su proyecto. Clarinet registra automáticamente todos los archivos Chainhook: + + ```terminal + $ clarinet devnet start + ``` + + Busque la confirmación de registro: + + ```terminal + $ clarinet devnet start + # ... + INFO Feb 5 15:20:07.233382 2 chainhooks registered + ``` + + + + ### Monitorear la actividad de Chainhook + + Cuando se producen acciones de contrato, verás los disparadores de Chainhook en la terminal: + + ```terminal + $ clarinet devnet start + # ... + INFO Feb 5 15:21:07.233382 1 hooks triggered + ``` + + Verifique la carga útil según su `then_that` configuration: + + * **`http_post`** - Verifica que tu endpoint haya recibido la solicitud POST + * **`file_append`** - Verificar que el archivo fue creado/actualizado + + + +## Patrones comunes + +### Gancho de despliegue de contrato + +Monitorear cuándo se implementan contratos específicos: + +```json chainhooks/deploy-monitor.json +{ + "chain": "stacks", + "uuid": "deploy-hook", + "name": "Contract Deploy Monitor", + "version": 1, + "networks": { + "devnet": { + "if_this": { + "scope": "contract_deployment", + "deployer": "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM" + }, + "then_that": { + "file_append": { + "path": "./deployments.log" + } + } + } + } +} +``` + +### Monitoreo de transferencias STX + +Rastrea las transferencias de STX por encima de un cierto umbral: + +```json chainhooks/stx-transfers.json +{ + "chain": "stacks", + "uuid": "stx-transfer-hook", + "name": "Large STX Transfer Monitor", + "version": 1, + "networks": { + "devnet": { + "if_this": { + "scope": "stx_event", + "actions": ["transfer"], + "amount_upper_bound": "1000000000000" + }, + "then_that": { + "http_post": { + "url": "http://localhost:3000/api/large-transfer" + } + } + } + } +} +``` diff --git a/content/docs/es/tools/clarinet/(integrations)/pyth-oracle-integration.mdx b/content/docs/es/tools/clarinet/(integrations)/pyth-oracle-integration.mdx new file mode 100644 index 000000000..fe9af5ba8 --- /dev/null +++ b/content/docs/es/tools/clarinet/(integrations)/pyth-oracle-integration.mdx @@ -0,0 +1,378 @@ +--- +title: Integración del oráculo Pyth +sidebarTitle: Integración del oráculo Pyth +description: Aprende cómo probar contratos inteligentes que dependen de los feeds de precios del oráculo Pyth utilizando Clarinet. +--- +## Lo que aprenderás + +:::objectives +* Configurar las dependencias del contrato de mainnet +* Utilizar la ejecución de transacciones de mainnet (MXS) para pruebas de oráculos +* Crear feeds de precios simulados para pruebas unitarias +* Escribir pruebas de integración con datos reales de oracle +::: + +## Requisitos previos + +:::prerequisites +* Versión 2.1.0 o superior de Clarinet con soporte MXS +* Comprensión de [Contratos de oráculo de Pyth](/resources/clarity/external-data) +::: + +## Inicio rápido + + + + ### Configurar dependencias de mainnet + + Agregue los contratos de oráculo Pyth a sus requisitos de Clarinet.toml: + + ```toml Clarinet.toml + [project] + name = "my-oracle-project" + + [[project.requirements]] + contract_id = "SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-oracle-v3" + + [[project.requirements]] + contract_id = "SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-storage-v3" + + [[project.requirements]] + contract_id = "SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-pnau-decoder-v2" + + [[project.requirements]] + contract_id = "SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.wormhole-core-v3" + ``` + + Esto permite que tus pruebas interactúen con los contratos de oráculo reales de la red principal. + + + + ### Crear un oráculo simulado para pruebas unitarias + + Para pruebas unitarias rápidas, cree un contrato de oráculo simulado: + + ```clarity tests/mocks/mock-pyth-oracle.clar + ;; Mock Pyth Oracle for testing + (define-map price-feeds + (buff 32) ;; price-feed-id + { + price: int, + conf: uint, + expo: int, + ema-price: int, + ema-conf: uint, + publish-time: uint, + prev-publish-time: uint + } + ) + + ;; Set a mock price + (define-public (set-mock-price + (feed-id (buff 32)) + (price int) + (expo int)) + (ok (map-set price-feeds feed-id { + price: price, + conf: u1000000, + expo: expo, + ema-price: price, + ema-conf: u1000000, + publish-time: block-height, + prev-publish-time: (- block-height u1) + })) + ) + + ;; Mock get-price function matching real oracle interface + (define-read-only (get-price + (feed-id (buff 32)) + (storage-contract principal)) + (ok (unwrap! + (map-get? price-feeds feed-id) + (err u404))) + ) + + ;; Mock verify-and-update-price-feeds (no-op for testing) + (define-public (verify-and-update-price-feeds + (vaa (buff 8192)) + (params (tuple))) + (ok u1) + ) + ``` + + + + ### Escribir pruebas unitarias con precios simulados + + Crear pruebas unitarias utilizando el oráculo simulado: + + ```typescript tests/benjamin-club.test.ts + import { Cl } from '@stacks/transactions'; + import { describe, expect, it } from "vitest"; + + const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; + const wallet1 = accounts.get("wallet_1")!; + + describe("Benjamin Club with Mock Oracle", () => { + it("should set up mock BTC price", () => { + // Set BTC price to $100,000 (with 8 decimals) + const btcFeedId = "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"; + const mockPrice = Cl.int(10000000000000); // $100,000.00 * 10^8 + const expo = Cl.int(-8); + + const setPriceResponse = simnet.callPublicFn( + "mock-pyth-oracle", + "set-mock-price", + [Cl.bufferFromHex(btcFeedId), mockPrice, expo], + deployer + ); + + expect(setPriceResponse.result).toBeOk(Cl.uint(1)); + }); + + it("should calculate correct sBTC amount for $100", () => { + // With BTC at $100,000, $100 = 0.001 BTC + const response = simnet.callReadOnlyFn( + "benjamin-club", + "get-required-sbtc-amount", + [], + wallet1 + ); + + // 0.001 BTC = 100,000 sats + expect(response.result).toBeOk(Cl.uint(100000)); + }); + + it("should mint NFT when user has enough sBTC", () => { + // Mock VAA data (can be dummy data for unit tests) + const mockVaa = Cl.bufferFromHex("00".repeat(100)); + + // Give user 1 BTC worth of sBTC + simnet.callPublicFn( + "sbtc-token", + "mint", + [Cl.uint(100000000), Cl.principal(wallet1)], + deployer + ); + + const mintResponse = simnet.callPublicFn( + "benjamin-club", + "mint-for-hundred-dollars", + [mockVaa], + wallet1 + ); + + expect(mintResponse.result).toBeOk(Cl.uint(1)); + }); + }); + ``` + + + + ### Configurar pruebas de ejecución de mainnet + + Para pruebas de integración con datos reales de oracle, utilice la ejecución de transacciones de mainnet: + + ```typescript tests/benjamin-club-mxs.test.ts + import { buildDevnetNetworkOrchestrator } from "@hirosystems/clarinet-sdk"; + import { Cl } from '@stacks/transactions'; + import { PriceServiceConnection } from '@pythnetwork/price-service-client'; + import { describe, expect, it } from "vitest"; + + describe("Benjamin Club with Mainnet Oracle", () => { + let orchestrator: any; + + beforeAll(async () => { + orchestrator = buildDevnetNetworkOrchestrator({ + // Point to a mainnet fork + manifest: "./Clarinet.toml", + networkId: 1 // Mainnet + }); + }); + + it("should interact with real Pyth oracle", async () => { + // Fetch real VAA from Pyth + const pythClient = new PriceServiceConnection( + "https://hermes.pyth.network", + { priceFeedRequestConfig: { binary: true } } + ); + + const btcFeedId = "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"; + const vaas = await pythClient.getLatestVaas([btcFeedId]); + const vaaHex = Buffer.from(vaas[0], 'base64').toString('hex'); + + // Use mainnet execution to test with real oracle + const response = await orchestrator.callPublicFn( + "benjamin-club", + "get-current-btc-price", + [Cl.bufferFromHex(vaaHex)], + "wallet_1" + ); + + expect(response.result).toBeOk(); + + // Verify price is reasonable (between $10k and $200k) + const priceData = response.result.value; + const price = priceData.data.price.value; + expect(price).toBeGreaterThan(1000000000000); // $10k + expect(price).toBeLessThan(20000000000000); // $200k + }); + }); + ``` + + + +## Patrones comunes + +### Probando diferentes escenarios de precios + +Crear funciones auxiliares para probar diversas condiciones del mercado: + +```typescript tests/helpers/oracle-helpers.ts +export function setupPriceScenario( + scenario: 'bull' | 'bear' | 'stable', + simnet: any +) { + const prices = { + bull: { + btc: 15000000000000, // $150,000 + stx: 500000000, // $5.00 + eth: 500000000000 // $5,000 + }, + bear: { + btc: 2000000000000, // $20,000 + stx: 50000000, // $0.50 + eth: 100000000000 // $1,000 + }, + stable: { + btc: 10000000000000, // $100,000 + stx: 200000000, // $2.00 + eth: 300000000000 // $3,000 + } + }; + + const selectedPrices = prices[scenario]; + + // Set up all price feeds + Object.entries(selectedPrices).forEach(([asset, price]) => { + const feedId = getFeedId(asset); + simnet.callPublicFn( + "mock-pyth-oracle", + "set-mock-price", + [Cl.bufferFromHex(feedId), Cl.int(price), Cl.int(-8)], + "deployer" + ); + }); +} +``` + +### Probando la obsolescencia de precios + +Asegúrate de que tu contrato maneje correctamente los precios obsoletos: + +```typescript tests/price-staleness.test.ts +describe("Price Staleness Handling", () => { + it("should reject stale prices", () => { + // Set a price with old timestamp + const oldTimestamp = simnet.getBlockHeight() - 1000; + + simnet.callPublicFn( + "mock-pyth-oracle", + "set-price-with-timestamp", + [ + Cl.bufferFromHex(BTC_FEED_ID), + Cl.int(10000000000000), + Cl.int(-8), + Cl.uint(oldTimestamp) + ], + deployer + ); + + const response = simnet.callPublicFn( + "benjamin-club", + "mint-for-hundred-dollars", + [mockVaa], + wallet1 + ); + + expect(response.result).toBeErr(Cl.uint(ERR_STALE_PRICE)); + }); +}); +``` + +### Pruebas de implementación + +Crear pruebas de implementación para garantizar una configuración adecuada: + +```toml deployments/mainnet.yaml +--- +id: 0 +name: "Mainnet deployment" +network: mainnet +stacks-node: "https://api.mainnet.hiro.so" +bitcoin-node: "https://blockstream.info/api/" +plan: + batches: + - id: 0 + transactions: + - contract-call: + contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRCBGD7R.benjamin-club + method: initialize + parameters: + - "'SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-oracle-v3" + - "'SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-storage-v3" +``` + +### Estimación de gas + +Probar el consumo de gas para operaciones de oráculo: + +```typescript tests/gas-estimation.test.ts +describe("Gas Estimation", () => { + it("should estimate gas for oracle update + mint", () => { + const txCost = simnet.getTransactionCost( + "benjamin-club", + "mint-for-hundred-dollars", + [Cl.bufferFromHex("00".repeat(1000))], // Typical VAA size + wallet1 + ); + + console.log("Estimated gas cost:", txCost); + + // Ensure gas cost is reasonable + expect(txCost.write_length).toBeLessThan(20000); + expect(txCost.runtime).toBeLessThan(50000000); + }); +}); +``` + +## Integración de CI/CD + +Configurar GitHub Actions para pruebas automatizadas: + +```yaml .github/workflows/test-oracle.yml +name: Test Oracle Integration + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install Clarinet + run: | + curl -L https://github.com/hirosystems/clarinet/releases/download/v2.1.0/clarinet-linux-x64.tar.gz | tar xz + chmod +x ./clarinet + sudo mv ./clarinet /usr/local/bin + + - name: Run unit tests + run: clarinet test --coverage + + - name: Run mainnet fork tests + run: clarinet test --mainnet-fork + env: + MAINNET_API_KEY: ${{ secrets.MAINNET_API_KEY }} +``` diff --git a/content/docs/es/tools/clarinet/(integrations)/sbtc-integration.mdx b/content/docs/es/tools/clarinet/(integrations)/sbtc-integration.mdx new file mode 100644 index 000000000..ec9e7db6b --- /dev/null +++ b/content/docs/es/tools/clarinet/(integrations)/sbtc-integration.mdx @@ -0,0 +1,270 @@ +--- +title: Integración de sBTC con Clarinet +sidebarTitle: Integración de sBTC +description: En esta guía, aprenderás cómo interactuar con el contrato sBTC de la red principal en tu proyecto de Clarinet. +--- +## Lo que aprenderás + +:::objectives +* Agregar contratos inteligentes de sBTC a su proyecto de Clarinet +* Probar contratos con financiación automática de sBTC en devnet +* Trabajar con sBTC como un token fungible SIP-010 +* Desplegar contratos de sBTC en testnet y mainnet +::: + +## Requisitos previos + +:::prerequisites +* Se requiere Clarinet 2.15.0 o posterior para la integración automática de sBTC. +::: + +## Inicio rápido + + + + ### Añade sBTC a tu proyecto + + Agregue los contratos inteligentes de sBTC a los requisitos de su proyecto Clarinet: + + ```terminal + $ clarinet requirements add SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-deposit + ``` + + Este comando agrega tres contratos esenciales: + + * **`sbtc-token`** - El contrato de token SIP-010 principal + * **`sbtc-registry`** - Registro para gestionar la configuración de sBTC + * **`sbtc-deposit`** - Maneja operaciones de depósito y retiro + + Cuando Clarinet detecta estos contratos, automáticamente financia sus billeteras de prueba con sBTC para realizar pruebas. + + + + ### Crear un contrato habilitado para sBTC + + Construye un mercado simple de NFT que acepte pagos en sBTC: + + ```clarity contracts/nft-marketplace.clar + ;; Define NFT + (define-non-fungible-token marketplace-nft uint) + + ;; Price in sats (smallest sBTC unit) + (define-data-var mint-price uint u100) + (define-data-var next-id uint u0) + + ;; Mint NFT with sBTC payment + (define-public (mint-with-sbtc) + (begin + ;; Transfer sBTC from buyer to contract + (try! (contract-call? 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token transfer + (var-get mint-price) + tx-sender + (as-contract tx-sender) + none + )) + + ;; Mint the NFT + (try! (nft-mint? marketplace-nft (var-get next-id) tx-sender)) + + ;; Increment ID for next mint + (ok (var-set next-id (+ (var-get next-id) u1))) + ) + ) + + ;; Check sBTC balance + (define-read-only (get-sbtc-balance (owner principal)) + (contract-call? 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token get-balance owner) + ) + ``` + + + + ### Probar en la consola de Clarinet + + Clarinet financia automáticamente las billeteras de prueba con sBTC. Prueba tu contrato: + + ```terminal + $ clarinet console + ``` + + Verifique los saldos de la billetera y acuñe un NFT: + + ```clarity + ;; Check deployer's sBTC balance (auto-funded) + (contract-call? .nft-marketplace get-sbtc-balance tx-sender) + + ;; Mint NFT with wallet_1 (also auto-funded) + (contract-call? .nft-marketplace mint-with-sbtc) + + ;; Verify NFT ownership + (nft-get-owner? .nft-marketplace marketplace-nft u0) + ``` + + + + ### Escribir pruebas unitarias + + Prueba la funcionalidad de sBTC en tus pruebas de TypeScript: + + ```ts tests/nft-marketplace.test.ts + import { describe, expect, it } from "vitest"; + import { Cl } from "@stacks/transactions"; + + describe("NFT Marketplace", () => { + it("mints NFT with sBTC payment", () => { + const mintPrice = 100; + + // Get initial sBTC balance + const initialBalance = simnet.callReadOnlyFn( + "nft-marketplace", + "get-sbtc-balance", + [Cl.standardPrincipal(accounts.get("wallet_1")!.address)], + accounts.get("wallet_1")!.address + ); + + // Mint NFT + const mintResult = simnet.callPublicFn( + "nft-marketplace", + "mint-with-sbtc", + [], + accounts.get("wallet_1")!.address + ); + + expect(mintResult.result).toBeOk(); + + // Verify sBTC was transferred + const finalBalance = simnet.callReadOnlyFn( + "nft-marketplace", + "get-sbtc-balance", + [Cl.standardPrincipal(accounts.get("wallet_1")!.address)], + accounts.get("wallet_1")!.address + ); + + expect(Number(Cl.parse(finalBalance.result))).toBeLessThan( + Number(Cl.parse(initialBalance.result)) + ); + }); + }); + ``` + + + + ### Desplegar en testnet + + En la red de pruebas, Clarinet automáticamente se reasigna a los contratos oficiales de sBTC de Hiro: + + ```terminal + $ clarinet deployments generate --testnet + ``` + + Su plan de implementación muestra las direcciones reasignadas: + + ```yaml deployments/default.testnet-plan.yaml + --- + id: 0 + name: Testnet deployment + network: testnet + stacks-node: "https://api.testnet.hiro.so" + bitcoin-node: "http://blockstream.info" + plan: + batches: + - id: 0 + transactions: + - requirement-publish: + contract-id: ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT.sbtc-token + remap-sender: SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4 + remap-principals: + SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4: ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT + cost: 50000 + path: "./.cache/requirements/SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token.clar" + ``` + + Desplegar en testnet: + + ```terminal + $ clarinet deployments apply -p deployments/default.testnet-plan.yaml + ``` + + + +## Patrones comunes + +## Trabajando con direcciones sBTC + +Clarinet maneja el mapeo de direcciones de contratos sBTC a través de las redes: + +| Red | Dirección del Contrato sBTC | +|---------|---------------------| +| Simnet/Devnet | `SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token` | +| Red de pruebas | `ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT.sbtc-token` | +| Mainnet | La dirección del contrato permanece sin cambios | + +Su código de contrato siempre hace referencia a la dirección de simnet. Clarinet automáticamente reasigna durante el despliegue. + +## Minting manual de sBTC en pruebas unitarias + +Aunque Clarinet 2.15.0+ financia automáticamente las billeteras con sBTC en devnet, es posible que necesite acuñar manualmente sBTC en pruebas unitarias para escenarios específicos: + +### Acuñando sBTC utilizando la dirección del implementador + +El contrato de token sBTC permite que la dirección del implementador (multisig) acuñe tokens. Utiliza este enfoque en tus pruebas: + +```typescript tests/manual-sbtc-mint.test.ts -c +import { describe, expect, it } from "vitest"; +import { Cl } from "@stacks/transactions"; + +describe("Manual sBTC minting", () => { + it("mints sBTC to custom addresses", () => { + // The sBTC multisig address that can mint + const sbtcDeployer = "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4"; + const customWallet = "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM"; + + // Mint 1000 sats to custom wallet + const mintResult = simnet.callPublicFn( + "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token", + "mint", + [ + Cl.uint(1000), // amount in sats + Cl.principal(customWallet) // recipient + ], + sbtcDeployer // sender must be deployer + ); + + expect(mintResult.result).toBeOk(Cl.bool(true)); + + // Verify balance + const balance = simnet.callReadOnlyFn( + "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token", + "get-balance", + [Cl.principal(customWallet)], + customWallet + ); + + expect(balance.result).toBeOk(Cl.uint(1000)); + }); +}); +``` + +### Pruebas con simulación de ejecución en la red principal + +Cuando se utiliza la simulación de ejecución en la red principal, se puede acuñar sBTC utilizando la multifirma real de la red principal: + +```typescript -c +const mainnetMultisig = "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4"; +const mainnetWallet = "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR"; + +// Mint sBTC to any mainnet address +simnet.callPublicFn( + "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token", + "mint", + [Cl.uint(100000), Cl.principal(mainnetWallet)], + mainnetMultisig +); +``` + +Este enfoque es útil para: + +* Probando cantidades específicas de sBTC +* Simulando diferentes saldos de billetera +* Probando casos límite con cantidades de tokens precisas +* Pruebas de integración con contratos de mainnet diff --git a/content/docs/es/tools/clarinet/(integrations)/stacks-js-integration.mdx b/content/docs/es/tools/clarinet/(integrations)/stacks-js-integration.mdx new file mode 100644 index 000000000..b61bf4aba --- /dev/null +++ b/content/docs/es/tools/clarinet/(integrations)/stacks-js-integration.mdx @@ -0,0 +1,245 @@ +--- +title: Integración de Stacks.js con devnet +sidebarTitle: Integración de Stacks.js +description: En esta guía, aprenderás cómo interactuar con tus contratos inteligentes en devnet utilizando las bibliotecas de Stacks.js. +--- +## Lo que aprenderás + +:::objectives +* Configurar Stacks.js para conexión a devnet local +* Realizar transferencias STX entre cuentas de devnet +* Llamar a funciones de contratos inteligentes desde JavaScript +* Implementar contratos de forma programática +::: + +## Inicio rápido + + + + ### Instalar paquetes de Stacks.js + + Agregue los paquetes requeridos de Stacks.js a su proyecto frontend: + + ```package-install + @stacks/transactions @stacks/network + ``` + + + + ### Configurar para devnet + + Configurar una configuración de red devnet: + + ```ts devnet-config.ts + import { StacksDevnet } from '@stacks/network'; + + // Configure for local devnet + export const devnet = new StacksDevnet({ + url: 'http://localhost:3999' + }); + + // Get devnet accounts (matches Clarinet wallets) + export const accounts = { + deployer: { + address: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', + key: 'cb3df38053d132895220b9ce471f6b676db5b9bf0b4adefb55f2118ece2478df01' + }, + wallet1: { + address: 'ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5', + key: '7287ba251d44a4d3fd9276c88ce34c5c52a038955511cccaf77e61068649c17801' + } + }; + ``` + + + + ### Prueba de transferencias STX + + Cree una transferencia STX simple entre cuentas de devnet: + + ```ts stx-transfer.ts + import { makeSTXTokenTransfer, broadcastTransaction, AnchorMode } from '@stacks/transactions'; + import { devnet, accounts } from './devnet-config'; + + async function transferSTX() { + const tx = await makeSTXTokenTransfer({ + amount: 1000000n, // 1 STX in microSTX + recipient: accounts.wallet1.address, + senderKey: accounts.deployer.key, + network: devnet, + anchorMode: AnchorMode.Any, + }); + + const result = await broadcastTransaction(tx, devnet); + console.log('Transaction ID:', result.txid); + + // Transaction will be mined in next devnet block + return result.txid; + } + + transferSTX().catch(console.error); + ``` + + Ejecute la transferencia: + + ```terminal + $ ts-node stx-transfer.ts + Transaction ID: 0x3d5f8a70c4821e0f8c985b1f5b9d77f8c4b6d1a2e7f9c3b8a4d5e6f1c8d9b7a3 + ``` + + + + ### Llamar a contratos inteligentes + + Interactúa con contratos implementados en devnet: + + ```ts contract-call.ts + import { makeContractCall, broadcastTransaction, AnchorMode, Cl } from '@stacks/transactions'; + import { devnet, accounts } from './devnet-config'; + + async function callContract() { + const tx = await makeContractCall({ + contractAddress: accounts.deployer.address, + contractName: 'counter', + functionName: 'increment', + functionArgs: [], + senderKey: accounts.wallet1.key, + network: devnet, + anchorMode: AnchorMode.Any, + }); + + const result = await broadcastTransaction(tx, devnet); + console.log('Contract call ID:', result.txid); + + return result.txid; + } + + // Read contract state + async function readCount() { + const response = await fetch( + `${devnet.coreApiUrl}/v2/contracts/call-read/${accounts.deployer.address}/counter/get-count`, + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + sender: accounts.wallet1.address, + arguments: [] + }) + } + ); + + const data = await response.json(); + console.log('Current count:', data.result); + } + + callContract() + .then(() => readCount()) + .catch(console.error); + ``` + + + + ### Desplegar contratos desde el frontend + + Desplegar nuevos contratos en devnet de forma programática: + + ```ts deploy-contract.ts + import { makeContractDeploy, broadcastTransaction, AnchorMode } from '@stacks/transactions'; + import { devnet, accounts } from './devnet-config'; + + async function deployContract() { + const contractCode = ` + (define-data-var count uint u0) + + (define-public (increment) + (ok (var-set count (+ (var-get count) u1))) + ) + + (define-read-only (get-count) + (var-get count) + ) + `; + + const tx = await makeContractDeploy({ + contractName: 'my-counter', + codeBody: contractCode, + senderKey: accounts.deployer.key, + network: devnet, + anchorMode: AnchorMode.Any, + }); + + const result = await broadcastTransaction(tx, devnet); + console.log('Contract deployed:', result.txid); + + return result.txid; + } + + deployContract().catch(console.error); + ``` + + + +## Patrones comunes + +### Esperando la confirmación de la transacción + +Monitorear cuándo se confirman las transacciones en devnet: + +```ts transaction-monitor.ts +async function waitForTransaction(txid: string) { + let attempts = 0; + const maxAttempts = 10; + + while (attempts < maxAttempts) { + const response = await fetch( + `${devnet.coreApiUrl}/extended/v1/tx/${txid}` + ); + + const tx = await response.json(); + + if (tx.tx_status === 'success') { + console.log('Transaction confirmed!'); + return tx; + } + + if (tx.tx_status === 'abort_by_response') { + throw new Error(`Transaction failed: ${tx.tx_result.repr}`); + } + + // Wait for next block + await new Promise(resolve => setTimeout(resolve, 5000)); + attempts++; + } + + throw new Error('Transaction timeout'); +} +``` + +### Condiciones posteriores para la seguridad + +Agregar condiciones posteriores para garantizar que las llamadas al contrato se comporten según lo esperado: + +```ts safe-transfer.ts +import { Pc } from '@stacks/transactions'; + +const postConditions = [ + // Ensure sender's balance decreases by exactly the amount + Pc.principal(accounts.wallet1.address) + .willSendEq(1000000n) + .ustx(), + + // Ensure recipient receives the amount + Pc.principal(accounts.deployer.address) + .willReceiveEq(1000000n) + .ustx() +]; + +const tx = await makeSTXTokenTransfer({ + amount: 1000000n, + recipient: accounts.deployer.address, + senderKey: accounts.wallet1.key, + network: devnet, + postConditions, + anchorMode: AnchorMode.Any, +}); +``` diff --git a/content/docs/es/tools/clarinet/(overview)/faq.mdx b/content/docs/es/tools/clarinet/(overview)/faq.mdx new file mode 100644 index 000000000..f8482a9ab --- /dev/null +++ b/content/docs/es/tools/clarinet/(overview)/faq.mdx @@ -0,0 +1,211 @@ +--- +title: Preguntas frecuentes +sidebarTitle: Preguntas frecuentes +description: Preguntas comunes y soluciones para el desarrollo de Clarinet +--- +Esta página aborda preguntas y problemas comunes encontrados al desarrollar con Clarinet, basados en comentarios de la comunidad e interacciones de soporte. + +## Pruebas y desarrollo + + + + ¿Cómo puedo probar con tokens sBTC en mi entorno de desarrollo? + + +
+ Para probar con tokens sBTC, añade el contrato sBTC de la red principal como requisito y acuña tokens usando la dirección del desplegador: + + **Paso 1: Agregar sBTC como requisito** + + ```terminal + $ clarinet requirements add SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token + ``` + + **Paso 2: Acuñar sBTC en tus pruebas** + + ```typescript + // The sBTC multisig address that can mint + const sbtcDeployer = "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4"; + + // Mint sBTC to your test wallet + const mintTx = simnet.callPublicFn( + "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token", + "mint", + [Cl.uint(1000000), Cl.principal(wallet1)], + sbtcDeployer + ); + ``` + + Este enfoque te permite trabajar con sBTC en pruebas unitarias sin una simulación compleja de transacciones de Bitcoin. +
+
+
+ + + ¿Por qué estoy recibiendo un error al usar direcciones de mainnet durante la simulación de mainnet? + + +
+ Al utilizar la simulación de ejecución en la red principal, es posible que el contrato de la red principal esté verificando las llamadas de contrato de direcciones de la red principal, no las direcciones de la red de prueba. + + **A partir de Clarinet v3.4.0**, puedes habilitar direcciones de mainnet en simnet agregando `use_mainnet_wallets = true` a tu configuración: + + ```toml Clarinet.toml + [repl.remote_data] + enabled = true + initial_height = 522000 + use_mainnet_wallets = true # Enable mainnet addresses + ``` + + **Alternativa: Usar manualmente direcciones de mainnet:** + + ```typescript + // Instead of using simnet.getAccounts() + const mainnetAddress = "SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY"; + + // Mint STX to any mainnet address + simnet.mintSTX(mainnetAddress, 1000000n); + + // Call functions with mainnet address + const result = simnet.callReadOnlyFn( + "SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.pyth-storage-v3", + "get-price", + [priceFeed], + mainnetAddress + ); + ``` + + La simnet es permisiva y acepta cualquier dirección válida de Stacks cuando la simulación de mainnet está habilitada. +
+
+
+ + + ¿Cómo migro de expectSTXTransferEvent al nuevo SDK? + + +
+ El SDK de Clarinet v2 utiliza comparadores estándar de Vitest en lugar de ayudantes de eventos personalizados. Así es cómo migrar: + + **Enfoque antiguo (Clarinet v1):** + + ```typescript + block.receipts[0].events.expectSTXTransferEvent( + amount, + sender, + recipient + ); + ``` + + **Nuevo enfoque (Clarinet v2):** + + ```typescript + // Check for exact event match + expect(events).toContainEqual({ + event: "stx_transfer_event", + data: { + amount: "1000000", + memo: "", + recipient: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM", + sender: "ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5", + }, + }); + + // Or check only specific properties + expect(events).toContainEqual({ + event: "stx_transfer_event", + data: expect.objectContaining({ + sender: address1, + recipient: contractAddress, + }), + }); + ``` + + Para las aserciones de valor de Clarity, utiliza los comparadores incorporados: + + ```typescript + expect(result).toBeOk(Cl.bool(true)); + expect(result).toBeErr(Cl.uint(500)); + ``` +
+
+
+
+ +## Configuración e instalación + + + + ¿Por qué estoy recibiendo "error bip39" al generar planes de implementación? + + +
+ A partir de Clarinet 2.15.0, las configuraciones de implementación requieren mnemotécnicas de 24 palabras. Las mnemotécnicas de 12 palabras ya no son compatibles. + + **Actualice su configuración:** + + ```toml settings/Mainnet.toml + [accounts.deployer] + # Use a 24-word mnemonic + mnemonic = "twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw" + ``` + + Genere una nueva mnemotecnia de 24 palabras usando un generador BIP39 si es necesario. Este cambio mejora la seguridad para implementaciones en producción. +
+
+
+
+ +## Limitaciones conocidas + + + + ¿Puedo probar la verificación de transacciones de Bitcoin en Clarinet? + + +
+ Probar contratos que utilizan clarity-bitcoin-lib para la verificación de transacciones de Bitcoin tiene limitaciones en simnet y devnet: + + **Limitaciones actuales:** + + * No hay bloques ni transacciones reales de Bitcoin en simnet + * Los bloques simulados no contienen transacciones de Bitcoin verificables + * `get-burn-block-info?` devuelve datos simulados no aptos para verificación + + **Soluciones alternativas:** + + * Probar la lógica de verificación de Bitcoin en la red principal o con simulación de ejecución de la red principal + * Crear pruebas unitarias que simulen el comportamiento esperado sin verificación real + * Considere separar la lógica de verificación de Bitcoin para facilitar las pruebas + + El equipo de Clarinet está explorando soluciones para un mejor soporte de pruebas de Bitcoin. +
+
+
+ + + ¿Por qué mi devnet se congela en la transición de la época 3.0? + + +
+ La transición de época 3.0 en devnet puede ser inestable, con tasas de éxito que varían entre el 50-80% dependiendo de tu configuración. + + **Soluciones temporales actuales:** + + * Reinicie devnet si se congela alrededor de los bloques 139-140 + * Prueba Clarinet 2.14.0, que algunos usuarios informan que es más estable + * Espera a que la próxima función comience devnet directamente en la época 3.0 + + **Monitoreando la transición:** + + ```console + # Watch for the transition around these blocks + Block 139: Epoch 2.5 + Block 140: Should transition to 3.0 + ``` + + El equipo de Clarinet está trabajando en mejorar la estabilidad de la transición de época y planea permitir iniciar devnet directamente en la época 3.0. +
+
+
+
diff --git a/content/docs/es/tools/clarinet/(overview)/project-structure.mdx b/content/docs/es/tools/clarinet/(overview)/project-structure.mdx new file mode 100644 index 000000000..d4331506e --- /dev/null +++ b/content/docs/es/tools/clarinet/(overview)/project-structure.mdx @@ -0,0 +1,291 @@ +--- +title: Estructura del proyecto +sidebarTitle: Estructura del proyecto +description: Comprender la estructura y configuración completa de un proyecto de Clarinet +type: concept +--- +Un proyecto de Clarinet sigue una estructura cuidadosamente diseñada que separa contratos, pruebas y configuración. Comprender esta estructura te ayuda a organizar el código de manera efectiva y configurar herramientas para un flujo de trabajo de desarrollo óptimo. + +## Diseño del proyecto principal + +Cada proyecto de Clarinet contiene estos directorios y archivos esenciales: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cada componente cumple un propósito específico en su flujo de trabajo de desarrollo. Exploremos cómo funcionan juntos para crear un entorno de desarrollo completo. + +## El manifiesto del proyecto + +### Clarinet.toml + +El **Clarinet.toml** file es el corazón de tu proyecto. Define los metadatos del proyecto y rastrea todos los contratos: + +```toml Clarinet.toml +[project] +name = "counter" +description = "A counter smart contract" + +[contracts.traits] +path = "contracts/traits.clar" +clarity_version = 3 +epoch = "latest" + +[contracts.counter] +path = 'contracts/counter.clar' +clarity_version = 3 +epoch = "latest" +``` + +El manifiesto maneja varias funciones críticas: + +* **Registro de contrato**: Todo contrato debe estar listado aquí +* **Época de Stacks y versión de Clarity**: Especifica la versión de Clarity y la época para cada contrato +* **Secuencia de arranque**: Enumera los contratos a desplegar `clarinet devnet start` + +### Configuración de época + +Puedes especificar la época de dos maneras: + +```toml +# Use a specific epoch version +epoch = 3.1 + +# Use the latest available epoch (default) +epoch = "latest" +``` + +Usando `"latest"` garantiza que tus contratos siempre utilicen las características y optimizaciones de Clarity más recientes disponibles en tu versión de Clarinet. + +## Infraestructura de pruebas + +### Configuración del paquete + +El **package.json** define su entorno de pruebas y dependencias: + +```json package.json +{ + "name": "counter-tests", + "version": "1.0.0", + "description": "Run unit tests on this project.", + "type": "module", + "private": true, + "scripts": { + "test": "vitest run", + "test:report": "vitest run -- --coverage --costs", + "test:watch": "chokidar \"tests/**/*.ts\" \"contracts/**/*.clar\" -c \"npm run test:report\"" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@hirosystems/clarinet-sdk": "^3.0.2", + "@stacks/transactions": "^7.0.6", + "@types/node": "^24.0.14", + "chokidar-cli": "^3.0.0", + "vitest": "^3.1.3", + "vitest-environment-clarinet": "^2.3.0" + } +} +``` + +| Paquete | Propósito | +|---------|---------| +| `@hirosystems/clarinet-sdk` | WebAssembly-compilado Clarinet para Node.js | +| `@stacks/transactions` | Manipulación de valores de Clarity en TypeScript | +| `vitest` | Marco de pruebas moderno con soporte nativo para TypeScript | +| `vitest-environment-clarinet` | Arranque de Simnet para pruebas | + +### Configuración de Vitest + +El **vitest.config.js** configura el marco de pruebas: + +```js vitest.config.js +/// +import { defineConfig } from "vite"; +import { vitestSetupFilePath, getClarinetVitestsArgv } from "@hirosystems/clarinet-sdk/vitest"; + +export default defineConfig({ + test: { + environment: "clarinet", // use vitest-environment-clarinet + pool: "forks", + poolOptions: { + threads: { singleThread: true }, + forks: { singleFork: true }, + }, + setupFiles: [ + vitestSetupFilePath, + // custom setup files can be added here + ], + environmentOptions: { + clarinet: { + ...getClarinetVitestsArgv(), + // add or override options + }, + }, + }, +}); +``` + +Esta configuración habilita: + +* **Entorno de Clarinet**: Automático `simnet` configuración para cada prueba +* **Modo de bifurcación única**: Ejecución eficiente de pruebas con aislamiento adecuado +* **Seguimiento de cobertura**: Generar informes en múltiples formatos +* **Configuración personalizada**: Agregar utilidades de prueba específicas del proyecto + +### Configuración de TypeScript + +El **tsconfig.json** proporciona soporte para TypeScript: + +```json tsconfig.json + +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext"], + "skipLibCheck": true, + + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + + "strict": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + // !mark(1:4) + "include": [ + "node_modules/@hirosystems/clarinet-sdk/vitest-helpers/src", + "tests" + ] +} +``` + +Es importante configurar correctamente la propiedad include, por defecto apunta a los archivos de ayuda definidos en el paquete clarinet-sdk, y al directorio de pruebas. + +## Configuraciones de red + +### Configuración del entorno + +Cada red tiene su propio archivo de configuración en el **configuración** directorio: + +```toml settings/Devnet.toml +[network] +name = "devnet" +deployment_fee_rate = 10 + +[accounts.deployer] +mnemonic = "twice kind fence tip hidden..." +balance = 100_000_000_000_000 + +[accounts.wallet_1] +mnemonic = "sell invite acquire kitten..." +balance = 10_000_000_000_000 +``` + +Estos ajustes controlan: + +* **Puertos de red**: Puntos finales de API, RPC y explorador +* **Configuración de cuenta**: Carteras de prueba con saldos de STX +* **Parámetros de la cadena**: Configuración específica de la cadena de bloques de la red + +:::callout +type: warn + +### Aviso de Seguridad + +Nunca comprometas claves privadas o frases mnemónicas de la red principal. Utiliza variables de entorno para las credenciales de producción. +::: + +## Problemas comunes + + + + Importaciones fallando en pruebas + + +
+ Si estás encontrando errores de importación en tus pruebas, actualiza tu configuración de TypeScript para usar la resolución del empaquetador de Vite: + + ```json tsconfig.json + { + "compilerOptions": { + "moduleResolution": "bundler", // !mark + "allowImportingTsExtensions": true + } + } + ``` + + Esta configuración asegura que TypeScript comprenda la estrategia de resolución de módulos de Vite y permita la importación `.ts` archivos directamente. +
+
+
+ + + Versiones incompatibles + + +
+ Todos los contratos en su proyecto deben usar la misma versión y época de Clarity para evitar problemas de compatibilidad: + + ```toml Clarinet.toml + [contracts.token] + clarity_version = 3 + epoch = "latest" # !mark + + [contracts.pool] + clarity_version = 3 + epoch = "latest" # !mark + ``` + + Las versiones incompatibles pueden causar fallos en la implementación y comportamientos inesperados. Siempre actualice todos los contratos juntos cuando se cambie a una nueva versión de Clarity. +
+
+
+
+ +## Próximos pasos + +:::next-steps +* [Escribiendo contratos de Clarity](/tools/clarinet/project-development): Crea y gestiona contratos de Clarity. +* [Pruebas y validación](/tools/clarinet/contract-interaction): Interactúa con contratos Clarity en tu proyecto. +::: diff --git a/content/docs/es/tools/clarinet/(overview)/quickstart.mdx b/content/docs/es/tools/clarinet/(overview)/quickstart.mdx new file mode 100644 index 000000000..5a718927a --- /dev/null +++ b/content/docs/es/tools/clarinet/(overview)/quickstart.mdx @@ -0,0 +1,165 @@ +--- +title: Inicio rápido +description: En esta guía, construirás un contrato inteligente de contador simple e interactuarás con él en un entorno local. +--- +## Lo que aprenderás + +:::objectives +* Crear un proyecto de contrato inteligente en Clarity +* Escribir código Clarity con mapas y funciones públicas +* Prueba y valida tus contratos utilizando la consola de Clarinet +::: + +## Requisitos previos + +:::prerequisites +* Clarinet instalado en tu máquina. Sigue el [guía de instalación](/tools/clarinet#installation) si es necesario. +* Un editor de código como VS Code para editar archivos de Clarity. +::: + +## Inicio rápido + + + + ### Crea tu proyecto + + Comencemos creando un nuevo proyecto de Clarinet. El `clarinet new` el comando configura todo lo que necesitas para el desarrollo de contratos inteligentes, incluyendo un marco de pruebas, configuraciones de implementación y un entorno de desarrollo local: + + ```terminal + $ clarinet new counter + Create directory counter + Create directory contracts + Create directory settings + Create directory tests + Create file Clarinet.toml + Create file package.json + Create file vitest.config.js + ``` + + Clarinet crea una estructura de proyecto completa para ti. Cada carpeta tiene un propósito específico en tu flujo de trabajo de desarrollo: + + + + + + + + + + + + + + + + + + + + + + + + + + ### Genera tu contrato + + Ahora que tenemos nuestra estructura de proyecto, vamos a crear un contrato inteligente. Navega a tu directorio de proyecto y utiliza el generador de contratos de Clarinet: + + ```terminal + $ cd counter + $ clarinet contract new counter + Created file contracts/counter.clar + Created file tests/counter.test.ts + Updated Clarinet.toml with contract counter + ``` + + Clarinet crea automáticamente tanto su archivo de contrato como un archivo de prueba correspondiente. Esto sigue la mejor práctica de escribir pruebas junto con su código de contrato: + + | Archivo | Propósito | + |------|---------| + | `contracts/counter.clar` | Tu código de contrato inteligente | + | `tests/counter.test.ts` | Archivo de prueba para su contrato | + + :::callout + Observe que Clarinet también actualizó su `Clarinet.toml` archivo. Este archivo de configuración rastrea todos los contratos en su proyecto y sus ajustes de implementación. + ::: + + + + ### Escriba el código de su contrato + + Abrir `contracts/counter.clar` y reemplazar su contenido con nuestra implementación del contador. Este contrato mantendrá un conteo separado para cada usuario que interactúe con él: + + ```clarity contracts/counter.clar -c + ;; Define a map to store counts for each user + (define-map counters principal uint) + + ;; Increment the count for the caller + (define-public (count-up) + (ok (map-set counters tx-sender (+ (get-count tx-sender) u1))) + ) + + ;; Get the current count for a user + (define-read-only (get-count (who principal)) + (default-to u0 (map-get? counters who)) + ) + ``` + + Entendamos qué hace cada parte: + + * [`define-map`](/resources/clarity/reference/functions#define-map) crea un mapa de almacenamiento persistente que asocia a cada usuario (principal) con su conteo + * [`tx-sender`](/resources/clarity/reference/keywords#tx-sender) es una variable incorporada que contiene la dirección de quien llama a la función + * [`define-public`](/resources/clarity/reference/functions#define-public) declara funciones que pueden modificar el estado del contrato + * [`define-read-only`](/resources/clarity/reference/functions#define-read-only) declara funciones que solo leen datos sin modificarlos + + + + ### Valide su contrato + + Antes de poder probar nuestro contrato, asegurémonos de que sea sintácticamente correcto y seguro en cuanto a tipos. El comando check de Clarinet analiza tu contrato sin desplegarlo: + + ```terminal + $ clarinet check + ✔ 1 contract checked + ``` + + Si ve errores en su lugar, estos son los problemas más comunes y cómo solucionarlos: + + | Error | Solución | + |-------|-----| + | `Unknown keyword` | Verificar la ortografía de las funciones de Clarity | + | `Type mismatch` | Asegúrate de usar los tipos correctos (uint, principal, etc.) | + | `Unresolved contract` | Verificar el nombre del contrato en `Clarinet.toml` coincide con el nombre del contrato en el archivo | + + + + ### Prueba en la consola + + Ahora viene la parte emocionante: ¡interactuemos con nuestro contrato! Clarinet proporciona una consola interactiva donde puedes llamar funciones y ver resultados inmediatamente. Inicia la consola con: + + ```terminal + $ clarinet console + ``` + + Una vez que la consola se carga, puedes llamar a las funciones de tu contrato directamente. Aquí hay algunos ejemplos que puedes probar: + + ```terminal + $ (contract-call? .counter count-up) + (ok true) + $ (contract-call? .counter get-count tx-sender) + u1 + $ (contract-call? .counter count-up) + (ok true) + $ (contract-call? .counter get-count tx-sender) + u2 + ``` + + + +## Próximos pasos + +:::next-steps +* [Estructura del proyecto](/tools/clarinet/project-structure): Aprende sobre la estructura del proyecto y cómo gestionar tus contratos. +* [Desarrollo de blockchain local](/tools/clarinet/local-blockchain-development): Inicia una cadena de bloques local para probar tus contratos. +::: diff --git a/content/docs/es/tools/clarinet/(vscode-extension)/vscode-extension.mdx b/content/docs/es/tools/clarinet/(vscode-extension)/vscode-extension.mdx new file mode 100644 index 000000000..0e7e3ff91 --- /dev/null +++ b/content/docs/es/tools/clarinet/(vscode-extension)/vscode-extension.mdx @@ -0,0 +1,102 @@ +--- +title: Extensión de VS Code +sidebarTitle: Introducción +description: La extensión Clarity para VS Code transforma tu editor en un potente entorno de desarrollo de contratos inteligentes. Obtienes resaltado de sintaxis, autocompletado, depuración y verificación de errores en tiempo real. +--- +## Características + +### Autocompletado inteligente + +La extensión proporciona autocompletado de código inteligente que comprende el contexto de Clarity. Cuando comienzas a escribir cualquier función de Clarity, obtienes sugerencias instantáneas con documentación: + +```clarity +;; Type "stx-tr" and get: +(stx-transfer? amount sender recipient) +;; ^ ^ ^ +;; Placeholders for easy navigation +``` + +Usar `Tab` para saltar entre marcadores de posición y `Escape` para salir del modo de marcador de posición. + +### Documentación al pasar el cursor + +Accede a documentación completa sin salir de tu editor. Pasa el cursor sobre cualquier función o palabra clave de Clarity para ver: + +```clarity +;; Hover over 'map-set' to see: +;; - Function signature +;; - Parameter descriptions +;; - Return type +;; - Usage examples +(map-set my-map {key: "value"} "data") +``` + +### Definición de referencia + +Navega por tu base de código de manera eficiente con las funciones de salto a definición: + +* `F12` o `Ctrl+Click` - Ir a la definición +* `Alt+F12` - Ver la definición sin salir del archivo actual +* Funciona en archivos de contrato y llamadas de contrato + +### Comprobación de errores en tiempo real + +La extensión valida tu código continuamente, proporcionando retroalimentación inmediata: + +* **Subrayados rojos** - Errores de sintaxis, palabras clave desconocidas +* **Garabatos amarillos** - Advertencias para código potencialmente inseguro +* **Lista de errores** - Todos los problemas en el panel Problemas (`Ctrl+Shift+M`) + +Los errores comunes detectados incluyen variables no definidas, incompatibilidades de tipos, implementaciones de rasgos faltantes y firmas de funciones inválidas. + +### Resolución de contratos locales + +La autocompletación funciona en todo tu proyecto. Haz referencia a funciones de otros contratos en tu espacio de trabajo: + +```clarity +;; Auto-complete local contract calls +(contract-call? .my-token transfer amount sender recipient) +;; ^ +;; Suggests contracts in your project +``` + +### Soporte de rasgos + +Al implementar rasgos (como NFTs SIP-009 o tokens SIP-010), la extensión verifica: + +* Todas las funciones requeridas están implementadas +* Las firmas de función coinciden con las definiciones de rasgos +* Los tipos de retorno son correctos + +```clarity +;; Extension warns if missing required trait functions +(impl-trait .sip-010-trait.sip-010-trait) + +;; ⚠️ Warning: Missing required function 'get-balance' +``` + +### Depuración visual + +La extensión incluye un depurador visual para la ejecución de código paso a paso: + +1. Establece puntos de interrupción haciendo clic en los números de línea +2. Presionar `F5` o usa Ejecutar → Iniciar depuración +3. Recorre el código línea por línea +4. Inspeccionar variables y estado de la pila + +:::callout +### Requisitos + +La depuración visual requiere VS Code Desktop y Clarinet instalados localmente. +::: + +## Tabla de comparación + +| Característica | Editor Básico | Extensión de VS Code | +|----------------|----------------|------------------------| +| Resaltado de sintaxis | Limitado | Soporte completo de Clarity | +| Autocompletado | Ninguno | Contextual con documentación | +| Verificación de errores | Solo al desplegar | Validación en tiempo real | +| Documentación | Búsqueda externa | Documentación emergente en línea | +| Depuración | Solo consola | Depurador visual | +| Navegación entre archivos | Manual | Salto a definición | diff --git a/content/docs/es/tools/clarinet/index.mdx b/content/docs/es/tools/clarinet/index.mdx new file mode 100644 index 000000000..5ef713996 --- /dev/null +++ b/content/docs/es/tools/clarinet/index.mdx @@ -0,0 +1,59 @@ +--- +title: Clarinet +sidebarTitle: Visión general +description: Clarinet es todo lo que necesitas para escribir, probar e implementar contratos inteligentes de Clarity en Stacks. +type: overview +llm: false +--- +## Visión general + +Clarinet is the fastest way to build, test, and deploy smart contracts on the Stacks blockchain. It gives you a local devnet, REPL, testing framework, and debugging tools to ship high-quality Clarity code with confidence. + +![Descripción general de Clarinet](/images/tools/clarinet/overview.svg) + +Para explorar las funciones de Clarinet con IA, copie y pegue [llms.txt](/tools/clarinet/llms.txt) en tu LLM de elección. + +## Características principales + +* [**Aproveche una potente interfaz de línea de comandos**](/tools/clarinet/cli-reference) - Create new projects, manage your smart contracts and their dependencies using clarinet requirements, and interact with your code through the built-in REPL. +* [**Escribir pruebas unitarias con el SDK**](/tools/clarinet/sdk-introduction) - Utiliza el SDK de Clarinet para escribir pruebas unitarias en un entorno JS familiar y validar el comportamiento del contrato. +* [**Ejecutar un entorno de blockchain privado**](/tools/clarinet/local-blockchain-development) - Inicia una devnet local con nodos, mineros y APIs para que puedas probar e integrar tu código. +* [**Extensión de VSCode**](/tools/clarinet/vscode-extension) - Linter, depurador paso a paso, ayuda a escribir contratos inteligentes (autocompletación, documentación, etc.). + +## Instalación + + + ```terminal !! macOS + $ brew install clarinet + ``` + + ```terminal !! Windows + $ winget install clarinet + ``` + + ```terminal !! Cargo + $ sudo apt install build-essential pkg-config libssl-dev + ``` + + ```terminal !! Binary + $ wget -nv https://github.com/hirosystems/clarinet/releases/latest/download/clarinet-linux-x64-glibc.tar.gz -O clarinet-linux-x64.tar.gz + $ tar -xf clarinet-linux-x64.tar.gz + $ chmod +x ./clarinet + $ mv ./clarinet /usr/local/bin + ``` + + +## Próximos pasos + +:::next-steps +* [Inicio rápido](/tools/clarinet/quickstart): Comienza con Clarinet. +* [Crear un proyecto](/tools/clarinet/project-development): Crear un nuevo proyecto de Clarinet. +::: + +:::callout +type: help + +### ¿Necesitas ayuda para construir con Clarinet? + +Contáctenos en el **#clarinet** canal activado [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. También hay una [horario de oficina semanal](https://www.addevent.com/event/kI22007085) llamada todos los miércoles a la 1 pm ET. +::: diff --git a/content/docs/es/tools/clarinet/meta.json b/content/docs/es/tools/clarinet/meta.json new file mode 100644 index 000000000..008ac3413 --- /dev/null +++ b/content/docs/es/tools/clarinet/meta.json @@ -0,0 +1,17 @@ +{ + "title": "Clarinet", + "root": true, + "pages": [ + "---Clarinet---", + "index", + "...(overview)", + "---Clarinet CLI---", + "...(clarinet-cli)", + "---Clarinet JS SDK---", + "...(clarinet-js-sdk)", + "---VSCode Extension---", + "...(vscode-extension)", + "---Integrations---", + "...(integrations)" + ] +} diff --git a/content/docs/es/tools/contract-monitoring/create-alert.mdx b/content/docs/es/tools/contract-monitoring/create-alert.mdx new file mode 100644 index 000000000..cc3b2f5ab --- /dev/null +++ b/content/docs/es/tools/contract-monitoring/create-alert.mdx @@ -0,0 +1,179 @@ +--- +title: Crear una alerta +description: Aprende cómo crear una alerta para monitorear las llamadas a funciones de un contrato. +--- +## Lo que aprenderás + +:::objectives +* Configurar alertas para funciones de contrato +* Configurar notificaciones por correo electrónico y webhook +* Monitorear patrones de uso de contratos +::: + +## Requisitos previos + +:::prerequisites +* Contratos implementados en la red principal de Stacks (o use cualquier contrato público) +* Una cuenta de la Plataforma Hiro - [Regístrate gratis](https://platform.hiro.so) +::: + +## Configurar el monitoreo de contratos + + + + ### Navegar a monitoreo + + Inicie sesión en el [Plataforma Hiro](https://platform.hiro.so) y cambia a la **Monitor** pestaña. + + Puedes configurar monitoreo de alertas para cualquier contrato en la red principal. + + + + ### Agregar contrato para monitoreo + + Hacer clic **Agregar contrato** para abrir el modal de búsqueda de contratos. + + Tienes dos opciones: + + * **Entrada manual**: Ingrese el principal del contrato y el nombre del contrato + * **Conexión de billetera**: Conecta tu billetera para ver tu historial de implementación + + Todos los contratos implementados en la red principal son públicos, por lo que puedes monitorear cualquiera de ellos independientemente de quién los haya implementado. + + + + ### Ver actividad del contrato + + Una vez agregado, su contrato aparece en Monitoreo de Contratos donde puede: + + * Ver historial de transacciones + * Ver transacciones pendientes en el mempool + * Hacer clic **Crear una alerta** para configurar un monitoreo específico + + + + ### Configurar alertas personalizadas + + Configura alertas para cualquier llamada a función de contrato con condiciones específicas: + + * **Función llamada**: Alertar cuando se llama a una función específica + * **Con argumentos**: Alertar solo cuando se llame con valores de argumento especificados + * **Por dirección**: Alertar solo cuando sea llamado por una dirección de billetera específica + + Por ejemplo, monitorear `set-contract-owner`, funciones de transferencia/acuñación/quemado, o cualquier función personalizada que hayas implementado. + + + + ### Elegir método de notificación + + Seleccione cómo desea recibir alertas: + + * **Notificaciones por correo electrónico**: Reciba alertas en su dirección de correo electrónico + * **Llamadas de webhook**: Envía a tu punto final de API para flujos de trabajo personalizados + + Puede habilitar varios métodos de notificación para la misma alerta. + + + +## Formato de carga útil de alerta + +Las notificaciones por correo electrónico provienen de Hiro Platform ``. + +Los payloads de webhook siguen esta estructura: + + + ```json !! sample.json + { + "tx_id": "0xa7f511b3f379efef6fe71d0de57712ed13a89c5b6e24dd049eb2cc9a7c24fcb5", + "nonce": 5, + "fee_rate": "250", + "sender_address": "SP2W9QYAHJNS7YTQY9EK2MSTQGX9E2NDMV766JP9Z", + "sponsored": false, + "post_condition_mode": "deny", + "post_conditions": [ + { + "type": "stx", + "condition_code": "sent_equal_to", + "amount": "3000000", + "principal": { + "type_id": "principal_standard", + "address": "SP2W9QYAHJNS7YTQY9EK2MSTQGX9E2NDMV766JP9Z" + } + } + ], + "anchor_mode": "any", + "tx_status": "pending", + "receipt_time": 1726104636, + "receipt_time_iso": "2024-09-12T01:30:36.000Z", + "tx_type": "contract_call", + "contract_call": { + "contract_id": "SPHW0EJK5KPDMK03ZX792EMP0Q5J3A39ZMTVZZCY.sample-contract", + "function_name": "donate", + "function_signature": "(define-public (donate (amount uint)))", + "function_args": [ + { + "hex": "0x01000000000000000000000000002dc6c0", + "repr": "u3000000", + "name": "amount", + "type": "uint" + } + ] + } + } + ``` + + ```ts !! alert-payload.ts + interface AlertPayload { + tx_id: string; + nonce: number; + fee_rate: string; + sender_address: string; + sponsored: boolean; + post_condition_mode: string; + post_conditions: PostCondition[]; + anchor_mode: string; + tx_status: string; + receipt_time: number; + receipt_time_iso: string; + tx_type: string; + contract_call: ContractCall; + } + + interface ContractCall { + contract_id: string; + function_name: string; + function_signature: string; + function_args: FunctionArg[]; + } + + interface FunctionArg { + hex: string; + repr: string; + name: string; + type: string; + } + + interface PostCondition { + type: string; + condition_code: string; + amount: string; + principal: Principal; + } + + interface Principal { + type_id: string; + address: string; + } + ``` + + +:::callout +El `tx_status` siempre devolverá "pending" para las alertas de monitoreo. Las notificaciones se envían cuando las transacciones llegan al mempool, no cuando se confirman en la blockchain. +::: + +## Próximos pasos + +:::next-steps +* [Plataforma Hiro](https://platform.hiro.so): Crea y gestiona nuevos webhooks en la Plataforma. +* [Chainhook](/tools/chainhook): Aprende sobre el monitoreo avanzado de eventos con Chainhook +::: diff --git a/content/docs/es/tools/contract-monitoring/index.mdx b/content/docs/es/tools/contract-monitoring/index.mdx new file mode 100644 index 000000000..388a0883f --- /dev/null +++ b/content/docs/es/tools/contract-monitoring/index.mdx @@ -0,0 +1,29 @@ +--- +title: Monitoreo de contratos +sidebarTitle: Visión general +description: El monitoreo de contratos le permite rastrear eventos de contratos inteligentes en tiempo real y recibir notificaciones por webhook cuando ocurren actividades específicas. +llm: false +--- +## Visión general + +Para explorar las funciones de monitoreo de contratos con IA, copie y pegue [llms.txt](/tools/contract-monitoring/llms.txt) en tu LLM de elección. + +## Características principales + +* **Notificaciones en tiempo real** - Apunta a eventos específicos y recibe webhooks en cuestión de segundos +* **Configuración sin código** - Configurar monitores a través de la interfaz de usuario de la plataforma sin escribir código + +## Próximos pasos + +:::next-steps +* [Crear una alerta](/tools/contract-monitoring/create-alert): Configure su primera alerta para llamadas a funciones. +* [Chainhooks](/tools/chainhook): Aprende más sobre Chainhooks y cómo se diferencian del monitoreo de contratos. +::: + +:::callout +type: help + +### ¿Necesita ayuda con el monitoreo de contratos? + +Contáctenos en el #api canal encendido [Discord](https://stacks.chat/) bajo la sección de Herramientas para Desarrolladores de Hiro. +::: diff --git a/content/docs/es/tools/contract-monitoring/meta.json b/content/docs/es/tools/contract-monitoring/meta.json new file mode 100644 index 000000000..43ccb70f4 --- /dev/null +++ b/content/docs/es/tools/contract-monitoring/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Contract Monitoring", + "root": true, + "pages": ["---Contract Monitoring---", "index", "create-alert"] +} diff --git a/content/docs/resources/archive/meta.json b/content/docs/resources/archive/meta.json deleted file mode 100644 index 5f3960677..000000000 --- a/content/docs/resources/archive/meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "title": "Hiro Archive", - "root": true, - "pages": ["index", "verify-archive-data", "stacks-blockchain", "stacks-api", "token-metadata-api"] -} diff --git a/content/docs/resources/archive/verify-archive-data.mdx b/content/docs/resources/archive/verify-archive-data.mdx deleted file mode 100644 index fc0f92623..000000000 --- a/content/docs/resources/archive/verify-archive-data.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Verify archive data -description: Verify the integrity of the data in a particular snapshot. ---- - -All datasets have an associated SHA256 hash file which can be used to verify the integrity of the downloaded dataset. -As some of the archives are quite large, this is useful to ensure the file you've downloaded matches the file maintained in the Hiro Archive. - -After downloading an archive file and its associated shasum file, you can verify the integrity of the archive file like so: - -```terminal -$ echo "$(cat | awk '{print $1}') " | shasum --check -: OK - -$ echo "$(cat mainnet-stacks-blockchain-api-latest.sha256 | awk '{print $1}') mainnet-stacks-blockchain-api-latest.gz" | shasum --check - -mainnet-stacks-blockchain-api-latest.gz: OK - -# Otherwise a log will be printed indicating failure -mainnet-stacks-blockchain-api-latest.gz: FAILED -shasum: WARNING: 1 computed checksum did NOT match -``` - -:::callout -type: warn -### Note -If the integrity check fails for any reason, you may need to delete the local archive and re-attempt the download. If issues persist, switch to a different network and try again. -::: \ No newline at end of file diff --git a/hooks/use-breadcrumb.tsx b/hooks/use-breadcrumb.tsx index 383bc620b..dfc3ba408 100644 --- a/hooks/use-breadcrumb.tsx +++ b/hooks/use-breadcrumb.tsx @@ -1,5 +1,7 @@ import { usePathname } from 'next/navigation'; import type { ReactNode } from 'react'; +import { i18n } from '@/lib/i18n'; +import { useTranslations } from './use-translations'; interface BreadcrumbItem { name: ReactNode; @@ -7,36 +9,25 @@ interface BreadcrumbItem { } /** - * Format breadcrumb names for display + * Format breadcrumb names for display using translations */ -function formatBreadcrumbName(name: string): string { - const specialCases: Record = { - api: 'API', - apis: 'APIs', - cli: 'CLI', - rpc: 'RPC', - http: 'HTTP', - sdk: 'SDK', - sip: 'SIP', - bns: 'BNS', - stx: 'STX', - nft: 'NFT', - btc: 'BTC', - auth: 'Auth', - }; - +function formatBreadcrumbName(name: string, translations: any): string { const lowerName = name.toLowerCase(); - if (specialCases[lowerName]) { - return specialCases[lowerName]; + + // Check if we have a direct translation for this term + if (translations.breadcrumb[lowerName]) { + return translations.breadcrumb[lowerName]; } + // Handle hyphenated names if (name.includes('-')) { return name .split('-') - .map((word) => formatBreadcrumbName(word)) + .map((word) => formatBreadcrumbName(word, translations)) .join(' '); } + // Default to capitalizing first letter return name.charAt(0).toUpperCase() + name.slice(1); } @@ -45,8 +36,15 @@ function formatBreadcrumbName(name: string): string { */ export function useBreadcrumb(): BreadcrumbItem[] { const pathname = usePathname(); + const translations = useTranslations(); const segments = pathname.split('/').filter(Boolean); + + // Remove locale prefix if it exists + const firstSegment = segments[0]; + if (firstSegment && i18n.languages.includes(firstSegment)) { + segments.shift(); + } const items: BreadcrumbItem[] = []; let currentPath = ''; @@ -69,7 +67,7 @@ export function useBreadcrumb(): BreadcrumbItem[] { return; } - const name = formatBreadcrumbName(segment); + const name = formatBreadcrumbName(segment, translations); // For the last segment, don't include URL (current page) if (index === segments.length - 1) { diff --git a/hooks/use-localized-navigation.tsx b/hooks/use-localized-navigation.tsx new file mode 100644 index 000000000..fb241d0c2 --- /dev/null +++ b/hooks/use-localized-navigation.tsx @@ -0,0 +1,158 @@ +'use client'; + +import { useMemo } from 'react'; +import type { BaseLayoutProps } from '@/components/layouts/shared'; +import { useTranslations } from './use-translations'; + +/** + * Hook to get localized navigation configuration + * Returns navigation items with translations for the current locale + */ +export function useLocalizedNavigation(): BaseLayoutProps['links'] { + const t = useTranslations(); + + return useMemo( + () => [ + // Tools menu + { + type: 'menu' as const, + text: t.navigation.menus.tools, + items: [ + { + text: t.tools.clarinet.title, + description: t.tools.clarinet.description, + url: '/tools/clarinet', + }, + { + text: t.tools.chainhook.title, + description: t.tools.chainhook.description, + url: '/tools/chainhook', + }, + { + text: t.tools.contractMonitoring.title, + description: t.tools.contractMonitoring.description, + url: '/tools/contract-monitoring', + }, + { + text: t.tools.clarityVscode.title, + description: t.tools.clarityVscode.description, + url: '/tools/clarinet/vscode-extension', + }, + { + text: t.tools.bitcoinIndexer.title, + description: t.tools.bitcoinIndexer.description, + url: '/tools/bitcoin-indexer', + isNew: true, + }, + ], + }, + // APIs menu + { + type: 'menu' as const, + text: t.navigation.menus.apis, + items: [ + { + text: t.apis.apiKeys.title, + description: t.apis.apiKeys.description, + url: '/resources/guides/api-keys', + }, + { + text: t.apis.rateLimits.title, + description: t.apis.rateLimits.description, + url: '/resources/guides/rate-limits', + }, + { + text: t.apis.stacksApi.title, + description: t.apis.stacksApi.description, + url: '/apis/stacks-blockchain-api', + }, + { + text: t.apis.stacksNodeRpcApi.title, + description: t.apis.stacksNodeRpcApi.description, + url: '/apis/stacks-node-rpc-api', + }, + { + text: t.apis.tokenMetadata.title, + description: t.apis.tokenMetadata.description, + url: '/apis/token-metadata-api', + }, + { + text: t.apis.platform.title, + description: t.apis.platform.description, + url: '/apis/platform-api', + }, + { + text: t.apis.ordinals.title, + description: t.apis.ordinals.description, + url: '/apis/ordinals-api', + }, + { + text: t.apis.runes.title, + description: t.apis.runes.description, + url: '/apis/runes-api', + }, + { + text: t.apis.signerMetrics.title, + description: t.apis.signerMetrics.description, + url: '/apis/signer-metrics-api', + }, + ], + }, + // Libraries & SDKs menu + { + type: 'menu' as const, + text: t.navigation.menus.libraries, + items: [ + { + text: t.libraries.stacksJs.title, + description: t.libraries.stacksJs.description, + url: '/reference/stacks.js', + }, + { + text: t.libraries.stacksConnect.title, + description: t.libraries.stacksConnect.description, + url: '/reference/stacks.js/connect-wallet', + }, + { + text: t.libraries.clarinetSdk.title, + description: t.libraries.clarinetSdk.description, + url: '/tools/clarinet/sdk-introduction', + }, + { + text: t.libraries.clarinetBrowserSdk.title, + description: t.libraries.clarinetBrowserSdk.description, + url: '/tools/clarinet/browser-sdk-reference', + }, + ], + }, + // Resources menu + { + type: 'menu' as const, + text: t.navigation.menus.resources, + items: [ + { + text: t.resources.clarityReference.title, + description: t.resources.clarityReference.description, + url: '/resources/clarity', + }, + { + text: t.resources.guides.title, + description: t.resources.guides.description, + url: '/resources/guides', + }, + { + text: t.resources.snippets.title, + description: t.resources.snippets.description, + url: '/resources/snippets', + }, + { + text: t.resources.archive.title, + description: t.resources.archive.description, + url: '/resources/archive', + }, + ], + }, + ], + [t], + ); +} diff --git a/hooks/use-translations.tsx b/hooks/use-translations.tsx new file mode 100644 index 000000000..78877034b --- /dev/null +++ b/hooks/use-translations.tsx @@ -0,0 +1,34 @@ +'use client'; + +import { usePathname } from 'next/navigation'; +import { useMemo } from 'react'; +import { i18n } from '@/lib/i18n'; +import { type Translations, translations } from '@/lib/translations'; + +/** + * Hook to get translations for the current locale + * Detects locale from the URL path and returns appropriate translations + */ +export function useTranslations(): Translations { + const pathname = usePathname(); + + const currentLocale = useMemo(() => { + // Get current language from cookie or detect from path + const getCookieLocale = () => { + if (typeof document === 'undefined') return null; + const match = document.cookie.match(/(?:^|; )locale=([^;]*)/); + return match ? match[1] : null; + }; + + const cookieLocale = getCookieLocale(); + + // Check if path has locale prefix + const segments = pathname.split('/').filter(Boolean); + const pathLocale = i18n.languages.includes(segments[0]) ? segments[0] : null; + + // Use path locale first, then cookie locale, then default + return pathLocale || cookieLocale || i18n.defaultLanguage; + }, [pathname]); + + return translations[currentLocale] || translations[i18n.defaultLanguage]; +} diff --git a/idioma.json b/idioma.json new file mode 100644 index 000000000..d983ff1e0 --- /dev/null +++ b/idioma.json @@ -0,0 +1,11 @@ +{ + "provider": "anthropic", + "locale": { + "source": "en", + "targets": ["es"] + }, + "files": { + "include": ["content/docs/[locale]/**/*.{md,mdx}"] + }, + "preserve": ["Clarinet", "Stacks", "Clarity", "/^type:\\s*\\w+$/"] +} diff --git a/idioma.lock b/idioma.lock new file mode 100644 index 000000000..1e2597286 --- /dev/null +++ b/idioma.lock @@ -0,0 +1,1330 @@ +version: 1 +files: + content/docs/en/start/index.mdx: + content: 2b7c1c210ad85ab529ddf2a3231eadb5 + translations: + es: true + content/docs/en/tools/contract-monitoring/index.mdx: + content: 0246b6000548051a90e626ee9b290d8c + translations: + es: true + content/docs/en/tools/contract-monitoring/create-alert.mdx: + content: dbcf487653ba34bb5eaf3acdd3898591 + translations: + es: true + content/docs/en/tools/chainhook/index.mdx: + content: ece782d79e832d7d80502b0e0ea7df3e + translations: + es: true + content/docs/en/tools/bitcoin-indexer/index.mdx: + content: e0e6fae95b0cde6724695ea676a50993 + translations: + es: true + content/docs/en/resources/templates/index.mdx: + content: 9098e08cf3996068116244ee0bc1aa4e + translations: + es: true + content/docs/en/resources/guides/using-clarity-values.mdx: + content: 728d7eab980615cea1ad448776019166 + translations: + es: true + content/docs/en/resources/guides/sync-a-stacks-node.mdx: + content: 899c8c24d942d2a5e237863d1877e95a + translations: + es: true + content/docs/en/resources/guides/sync-a-bitcoin-node.mdx: + content: 27bfc8c4e74b077ab3368305cb284141 + translations: + es: true + content/docs/en/resources/guides/response-headers.mdx: + content: 60e48e28b15b144baa33e6a692e855d6 + translations: + es: true + content/docs/en/resources/guides/rate-limits.mdx: + content: 56708f0c866862d85ca2dd7055ddfd5d + translations: + es: true + content/docs/en/resources/guides/no-loss-lottery.mdx: + content: 8a44fa1852f65f7669039146e8590682 + translations: + es: true + content/docs/en/resources/guides/installing-docker.mdx: + content: 60aa9ede3f98b5c78297695fda3bf7f6 + translations: + es: true + content/docs/en/resources/guides/index.mdx: + content: cc9153a7eca95fdf92d844b5d6123a5d + translations: + es: true + content/docs/en/resources/guides/build-an-nft-marketplace.mdx: + content: ee2de4d1f7d5105959f7320401b3528a + translations: + es: true + content/docs/en/resources/guides/build-a-decentralized-kickstarter.mdx: + content: c4a668446367c932d75050d078b70f54 + translations: + es: true + content/docs/en/resources/guides/api-keys.mdx: + content: fa6bdb5c34bd2f8419f8845fc088ab78 + translations: + es: true + content/docs/en/resources/snippets/transfer-stx.mdx: + content: 361a5b414b0a83941b4bb46ac462ed37 + translations: + es: true + content/docs/en/resources/snippets/transfer-a-sip10-token.mdx: + content: 44f4482d4e755166f06f328cc24c176d + translations: + es: true + content/docs/en/resources/snippets/return-an-entry-from-a-map.mdx: + content: c42b14ee4e6e6ca628f9533760b242a2 + translations: + es: true + content/docs/en/resources/snippets/integrate-api-keys-using-stacksjs.mdx: + content: b710dc1b51753fa595e005ac2459aa90 + translations: + es: true + content/docs/en/resources/snippets/index.mdx: + content: f7f8e5a8e292e3c532b2cb013a253cce + translations: + es: true + content/docs/en/resources/snippets/helper-function-to-restrict-contract-calls.mdx: + content: 85e59878c4d6b518e4c6738974173c36 + translations: + es: true + content/docs/en/resources/snippets/get-account-details-from-wallet.mdx: + content: 8442bdb229a9927b1fc9ecb4f47e12f8 + translations: + es: true + content/docs/en/resources/snippets/generate-random-number.mdx: + content: 798675b7f6f24e7ce3c977eff911596c + translations: + es: true + content/docs/en/resources/snippets/generate-a-wallet.mdx: + content: b2b9ef884fdc9e0e64eac0043cecd08b + translations: + es: true + content/docs/en/resources/snippets/generate-a-secret-key.mdx: + content: 671db3a092caeba45414f8cb97e40fcb + translations: + es: true + content/docs/en/resources/snippets/filter-items-from-a-list.mdx: + content: 981f03094e936316432056863c19dbbd + translations: + es: true + content/docs/en/resources/snippets/fetch-testnet-bitcoin-on-regtest.mdx: + content: a0d66d826d40d2828a8ed2bed19cf0fa + translations: + es: true + content/docs/en/resources/snippets/derive-stacks-address-from-keys.mdx: + content: beff47ff834b3aa1ac4265059da2fc7a + translations: + es: true + content/docs/en/resources/snippets/derive-principal-addresses-between-networks.mdx: + content: d5cefec5cbde907ab62e77b322a3b6a1 + translations: + es: true + content/docs/en/resources/snippets/deploy-a-contract.mdx: + content: ed6d5f55ccf7b0de6cbfbc4a2b801b6a + translations: + es: true + content/docs/en/resources/snippets/create-sha256-hash-stacks-js.mdx: + content: 122a9fe757785c005724f5c7cd9e269f + translations: + es: true + content/docs/en/resources/snippets/create-sha256-hash-clarity.mdx: + content: efb0060e63ca3ccb503532064f453194 + translations: + es: true + content/docs/en/resources/snippets/create-a-sponsored-tx.mdx: + content: cf2253b094a9c255ad8a860daf3595a5 + translations: + es: true + content/docs/en/resources/snippets/create-a-random-burn-address.mdx: + content: 5bed2ed84ccec09ff69485b947d87a27 + translations: + es: true + content/docs/en/resources/snippets/convert-string-to-principal.mdx: + content: 821d82afd38459afd1b2a7f7ffbcdfe5 + translations: + es: true + content/docs/en/resources/snippets/convert-btc-to-stx-address.mdx: + content: 067fd4f7c6422182a62473f1e02694b0 + translations: + es: true + content/docs/en/resources/snippets/check-for-duplicates.mdx: + content: 633c920cd53a6a5cb57df0545293cedf + translations: + es: true + content/docs/en/resources/snippets/build-an-unsigned-tx.mdx: + content: 47874b25fcc5ddf23be9667497aff9b2 + translations: + es: true + content/docs/en/resources/snippets/build-an-nft-pc.mdx: + content: bb83105f0f9130e31da483932592bf84 + translations: + es: true + content/docs/en/resources/snippets/build-an-ft-pc.mdx: + content: 6e3b9f8e57345f21ef1119fabb7301a1 + translations: + es: true + content/docs/en/resources/snippets/build-a-stx-pc.mdx: + content: e89d98015c15638434a14285d39c96cc + translations: + es: true + content/docs/en/resources/archive/verify-archive-data.mdx: + content: 48934f74c2ce1e0a430ab03632271351 + translations: + es: true + content/docs/en/resources/archive/token-metadata-api.mdx: + content: a4a8d00140c81ac3b1046e1855471118 + translations: + es: true + content/docs/en/resources/archive/stacks-blockchain.mdx: + content: d9dd578d1489c4708c390006b295b24a + translations: + es: true + content/docs/en/resources/archive/stacks-api.mdx: + content: e6d8c822db7123a05d4673d4d560fdce + translations: + es: true + content/docs/en/resources/archive/index.mdx: + content: f46be5e103a0df4ede4461698a3250ec + translations: + es: true + content/docs/en/reference/stacks.js/index.mdx: + content: 5ebdb0edfa5a14d068821c02db259400 + translations: + es: true + content/docs/en/apis/token-metadata-api/usage.mdx: + content: 5209ebc44256072ab5e07fc347231a59 + translations: + es: true + content/docs/en/apis/token-metadata-api/index.mdx: + content: 49dd17080e4cd3201278693421200885 + translations: + es: true + content/docs/en/apis/signer-metrics-api/usage.mdx: + content: 623601a62f9bce49833b2d1c6a678709 + translations: + es: true + content/docs/en/apis/signer-metrics-api/index.mdx: + content: f15d5cf047000b04a68c422988fa197d + translations: + es: true + content/docs/en/apis/runes-api/usage.mdx: + content: d60f179c32b00a1e84d17863b7dc1c9d + translations: + es: true + content/docs/en/apis/runes-api/index.mdx: + content: 999d153b9933f5938bee03326063d974 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/usage.mdx: + content: 7314d279220c97a12ead1025bac804ef + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/requesting-proofs.mdx: + content: ca609b8a7b67810c08fe221dca57c493 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/pagination.mdx: + content: 8354cbd3849866cdeb4f46e6f79f654a + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/nonce-handling.mdx: + content: 20d43ddfba91f0899ad03d84725e6408 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/index.mdx: + content: 2b4e426187e49060b22f89939ef47bc6 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/architecture.mdx: + content: 2e6ab783108cb3e0f77795a30699aa52 + translations: + es: true + content/docs/en/apis/platform-api/usage.mdx: + content: 2706ee2d1a97091c047eb1897c5f65cf + translations: + es: true + content/docs/en/apis/platform-api/index.mdx: + content: 28ba965661e8b34b57dac97fd8f422b6 + translations: + es: true + content/docs/en/apis/ordinals-api/usage.mdx: + content: fe0970dd04819e1a241b08f1a58d8027 + translations: + es: true + content/docs/en/apis/ordinals-api/index.mdx: + content: d830ea9dd59c73a8b80126040f5a7854 + translations: + es: true + content/docs/en/tools/clarinet/(vscode-extension)/vscode-extension.mdx: + content: 60e88643627a68f77ba4b6b3e927629f + translations: + es: true + content/docs/en/tools/clarinet/(overview)/faq.mdx: + content: d7a21925b98c4cd7c49c28e0673133a9 + translations: + es: true + content/docs/en/tools/clarinet/(integrations)/stacks-js-integration.mdx: + content: 3327e2a2b0d5d02e1d1a2a925caba4b6 + translations: + es: true + content/docs/en/tools/clarinet/(integrations)/pyth-oracle-integration.mdx: + content: 79bd2eaea80b41ec8bf123209c7cc2c8 + translations: + es: true + content/docs/en/tools/clarinet/(integrations)/chainhook-integration.mdx: + content: 4ee1709c48a6a8aa5327c2084d0a20f8 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-js-sdk)/unit-testing.mdx: + content: 1d9bf04441dd6bf6ee5ace93bd387262 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-reference.mdx: + content: c2052be77136ae0919288df50055c1fd + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-js-sdk)/mainnet-execution-simulation.mdx: + content: a7914ed50f94fdeaf83814ba466c961d + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-js-sdk)/integration-testing.mdx: + content: 920380cf8e53e66da40ec4ad29736fbb + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/deployment.mdx: + content: c95d5a73049024c7b40abdf12dbf48dd + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/clarity-formatter.mdx: + content: 11bacf870dcb86c65eb37cd0f7df05bc + translations: + es: true + content/docs/en/tools/chainhook/reference/stacks-scopes.mdx: + content: eddcd9f8e69860dc30c3909858c332fa + translations: + es: true + content/docs/en/tools/chainhook/reference/bitcoin-scopes.mdx: + content: f0a4f2e9378ce1b9b62bb36a5fcb379a + translations: + es: true + content/docs/en/tools/chainhook/(chainhook-cli)/service-mode.mdx: + content: b03cca5682cf363ac68e68d8e0695696 + translations: + es: true + content/docs/en/tools/chainhook/(chainhook-cli)/event-scanning.mdx: + content: f7cab8dd10c07d9ff78fe2317022cfec + translations: + es: true + content/docs/en/tools/chainhook/(chainhook-cli)/cli-reference.mdx: + content: e957e8658bf1aa88f5b4530fc7d078bd + translations: + es: true + content/docs/en/tools/chainhook/(overview)/usage.mdx: + content: 2509818906e70fda0eab035e2e11a043 + translations: + es: true + content/docs/en/tools/chainhook/(overview)/quickstart.mdx: + content: dde5949e260e47c2aca6188688727354 + translations: + es: true + content/docs/en/tools/chainhook/(integrations)/register-chainhooks-on-devnet.mdx: + content: 4adab0c4cb5a5a24a63171937ea0a999 + translations: + es: true + content/docs/en/tools/chainhook/(event-handling)/webhook-setup.mdx: + content: 256241d98346a7b19b2f518f7b2a55dc + translations: + es: true + content/docs/en/tools/chainhook/(event-handling)/payload-handling.mdx: + content: 9b02be5964017a7314421ca2b451e39e + translations: + es: true + content/docs/en/tools/chainhook/(event-handling)/example-indexers.mdx: + content: 0f97f6c4f94ce17f941c7cc4019a5ef2 + translations: + es: true + content/docs/en/tools/chainhook/(event-handling)/custom-indexer.mdx: + content: a39c099d151c014bcfb76834870c98a5 + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(indexer)/node-installation.mdx: + content: 94fae442ea20991dfeac5649dc4e2ce1 + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(indexer)/installation.mdx: + content: 8a39c91de862d7a5efed88f4e5d5a876 + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(indexer)/full-sync.mdx: + content: f783285d58eeca56467ace17753c2a69 + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(indexer)/configuration.mdx: + content: 41784cdfcfb764a763ca5e6c08f17eb9 + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(indexer)/archive-bootstrap.mdx: + content: 12eaf0811027fc98a2ea5f39eaf0651c + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(integrations)/runes-api.mdx: + content: 326ce76f4db69ab02c71b48dae0e02f5 + translations: + es: true + content/docs/en/tools/bitcoin-indexer/(integrations)/ordinals-api.mdx: + content: 44c9029c1427ac773ed48752a144c2fa + translations: + es: true + content/docs/en/resources/clarity/reference/types.mdx: + content: 0a92f483db02bdc001dd30ad3c03dce1 + translations: + es: true + content/docs/en/resources/clarity/reference/keywords.mdx: + content: 9246ef989f8327661035182341737d67 + translations: + es: true + content/docs/en/resources/clarity/reference/functions.mdx: + content: 6ca196c9c8edd71082e4fdef8402f315 + translations: + es: true + content/docs/en/reference/stacks.js/packages/transactions.mdx: + content: 68a54c48f2e21e78c1b1ec10a6ea739d + translations: + es: true + content/docs/en/reference/stacks.js/packages/sbtc.mdx: + content: af8551c14bcea9a38e020dc659f52efb + translations: + es: true + content/docs/en/reference/stacks.js/packages/network.mdx: + content: 43de02c2d3d5df8197dbe4bf98749b6a + translations: + es: true + content/docs/en/reference/stacks.js/packages/connect.mdx: + content: 704d3d4ac4250ba25e5c218542352350 + translations: + es: true + content/docs/en/reference/stacks.js/(utils)/unit-conversion.mdx: + content: 8ad9e29912d38bd42a4b536b5883cb9e + translations: + es: true + content/docs/en/reference/stacks.js/(utils)/network-configuration.mdx: + content: e51d3aafe75588409cb45685faf3b8a9 + translations: + es: true + content/docs/en/reference/stacks.js/(utils)/encoding-decoding.mdx: + content: 9e1baede187aed6f7bec076f7d178a49 + translations: + es: true + content/docs/en/reference/stacks.js/(utils)/address-validation.mdx: + content: 002424d4b7ae82370fc50f03a3afd465 + translations: + es: true + content/docs/en/reference/stacks.js/(post-conditions)/post-conditions.mdx: + content: 97272e4387bce7fc8a4af37e7d5205b1 + translations: + es: true + content/docs/en/reference/stacks.js/(post-conditions)/implementing-post-conditions.mdx: + content: bf19b0e9a533de26276abc259fca15df + translations: + es: true + content/docs/en/reference/stacks.js/(overview)/private-keys.mdx: + content: b9e19b21d5e878e63322326f71406048 + translations: + es: true + content/docs/en/reference/stacks.js/(overview)/networks.mdx: + content: cd0c48633b43edb7850d36d76f09d3e1 + translations: + es: true + content/docs/en/reference/stacks.js/(overview)/accounts-and-addresses.mdx: + content: 7452171612635a10a3cbcffc4622179b + translations: + es: true + content/docs/en/reference/stacks.js/(integrations)/react-native-integration.mdx: + content: 6dbf10d4c0dc485718dd8960d7b49f6a + translations: + es: true + content/docs/en/reference/stacks.js/(local-accounts)/read-only-calls.mdx: + content: 2c4c6426d1d09ef64bc3d42d817c4642 + translations: + es: true + content/docs/en/reference/stacks.js/(local-accounts)/contract-deployment.mdx: + content: 6c555c226894e06a0b304d72839a04cc + translations: + es: true + content/docs/en/reference/stacks.js/(local-accounts)/contract-calls.mdx: + content: b518223183ba1e40e8c6e0f65b3a9911 + translations: + es: true + content/docs/en/reference/stacks.js/(local-accounts)/build-transactions.mdx: + content: 7621e60d6fadcd6bbce47d08da3f8850 + translations: + es: true + content/docs/en/reference/stacks.js/(connect)/wallet-support.mdx: + content: d80522ef6070b0e37aa0cc78472f19c0 + translations: + es: true + content/docs/en/reference/stacks.js/(connect)/migration-guide.mdx: + content: cb8407ae5076affcc7a3bc96185dcce6 + translations: + es: true + content/docs/en/reference/stacks.js/(connect)/message-signing.mdx: + content: 4456cfe1bbd61a527f19c2f1116ba3ce + translations: + es: true + content/docs/en/reference/stacks.js/(connect)/connect-wallet.mdx: + content: 4496d42db1f322808ca35fbdf1ae1234 + translations: + es: true + content/docs/en/reference/stacks.js/(connect)/broadcast-transactions.mdx: + content: 6d911c6d1cfa38724508763388ffe98e + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/tokens/semi-fungible-token-metadata.mdx: + content: f536f8ea39834e54b08a36ae3a247b25 + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/tokens/non-fungible-token-metadata.mdx: + content: 3fea24267a0f0f7e260cfd50941f4eb0 + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/tokens/index.mdx: + content: d4be7129ad4b757b3da80d5b6b703d01 + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/tokens/fungible-tokens.mdx: + content: 95a1599e69f307d9abd16df30ca66447 + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/tokens/fungible-token-metadata.mdx: + content: 951b0ed31d388d6d1913e3687bb7768b + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/info/status.mdx: + content: 5c2d1a75bddf1355c17b77629d19ba54 + translations: + es: true + content/docs/en/apis/token-metadata-api/reference/info/index.mdx: + content: 64c27694973a3a5eafdc1ccf6affdda5 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/signers/pox-cycle-signers.mdx: + content: 2783ed73bcbff3a15f4f63d5435efba9 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/signers/pox-cycle-signer.mdx: + content: 5e07dad456baf29d6cada6b43a77c9e3 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/info/status.mdx: + content: b6d14ab92130e71b3ca14ebcc24572ac + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-most-recent-blocks.mdx: + content: eaf84fb6329d1a51ea2138abff91f1c5 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/blocks/aggregated-signer-information-for-a-block.mdx: + content: 9424aa9cdcfc7d430d8a1a1856bbf988 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/block-proposals/signer-information-for-most-recent-block-proposals.mdx: + content: 35118e051f4abc7932652145627db269 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/block-proposals/signer-information-for-a-block.mdx: + content: 21bab35a8e5f48357db4416c66c88e47 + translations: + es: true + content/docs/en/apis/runes-api/reference/etchings/index.mdx: + content: f7c0dea0e296192a87902a9b4b0e70c3 + translations: + es: true + content/docs/en/apis/runes-api/reference/etchings/get-etchings.mdx: + content: cc5b2c72378048b91912f8cb454e7660 + translations: + es: true + content/docs/en/apis/runes-api/reference/etchings/get-etching.mdx: + content: 383f63c73b5b8440520523cf45e9add8 + translations: + es: true + content/docs/en/apis/runes-api/reference/info/status.mdx: + content: 86a8b0b52b5e96f0a01d008c20656e37 + translations: + es: true + content/docs/en/apis/runes-api/reference/info/index.mdx: + content: 3ccd6bf911a0139df28f8ace120959fb + translations: + es: true + content/docs/en/apis/runes-api/reference/balances/index.mdx: + content: 02eff4e04928ce9c95d9a1365e25e4b8 + translations: + es: true + content/docs/en/apis/runes-api/reference/balances/holders.mdx: + content: 8a79729fda470506d0c83651a05d12ef + translations: + es: true + content/docs/en/apis/runes-api/reference/balances/holder-balance.mdx: + content: 9374563366d1c530bf9861c7c043ef5d + translations: + es: true + content/docs/en/apis/runes-api/reference/balances/address.mdx: + content: 3db8ed7e93ec1d7d5e218331164564fb + translations: + es: true + content/docs/en/apis/runes-api/reference/activities/index.mdx: + content: 3b1d2c9da708d0594713774baaa9d0c4 + translations: + es: true + content/docs/en/apis/runes-api/reference/activities/for-transaction.mdx: + content: 4fd0382474e6fad159a314ca0a9efc78 + translations: + es: true + content/docs/en/apis/runes-api/reference/activities/for-block.mdx: + content: ea2928380b61eb0b6bf60138d6c36c54 + translations: + es: true + content/docs/en/apis/runes-api/reference/activities/for-address.mdx: + content: d3c1c25908afcaaf4b88cf5a56820260 + translations: + es: true + content/docs/en/apis/runes-api/reference/activities/activity.mdx: + content: fe9c4d93dfcee8168373beb66cb5ca0e + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/transactions-for-address.mdx: + content: 688420fc1a602c3a56521284257d1996 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/transactions-by-block.mdx: + content: e9157bea090f32d9c589adebb8f7c6d4 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/transaction-events.mdx: + content: e6085c508731dce28fa4dfed31921210 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/transaction-details-v3.mdx: + content: df758397076f2ba6747cfbe05815ee7c + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/statistics-for-mempool-transactions.mdx: + content: 06052f9648c994926e05571f8fa39c75 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/recent-transactions.mdx: + content: 654518441ab083b556a0aabce6c5dd34 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/mempool-transactions.mdx: + content: 6decb81779e55f169bbad214c23b7c8d + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/get-transaction.mdx: + content: 325db9a5d13e589e19871dc0b69756e5 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/get-raw-transaction.mdx: + content: 538f162640b40dc8c42829fc49ade397 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/events-for-an-address-transaction.mdx: + content: 8f4d605ad7fca8394d19d7f3437b2ad7 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/details-for-transactions.mdx: + content: 6ba7040e6a4faf2ce3a146b759d5daf0 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/broadcast-transaction.mdx: + content: 10c639b35cd09025e2ef50c46af4324b + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/transactions/address-transactions.mdx: + content: 4c08862319e829912d2f4b6c0fe56607 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/total-burnchain-rewards-for-recipient.mdx: + content: 3565fe9bd211c0b368763a82f3680253 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holders.mdx: + content: 84f50d4966368081d563162e449858d2 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-reward-slot-holder-entries.mdx: + content: e715531646f247d1b2f315cac5b2db33 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipients.mdx: + content: 9df1251d6462a65665edbe5b2de88a7b + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/stacking-rewards/recent-burnchain-reward-recipient.mdx: + content: 01cb91cfa03589850a0d4b076a6c098d + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/tokens/holders.mdx: + content: 1dd49852339f173ceb15b88ebf3f3880 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/stacking-pool/members.mdx: + content: 6644fbae8241a3899024a589bdfdb2df + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/variable.mdx: + content: 18d0da8aaa08b9f87780c7e54331eb81 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/traits.mdx: + content: 0d3817665831f86a1f6e2b3652b50b82 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/status.mdx: + content: ebd631caf8d23c9a93a1c761dbe96c26 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/source.mdx: + content: 1f7ba4f35398ce0abb508fbb80c87b43 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/read-only.mdx: + content: 72171b7feb16a44e2bfcb7eaa80a2851 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/map-entry.mdx: + content: 76c81e4292f156b1b467e57660e0aff5 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/interface.mdx: + content: 2d3e0b2d47d0b79b1aef4d8674889e21 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/info.mdx: + content: 988db66373aaef26e37bffe6617ab0c1 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/fast-read-only.mdx: + content: 81dcd644152de39ec46ca40443503590 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/events.mdx: + content: bcfa807b09897979f7587d4b1d36ef98 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/constants.mdx: + content: 12dc74615cd8bc374087c87590656de6 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/sortitions/sortition-by-consensus-hash.mdx: + content: 4c58306ab9563a1e0dd8b2c26a017d6c + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-height.mdx: + content: 6d51fdef4f10eb25fddcd8ad341bb902 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/sortitions/sortition-by-burn-hash.mdx: + content: 01a5569758a40ef51aff6ffe39f1b244 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/sortitions/latest-and-last-sortitions.mdx: + content: c114821266c5f76c79213486a507978e + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/sortitions/get-sortitions.mdx: + content: 2c0fb8f6ef8cd9b5731dc3d459a80ad3 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/search/search-by-id.mdx: + content: d8209276ed0628bf0ea359176a36f59e + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/stackers-for-signer-in-cycle.mdx: + content: 15752627b0ee89c45d5bd6273668a06c + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/stacker-set.mdx: + content: 6ddccf4db59f08eb47873e138f4f505e + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signers-in-cycle.mdx: + content: 697cfd8770791794fb04940e042ac41d + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-in-cycle.mdx: + content: b3e570481b6f4c43b567cf0257c155a3 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/signer-details.mdx: + content: c94716999f3718f9585580778ad483aa + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/pox-details.mdx: + content: 987ec5eac45afa468eed847c10f0fab8 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/cycles.mdx: + content: 3d7a4e9d3e41940d9edc4d178183e57f + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/proof-of-transfer/cycle.mdx: + content: 06dc56782a65bac79c6ef370bb100319 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/mints.mdx: + content: c17dfe3e37ae90c5d868deee7f25557d + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/holdings.mdx: + content: 3dd34e04d3ac6a2771f5ef9a671c65f6 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/non-fungible-tokens/history.mdx: + content: c0b4bc306460e3aa81b9c4346d3fa96f + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/owned-by-address.mdx: + content: 997cba378191c195156dc0cbc60a180f + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/namespaces.mdx: + content: 21e5df72751bdfe55c3121cb141969e6 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/namespace-names.mdx: + content: 022658613b8aa7ad697f7c1ac81ddb2f + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/names.mdx: + content: 0d49eecaeead50f9649c843d08165468 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/name-zonefile.mdx: + content: 0d35e5c0f4e597708f7c045b116f3d36 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/name-subdomains.mdx: + content: 7e13b66cfdae4ec45e61ff1225718b7c + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/name-details.mdx: + content: 0972472bb58f226c72407f26125e4c53 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/names/historical-zonefile.mdx: + content: 4abac5ee77c1d27f49b2fb4797226c2a + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/mempool/transaction-fee-priorities.mdx: + content: a5a3dbbd96d8a3d9762d37f96b197126 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/nakamoto/tenure-tip.mdx: + content: 4f09d0bd1d4d308724f28526ee219f0f + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/nakamoto/tenure-metadata.mdx: + content: 5d991417a21127be7b0b9c57b742becc + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/nakamoto/tenure-fork-info.mdx: + content: e2dafffb5fb59faa2ce34505ebb185ce + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/nakamoto/tenure-blocks.mdx: + content: 73378091f50700943b85245a786504ab + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/nakamoto/nakamoto-block.mdx: + content: dceb23bf61c28525cfffe1c09a23f95f + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/total-stx-supply-in-plain-text.mdx: + content: 3519f044187246dc3b4ecd3c4926fbcd + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/total-and-unlocked-stx-supply.mdx: + content: f14f1fd690b3e255bff2dbee4e4e972d + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/status.mdx: + content: 1e279f99bd13ddefc342736e418d8f8b + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/network-given-block-time.mdx: + content: bd6aa30acb6dd1fc6fcc53d84bb6fcee + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/network-block-time.mdx: + content: 87a3ee4daf854a2a2116a3a96ef38dd2 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/legacy-total-and-unlocked-stx-supply.mdx: + content: 0eecc89c39184e314a4cb408e316e292 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/health.mdx: + content: 35f5cff4a74963542b6bc73cfc18f419 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/core-api.mdx: + content: 17191268b78009969ad9a9493bac845b + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/info/circulating-stx-supply-in-plain-text.mdx: + content: 6673affb10536018fa5ffbe6c30a6d22 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/fees/transfer-estimate.mdx: + content: 2421d9f84323c43d54401dc87d38cc96 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/fees/fee-rate.mdx: + content: 2a6d55d87f29c37eaca490b0842b198a + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/fees/estimate.mdx: + content: d21c58402ba06e2c847abaa68ffb5c05 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/faucets/stx.mdx: + content: e501ec8d2313eaf6272833ca19980daf + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-blocks.mdx: + content: 7d958c2b59492efa6cfe75cec5303739 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/burn-blocks/get-burn-block.mdx: + content: 495f7c95ae79130e15b443f5f5d7b5a6 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/upload-block.mdx: + content: 903b9c51d883a8063f9c5cdb210998d9 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/recent-blocks.mdx: + content: c740f4e426e0876953e060597ebdbdc0 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-blocks.mdx: + content: c517e940152af994026a46598e6f7939 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-blocks-by-burn-block.mdx: + content: 74dfd2a0f825f79ae1619ba3d56f5e39 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/get-block.mdx: + content: c2c0dfedc1d3674e13a96901a4025fdf + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-proposal.mdx: + content: 5c1485071eced78b411ab9765a5bf930 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-height.mdx: + content: 6a4418a4bbdf0e9f51841916d052d8ab + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-height-v3.mdx: + content: 0e9ec8ec86f3db97032eb23726c7cfc9 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-hash.mdx: + content: ca3fe08cb68ff62817110d6eda813b94 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-height.mdx: + content: f8de708c789855a8cc80498544ff9dc1 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/block-by-burn-block-hash.mdx: + content: 40d03dd6644fcddf144e75f1561001e3 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/blocks/average-times.mdx: + content: 64a3ccbe79fe96c2284dfad5901d0145 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/transactions.mdx: + content: 0e432ba0c0ee1f54d6267faf415729ca + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/transactions-with-transfers.mdx: + content: 839846d13db36f0b95a119124a584466 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/transaction-with-transfers.mdx: + content: 6c3550e9cb04ed73c679f9d92a4199e6 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/stx-balances.mdx: + content: 29f12cec2b30937164e8ca2598e1e5cc + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/latest-nonce.mdx: + content: 96426e06cc9b8540c19ab982aeb34c9c + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/info.mdx: + content: 3bffb4fa78c8fa540d8873500356e7a7 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/inbound-stx-transfers.mdx: + content: 9066a19d3da397cc492ac5c80e5ecfd7 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/balances.mdx: + content: 72b57e759c2d9a924c66df1afa5febee + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/accounts/assets.mdx: + content: 0c9c7975413a69b59cf57bd9d876a6ac + translations: + es: true + content/docs/en/apis/ordinals-api/reference/statistics/index.mdx: + content: 1103ade7566b10d425d48ddde90acc74 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/statistics/get-stats-inscription-count.mdx: + content: 4230f913584c0dac8ea604588407ccce + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/update.mdx: + content: a03a36cea5f1c11f502ebc40f65ea6b0 + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/status.mdx: + content: 5b544ee7d77581dcb7aa439d8ad863be + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/list.mdx: + content: 943bd15fbc8083a902d41b9cd107a039 + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/index.mdx: + content: 2e4f3e8db8273c69b2adcb31a4c36245 + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/get.mdx: + content: 856b22bbfcebaf8cd7cfd44f9bca8d5b + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/delete.mdx: + content: d68ec1cf4738a2f11d56d3ed4610a58c + translations: + es: true + content/docs/en/apis/platform-api/reference/chainhooks/create.mdx: + content: 5d02d62621983edc752a40b685591e70 + translations: + es: true + content/docs/en/apis/platform-api/reference/devnet/stop.mdx: + content: 54c8879aa39a9c60298110890bb08437 + translations: + es: true + content/docs/en/apis/platform-api/reference/devnet/start.mdx: + content: 23f0ddd5d301d80d0d93c68886f603b2 + translations: + es: true + content/docs/en/apis/platform-api/reference/devnet/stacks-blockchain-api.mdx: + content: 76ca5ad69f152a0eb87452e21d7e33b1 + translations: + es: true + content/docs/en/apis/platform-api/reference/devnet/index.mdx: + content: 9d346967a7508eeba5cf0a80a85548a0 + translations: + es: true + content/docs/en/apis/platform-api/reference/devnet/bitcoin-node.mdx: + content: dbc8945485b73c52c8632638872a64a9 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/satoshis/index.mdx: + content: 64e7b31877de8b4626037e8598c1c41e + translations: + es: true + content/docs/en/apis/ordinals-api/reference/satoshis/get-satoshi.mdx: + content: 144defd84997109d355e253a34adc439 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/satoshis/get-satoshi-inscriptions.mdx: + content: 23ae44a6f2c05b3cf8156ad1da154977 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/inscriptions/index.mdx: + content: 52c798db8d51cbd0ddc6bd171f193b3a + translations: + es: true + content/docs/en/apis/ordinals-api/reference/inscriptions/get-transfers-per-block.mdx: + content: 620311a4d63095d25c834e9f3f89116d + translations: + es: true + content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscriptions.mdx: + content: 653c9d1b7d97b35fc21e33b957cad7e3 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription.mdx: + content: 40e8fc12209a7d9aca560d8576787212 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription-transfers.mdx: + content: c51713f4a01d4abe5a90c4962fb3c7f3 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/inscriptions/get-inscription-content.mdx: + content: dd18929375cc13c022cb46a4f17efcf2 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/info/status.mdx: + content: 529dcc80c0804b9206281f371032262f + translations: + es: true + content/docs/en/apis/ordinals-api/reference/info/index.mdx: + content: 6456155efe6412224483267c7b575002 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/brc20/index.mdx: + content: 59cef082f99dd038a520c395f49de879 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-tokens.mdx: + content: e9c46e9c0e10e0e85069c097d052bd9d + translations: + es: true + content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-token-holders.mdx: + content: e538761d5f130823e406bf2a88276c39 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-token-details.mdx: + content: a0376c3895970c67f371f38ef689cee6 + translations: + es: true + content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-balances.mdx: + content: f304f3e2ed9daf67fafc9fdcb58d206d + translations: + es: true + content/docs/en/apis/ordinals-api/reference/brc20/get-brc20-activity.mdx: + content: 5bd7e58ef946365e0c7c8b3f24fcaa64 + translations: + es: true + content/docs/en/apis/stacks-blockchain-api/reference/smart-contracts/by-trait.mdx: + content: 7e156caf442e90e1d078462fff25a13e + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/info/index.mdx: + content: 1053e8904a8982bc377ab524fdacdf67 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/signers/index.mdx: + content: f0c47f15b9a66e8fb077b27c346a8be4 + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/blocks/index.mdx: + content: 26186679c6e60aa68cd71898ea9453fe + translations: + es: true + content/docs/en/apis/signer-metrics-api/reference/block-proposals/index.mdx: + content: ed851f2b26e1d21f66c5d90f68a44dc4 + translations: + es: true + content/docs/en/tools/clarinet/index.mdx: + content: f1201d960004afac50683cd6ce85a5ab + translations: + es: true + content/docs/en/resources/clarity/index.mdx: + content: b54770928c81739a6652df6edd4c9ac3 + translations: + es: true + content/docs/en/resources/guides/using-pyth-price-feeds.mdx: + content: b6fedf15336c0fa9bafa73b73ef944c1 + translations: + es: true + content/docs/en/tools/clarinet/(overview)/quickstart.mdx: + content: f93805a60c5bdc6d344156ca17b6aa00 + translations: + es: true + content/docs/en/tools/clarinet/(overview)/project-structure.mdx: + content: 19be410d3b0e4208fa1e78f21d344c7f + translations: + es: true + content/docs/en/tools/clarinet/(integrations)/sbtc-integration.mdx: + content: 1e885474ba73a97650453f81a3bac245 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/validation-and-analysis.mdx: + content: 1c00e91c13b28c9e743502b6253ea04d + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/project-development.mdx: + content: d6f3787abe4dcec5d9bac4402a2e1a26 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/local-blockchain-development.mdx: + content: 8aeb63d215fccc1a92b4bd16e2d76bc2 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/contract-interaction.mdx: + content: b8918a23bcf9595544d9353dc057c895 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-cli)/cli-reference.mdx: + content: 1804c7cefe8c3b7bd8a132ccfca20e9a + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-js-sdk)/sdk-introduction.mdx: + content: 3b022c232810e4d8528b206d7cb01523 + translations: + es: true + content/docs/en/tools/clarinet/(clarinet-js-sdk)/browser-sdk-reference.mdx: + content: 66b9da7aaf786a8864961ea4dc9b5051 + translations: + es: true + content/docs/en/reference/stacks.js/(integrations)/pyth-oracle-integration.mdx: + content: a0bb8207e6e36a371a5edc3e309b656d + translations: + es: true + content/docs/en/resources/clarity/(integrations)/external-data.mdx: + content: 0d493d144eea52bd65f81ca15c340a30 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/usage.mdx: + content: 1243593b9df0e200acab53ff82cdf513 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/index.mdx: + content: 71b1b7af03c741b61afcab1e77ee9a4c + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/transactions/transaction-details-v3.mdx: + content: df758397076f2ba6747cfbe05815ee7c + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/transactions/broadcast-transaction.mdx: + content: 10c639b35cd09025e2ef50c46af4324b + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-consensus-hash.mdx: + content: 4c58306ab9563a1e0dd8b2c26a017d6c + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-height.mdx: + content: 6d51fdef4f10eb25fddcd8ad341bb902 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/sortition-by-burn-hash.mdx: + content: 01a5569758a40ef51aff6ffe39f1b244 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/latest-and-last-sortitions.mdx: + content: c114821266c5f76c79213486a507978e + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/sortitions/get-sortitions.mdx: + content: 2c0fb8f6ef8cd9b5731dc3d459a80ad3 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/variable.mdx: + content: 18d0da8aaa08b9f87780c7e54331eb81 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/traits.mdx: + content: 0d3817665831f86a1f6e2b3652b50b82 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/source.mdx: + content: 1f7ba4f35398ce0abb508fbb80c87b43 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/read-only.mdx: + content: 72171b7feb16a44e2bfcb7eaa80a2851 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/map-entry.mdx: + content: 76c81e4292f156b1b467e57660e0aff5 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/interface.mdx: + content: 2d3e0b2d47d0b79b1aef4d8674889e21 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/fast-read-only.mdx: + content: 81dcd644152de39ec46ca40443503590 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/smart-contracts/constants.mdx: + content: 12dc74615cd8bc374087c87590656de6 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/stacker-set.mdx: + content: 6ddccf4db59f08eb47873e138f4f505e + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/signer-details.mdx: + content: c94716999f3718f9585580778ad483aa + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/proof-of-transfer/pox-details.mdx: + content: 987ec5eac45afa468eed847c10f0fab8 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/info/health.mdx: + content: 35f5cff4a74963542b6bc73cfc18f419 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/info/core-api.mdx: + content: 17191268b78009969ad9a9493bac845b + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/fees/transfer-estimate.mdx: + content: 2421d9f84323c43d54401dc87d38cc96 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/fees/estimate.mdx: + content: d21c58402ba06e2c847abaa68ffb5c05 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/blocks/upload-block.mdx: + content: 903b9c51d883a8063f9c5cdb210998d9 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/blocks/block-proposal.mdx: + content: 5c1485071eced78b411ab9765a5bf930 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/blocks/block-by-height-v3.mdx: + content: 0e9ec8ec86f3db97032eb23726c7cfc9 + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-tip.mdx: + content: 4f09d0bd1d4d308724f28526ee219f0f + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-metadata.mdx: + content: 5d991417a21127be7b0b9c57b742becc + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-fork-info.mdx: + content: e2dafffb5fb59faa2ce34505ebb185ce + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/tenure-blocks.mdx: + content: 73378091f50700943b85245a786504ab + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/nakamoto/nakamoto-block.mdx: + content: dceb23bf61c28525cfffe1c09a23f95f + translations: + es: true + content/docs/en/apis/stacks-node-rpc-api/reference/accounts/info.mdx: + content: 3bffb4fa78c8fa540d8873500356e7a7 + translations: + es: true + content/docs/en/resources/archive/download-guide.mdx: + content: 25c13ed29bef0e98811ac88d7935689b + translations: + es: true diff --git a/lib/i18n.ts b/lib/i18n.ts new file mode 100644 index 000000000..374a83e8d --- /dev/null +++ b/lib/i18n.ts @@ -0,0 +1,34 @@ +import type { I18nConfig } from 'fumadocs-core/i18n'; + +export const i18n: I18nConfig = { + defaultLanguage: 'en', + languages: ['en', 'es'], + // hideLocale: 'default-locale', +}; + +export const languageNames: Record = { + en: 'English', + es: 'Español', +}; + +export const languageAbbreviations: Record = { + en: 'EN', + es: 'ES', +}; + +export const languageFlags: Record = { + en: '🇺🇸', + es: '🇪🇸', +}; + +// Localized language names - key is the language code, value is how to say that language name in different locales +export const localizedLanguageNames: Record> = { + en: { + en: 'English', + es: 'Inglés', + }, + es: { + en: 'Spanish', + es: 'Español', + }, +}; diff --git a/lib/locale-utils.ts b/lib/locale-utils.ts new file mode 100644 index 000000000..659640e36 --- /dev/null +++ b/lib/locale-utils.ts @@ -0,0 +1,44 @@ +import { i18n } from '@/lib/i18n'; + +/** + * Extract locale from a URL path + * @param pathname - The URL pathname to parse + * @returns The detected locale or default locale + */ +export function getLocaleFromPath(pathname: string): string { + // Check if path has locale prefix + const segments = pathname.split('/').filter(Boolean); + const pathLocale = i18n.languages.includes(segments[0]) ? segments[0] : null; + + return pathLocale || i18n.defaultLanguage; +} + +/** + * Extract locale from request headers (referer) + * Used in API routes where we can't use React hooks + * @param request - The incoming request + * @returns The detected locale or default locale + */ +export function getLocaleFromRequest(request: Request): string { + // Try to get locale from referer header + const referer = request.headers.get('referer'); + if (referer) { + try { + const refererUrl = new URL(referer); + return getLocaleFromPath(refererUrl.pathname); + } catch { + // Invalid referer URL, fall back to default + } + } + + // Could also check Accept-Language header as fallback + const acceptLanguage = request.headers.get('accept-language'); + if (acceptLanguage) { + const preferredLang = acceptLanguage.split(',')[0]?.split('-')[0]; + if (preferredLang && i18n.languages.includes(preferredLang)) { + return preferredLang; + } + } + + return i18n.defaultLanguage; +} diff --git a/lib/remark-custom-directives.ts b/lib/remark-custom-directives.ts index 47403a5e2..1d9f24c14 100644 --- a/lib/remark-custom-directives.ts +++ b/lib/remark-custom-directives.ts @@ -81,47 +81,38 @@ function transformNextStepsDirective(node: any, index: number | undefined, paren return; } - // Create the transformed nodes - const transformedNodes = [ - // ## Next steps header - { - type: 'heading', - depth: 2, - children: [{ type: 'text', value: 'Next steps' }], - }, - // wrapper with children - { + // Create the transformed node - just the wrapper with children + const transformedNode = { + type: 'mdxJsxFlowElement', + name: 'Cards', + attributes: [], + children: nextStepsData.map((step) => ({ type: 'mdxJsxFlowElement', - name: 'Cards', - attributes: [], - children: nextStepsData.map((step) => ({ - type: 'mdxJsxFlowElement', - name: 'NextCard', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'href', - value: step.href, - }, - { - type: 'mdxJsxAttribute', - name: 'title', - value: step.title, - }, - { - type: 'mdxJsxAttribute', - name: 'description', - value: step.description, - }, - ], - children: [], - })), - }, - ]; - - // Replace the directive node with our transformed nodes + name: 'NextCard', + attributes: [ + { + type: 'mdxJsxAttribute', + name: 'href', + value: step.href, + }, + { + type: 'mdxJsxAttribute', + name: 'title', + value: step.title, + }, + { + type: 'mdxJsxAttribute', + name: 'description', + value: step.description, + }, + ], + children: [], + })), + }; + + // Replace the directive node with our transformed node if (parent && index !== null) { - parent.children.splice(index, 1, ...transformedNodes); + parent.children.splice(index, 1, transformedNode); } } @@ -315,64 +306,55 @@ function transformObjectivesDirective( } } - // Create transformed nodes - const transformedNodes = [ - // ## What you'll learn - { - type: 'heading', - depth: 2, - children: [{ type: 'text', value: "What you'll learn" }], - }, - // Container div with objectives - { + // Create transformed node - just the container div with objectives + const transformedNode = { + type: 'mdxJsxFlowElement', + name: 'div', + attributes: [ + { + type: 'mdxJsxAttribute', + name: 'className', + value: 'space-y-3 my-6', + }, + ], + children: objectives.map((text) => ({ type: 'mdxJsxFlowElement', name: 'div', attributes: [ { type: 'mdxJsxAttribute', name: 'className', - value: 'space-y-3 my-6', + value: 'flex items-start gap-3', + }, + ], + children: [ + // ArrowRight icon + { + type: 'mdxJsxFlowElement', + name: 'ArrowRight', + attributes: [ + { + type: 'mdxJsxAttribute', + name: 'className', + value: 'h-4 w-4 text-brand-orange dark:text-brand-orange mt-1.5 flex-shrink-0', + }, + ], + children: [], + }, + // Text span + { + type: 'mdxJsxFlowElement', + name: 'span', + attributes: [], + children: [{ type: 'text', value: text }], }, ], - children: objectives.map((text) => ({ - type: 'mdxJsxFlowElement', - name: 'div', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'className', - value: 'flex items-start gap-3', - }, - ], - children: [ - // ArrowRight icon - { - type: 'mdxJsxFlowElement', - name: 'ArrowRight', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'className', - value: 'h-4 w-4 text-brand-orange dark:text-brand-orange mt-1.5 flex-shrink-0', - }, - ], - children: [], - }, - // Text span - { - type: 'mdxJsxFlowElement', - name: 'span', - attributes: [], - children: [{ type: 'text', value: text }], - }, - ], - })), - }, - ]; - - // Replace directive with transformed nodes + })), + }; + + // Replace directive with transformed node if (parent && index !== undefined) { - parent.children.splice(index, 1, ...transformedNodes); + parent.children.splice(index, 1, transformedNode); } } @@ -408,32 +390,23 @@ function transformPrerequisitesDirective( file.warn('prerequisites directive should contain at most 6 items', node.position); } - // Create transformed nodes - const transformedNodes = [ - // ## Prerequisites - { - type: 'heading', - depth: 2, - children: [{ type: 'text', value: 'Prerequisites' }], - }, - // Container div with the original list inside - { - type: 'mdxJsxFlowElement', - name: 'div', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'className', - value: 'my-6', - }, - ], - children: node.children, // Keep all original children including the list - }, - ]; + // Create transformed node - just the container div with the original list inside + const transformedNode = { + type: 'mdxJsxFlowElement', + name: 'div', + attributes: [ + { + type: 'mdxJsxAttribute', + name: 'className', + value: 'my-6', + }, + ], + children: node.children, // Keep all original children including the list + }; - // Replace directive with transformed nodes + // Replace directive with transformed node if (parent && index !== undefined) { - parent.children.splice(index, 1, ...transformedNodes); + parent.children.splice(index, 1, transformedNode); } } diff --git a/lib/translations/en.ts b/lib/translations/en.ts new file mode 100644 index 000000000..18ebe5ab2 --- /dev/null +++ b/lib/translations/en.ts @@ -0,0 +1,161 @@ +import type { Translations } from './types'; + +export const en: Translations = { + navigation: { + signIn: 'Sign in', + menus: { + tools: 'Tools', + apis: 'APIs', + libraries: 'Libraries & SDKs', + resources: 'Resources', + }, + search: 'Search', + searchAriaLabel: 'Search', + llmShare: { + copyMarkdown: 'Copy markdown', + viewAsMarkdown: 'View as Markdown', + openIn: 'Open in', + askQuestions: 'Ask questions about this page', + }, + toc: { + contents: 'Contents', + }, + feedback: { + question: 'How is this guide?', + good: 'Good', + bad: 'Bad', + thankYou: 'Thank you for your feedback!', + viewHere: 'View here', + placeholder: 'Leave your feedback...', + submit: 'Submit', + submitting: 'Submitting...', + }, + }, + breadcrumb: { + // Main sections + tools: 'Tools', + apis: 'APIs', + reference: 'Reference', + resources: 'Resources', + + // Common terms + api: 'API', + cli: 'CLI', + rpc: 'RPC', + http: 'HTTP', + sdk: 'SDK', + sip: 'SIP', + bns: 'BNS', + stx: 'STX', + nft: 'NFT', + btc: 'BTC', + auth: 'Auth', + + // Tools + clarinet: 'Clarinet', + chainhook: 'Chainhook', + + // Specific pages/sections + guides: 'Guides', + clarity: 'Clarity', + snippets: 'Snippets', + archive: 'Archive', + }, + tools: { + clarinet: { + title: 'Clarinet', + description: 'Development environment and testing framework for Clarity smart contracts.', + }, + chainhook: { + title: 'Chainhook', + description: 'Monitor and analyze Clarity smart contract activity.', + }, + contractMonitoring: { + title: 'Contract Monitoring', + description: 'Monitor and analyze Clarity smart contract activity.', + }, + clarityVscode: { + title: 'Clarity VSCode Extension', + description: 'Monitor and analyze Clarity smart contract activity.', + }, + bitcoinIndexer: { + title: 'Bitcoin Indexer', + description: 'Indexer for Bitcoin blockchain data.', + }, + }, + apis: { + apiKeys: { + title: 'API keys', + description: 'API keys for accessing Hiro APIs.', + }, + rateLimits: { + title: 'Rate limits', + description: 'Rate limits for accessing Hiro APIs.', + }, + stacksApi: { + title: 'Stacks API', + description: 'RESTful API for accessing Stacks blockchain data and functionality.', + }, + stacksNodeRpcApi: { + title: 'Stacks Node RPC API', + description: + 'Raw blockchain node methods: submit txs, call read-only contracts, query mempool/state.', + }, + tokenMetadata: { + title: 'Token Metadata API', + description: 'API for retrieving NFT and fungible token metadata.', + }, + platform: { + title: 'Platform API', + description: 'API for accessing Hiro Platform data and functionality.', + }, + ordinals: { + title: 'Ordinals API', + description: 'API for Bitcoin Ordinals and inscriptions data.', + }, + runes: { + title: 'Runes API', + description: 'API for Bitcoin Runes data.', + }, + signerMetrics: { + title: 'Signer Metrics API', + description: 'API for accessing Signer metrics data and functionality.', + }, + }, + libraries: { + stacksJs: { + title: 'Stacks.js', + description: 'JavaScript library for building on Stacks.', + }, + stacksConnect: { + title: 'Stacks Connect', + description: 'JavaScript library for connecting to Stacks wallets.', + }, + clarinetSdk: { + title: 'Clarinet JS SDK', + description: 'JavaScript SDK for Clarinet.', + }, + clarinetBrowserSdk: { + title: 'Clarinet JS Browser SDK', + description: 'JavaScript SDK for Clarinet in the browser.', + }, + }, + resources: { + clarityReference: { + title: 'Clarity Reference', + description: 'Clarity language reference.', + }, + guides: { + title: 'Guides', + description: 'Guides for building on Stacks.', + }, + snippets: { + title: 'Snippets', + description: 'Code snippets for building on Stacks and Bitcoin.', + }, + archive: { + title: 'Hiro Archive', + description: 'Archive of blockchain data.', + }, + }, +}; diff --git a/lib/translations/es.ts b/lib/translations/es.ts new file mode 100644 index 000000000..e11be14f8 --- /dev/null +++ b/lib/translations/es.ts @@ -0,0 +1,161 @@ +import type { Translations } from './types'; + +export const es: Translations = { + navigation: { + signIn: 'Iniciar sesión', + menus: { + tools: 'Herramientas', + apis: 'APIs', + libraries: 'Bibliotecas y SDKs', + resources: 'Recursos', + }, + search: 'Buscar', + searchAriaLabel: 'Buscar', + llmShare: { + copyMarkdown: 'Copiar markdown', + viewAsMarkdown: 'Ver como Markdown', + openIn: 'Abrir en', + askQuestions: 'Haz preguntas sobre esta página', + }, + toc: { + contents: 'Contenidos', + }, + feedback: { + question: '¿Cómo es esta guía?', + good: 'Buena', + bad: 'Mala', + thankYou: '¡Gracias por tus comentarios!', + viewHere: 'Ver aquí', + placeholder: 'Deja tus comentarios...', + submit: 'Enviar', + submitting: 'Enviando...', + }, + }, + breadcrumb: { + // Main sections + tools: 'Herramientas', + apis: 'APIs', + reference: 'Referencia', + resources: 'Recursos', + + // Common terms + api: 'API', + cli: 'CLI', + rpc: 'RPC', + http: 'HTTP', + sdk: 'SDK', + sip: 'SIP', + bns: 'BNS', + stx: 'STX', + nft: 'NFT', + btc: 'BTC', + auth: 'Auth', + + // Tools + clarinet: 'Clarinet', + chainhook: 'Chainhook', + + // Specific pages/sections + guides: 'Guías', + clarity: 'Clarity', + snippets: 'Fragmentos', + archive: 'Archivo', + }, + tools: { + clarinet: { + title: 'Clarinet', + description: 'Entorno de desarrollo y marco de pruebas para contratos inteligentes Clarity.', + }, + chainhook: { + title: 'Chainhook', + description: 'Monitorear y analizar la actividad de contratos inteligentes Clarity.', + }, + contractMonitoring: { + title: 'Monitoreo de Contratos', + description: 'Monitorear y analizar la actividad de contratos inteligentes Clarity.', + }, + clarityVscode: { + title: 'Extensión VSCode de Clarity', + description: 'Monitorear y analizar la actividad de contratos inteligentes Clarity.', + }, + bitcoinIndexer: { + title: 'Indexador de Bitcoin', + description: 'Indexador para datos de la blockchain de Bitcoin.', + }, + }, + apis: { + apiKeys: { + title: 'Claves de API', + description: 'Claves de API para acceder a las APIs de Hiro.', + }, + rateLimits: { + title: 'Límites de tasa', + description: 'Límites de tasa para acceder a las APIs de Hiro.', + }, + stacksApi: { + title: 'API de Stacks', + description: 'API RESTful para acceder a datos y funcionalidad de la blockchain Stacks.', + }, + stacksNodeRpcApi: { + title: 'API de Nodo RPC de Stacks', + description: + 'Métodos de nodo blockchain sin procesar: enviar txs, llamar contratos de solo lectura, consultar mempool/estado.', + }, + tokenMetadata: { + title: 'API de Metadatos de Tokens', + description: 'API para obtener metadatos de tokens NFT y fungibles.', + }, + platform: { + title: 'API de Plataforma', + description: 'API para acceder a datos y funcionalidad de la Plataforma Hiro.', + }, + ordinals: { + title: 'API de Ordinales', + description: 'API para datos de Ordinales de Bitcoin e inscripciones.', + }, + runes: { + title: 'API de Runas', + description: 'API para datos de Runas de Bitcoin.', + }, + signerMetrics: { + title: 'API de Métricas de Firmante', + description: 'API para acceder a datos y funcionalidad de métricas de Firmante.', + }, + }, + libraries: { + stacksJs: { + title: 'Stacks.js', + description: 'Biblioteca JavaScript para construir en Stacks.', + }, + stacksConnect: { + title: 'Stacks Connect', + description: 'Biblioteca JavaScript para conectar con billeteras Stacks.', + }, + clarinetSdk: { + title: 'SDK JS de Clarinet', + description: 'SDK de JavaScript para Clarinet.', + }, + clarinetBrowserSdk: { + title: 'SDK de Navegador JS de Clarinet', + description: 'SDK de JavaScript para Clarinet en el navegador.', + }, + }, + resources: { + clarityReference: { + title: 'Referencia de Clarity', + description: 'Referencia del lenguaje Clarity.', + }, + guides: { + title: 'Guías', + description: 'Guías para construir en Stacks.', + }, + snippets: { + title: 'Fragmentos', + description: 'Fragmentos de código para construir en Stacks y Bitcoin.', + }, + archive: { + title: 'Archivo de Hiro', + description: 'Archivo de datos de blockchain.', + }, + }, +}; diff --git a/lib/translations/index.ts b/lib/translations/index.ts new file mode 100644 index 000000000..139b186fa --- /dev/null +++ b/lib/translations/index.ts @@ -0,0 +1,11 @@ +import { en } from './en'; +import { es } from './es'; +import type { Translations } from './types'; + +export const translations: Record = { + en, + es, +}; + +export type { Translations }; +export { en, es }; diff --git a/lib/translations/types.ts b/lib/translations/types.ts new file mode 100644 index 000000000..bd899b692 --- /dev/null +++ b/lib/translations/types.ts @@ -0,0 +1,158 @@ +export interface Translations { + navigation: { + signIn: string; + menus: { + tools: string; + apis: string; + libraries: string; + resources: string; + }; + search: string; + searchAriaLabel: string; + llmShare: { + copyMarkdown: string; + viewAsMarkdown: string; + openIn: string; + askQuestions: string; + }; + toc: { + contents: string; + }; + feedback: { + question: string; + good: string; + bad: string; + thankYou: string; + viewHere: string; + placeholder: string; + submit: string; + submitting: string; + }; + }; + breadcrumb: { + // Main sections + tools: string; + apis: string; + reference: string; + resources: string; + + // Common terms + api: string; + cli: string; + rpc: string; + http: string; + sdk: string; + sip: string; + bns: string; + stx: string; + nft: string; + btc: string; + auth: string; + + // Tools + clarinet: string; + chainhook: string; + + // Specific pages/sections + guides: string; + clarity: string; + snippets: string; + archive: string; + }; + tools: { + clarinet: { + title: string; + description: string; + }; + chainhook: { + title: string; + description: string; + }; + contractMonitoring: { + title: string; + description: string; + }; + clarityVscode: { + title: string; + description: string; + }; + bitcoinIndexer: { + title: string; + description: string; + }; + }; + apis: { + apiKeys: { + title: string; + description: string; + }; + rateLimits: { + title: string; + description: string; + }; + stacksApi: { + title: string; + description: string; + }; + stacksNodeRpcApi: { + title: string; + description: string; + }; + tokenMetadata: { + title: string; + description: string; + }; + platform: { + title: string; + description: string; + }; + ordinals: { + title: string; + description: string; + }; + runes: { + title: string; + description: string; + }; + signerMetrics: { + title: string; + description: string; + }; + }; + libraries: { + stacksJs: { + title: string; + description: string; + }; + stacksConnect: { + title: string; + description: string; + }; + clarinetSdk: { + title: string; + description: string; + }; + clarinetBrowserSdk: { + title: string; + description: string; + }; + }; + resources: { + clarityReference: { + title: string; + description: string; + }; + guides: { + title: string; + description: string; + }; + snippets: { + title: string; + description: string; + }; + archive: { + title: string; + description: string; + }; + }; +} diff --git a/middleware.ts b/middleware.ts index 7a236dd30..515d17c08 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,35 +1,46 @@ -import type { NextRequest } from 'next/server'; +import { createI18nMiddleware } from 'fumadocs-core/i18n'; +import type { NextFetchEvent, NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; +import { i18n } from '@/lib/i18n'; -export function middleware(request: NextRequest) { - const { pathname } = request.nextUrl; - - if (pathname.endsWith('.md')) { - const pathWithoutMd = pathname.slice(0, -3); - - if (pathWithoutMd.match(/^\/apis\/[^/]+\/reference\//)) { - // Rewrite to our openapi-markdown API route - const apiPath = `/api/openapi-markdown${pathWithoutMd}`; - return NextResponse.rewrite(new URL(apiPath, request.url)); - } +const fumadocsMiddleware = createI18nMiddleware(i18n); - if (pathWithoutMd === '/index') { - return NextResponse.rewrite(new URL('/raw/index.mdx', request.url)); - } +export default function middleware(request: NextRequest, event: NextFetchEvent) { + const { pathname } = request.nextUrl; - if (pathWithoutMd.startsWith('/docs/') || pathWithoutMd === '/docs') { - const docPath = pathWithoutMd.startsWith('/docs/') ? pathWithoutMd.slice(6) : ''; - const rawPath = `/raw/${docPath || 'index'}.mdx`; - return NextResponse.rewrite(new URL(rawPath, request.url)); + const segments = pathname.split('/').filter(Boolean); + const currentLocale = i18n.languages.includes(segments[0]) ? segments[0] : null; + + // Get the referer to detect if user is coming from a localized page + const referer = request.headers.get('referer'); + + if (referer && !currentLocale) { + try { + const refererUrl = new URL(referer); + const refererSegments = refererUrl.pathname.split('/').filter(Boolean); + const refererLocale = i18n.languages.includes(refererSegments[0]) ? refererSegments[0] : null; + + // If coming from a non-default locale page to a non-prefixed URL + if (refererLocale && refererLocale !== i18n.defaultLanguage) { + if (pathname.match(/^\/(tools|apis|resources|reference)\//)) { + return NextResponse.redirect(new URL(`/${refererLocale}${pathname}`, request.url)); + } + } + } catch { + // Ignore invalid referer URLs } - - const rawPath = `/raw${pathWithoutMd}.mdx`; - return NextResponse.rewrite(new URL(rawPath, request.url)); } - return NextResponse.next(); + const result = fumadocsMiddleware(request, event); + return result; } export const config = { - matcher: ['/(.*).md', '/docs/(.*).md'], + matcher: [ + // Match .md files + '/(.*).md', + '/docs/(.*).md', + // Match all paths except Next.js internals, API routes, and static files + '/((?!_next|api/).*)', // This excludes /api/ but includes /apis/ + ], }; diff --git a/scripts/generate-llms-txt.ts b/scripts/generate-llms-txt.ts index eb8263da0..3c87cdd0a 100644 --- a/scripts/generate-llms-txt.ts +++ b/scripts/generate-llms-txt.ts @@ -20,6 +20,7 @@ interface PageMetadata { title: string; description: string; url: string; + cleanUrl: string; section: string[]; } @@ -33,10 +34,19 @@ function getAllPages(): PageMetadata[] { const urlParts = page.url.split('/').filter(Boolean); const section = urlParts.slice(0, -1); // All parts except the last one + // Clean URL for content links (remove locale prefix) + let cleanUrl = page.url; + const locales = ['en', 'es']; // Add your supported locales here + if (urlParts.length > 0 && locales.includes(urlParts[0])) { + // Remove the locale prefix for content links + cleanUrl = '/' + urlParts.slice(1).join('/'); + } + return { title: (page.data as any)?.title || page.file.name, description: (page.data as any)?.description || '', - url: page.url, + url: page.url, // Keep original URL for file path generation + cleanUrl: cleanUrl, // Add clean URL for content links section: section, }; }) @@ -96,11 +106,13 @@ function generateLLMsContent( if (section === '_overview') { // These are overview pages at the current level for (const page of sectionPages) { - const mdUrl = - page.url === '/' - ? `${config.productionUrl}/index.md` - : `${config.productionUrl}${page.url}.md`; - lines.push(`- [${page.title}](${mdUrl})${page.description ? `: ${page.description}` : ''}`); + const pageUrl = + page.cleanUrl === '/' + ? `${config.productionUrl}/` + : `${config.productionUrl}${page.cleanUrl}`; + lines.push( + `- [${page.title}](${pageUrl})${page.description ? `: ${page.description}` : ''}`, + ); } if (sectionPages.length > 0) lines.push(''); } else if (section !== 'root') { @@ -114,21 +126,25 @@ function generateLLMsContent( } for (const page of sectionPages) { - const mdUrl = - page.url === '/' - ? `${config.productionUrl}/index.md` - : `${config.productionUrl}${page.url}.md`; - lines.push(`- [${page.title}](${mdUrl})${page.description ? `: ${page.description}` : ''}`); + const pageUrl = + page.cleanUrl === '/' + ? `${config.productionUrl}/` + : `${config.productionUrl}${page.cleanUrl}`; + lines.push( + `- [${page.title}](${pageUrl})${page.description ? `: ${page.description}` : ''}`, + ); } lines.push(''); } else { // Root level pages for (const page of sectionPages) { - const mdUrl = - page.url === '/' - ? `${config.productionUrl}/index.md` - : `${config.productionUrl}${page.url}.md`; - lines.push(`- [${page.title}](${mdUrl})${page.description ? `: ${page.description}` : ''}`); + const pageUrl = + page.cleanUrl === '/' + ? `${config.productionUrl}/` + : `${config.productionUrl}${page.cleanUrl}`; + lines.push( + `- [${page.title}](${pageUrl})${page.description ? `: ${page.description}` : ''}`, + ); } if (sectionPages.length > 0) lines.push(''); } @@ -174,9 +190,7 @@ async function generateAllLLMsTxt() { // Create llms.txt for each section for (const [sectionPath, sectionPages] of sections) { const sectionParts = sectionPath.split('/'); - const sectionTitle = `${sectionParts - .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) - .join(' ')} Documentation`; + const sectionTitle = 'Documentation'; const sectionContent = generateLLMsContent(sectionPages, sectionTitle, sectionParts); const outputPath = path.join(PUBLIC_DIR, sectionPath);