From ef136bf4ed2c33258d8cf3a1fb2cfb130ba5b633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Fri, 3 Apr 2026 11:28:05 +0200 Subject: [PATCH 01/24] [SPA] Translation --- astro.config.mjs | 5 + src/components/Footer.astro | 85 ++- src/components/Header.jsx | 231 +++++--- .../compliance/responsible-disclosure.mdx | 69 +++ .../es/docs/compliance/security-audit.mdx | 65 ++ src/content/docs/es/docs/data-apis/index.mdx | 5 + .../docs/es/docs/features/amendments.mdx | 184 ++++++ .../es/docs/features/balance-adjustments.mdx | 68 +++ .../docs/es/docs/features/burn-2-mint.mdx | 291 +++++++++ .../developer-tooling/client-libraries.mdx | 10 + .../developer-tooling/curated-tooling.mdx | 16 + .../developer-tooling/developer-tricks.mdx | 29 + .../es/docs/features/faucet-and-explorer.mdx | 27 + .../docs/es/docs/features/governance-game.mdx | 195 ++++++ .../http-websocket-apis/admin-api-methods.mdx | 61 ++ .../http-websocket-apis/considerations.mdx | 16 + .../public-api-methods.mdx | 77 +++ .../request-formatting-guide.mdx | 63 ++ .../response-formatting-guide.mdx | 27 + .../network-features/account-managment.mdx | 44 ++ .../network-features/balance-rewards.mdx | 20 + .../docs/features/network-features/check.mdx | 26 + .../docs/features/network-features/escrow.mdx | 28 + .../docs/features/network-features/hooks.mdx | 22 + .../docs/features/network-features/offer.mdx | 20 + .../features/network-features/payments.mdx | 46 ++ .../features/network-features/uritoken.mdx | 32 + .../es/docs/features/public-nodes-rpc.mdx | 33 ++ .../features/transaction-signing/index.mdx | 64 ++ .../transaction-signing/transaction-fees.mdx | 56 ++ .../es/docs/features/versioning-process.mdx | 63 ++ .../docs/es/docs/hooks/concepts/chaining.mdx | 47 ++ .../es/docs/hooks/concepts/collect-call.mdx | 27 + .../docs/hooks/concepts/compiling-hooks.mdx | 227 +++++++ .../docs/hooks/concepts/debugging-hooks.mdx | 71 +++ .../hooks/concepts/emitted-transactions.mdx | 64 ++ .../hooks/concepts/execution-metadata.mdx | 18 + .../concepts/floating-point-numbers-xfl.mdx | 98 +++ .../docs/es/docs/hooks/concepts/grants.mdx | 90 +++ .../docs/es/docs/hooks/concepts/hook-fees.mdx | 65 ++ .../es/docs/hooks/concepts/hookon-field.mdx | 44 ++ .../concepts/introduction/example-usage.mdx | 24 + .../hooks/concepts/introduction/index.mdx | 33 ++ .../hooks/concepts/loops-and-guarding.mdx | 90 +++ .../es/docs/hooks/concepts/namespaces.mdx | 42 ++ .../es/docs/hooks/concepts/parameters.mdx | 58 ++ .../reference-counted-hook-definitions.mdx | 15 + .../hooks/concepts/serialized-objects.mdx | 55 ++ .../hooks/concepts/sethook-transaction.mdx | 155 +++++ .../docs/hooks/concepts/slots-and-keylets.mdx | 62 ++ .../docs/hooks/concepts/state-management.mdx | 65 ++ .../es/docs/hooks/concepts/terminology.mdx | 38 ++ .../docs/hooks/concepts/weak-and-strong.mdx | 116 ++++ .../docs/hooks/functions/control/accept.mdx | 95 +++ .../docs/hooks/functions/control/rollback.mdx | 81 +++ .../developer-defined/cbak-callback.mdx | 87 +++ .../functions/developer-defined/hook.mdx | 83 +++ .../functions/emitted-transaction/emit-1.mdx | 93 +++ .../functions/emitted-transaction/emit.mdx | 61 ++ .../emitted-transaction/etxn_burden.mdx | 64 ++ .../emitted-transaction/etxn_details.mdx | 96 +++ .../emitted-transaction/etxn_fee_base.mdx | 81 +++ .../emitted-transaction/etxn_generation.mdx | 69 +++ .../emitted-transaction/etxn_nonce.mdx | 86 +++ .../emitted-transaction/etxn_reserve.mdx | 80 +++ .../hooks/functions/float/float_compare.mdx | 110 ++++ .../hooks/functions/float/float_divide.mdx | 95 +++ .../hooks/functions/float/float_exponent.mdx | 67 +++ .../docs/hooks/functions/float/float_int.mdx | 107 ++++ .../hooks/functions/float/float_invert.mdx | 92 +++ .../docs/hooks/functions/float/float_log.mdx | 100 ++++ .../hooks/functions/float/float_mantissa.mdx | 95 +++ .../hooks/functions/float/float_mulratio.mdx | 112 ++++ .../hooks/functions/float/float_multiply.mdx | 99 ++++ .../hooks/functions/float/float_negate.mdx | 96 +++ .../docs/hooks/functions/float/float_one.mdx | 75 +++ .../docs/hooks/functions/float/float_root.mdx | 103 ++++ .../docs/hooks/functions/float/float_set.mdx | 102 ++++ .../docs/hooks/functions/float/float_sign.mdx | 94 +++ .../docs/hooks/functions/float/float_sto.mdx | 123 ++++ .../hooks/functions/float/float_sto_set.mdx | 98 +++ .../docs/hooks/functions/float/float_sum.mdx | 99 ++++ .../functions/hook-context/hook_account.mdx | 86 +++ .../functions/hook-context/hook_again.mdx | 57 ++ .../functions/hook-context/hook_hash.mdx | 87 +++ .../functions/hook-context/hook_param.mdx | 96 +++ .../functions/hook-context/hook_param_set.mdx | 115 ++++ .../hooks/functions/hook-context/hook_pos.mdx | 60 ++ .../functions/hook-context/hook_skip.mdx | 97 +++ .../docs/hooks/functions/ledger/fee_base.mdx | 67 +++ .../hooks/functions/ledger/ledger_keylet.mdx | 106 ++++ .../functions/ledger/ledger_last_hash.mdx | 86 +++ .../functions/ledger/ledger_last_time.mdx | 69 +++ .../hooks/functions/ledger/ledger_nonce.mdx | 88 +++ .../hooks/functions/ledger/ledger_seq.mdx | 65 ++ .../originating-transaction/meta_slot.mdx | 77 +++ .../originating-transaction/otxn_burden.mdx | 74 +++ .../originating-transaction/otxn_field.mdx | 98 +++ .../otxn_generation.mdx | 74 +++ .../originating-transaction/otxn_id.mdx | 92 +++ .../originating-transaction/otxn_json.mdx | 49 ++ .../originating-transaction/otxn_param.mdx | 96 +++ .../originating-transaction/otxn_slot.mdx | 77 +++ .../originating-transaction/otxn_type.mdx | 105 ++++ .../overview/hook-api-conventions.mdx | 67 +++ .../hooks/functions/overview/return-codes.mdx | 66 +++ .../functions/serialization/sto_emplace.mdx | 155 +++++ .../functions/serialization/sto_erase.mdx | 121 ++++ .../functions/serialization/sto_from_json.mdx | 65 ++ .../functions/serialization/sto_subarray.mdx | 144 +++++ .../functions/serialization/sto_subfield.mdx | 139 +++++ .../functions/serialization/sto_to_json.mdx | 67 +++ .../functions/serialization/sto_validate.mdx | 101 ++++ .../es/docs/hooks/functions/slot/slot.mdx | 96 +++ .../docs/hooks/functions/slot/slot_clear.mdx | 76 +++ .../docs/hooks/functions/slot/slot_count.mdx | 77 +++ .../docs/hooks/functions/slot/slot_float.mdx | 87 +++ .../es/docs/hooks/functions/slot/slot_set.mdx | 95 +++ .../docs/hooks/functions/slot/slot_size.mdx | 84 +++ .../hooks/functions/slot/slot_subarray.mdx | 101 ++++ .../hooks/functions/slot/slot_subfield.mdx | 99 ++++ .../docs/hooks/functions/slot/slot_type.mdx | 91 +++ .../docs/hooks/functions/slot/xpop_slot.mdx | 81 +++ .../es/docs/hooks/functions/state/state.mdx | 102 ++++ .../hooks/functions/state/state_foreign.mdx | 122 ++++ .../functions/state/state_foreign_set.mdx | 121 ++++ .../docs/hooks/functions/state/state_set.mdx | 113 ++++ .../hooks/functions/trace-debug/trace.mdx | 91 +++ .../functions/trace-debug/trace_float.mdx | 57 ++ .../hooks/functions/trace-debug/trace_num.mdx | 57 ++ .../hooks/functions/utilities/util_accid.mdx | 109 ++++ .../hooks/functions/utilities/util_keylet.mdx | 151 +++++ .../hooks/functions/utilities/util_raddr.mdx | 117 ++++ .../functions/utilities/util_sha512h.mdx | 117 ++++ .../hooks/functions/utilities/util_verify.mdx | 134 +++++ .../functions/websocket-apis/account_info.mdx | 44 ++ .../websocket-apis/account_namespace.mdx | 64 ++ src/content/docs/es/docs/hooks/index.mdx | 85 +++ src/content/docs/es/docs/index.mdx | 28 + .../infrastructure/advanced-configuration.mdx | 102 ++++ .../infrastructure/build-xahaud/index.mdx | 45 ++ .../infrastructure/build-xahaud/linux.mdx | 211 +++++++ .../infrastructure/build-xahaud/macos.mdx | 9 + .../infrastructure/enabling-validation.mdx | 152 +++++ .../docs/es/docs/infrastructure/identity.mdx | 274 +++++++++ .../docs/infrastructure/installing-xahaud.mdx | 214 +++++++ .../es/docs/infrastructure/interacting.mdx | 65 ++ .../infrastructure/system-requirements.mdx | 37 ++ .../docs/infrastructure/updating-xahaud.mdx | 171 ++++++ .../docs/protocol-reference/binary-format.mdx | 296 ++++++++++ .../data-types/base-58-encodings.mdx | 24 + .../data-types/currency-formats.mdx | 117 ++++ .../protocol-reference/data-types/index.mdx | 105 ++++ .../protocol-reference/ledger-data/index.mdx | 31 + .../ledger-data/ledger-header.mdx | 31 + .../ledger-data/ledger-object-ids.mdx | 21 + .../ledger-objects-types/accountroot.mdx | 83 +++ .../ledger-objects-types/amendments.mdx | 60 ++ .../ledger-objects-types/check.mdx | 58 ++ .../ledger-data/ledger-objects-types/cron.mdx | 57 ++ .../ledger-objects-types/deposit-pre-auth.mdx | 45 ++ .../ledger-objects-types/directory-node.mdx | 96 +++ .../ledger-objects-types/emitted-txn.mdx | 61 ++ .../ledger-objects-types/escrow.mdx | 67 +++ .../ledger-objects-types/fee-settings.mdx | 64 ++ .../ledger-objects-types/hook-definition.mdx | 58 ++ .../ledger-objects-types/hook-state.mdx | 42 ++ .../ledger-data/ledger-objects-types/hook.mdx | 57 ++ .../import-vl-sequence.mdx | 36 ++ .../ledger-objects-types/index.mdx | 21 + .../ledger-objects-types/ledger-hashes.mdx | 66 +++ .../ledger-objects-types/negative-unl.mdx | 53 ++ .../ledger-objects-types/offer.mdx | 66 +++ .../ledger-objects-types/pay-channel.mdx | 89 +++ .../ledger-objects-types/ripple-state.mdx | 114 ++++ .../ledger-objects-types/signers-list.mdx | 94 +++ .../ledger-objects-types/ticket.mdx | 44 ++ .../ledger-objects-types/unl-report.mdx | 63 ++ .../ledger-objects-types/uritoken.mdx | 59 ++ .../protocol-reference/transactions/index.mdx | 6 + .../pseudo-transaction-types/cron.mdx | 60 ++ .../pseudo-transaction-types/emitfailure.mdx | 4 + .../enableamendment.mdx | 38 ++ .../pseudo-transaction-types/index.mdx | 26 + .../pseudo-transaction-types/setfee.mdx | 42 ++ .../pseudo-transaction-types/unlmodify.mdx | 30 + .../pseudo-transaction-types/unlreport.mdx | 4 + .../transaction-common-fields.mdx | 181 ++++++ .../transactions/transaction-metadata.mdx | 556 ++++++++++++++++++ .../transaction-results/index.mdx | 45 ++ .../transaction-results/tec-codes.mdx | 59 ++ .../transaction-results/tef-codes.mdx | 32 + .../transaction-results/tel-codes.mdx | 28 + .../transaction-results/tem-codes.mdx | 46 ++ .../transaction-results/ter-codes.mdx | 22 + .../transaction-results/tes-codes.mdx | 11 + .../transaction-types/accountdelete.mdx | 60 ++ .../transaction-types/accountset.mdx | 105 ++++ .../transaction-types/checkcancel.mdx | 29 + .../transaction-types/checkcash.mdx | 38 ++ .../transaction-types/checkcreate.mdx | 44 ++ .../transaction-types/claimreward.mdx | 63 ++ .../transaction-types/clawback.mdx | 51 ++ .../transaction-types/cronset.mdx | 100 ++++ .../transaction-types/depositpreauth.mdx | 45 ++ .../transaction-types/escrowcancel.mdx | 42 ++ .../transaction-types/escrowcreate.mdx | 42 ++ .../transaction-types/escrowfinish.mdx | 51 ++ .../genesismint-emitted-txn.mdx | 57 ++ .../transactions/transaction-types/import.mdx | 64 ++ .../transactions/transaction-types/index.mdx | 12 + .../transactions/transaction-types/invoke.mdx | 40 ++ .../transaction-types/offercancel.mdx | 44 ++ .../transaction-types/offercreate.mdx | 68 +++ .../transaction-types/payment.mdx | 69 +++ .../transaction-types/paymentchannelclaim.mdx | 57 ++ .../paymentchannelcreate.mdx | 40 ++ .../transaction-types/paymentchannelfund.mdx | 46 ++ .../transactions/transaction-types/remit.mdx | 119 ++++ .../transaction-types/sethook.mdx | 291 +++++++++ .../transaction-types/setregularkey.mdx | 33 ++ .../transaction-types/setremarks.mdx | 91 +++ .../transaction-types/signerlistset.mdx | 52 ++ .../transaction-types/ticketcreate.mdx | 38 ++ .../transaction-types/trustset.mdx | 63 ++ .../transaction-types/uritokenburn.mdx | 38 ++ .../transaction-types/uritokenbuy.mdx | 47 ++ .../uritokencancelselloffer.mdx | 34 ++ .../uritokencreateselloffer.mdx | 47 ++ .../transaction-types/uritokenmint.mdx | 59 ++ .../docs/es/docs/resources/media-kit.mdx | 5 + .../docs/es/docs/resources/whitepaper.mdx | 153 +++++ src/content/docs/es/docs/support/help-us.mdx | 11 + .../docs/es/docs/what-is-different.mdx | 81 +++ src/layouts/BaseLayout.astro | 4 +- src/layouts/IndexLayout.astro | 196 +++--- src/pages/es/about.mdx | 49 ++ src/pages/es/connect.mdx | 140 +++++ src/pages/es/contest.mdx | 210 +++++++ src/pages/es/ecosystem.mdx | 68 +++ src/pages/es/features.mdx | 89 +++ src/pages/es/index.mdx | 3 + src/pages/es/roadmap.mdx | 69 +++ src/pages/ja/about.mdx | 49 ++ src/pages/ja/connect.mdx | 132 +++++ src/pages/ja/contest.mdx | 165 ++++++ src/pages/ja/ecosystem.mdx | 68 +++ src/pages/ja/features.mdx | 75 +++ src/pages/ja/index.mdx | 3 + src/pages/ja/roadmap.mdx | 69 +++ 250 files changed, 19359 insertions(+), 177 deletions(-) create mode 100644 src/content/docs/es/docs/compliance/responsible-disclosure.mdx create mode 100644 src/content/docs/es/docs/compliance/security-audit.mdx create mode 100644 src/content/docs/es/docs/data-apis/index.mdx create mode 100644 src/content/docs/es/docs/features/amendments.mdx create mode 100644 src/content/docs/es/docs/features/balance-adjustments.mdx create mode 100644 src/content/docs/es/docs/features/burn-2-mint.mdx create mode 100644 src/content/docs/es/docs/features/developer-tooling/client-libraries.mdx create mode 100644 src/content/docs/es/docs/features/developer-tooling/curated-tooling.mdx create mode 100644 src/content/docs/es/docs/features/developer-tooling/developer-tricks.mdx create mode 100644 src/content/docs/es/docs/features/faucet-and-explorer.mdx create mode 100644 src/content/docs/es/docs/features/governance-game.mdx create mode 100644 src/content/docs/es/docs/features/http-websocket-apis/admin-api-methods.mdx create mode 100644 src/content/docs/es/docs/features/http-websocket-apis/considerations.mdx create mode 100644 src/content/docs/es/docs/features/http-websocket-apis/public-api-methods.mdx create mode 100644 src/content/docs/es/docs/features/http-websocket-apis/request-formatting-guide.mdx create mode 100644 src/content/docs/es/docs/features/http-websocket-apis/response-formatting-guide.mdx create mode 100644 src/content/docs/es/docs/features/network-features/account-managment.mdx create mode 100644 src/content/docs/es/docs/features/network-features/balance-rewards.mdx create mode 100644 src/content/docs/es/docs/features/network-features/check.mdx create mode 100644 src/content/docs/es/docs/features/network-features/escrow.mdx create mode 100644 src/content/docs/es/docs/features/network-features/hooks.mdx create mode 100644 src/content/docs/es/docs/features/network-features/offer.mdx create mode 100644 src/content/docs/es/docs/features/network-features/payments.mdx create mode 100644 src/content/docs/es/docs/features/network-features/uritoken.mdx create mode 100644 src/content/docs/es/docs/features/public-nodes-rpc.mdx create mode 100644 src/content/docs/es/docs/features/transaction-signing/index.mdx create mode 100644 src/content/docs/es/docs/features/transaction-signing/transaction-fees.mdx create mode 100644 src/content/docs/es/docs/features/versioning-process.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/chaining.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/collect-call.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/compiling-hooks.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/debugging-hooks.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/emitted-transactions.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/grants.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/hook-fees.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/hookon-field.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/introduction/example-usage.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/introduction/index.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/loops-and-guarding.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/namespaces.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/parameters.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/reference-counted-hook-definitions.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/serialized-objects.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/sethook-transaction.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/slots-and-keylets.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/state-management.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/terminology.mdx create mode 100644 src/content/docs/es/docs/hooks/concepts/weak-and-strong.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/control/accept.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/control/rollback.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/developer-defined/cbak-callback.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/developer-defined/hook.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/emit-1.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/emit.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_burden.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_details.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_fee_base.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_generation.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_nonce.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_reserve.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_compare.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_divide.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_exponent.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_int.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_invert.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_log.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_mantissa.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_mulratio.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_multiply.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_negate.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_one.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_root.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_set.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_sign.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_sto.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_sto_set.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/float/float_sum.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_account.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_again.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_hash.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_param.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_param_set.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_pos.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/hook-context/hook_skip.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/ledger/fee_base.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/ledger/ledger_keylet.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/ledger/ledger_last_hash.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/ledger/ledger_last_time.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/ledger/ledger_nonce.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/ledger/ledger_seq.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/meta_slot.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_burden.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_field.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_generation.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_id.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_json.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_param.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_slot.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_type.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/overview/hook-api-conventions.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/overview/return-codes.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_emplace.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_erase.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_from_json.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_subarray.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_subfield.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_to_json.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/serialization/sto_validate.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_clear.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_count.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_float.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_set.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_size.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_subarray.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_subfield.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/slot_type.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/slot/xpop_slot.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/state/state.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/state/state_foreign.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/state/state_foreign_set.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/state/state_set.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/trace-debug/trace.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/trace-debug/trace_float.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/trace-debug/trace_num.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/utilities/util_accid.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/utilities/util_keylet.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/utilities/util_raddr.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/utilities/util_sha512h.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/utilities/util_verify.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/websocket-apis/account_info.mdx create mode 100644 src/content/docs/es/docs/hooks/functions/websocket-apis/account_namespace.mdx create mode 100644 src/content/docs/es/docs/hooks/index.mdx create mode 100644 src/content/docs/es/docs/index.mdx create mode 100644 src/content/docs/es/docs/infrastructure/advanced-configuration.mdx create mode 100644 src/content/docs/es/docs/infrastructure/build-xahaud/index.mdx create mode 100644 src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx create mode 100644 src/content/docs/es/docs/infrastructure/build-xahaud/macos.mdx create mode 100644 src/content/docs/es/docs/infrastructure/enabling-validation.mdx create mode 100644 src/content/docs/es/docs/infrastructure/identity.mdx create mode 100644 src/content/docs/es/docs/infrastructure/installing-xahaud.mdx create mode 100644 src/content/docs/es/docs/infrastructure/interacting.mdx create mode 100644 src/content/docs/es/docs/infrastructure/system-requirements.mdx create mode 100644 src/content/docs/es/docs/infrastructure/updating-xahaud.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/binary-format.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/data-types/base-58-encodings.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/data-types/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-header.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-object-ids.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/amendments.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/check.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/cron.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/directory-node.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/emitted-txn.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/escrow.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/fee-settings.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-state.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/import-vl-sequence.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ledger-hashes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/negative-unl.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/offer.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/pay-channel.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ticket.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/unl-report.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/uritoken.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/cron.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/emitfailure.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/enableamendment.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/setfee.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlmodify.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlreport.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-common-fields.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-metadata.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tec-codes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tef-codes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tel-codes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tem-codes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/ter-codes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tes-codes.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountdelete.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountset.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcancel.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/claimreward.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/clawback.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/cronset.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/depositpreauth.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcancel.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowfinish.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/import.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/index.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/invoke.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercancel.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/sethook.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setregularkey.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setremarks.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/signerlistset.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/ticketcreate.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/trustset.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenburn.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencancelselloffer.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx create mode 100644 src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx create mode 100644 src/content/docs/es/docs/resources/media-kit.mdx create mode 100644 src/content/docs/es/docs/resources/whitepaper.mdx create mode 100644 src/content/docs/es/docs/support/help-us.mdx create mode 100644 src/content/docs/es/docs/what-is-different.mdx create mode 100644 src/pages/es/about.mdx create mode 100644 src/pages/es/connect.mdx create mode 100644 src/pages/es/contest.mdx create mode 100644 src/pages/es/ecosystem.mdx create mode 100644 src/pages/es/features.mdx create mode 100644 src/pages/es/index.mdx create mode 100644 src/pages/es/roadmap.mdx create mode 100644 src/pages/ja/about.mdx create mode 100644 src/pages/ja/connect.mdx create mode 100644 src/pages/ja/contest.mdx create mode 100644 src/pages/ja/ecosystem.mdx create mode 100644 src/pages/ja/features.mdx create mode 100644 src/pages/ja/index.mdx create mode 100644 src/pages/ja/roadmap.mdx diff --git a/astro.config.mjs b/astro.config.mjs index 1ebbdfc..addeb11 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -16,6 +16,11 @@ export default defineConfig({ starlight({ title: 'Xahau Docs', description: 'Documentation for the Xahau blockchain', + locales: { + root: { label: 'English', lang: 'en' }, + es: { label: 'Español', lang: 'es' }, + ja: { label: '日本語', lang: 'ja' }, + }, tableOfContents: { minHeadingLevel: 1, maxHeadingLevel: 3, diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 71bfc9b..b6e0922 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,6 +1,43 @@ --- import { Image } from 'astro:assets' import logo from '../assets/xahau-logo.svg' + + const LOCALES = ['es', 'ja'] + const firstSegment = Astro.url.pathname.split('/')[1] + const locale = LOCALES.includes(firstSegment) ? firstSegment : 'en' + const p = locale !== 'en' ? `/${locale}` : '' + + const translations = { + en: { + tagline: 'This website is open source and open for contributions', + on: 'on', about: 'About', features: 'Features', ecosystem: 'Ecosystem', + roadmap: 'Roadmap', break: 'Break Xahau', fraud: 'Report Fraud', + media: 'Media kit', privacy: 'Privacy Policy', docs: 'Documentation', + getstarted: 'Get started', protocol: 'Protocol Reference', + infra: 'Infrastructure', connect: 'Connect', events: 'Events', + discord: 'Community Discord', + }, + es: { + tagline: 'Este sitio web es de código abierto y está abierto a contribuciones', + on: 'en', about: 'Acerca de', features: 'Características', ecosystem: 'Ecosistema', + roadmap: 'Hoja de ruta', break: 'Break Xahau', fraud: 'Reportar Fraude', + media: 'Kit de Prensa', privacy: 'Política de Privacidad', docs: 'Documentación', + getstarted: 'Primeros pasos', protocol: 'Referencia de Protocolo', + infra: 'Infraestructura', connect: 'Conectar', events: 'Eventos', + discord: 'Discord de la Comunidad', + }, + ja: { + tagline: 'このウェブサイトはオープンソースで、コントリビューションを受け付けています', + on: 'にて', about: 'Xahauについて', features: '機能', ecosystem: 'エコシステム', + roadmap: 'ロードマップ', break: 'Break Xahau', fraud: '不正を報告', + media: 'メディアキット', privacy: 'プライバシーポリシー', docs: 'ドキュメント', + getstarted: 'はじめる', protocol: 'プロトコルリファレンス', + infra: 'インフラストラクチャ', connect: 'コネクト', events: 'イベント', + discord: 'コミュニティDiscord', + }, + } + + const t = translations[locale] --- diff --git a/src/components/Header.jsx b/src/components/Header.jsx index e7120b2..9b26bbd 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -14,49 +14,47 @@ import { import { Bars3Icon, ChevronDownIcon, + GlobeAltIcon, XMarkIcon, } from '@heroicons/react/20/solid' import { useState } from 'react' -const socials = [ - { name: 'Events', href: '/connect' }, - { name: 'Dev Contest', href: '/contest' }, - { name: 'X', href: 'https://x.com/XahauNetwork' }, - { name: 'GitHub', href: 'https://github.com/Xahau' }, - { name: 'Community Discord', href: 'https://discord.com/invite/UzU58haAn4' }, -] - -const docs = [ - { name: 'Get started', href: '/docs' }, - { name: 'Protocol Reference', href: '/docs/protocol-reference/transactions' }, - { name: 'Hooks', href: '/docs/hooks' }, - { name: 'Data APIs', href: '/docs/data-apis' }, - { name: 'Infrastructure', href: '/docs/infrastructure/system-requirements' }, - { name: 'Whitepaper', href: '/docs/resources/whitepaper' }, -] - -const explorers = [ - { name: 'XAHSCAN', href: 'https://xahscan.com/' }, - { name: 'Bithomp Xahau Explorer', href: 'https://xahauexplorer.com/en' }, - { name: 'XRPLWin Xahau Explorer', href: 'https://xahau.xrplwin.com/' }, - { name: 'Technical Explorer', href: 'https://explorer.xahau.network/' }, -] - -// Navigation items definition shared between desktop and mobile -const navItems = [ - { name: 'About', href: '/about', urlPattern: 'about' }, - { name: 'Features', href: '/features', urlPattern: 'features' }, - { name: 'Ecosystem', href: '/ecosystem', urlPattern: 'ecosystem' }, - { name: 'Roadmap', href: '/roadmap', urlPattern: 'roadmap' }, - { name: 'Documentation', children: docs, urlPattern: 'docs' }, - { name: 'Connect', children: socials }, - { name: 'Explorers', children: explorers }, -] - import logo from '../assets/xahau-logo.svg' -const XahauLogo = () => ( - +const LOCALES = ['es', 'ja'] + +const languages = [ + { code: 'en', label: 'English', flag: '🇬🇧' }, + { code: 'es', label: 'Español', flag: '🇪🇸' }, + { code: 'ja', label: '日本語', flag: '🇯🇵' }, +] + +const nav = { + en: { + about: 'About', features: 'Features', ecosystem: 'Ecosystem', + roadmap: 'Roadmap', docs: 'Documentation', connect: 'Connect', + explorers: 'Explorers', events: 'Events', + getstarted: 'Get started', protocol: 'Protocol Reference', + infra: 'Infrastructure', discord: 'Community Discord', + }, + es: { + about: 'Acerca de', features: 'Características', ecosystem: 'Ecosistema', + roadmap: 'Hoja de ruta', docs: 'Documentación', connect: 'Conectar', + explorers: 'Exploradores', events: 'Eventos', + getstarted: 'Primeros pasos', protocol: 'Referencia de Protocolo', + infra: 'Infraestructura', discord: 'Discord de la Comunidad', + }, + ja: { + about: 'Xahauについて', features: '機能', ecosystem: 'エコシステム', + roadmap: 'ロードマップ', docs: 'ドキュメント', connect: 'コネクト', + explorers: 'エクスプローラー', events: 'イベント', + getstarted: 'はじめる', protocol: 'プロトコルリファレンス', + infra: 'インフラストラクチャ', discord: 'コミュニティDiscord', + }, +} + +const XahauLogo = ({ href }) => ( + Xahau Xahau Logo @@ -65,6 +63,58 @@ const XahauLogo = () => ( export default function Header(props) { const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + const pathname = props.url.pathname + const firstSegment = pathname.split('/')[1] + const currentLocale = LOCALES.includes(firstSegment) ? firstSegment : 'en' + const p = currentLocale !== 'en' ? `/${currentLocale}` : '' + const t = nav[currentLocale] + + function langUrl(code) { + const prefix = currentLocale !== 'en' ? `/${currentLocale}` : '' + const basePath = prefix ? (pathname.slice(prefix.length) || '/') : pathname + if (code === 'en') return basePath + return basePath === '/' ? `/${code}` : `/${code}${basePath}` + } + + const socials = [ + { name: t.events, href: `${p}/connect` }, + { name: 'Dev Contest', href: `${p}/contest` }, + { name: 'X', href: 'https://x.com/XahauNetwork' }, + { name: 'GitHub', href: 'https://github.com/Xahau' }, + { name: t.discord, href: 'https://discord.com/invite/UzU58haAn4' }, + ] + + const docs = [ + { name: t.getstarted, href: '/docs' }, + { name: t.protocol, href: '/docs/protocol-reference/transactions' }, + { name: 'Hooks', href: '/docs/hooks' }, + { name: 'Data APIs', href: '/docs/data-apis' }, + { name: t.infra, href: '/docs/infrastructure/system-requirements' }, + { name: 'Whitepaper', href: '/docs/resources/whitepaper' }, + ] + + const explorers = [ + { name: 'XAHSCAN', href: 'https://xahscan.com/' }, + { name: 'Bithomp Xahau Explorer', href: 'https://xahauexplorer.com/en' }, + { name: 'XRPLWin Xahau Explorer', href: 'https://xahau.xrplwin.com/' }, + { name: 'Technical Explorer', href: 'https://explorer.xahau.network/' }, + ] + + const navItems = [ + { name: t.about, href: `${p}/about`, urlPattern: 'about' }, + { name: t.features, href: `${p}/features`, urlPattern: 'features' }, + { name: t.ecosystem, href: `${p}/ecosystem`, urlPattern: 'ecosystem' }, + { name: t.roadmap, href: `${p}/roadmap`, urlPattern: 'roadmap' }, + { name: t.docs, children: docs, urlPattern: 'docs' }, + { name: t.connect, children: socials }, + { name: t.explorers, children: explorers }, + ] + + const pathSegments = pathname.slice(1).split('/') + const activeSegment = LOCALES.includes(pathSegments[0]) ? pathSegments[1] : pathSegments[0] + + const dropdownItemClass = 'group relative flex items-center gap-x-6 p-2 text-sm/6' + return (
- + + {/* Mobile menu */} +
- +
diff --git a/src/content/docs/es/docs/compliance/responsible-disclosure.mdx b/src/content/docs/es/docs/compliance/responsible-disclosure.mdx new file mode 100644 index 0000000..820f348 --- /dev/null +++ b/src/content/docs/es/docs/compliance/responsible-disclosure.mdx @@ -0,0 +1,69 @@ +--- +title: Divulgación Responsable +description: >- + Nuestra Política de Divulgación Responsable proporciona directrices claras para enviar + informes a través de nuestro portal de soporte, garantizando la confidencialidad. +--- +import { Aside } from '@astrojs/starlight/components'; + +### Política de Divulgación Responsable + +En Xahau, creemos que la seguridad de nuestros sistemas es extremadamente importante. + +A pesar de nuestra preocupación por la seguridad de nuestros sistemas durante el desarrollo y mantenimiento de productos, siempre existe la posibilidad de que alguien encuentre algo que necesitemos mejorar/actualizar/cambiar/arreglar /... + +Agradecemos que nos notifiques si has encontrado un punto débil en alguno de nuestros sistemas lo antes posible para que podamos tomar medidas inmediatamente para proteger a nuestros clientes y sus datos. + +### Cómo reportar + +Si crees que has encontrado un problema de seguridad en uno de nuestros sistemas, notifícanos lo antes posible publicando una **descripción general de alto nivel de tu hallazgo y tu información de contacto (para que alguien pueda comunicarse contigo) en Github:** [**https://github.com/Xahau/xahaud/issues**](https://github.com/Xahau/xahaud/issues) + +### Reglas + +Esta política de divulgación responsable no es una invitación abierta a escanear activamente nuestra red y aplicaciones en busca de vulnerabilidades. Nuestro monitoreo continuo probablemente detectará tus escaneos, y estos serán investigados. + +#### Te pedimos que: + +* No compartas información sobre el problema de seguridad con otros hasta que el problema esté resuelto, y que elimines inmediatamente cualquier dato confidencial obtenido +* No abuses del problema, por ejemplo, descargando más datos de los necesarios para demostrar la filtración o para ver, eliminar o modificar datos de terceros +* Proporciones información detallada para que podamos reproducir, validar y resolver el problema lo antes posible. Incluye tus datos de prueba, marcas de tiempo y URL(s) de los sistemas involucrados +* Dejes tus datos de contacto (dirección de correo electrónico y/o número de teléfono) para que podamos contactarte sobre el progreso de la solución. Aceptamos informes anónimos +* No utilices ataques a la seguridad física, ingeniería social, denegación de servicio distribuida, spam o aplicaciones de terceros + +### Procedimiento(s) de divulgación responsable + +#### Cuando reportes un problema de seguridad, actuaremos de la siguiente manera: + +* Recibirás una confirmación de recepción dentro de los 4 días laborables posteriores al envío del informe +* Recibirás una respuesta con la evaluación del problema de seguridad y una fecha estimada de resolución dentro de los 4 días laborables posteriores a la confirmación de recepción +* No tomaremos acciones legales contra ti en relación con el informe si has cumplido las condiciones establecidas anteriormente +* Trataremos tu informe de manera confidencial y no compartiremos tus datos con terceros sin tu permiso, salvo que sea necesario para cumplir con una obligación legal + +#### Este esquema de divulgación responsable no está destinado a: + +* Quejas +* Informes de sitios web no disponibles +* Informes de phishing +* Informes de fraude + +Para estas quejas o informes, publica una **descripción general de alto nivel de tu problema y tu información de contacto (para que alguien pueda comunicarse contigo) en Github:** [**https://github.com/Xahau/xahaud/issues**](https://github.com/Xahau/xahaud/issues) + +### Programa de recompensas (bug bounty) + +Xahau fomenta el reporte de problemas de seguridad o vulnerabilidades. Podemos ofrecer una recompensa adecuada por la divulgación confidencial de cualquier problema de diseño o implementación que pueda ser utilizado para comprometer la confidencialidad o integridad de los datos de nuestros usuarios y que aún no conocíamos. Decidimos si el informe es elegible y la cantidad de la recompensa. + +### Exclusiones + +#### Se excluyen los siguientes tipos de problemas de seguridad: + +* Ataques (D)DOS +* Mensajes o páginas de error sin datos sensibles +* Pruebas y datos de ejemplo disponibles públicamente en nuestros repositorios de Github +* Problemas comunes como advertencias de cabeceras del navegador o configuración DNS, identificados por escáneres de vulnerabilidades +* Informes de escaneos de vulnerabilidades para software que usamos públicamente +* Problemas de seguridad relacionados con sistemas operativos, navegadores o plugins desactualizados +* Informes de problemas de seguridad de los que ya hemos sido notificados previamente + +Ten en cuenta: Los informes que carezcan de pruebas (como capturas de pantalla u otros datos), información detallada o detalles sobre cómo reproducir resultados inesperados serán investigados, pero no serán elegibles para ninguna recompensa. + +Esta política se basa en las Directrices de Divulgación Responsable del Centro Nacional de Ciberseguridad y en un [ejemplo de Floor Terra](https://responsibledisclosure.nl/). \ No newline at end of file diff --git a/src/content/docs/es/docs/compliance/security-audit.mdx b/src/content/docs/es/docs/compliance/security-audit.mdx new file mode 100644 index 0000000..c5b0b68 --- /dev/null +++ b/src/content/docs/es/docs/compliance/security-audit.mdx @@ -0,0 +1,65 @@ +--- +title: Auditoría de Seguridad +description: >- + Xahau se somete a auditorías de seguridad periódicas realizadas por terceros para + garantizar la integridad, fiabilidad y seguridad de su infraestructura y código. +--- + +### Auditoría de Seguridad + +La seguridad es un pilar fundamental del ecosistema Xahau. Para garantizar los más altos estándares, el código y la infraestructura de Xahau se someten regularmente a auditorías de seguridad independientes realizadas por terceros especializados. + +Estas auditorías tienen como objetivo identificar posibles vulnerabilidades, validar la robustez del sistema y asegurar que las mejores prácticas de seguridad se implementan correctamente. + +### Objetivos de las auditorías + +Las auditorías de seguridad en Xahau están diseñadas para: + +* Detectar vulnerabilidades en el código fuente +* Evaluar la arquitectura del sistema y sus posibles riesgos +* Verificar la correcta implementación de medidas de seguridad +* Revisar dependencias externas y posibles vectores de ataque +* Asegurar la resiliencia frente a ataques conocidos + +### Alcance + +Las auditorías pueden incluir: + +* Código del nodo (`xahaud`) +* Hooks y lógica en cadena +* Infraestructura de red +* APIs y servicios asociados +* Integraciones externas + +### Resultados + +Los resultados de las auditorías se documentan y se revisan internamente para: + +* Priorizar y corregir vulnerabilidades detectadas +* Mejorar procesos de desarrollo seguro +* Fortalecer la arquitectura del sistema + +En la medida de lo posible, los informes de auditoría o sus resúmenes se comparten con la comunidad para fomentar la transparencia. + +### Frecuencia + +Las auditorías se realizan de forma periódica, especialmente: + +* Antes de lanzamientos importantes +* Tras cambios significativos en el protocolo +* Cuando se incorporan nuevas funcionalidades críticas + +### Participación de terceros + +Xahau colabora con empresas especializadas en ciberseguridad para llevar a cabo estas auditorías. Estas entidades aportan una visión externa e independiente que ayuda a reforzar la seguridad del ecosistema. + +### Mejora continua + +La auditoría de seguridad no es un proceso puntual, sino continuo. Xahau mantiene un compromiso constante con la mejora de sus sistemas mediante: + +* Revisión continua del código +* Programas de divulgación responsable +* Monitorización activa de la red +* Actualizaciones y parches de seguridad + +La combinación de auditorías externas y buenas prácticas internas permite a Xahau ofrecer una plataforma robusta y segura para sus usuarios. \ No newline at end of file diff --git a/src/content/docs/es/docs/data-apis/index.mdx b/src/content/docs/es/docs/data-apis/index.mdx new file mode 100644 index 0000000..dc025e6 --- /dev/null +++ b/src/content/docs/es/docs/data-apis/index.mdx @@ -0,0 +1,5 @@ +--- +title: "APIs de Datos" +--- + +La API principal de datos se encuentra en https://data.xahau.network/ \ No newline at end of file diff --git a/src/content/docs/es/docs/features/amendments.mdx b/src/content/docs/es/docs/features/amendments.mdx new file mode 100644 index 0000000..a5cd20a --- /dev/null +++ b/src/content/docs/es/docs/features/amendments.mdx @@ -0,0 +1,184 @@ +--- +title: Enmiendas +--- +Las enmiendas representan nuevas características u otros cambios en el procesamiento de transacciones. + +El sistema de enmiendas utiliza el proceso de consenso para aprobar cualquier cambio que afecte al procesamiento de transacciones en Xahau. Los cambios en el procesamiento de transacciones, completamente funcionales, se introducen como enmiendas; los validadores luego votan sobre estos cambios. Si una enmienda recibe más del 80% de apoyo durante cinco días, la enmienda se aprueba y el cambio se aplica permanentemente a todas las versiones posteriores del ledger. Deshabilitar una enmienda aprobada requiere una nueva enmienda para hacerlo. + +**Nota:** Las correcciones de errores que cambian los procesos de transacciones también requieren enmiendas. + +### Proceso de Enmienda + +El tema Contribuir Código a Xahau describe el flujo de trabajo para desarrollar una enmienda desde una idea hasta su activación en Xahau. + +Una vez que el código para una enmienda se incluye en una versión del software, el proceso para habilitarla ocurre dentro de la red Xahau, que verifica el estado de las enmiendas en cada ledger _flag_ (típicamente cada 15 minutos aproximadamente). + +Cada 256 ledgers se denomina ledger **flag**. El ledger flag no tiene contenidos especiales, pero el proceso de enmienda ocurre alrededor de él. + +1. **Flag Ledger -1:** Cuando los validadores `xahaud` envían mensajes de validación, también envían sus votos de enmienda. +2. **Flag Ledger:** Los servidores interpretan los votos de los validadores de confianza. +3. **Flag Ledger +1:** Los servidores insertan una pseudo-transacción `EnableAmendment` y establecen una bandera según lo que creen que ocurrió: + + * La bandera `tfGotMajority` significa que la enmienda tiene más del 80% de apoyo. + * La bandera `tfLostMajority` significa que el apoyo a la enmienda ha caído al 80% o menos. + * Sin bandera significa que la enmienda está habilitada. + + **Nota:** Es posible que una enmienda pierda el 80% de apoyo en el mismo ledger en que alcanza el período requerido de cinco días para ser habilitada. En estos casos, se añade una pseudo-transacción `EnableAmendment` para ambos escenarios, pero la enmienda finalmente se habilita. +4. **Flag Ledger +2:** Las enmiendas habilitadas se aplican a las transacciones de este ledger en adelante. + +### Votación de Enmiendas + +Cada versión de `xahaud` se compila con una lista de enmiendas conocidas y el código para implementarlas. Los operadores de validadores `xahaud` configuran sus servidores para votar sobre cada enmienda y pueden cambiarlo en cualquier momento. Si el operador no elige un voto, el servidor usa un voto predeterminado definido por el código fuente. + +**Nota:** El voto predeterminado puede cambiar entre versiones del software. \[Actualizado en: rippled 1.8.1]\[] + +Las enmiendas deben mantener cinco días de apoyo de más del 80% de los validadores de confianza para ser habilitadas. Si el apoyo cae por debajo del 80%, la enmienda se rechaza temporalmente y el período de dos semanas se reinicia. Las enmiendas pueden ganar y perder mayoría cualquier número de veces antes de quedar habilitadas permanentemente. + +Las enmiendas cuyo código fuente ha sido eliminado sin haber sido habilitadas se consideran **Vetadas** por la red. + +### Servidores Bloqueados por Enmienda + +El bloqueo por enmienda es una función de seguridad para proteger la precisión de los datos de Xahau. Cuando se habilita una enmienda, los servidores que ejecutan versiones anteriores de `xahaud` sin el código fuente de la enmienda ya no comprenden las reglas de la red. En lugar de adivinar e interpretar incorrectamente los datos del ledger, estos servidores quedan **bloqueados por enmienda** y no pueden: + +* Determinar la validez de un ledger. +* Enviar o procesar transacciones. +* Participar en el proceso de consenso. +* Votar sobre futuras enmiendas. + +La configuración de votación de un servidor `xahaud` no tiene impacto en si queda bloqueado por enmienda. Un servidor `xahaud` siempre sigue las enmiendas habilitadas por el resto de la red, por lo que los bloqueos se basan únicamente en tener el código para entender los cambios de reglas. Esto significa que también puede quedar bloqueado por enmienda si conecta su servidor a una red paralela con diferentes enmiendas habilitadas. Por ejemplo, la Testnet de Xahau típicamente tiene enmiendas experimentales habilitadas. Si usa la última versión de producción, es probable que su servidor no tenga el código para esas enmiendas experimentales. + +Puede desbloquear servidores bloqueados por enmienda actualizando a la versión más reciente de `xahaud`. + +### Retirar Enmiendas + +Cuando las enmiendas se habilitan, el código fuente de los comportamientos previos a la enmienda permanece en `xahaud`. Si bien hay casos de uso para mantener el código antiguo, como reconstruir resultados de ledger para verificación, el seguimiento de enmiendas y el código heredado añade complejidad con el tiempo. + +El [XRP Ledger Standard 11d](https://github.com/XRPLF/XRPL-Standards/discussions/19) define un proceso para retirar enmiendas antiguas y el código previo a la enmienda asociado. Después de que una enmienda haya estado habilitada en Mainnet durante dos años, puede retirarse. Retirar una enmienda la convierte en parte del protocolo central de forma incondicional; ya no se rastrea ni se trata como una enmienda, y todo el código previo a la enmienda se elimina. + +### Enmiendas Conocidas + +Las siguientes enmiendas han sido implementadas o están en proceso de habilitarse en Xahau: + +#### Enmiendas de Características + +##### XahauGenesis + +Habilita la cuenta génesis para acuñar XAH y distribuirlo mediante [transacciones GenesisMint](/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn). + +##### MultiSign + +Habilita la funcionalidad de firma múltiple, permitiendo a las cuentas requerir múltiples firmas para las transacciones. Esta enmienda introduce [transacciones SignerListSet](/docs/protocol-reference/transactions/transaction-types/signerlistset) y [objetos de ledger SignerList](/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list) para soportar la firma múltiple. + +##### DepositAuth + +Habilita la funcionalidad de autorización de depósito, permitiendo a las cuentas requerir preautorización antes de recibir pagos. Esta enmienda introduce [transacciones DepositPreauth](/docs/protocol-reference/transactions/transaction-types/depositpreauth) y [objetos de ledger DepositPreauth](/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth) para gestionar las preautorizaciones. + +##### Hooks + +Enmienda principal que habilita la funcionalidad de contratos inteligentes Hook en Xahau. _(Añadida por la [enmienda Hooks][].)_ + +##### HooksUpdate1 + +Actualizaciones y mejoras al sistema de Hooks. + +##### Remit + +Implementa [XLS-55](https://github.com/XRPLF/XRPL-Standards/discussions/156). Un nuevo tipo de transacción de pago push simple pero potente de lo-que-ves-es-lo-que-obtienes. Habilita [transacciones Remit](/docs/protocol-reference/transactions/transaction-types/remit) que permiten pagar múltiples monedas y URITokens en la misma transacción al mismo destino. La transacción paga automáticamente para crear líneas de confianza faltantes, paga automáticamente las reservas en tokens transferidos y paga automáticamente para crear la cuenta de destino si no existe. Puede acuñar un recibo o URIToken de bonificación inline dentro de la transacción. Opcionalmente, informar a un Hook de terceros sobre la transacción. Sin pagos parciales ni rutas. + +##### ZeroB2M + +Deshabilita la ruta burn-to-mint para XRP a XAH. El comportamiento normal de la transacción Import permanece, pero el XRP quemado no se acredita. B2M sigue disponible para sincronización de claves o para activar una cuenta, pero no puede usarse para acuñar nuevos activos. + +##### Remarks + +La enmienda Remarks permite almacenar pares clave-valor (similares al estado de hooks) por los propietarios de objetos en esos objetos. Esto es análogo a dar vuelta un documento y escribir una nota a mano en él. Los Remarks pueden ser cualquier cosa y significar cosas diferentes para distintas partes. Los Remarks también pueden establecerse como inmutables. Los Remarks siguen a un objeto a través de cambios de propiedad y pueden usarse para lograr casos de uso novedosos como NFTs dinámicos y simplificar algunas operaciones de estado de hooks que de otro modo serían muy complicadas. Habilita [transacciones SetRemarks](/docs/protocol-reference/transactions/transaction-types/setremarks). + +##### Touch + +Esta enmienda garantiza que todas las cuentas involucradas en una transacción (todas las partes interesadas transaccionales) se vean forzadas a aparecer en sus metadatos incrementando un "contador de toque" incluso si nada más en la cuenta cambió. Lleva el nombre de la utilidad de archivos unix touch. Esto proporciona mejor consistencia de auditoría y facilidad de programación de herramientas automatizadas. + +##### HookCanEmit + +Esta enmienda añade un nuevo campo a los objetos HookSet: `HookCanEmit` es sintácticamente idéntico al campo `HookOn`, excepto que controla qué tipos de transacciones el Hook tiene permitido emitir en lugar de qué tipos de transacciones activan el hook. Tenga en cuenta que usa la misma semántica activo-bajo que `HookOn` con `SetHook` siendo activo-alto. Sin embargo, si el campo está ausente, se toma como que el Hook puede emitir cualquier transacción incluyendo `SetHook`. Añade el campo `HookCanEmit` a los objetos [HookDefinition](/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition). + +##### Clawback + +Habilita [transacciones Clawback](/docs/protocol-reference/transactions/transaction-types/clawback) que permiten a los emisores revocar tokens que fueron previamente emitidos por su cuenta. Esta es una característica portada desde XRPL. _(Introducida en 2025.7.9-release+1951)_ + +##### DeepFreeze + +Habilita la funcionalidad de congelamiento profundo para líneas de confianza y activos. Esta es una característica portada desde XRPL. _(Introducida en 2025.7.9-release+1951)_ + +##### IOUIssuerWeakTSH + +Convierte a los emisores de IOU en partes interesadas transaccionales (TSH) débiles en ciertos tipos de transacciones. Garantiza que los Emisores de Moneda tengan sus hooks ejecutados en transacciones de terceros que toquen o mencionen su moneda, si han optado por la ejecución débil. Consulte [Débil y Fuerte](/docs/hooks/concepts/weak-and-strong) para más detalles. _(Introducida en 2025.7.9-release+1951)_ + +##### Cron + +Habilita la ejecución programada de Hooks mediante [transacciones CronSet](/docs/protocol-reference/transactions/transaction-types/cronset) y [objetos de ledger Cron](/docs/protocol-reference/ledger-data/ledger-objects-types/cron). Esta característica permite a los Hooks programar una serie de auto-invocaciones futuras (similar a un cronjob en sistemas Linux) que puede ayudar a los desarrolladores de Hooks a escribir estructuras de gobernanza complejas, juegos y más. El número máximo de repeticiones es 256, sin embargo emitir una transacción `CronSet` adicional puede extender esto una vez que el número de repeticiones cruce un umbral mínimo deseado. _(Introducida en 2025.10.27-release+2405)_ + +##### ExtendedHookState + +Extiende las capacidades de gestión del estado de Hooks, incluyendo el campo `HookStateScale` para objetos [AccountRoot](/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot) para controlar cuándo las entradas de estado de Hook quedan obsoletas. Esta característica expande la cantidad de datos que los Hooks pueden almacenar en su estado (sistema clave-valor para Hooks) para permitir a los Hooks un almacenamiento de datos más rico cuando lo necesiten. La escala (hasta 16) afecta tanto al tamaño máximo del valor que puede almacenar en un único estado de hook, como al número de unidades de reserva que ese par k-v consume. Una escala de 1 (predeterminada) significa que paga 1 reserva por hasta 256 bytes almacenados por estado de Hook. Una escala de 4 significa que paga 4 unidades de reserva por hasta 1024 bytes por estado de Hook. Es importante tener en cuenta que paga esta tasa (la tasa de escala) incluso si todos sus estados de Hook contienen solo un byte. Es posible aumentar la escala después de que su Hook ya tenga estado almacenado, pero no disminuirla. Disminuir la escala requiere que primero se eliminen todos los HookState. _(Introducida en 2025.10.27-release+2405)_ + +#### Enmiendas de Corrección de Errores + +##### fixXahauV1 + +Aplica un límite de 256 espacios de nombres por cuenta. Varias correcciones de errores con la lógica de URIToken. Garantiza que los STAmounts predeterminados (0) se registren en los metadatos. Garantiza que OfferID pueda usarse en lugar de OfferSequence al cancelar una oferta. Corrige un error donde ciertos hooks no pueden eliminarse. Corrige un error donde el quórum requerido para un `ttIMPORT` es accidentalmente demasiado alto. Permite que las cuentas aparezcan más de una vez en una transacción GenesisMint. Cambia el Emisor de un URIToken de TSH fuerte a débil cuando se está quemando un URIToken. Garantiza que los TSH en escrows creados por transacciones emitidas se activen correctamente. Añade la tarifa de tamaño de parámetros de hook a todas las txns (1 drop por byte). _(Introducida en 2024.9.11-release+985)_ + +##### fixXahauV2 + +Limpia la lógica TSH y elimina la tabla antigua redundante. Añade banderas informativas a cada miembro de `sfHookExecutions`, describiendo la ejecución débil, fuerte, etc. Añade `sfEmitNonce` a cada miembro de `sfHookEmissions`, para desambiguar mejor las txns emitidas. Verificaciones de cordura adicionales en las txns emitidas para garantizar que se coloquen en el ledger correcto. + +##### fixXahauV3 + +Correcciones adicionales para los problemas de implementación del protocolo Xahau. Esta enmienda garantiza consistencia y resultados sensatos para varios casos extremos. Esta enmienda está configurada para votar: _sí_ por defecto. Si los validadores desean votar en contra de esta enmienda, deben cambiar manualmente su voto a no. _(Introducida en 2025.2.6-release+1299)_ + +##### fixNSDelete + +Corrige el comportamiento de la eliminación del espacio de nombres de estado de Hook para garantizar la consistencia del ledger. Introduce un nuevo código tes: `tesPARTIAL`. `tesPARTIAL` se devuelve si la transacción fue exitosa pero debe ser reenviada por el usuario con un nuevo número de secuencia para completar el trabajo amortizado hasta que se devuelva `tesSUCCESS`. + +##### fix240819 + +Enmienda de corrección de errores del 19 de agosto de 2024. + +##### fixPageCap + +Corrige problemas relacionados con los límites de capacidad de página. + +##### fix240911 + +Enmienda de corrección de errores del 11 de septiembre de 2024. + +##### fixFloatDivide + +Corrige problemas con las operaciones de división de punto flotante en Hooks. Esta enmienda garantiza el manejo adecuado de la división por cero y los casos extremos en la función `float_divide`. Cambia el comportamiento de la API de hook `float_divide` para corregir un pequeño error. Esta enmienda está configurada para votar: _sí_ por defecto. Consulte [float_divide](/docs/hooks/functions/float/float_divide) para más detalles. _(Introducida en 2024.11.18-release+1141)_ + +##### fixReduceImport + +Corrige problemas relacionados con el procesamiento de transacciones Import. Esta enmienda garantiza consistencia y resultados sensatos para varios casos extremos. Esta enmienda está configurada para votar: _sí_ por defecto. Si los validadores desean votar en contra de esta enmienda, deben cambiar manualmente su voto a no. _(Introducida en 2025.2.6-release+1299)_ + +##### fix20250131 + +Enmienda de corrección de errores del 31 de enero de 2025. Esta enmienda garantiza consistencia y resultados sensatos para varios casos extremos. Esta enmienda está configurada para votar: _sí_ por defecto. Si los validadores desean votar en contra de esta enmienda, deben cambiar manualmente su voto a no. _(Introducida en 2025.2.6-release+1299)_ + +##### fixRewardClaimFlags + +Corrige problemas con las banderas de las transacciones de reclamación de recompensas. + +##### fixProvisionalDoubleThreading + +Corrige problemas con el doble enhebrado provisional en el procesamiento de transacciones. Garantiza que el PreviousTxnID correcto y los metadatos de la transacción se mantengan en escenarios de doble enhebrado. _(Introducida en 2025.7.9-release+1951)_ + +##### fixInvalidTxFlags + +Corrige un error que actualmente permite proporcionar banderas no válidas a algunas transacciones. Si bien estas banderas no válidas actualmente no hacen nada, deberían producir un error de formato incorrecto. Después de que se aplique esta corrección, las banderas no válidas producirán un error de formato incorrecto como se esperaba. _(Introducida en 2025.10.27-release+2405)_ + +##### fixCronStacking + +Corrige problemas con el comportamiento de apilamiento de transacciones Cron. + +### Estado de las Enmiendas + +Para conocer el estado más actual de las enmiendas (habilitadas, en votación o vetadas), consulte el [repositorio xahaud](https://github.com/Xahau/xahaud) o consulte a un servidor `xahaud` en ejecución usando el comando `feature`. diff --git a/src/content/docs/es/docs/features/balance-adjustments.mdx b/src/content/docs/es/docs/features/balance-adjustments.mdx new file mode 100644 index 0000000..748f3e2 --- /dev/null +++ b/src/content/docs/es/docs/features/balance-adjustments.mdx @@ -0,0 +1,68 @@ +--- +title: Ajustes de Balance +description: Cómo reclamar un Ajuste de Balance en Xahau +--- +### Opt-in + Reclamar + +Optar por los Ajustes de Balance es la misma transacción que reclamar un ajuste. Debe hacerlo primero para iniciar la capacidad de reclamar más adelante. + +```json +{ + "Account": "", + "TransactionType": "ClaimReward", + "Issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "NetworkID": 21337 +} +``` + +### Opt-out + +Para excluirse de los Ajustes de Balance, omita el campo Issuer y establezca Flags en 1. Al hacerlo se eliminarán sus estadísticas de balance promedio. Estas no serán restauradas. Si vuelve a optar, se restablecerán a una posición inicial. + +```json +{ + "Account": "", + "TransactionType": "ClaimReward", + "NetworkID": 21337, + "Flags": 1 +} +``` + +### Detalles Técnicos + +Los Ajustes de Balance se implementan como una combinación de dos piezas de código: + +1. Enmienda BalanceRewards (código nativo) +2. Hook de Recompensa de la Cuenta Génesis (código de hook). + +BalanceRewards recopila estadísticas de balance promedio sobre las cuentas en las que están activados. Estas estadísticas luego se pasan a un Hook objetivo cuando el usuario desea reclamar. + +Todas las interacciones con esta enmienda son mediante la transacción ClaimReward: + +```json +{ + "Account": "", + "TransactionType": "ClaimReward", + "Issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "NetworkID": 21337 +} +``` + +Cuando una transacción ClaimReward se envía exitosamente con un código de error **tesSUCCESS**, las estadísticas de balance promedio de la cuenta se restablecen. Lo único adicional que hace la enmienda es invocar los Hooks en la cuenta del Emisor especificado. + +El campo _Issuer_ es la cuenta responsable de cumplir con el reclamo. Dependiendo de lo que esté instalado en la cuenta del Emisor, pueden ocurrir varias cosas: + +* Si no hay ningún Hook instalado en la cuenta del Emisor, entonces no se hace nada y las estadísticas de BalanceRewards simplemente se restablecen. +* Si hay un Hook instalado en la cuenta del Emisor y el Hook realiza un rollback, entonces la transacción falla y las estadísticas _no_ se restablecen. +* Si hay un Hook instalado en la cuenta del Emisor y el Hook realiza accept, entonces la transacción tiene éxito y las estadísticas se restablecen. En este caso, el Hook también debería emitir una transacción de vuelta a la cuenta del usuario que contenga su recompensa. + +En la práctica, en Xahau, el Emisor probablemente siempre será la cuenta génesis **rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh**. + +A menos que: + +* La Gobernanza de la Red resulte en que se use una cuenta diferente para BalanceAdjustments. +* Una parte no relacionada con la Gobernanza ejecute su propio sorteo de BalanceRewards en el que el usuario quiera participar. Tenga en cuenta que los reclamos exitosos resultan en el restablecimiento de las estadísticas de balance promedio, por lo que solo se puede reclamar un tipo de recompensa por restablecimiento. + +Las estadísticas de balance promedio existen como una colección de tres nuevos campos en el objeto AccountRoot. Estos son: + +
CampoTipoExplicación
sfRewardAccumulatorUINT64El área bajo la gráfica balance-tiempo de su cuenta desde la última transacción ClaimReward.
sfRewardLgrFirstUINT32El número de ledger de la última transacción ClaimReward.
sfRewardLgrLastUINT32El número de secuencia del ledger de la última transacción entrante o saliente de su cuenta.
sfRewardTimeUINT32El tiempo del ledger en que se reclamó la última recompensa.
diff --git a/src/content/docs/es/docs/features/burn-2-mint.mdx b/src/content/docs/es/docs/features/burn-2-mint.mdx new file mode 100644 index 0000000..1a148a8 --- /dev/null +++ b/src/content/docs/es/docs/features/burn-2-mint.mdx @@ -0,0 +1,291 @@ +--- +title: Burn 2 Mint (B2M) +description: >- + Burn2Mint es una primitiva de intercadena de bajo nivel y está pensada para usuarios + empresariales que necesitan autoabastecer su propia liquidez según sus propios propósitos. +--- +import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; + + + +## Manual Técnico de Burn2Mint (Xahau Testnet) + + + +Burn2Mint es una primitiva de intercadena de bajo nivel pensada para usuarios empresariales que necesitan autoabastecer su liquidez según sus propósitos. Ejecutar sus propios nodos y realizar esta operación usted mismo en sus nodos significa que usted y solo usted asume la responsabilidad del resultado del procedimiento. + +La generación y recopilación de XPOPs depende fundamentalmente de recopilar mensajes de validación en la red overlay, que son efímeros por naturaleza. Si sus nodos no están conectados de forma confiable, o si su hardware, conexión de red o sistema operativo falla en el momento equivocado, entonces el XPOP para una Transacción de Quema podría no generarse o podría no generarse correctamente. Esto puede llevar a la pérdida de fondos ya que el XPOP de la Transacción de Quema no fue capturado a tiempo, y es posible que los mensajes de validación se pierdan para siempre, haciendo imposible una Transacción de Acuñación a pesar de una Transacción de Quema exitosa. + +Si no se siente cómodo asumiendo estos riesgos técnicos o no comprende lo que está haciendo, o no es un usuario empresarial, por favor obtenga su liquidez a través de otras alternativas amigables. + +### Configuración + +Para realizar B2M, el usuario debe operar _dos_ nodos del protocolo XRPL: + +1. **Obtener xPOP de la quema** + + + +Ejecute esto (por ejemplo, usando Docker Compose; vea la documentación del repositorio)\ +[**https://github.com/Xahau/Validation-Ledger-Tx-Store-to-xPOP**](https://github.com/Xahau/Validation-Ledger-Tx-Store-to-xPOP) + +* El servicio escucha los mensajes de validación de XRPL, los ledgers cerrados y las transacciones. +* Almacena estos datos en un sistema de archivos organizado. +* Es esencial para generar xPOPs, ya que los mensajes de validación de XRPL son efímeros; sin almacenarlos, una quema de transacción no puede convertirse en una acuñación. +* **Cómo funciona**: + * Un observador se conecta a múltiples nodos XRPL y escucha datos específicos. + * Los datos capturados luego se guardan, organizan y usan para generar xPOPs + +Simplemente obtenga el xPOP ahora desde:\ +`http[s]://{su-host}:{su-puerto}/xpop/{tx-hash}` + +Puede obtener/crear fácilmente xPOPs desde un nodo usando el repositorio anterior con este paquete NPM: + +[**https://www.npmjs.com/package/xpop**](https://www.npmjs.com/package/xpop) + + + +**Nodo de Quema**, que comprende: + +* Una instancia de Rippled modificada (modificada para registrar XPOPs) +* Binario universal de linux aquí: [https://tvntezq.dlvr.cloud/rippled_with_xpop](https://tvntezq.dlvr.cloud/rippled_with_xpop) +* [https://github.com/RichardAH/rippled/tree/proof-of-burn](https://github.com/RichardAH/rippled/tree/proof-of-burn) +* Ejecutándose con un rippled.cfg que tiene: + * una estrofa **\[xpop_dir]** que especifica un directorio de salida para los XPOPs generados. + * una estrofa **\[network_id]** que especifica network_id: 1 + * (en producción esto sería la red 0) + * un `validators.txt` que contiene:\\ + + ``` + [validator_list_sites] + https://vl.altnet.rippletest.net + [validator_list_keys] + ED264807102805220DA0F312E71FC2C69E1552C9C5790F6C25E3729DEB573D5860 + ``` + + + +2. **Acuñar** + +* En este escenario de prueba, se conectará directamente a Xahau. No necesita ejecutar su propio nodo. En el escenario de producción, necesitará ejecutar un nodo de Acuñación, que es simplemente un nodo estándar para la red de destino. Esto se debe a que los nodos públicos probablemente optarán por no aceptar transacciones Import debido al riesgo legal. + * Conéctese a **wss://xahau-test.net** + * O descargue/ejecute: [**https://github.com/Xahau/Xahau-Testnet-Docker**](https://github.com/Xahau/Xahau-Testnet-Docker) + +## Ejemplo (nodejs) + +Este ejemplo crea una cuenta de testnet, quema 10 XRP y luego los importa en Xahau Testnet, usando el xPOP obtenido con las herramientas mencionadas anteriormente. + +```js +import { derive, utils, signAndSubmit } from 'xrpl-accountlib' +import { TxData } from 'xrpl-txdata' +import { XrplClient } from 'xrpl-client' +import { xpop, setEndpoints as xpopEndpoints } from 'xpop' +import fetch from 'node-fetch' + +// Lo anterior requiere: +// npm install xrpl-accountlib xrpl-txdata xrpl-client xpop node-fetch + +console.log('Obteniendo cuenta de XRPL Testnet (faucet)') +const faucet = await (await fetch('https://faucet.altnet.rippletest.net/accounts', { method: 'POST' })).json() +console.log(' -->', faucet.account.address) +const account = derive.familySeed(faucet.account.secret) + +xpopEndpoints((await (await fetch('https://xrpl.ws-stats.com/xpop/list?json=true')).json()).bestguess) + +const nodes = { + testnet: [ + new XrplClient('wss://s.altnet.rippletest.net:51233'), + new XrplClient('wss://testnet.xrpl-labs.com'), + ], + xahau: [ + new XrplClient('wss://xahau-test.net'), + ] +} + +console.log('Esperando que las conexiones de red estén listas') +await Promise.all(Object.keys(nodes).map(k => Promise.race(nodes[k].map(n => n.ready())))) + +console.log('Esperando financiación de la cuenta faucet y obteniendo valores de red...') +await new Promise(resolve => setTimeout(resolve, 4000)) // Esperar hasta que el ledger cierre + +const [ + testnetParams, + xahauParams, +] = await Promise.all([ + Promise.race(nodes.testnet.map(n => utils.accountAndLedgerSequence(n, account))), + Promise.race(nodes.xahau.map(n => utils.accountAndLedgerSequence(n, account))), +]) + +const testnetTx = { + ...testnetParams.txValues, + TransactionType: 'AccountSet', + Fee: String(10_000_000), + OperationLimit: xahauParams.txValues.NetworkID, + NetworkID: undefined, // Testnet tiene un NetworkID < 1024, por lo que no se debe proporcionar ninguno +} + +console.log('Enviando quema...', testnetTx) +const testnetSubmitted = await Promise.race(nodes.testnet.map(n => signAndSubmit(testnetTx, n, account))) +console.log('Quema enviada a testnet') +console.log(' -->', 'https://testnet.xrpl.org/transactions/' + testnetSubmitted.tx_id) + +console.log('Obteniendo datos de la tx de quema...') + +const txdata = new TxData(nodes.testnet.map(n => n.getState().server.uri), { + AllowNoFullHistory: true, + EndpointTimeoutMs: 2_000, + OverallTimeoutMs: 10_000, +}) + +const appliedtx = await txdata.getOne(testnetSubmitted.tx_id) +console.log(' -->', 'Quema validada en el ledger', appliedtx?.result?.ledger_index) + +console.log('Esperando el cierre del ledger antes de obtener el xPOP...') +await new Promise(resolve => setTimeout(resolve, 4000)) // Esperar hasta que el ledger cierre + +console.log('Obteniendo xPOP...') + +const Blob = await xpop(testnetSubmitted.tx_id, appliedtx?.result?.ledger_index, 1) + +console.log(' -->', 'xPOP obtenido, longitud hex:', Blob.length) + +const hooksTx = { + ...xahauParams.txValues, + TransactionType: 'Import', + Fee: '0', + Blob, +} + +console.log('Enviando para acuñar el xPOP...') + +const b2mSubmitted = await Promise.race(nodes.xahau.map(n => signAndSubmit(hooksTx, n, account))) + +console.log(' -->', '¡B2M enviado! TX en Xahau Testnet:') +console.log(' -->', 'https://test.xahauexplorer.com/explorer/' + b2mSubmitted?.tx_id) +console.log(' -->', b2mSubmitted.response.engine_result, b2mSubmitted.response.engine_result_message) + +// Cerrando conexiones +Object.keys(nodes).map(k => nodes[k].map(n => n.close())) +``` +[Fuente](https://gist.github.com/WietseWind/cd8a7a8c88f218fe7b768f59a665685d) + +## Resumen Técnico del procedimiento B2M + +#### Nuevo Tipo de Transacción: `Import` + +Xahau Testnet (_network_id=21338_) introduce un nuevo tipo de transacción llamado _**Import**_, que acepta un XPOP de la cadena de testnet de Ripple (_network_id=1_) y proporciona una transferencia de valor unidireccional "burn-to-mint" y sincronización de claves/cuentas. + +### Transacción de Quema + +Una _**Transacción de Quema**_ es una transacción que quema XRP en una cadena XRPL fuente, la cual se usaría como prueba (XPOP) para acuñar en una cadena XRPL de destino. + +Los siguientes tipos de transacciones son compatibles: + +* AccountSet +* SetRegularKey +* SignerListSet. + + + +Tenga en cuenta que otros tipos de transacciones no son actualmente compatibles y no pueden usarse para acuñar en Xahau Testnet. (Sin embargo, esto puede cambiar). + +Los tres tipos de transacciones pueden usarse para acuñar. Esto significa que la _**Tarifa**_ quemada por la Transacción de Quema se acuña posteriormente en Xahau Testnet después de un `Import` exitoso. + +Si se usa `SetRegularKey` o `SignerListSet`, entonces la sincronización de claves ocurre de acuerdo con las reglas estándar del tipo de transacción. Si se usa `AccountSet`, entonces no se produce sincronización de claves en la cadena XRPL de destino (Xahau Testnet). + +Un campo llamado _**OperationLimit**_ debe estar presente en la Transacción de Quema para ser el ID de red de la cadena de destino. Este campo es para prevenir ataques de repetición en otras cadenas integradas con B2M. + +La Transacción de Quema puede usarse para Acuñar si tiene un código de transacción **tesSUCCESS** o _cualquiera_ de los códigos de transacción **tec**. Esto significa que _si_ se quemó la tarifa, entonces la transacción puede usarse para acuñar. Sin embargo, la sincronización de claves _solo_ ocurre cuando el resultado de la Transacción de Quema fue tesSUCCESS. + +Ejemplo de Transacción de Quema: + +```json +{ + "TransactionType": "AccountSet", + "Fee": 10000000, + "OperationLimit": 21338 +} +``` + +### Recopilación de XPOP + +Antes de enviar la Transacción de Quema, asegúrese de que su Nodo de Quema esté sincronizado con la cadena de testnet (ID de red: `1`). + +Después de verificar el estado de su Nodo de Quema, envíe la Transacción de Quema firmada al Nodo de Quema. + +El Nodo de Quema monitorea los ledgers cerrados en busca de transacciones que contengan el campo **OperationLimit** y usa los mensajes de validación recopilados para generar un XPOP (Prueba de Quema). Estos se escriben en un archivo bajo el directorio especificado en la estrofa **\[xpop_dir]** en el `rippled.cfg` del Nodo de Quema. + +Espere a que el ledger cierre, luego busque en el xpop_dir el XPOP de la Transacción de Quema según su TXID. El archivo contiene un documento JSON, que es el XPOP que retransmitirá a la cadena XRPL de destino (HooksV3). + +Tome el contenido bruto de este archivo y codifíquelo como HEX. Esto se convertirá en el contenido del campo _Blob_ en la transacción `Import`. + +### Transacción de Acuñación + +Su codec binario estará al que le falten los campos necesarios para construir la transacción `Import` (Acuñación). Si está usando ripple-binary-codec, puede actualizar su archivo `definitions.json` de la siguiente manera: + +1. Cambie de directorio a `node_modules` +2. Ejecute `find . | grep 'dist/enums/definitions.json'` para localizar el archivo relevante a actualizar +3. Conéctese a **wss://hooks-testnet-v3.xrpl-labs.com** +4. Solicitud: `{"command":"server_definitions"}` +5. Vuelque el contenido de la clave `"result"` en `definitions.json` del paso 2. + +El tipo de transacción `Import` toma solo un campo no común _**Blob.**_. Este debe contener el XPOP codificado en HEX de la fase de Recopilación de XPOP. + +* Puede hacer esto con `cat xpopjsonfile | xxd -p | tr -d '\n'` + +El campo `Account` y el campo `SigningPubKey` (o el array Signers) deben coincidir exactamente entre la Transacción de Quema y la Transacción de Acuñación. Los usuarios solo pueden acuñar en la misma cuenta desde la que quemaron. + +Si el campo `Account` especifica una cuenta que aún no existe en Xahau Testnet, será creada. En este caso, use 0 para el campo `Sequence` en la Transacción de Acuñación. Si la cuenta ya existe en Xahau Testnet, use el siguiente número de Sequence disponible en la cuenta en Xahau Testnet. + +Ejemplo de Import: + +```json +{ + "Account": "", + "TransactionType": "Import", + "Blob": "", + "Sequence": 0 +} +``` + +IMPORTANTE: **¡La Transacción de Acuñación debe firmarse exactamente de la misma manera y por la misma cuenta que la Transacción de Quema!** + +Codifique y firme la transacción apropiadamente, produciendo un blob de transacción firmado (hex). + +Si no está ejecutando su propio nodo de Acuñación: + +* Conéctese a **wss://xahau-testn.et** +* Envíe la transacción al nodo: + +```json +{ + "command": "submit", + "tx_blob": "" +} +``` + +O, si está ejecutando su propio nodo de Acuñación: + +* Asegúrese de que el Nodo de Acuñación esté ejecutándose y sincronizado con el ID de red 21338. +* Use la llamada RPC `submit` para enviar la Transacción de Acuñación. + * Puede hacer esto desde la línea de comandos usando `./hooksv3d submit ` + +### Consideraciones + +Si la Cuenta debe crearse en Xahau Testnet pero el manejo de claves para la cuenta no está claro en el contexto de la Transacción de Quema, entonces la Cuenta se crea en modo blackholed. Puede ser reconfigurada posteriormente usando cualquier tipo de transacción de manejo de claves. + +Si la Transacción de Quema es un `SignerListSet` o un `SetRegularKey`, y tuvo un resultado de transacción tesSUCCESS en la cadena XRPL fuente (testnet), esa misma operación de manejo de claves se aplica ahora a esa misma cuenta en la cadena XRPL de destino (Xahau Testnet). + +Durante las pruebas, las Cuentas en Xahau Testnet _pueden_ eliminarse; sin embargo, en la cadena de producción con Hooks habilitados, no podrán eliminarse. + +Las Cuentas en Xahau Testnet tienen un campo opcional _**ImportSequence**_ en el AccountRoot. Si **Import** se ha usado alguna vez en esa cuenta en Xahau Testnet, este campo está presente y se rellena con el número de Sequence de la Transacción de Quema importada más recientemente. Esto es para prevenir ataques de repetición, pero también significa que nunca debe enviar sus Burn2Mints fuera de secuencia, de lo contrario las transacciones omitidas nunca serán aceptadas para Acuñar. diff --git a/src/content/docs/es/docs/features/developer-tooling/client-libraries.mdx b/src/content/docs/es/docs/features/developer-tooling/client-libraries.mdx new file mode 100644 index 0000000..b4a766f --- /dev/null +++ b/src/content/docs/es/docs/features/developer-tooling/client-libraries.mdx @@ -0,0 +1,10 @@ +--- +title: Bibliotecas de Cliente +--- +Estas bibliotecas de cliente simplifican parte del trabajo habitual de acceso y procesamiento de datos del XAH Ledger y los presentan en una forma que se adapta a las convenciones nativas de sus respectivos lenguajes de programación. + +Para otros lenguajes de programación, puede acceder al XAH Ledger a través de las APIs HTTP. + +
LenguajeNombre de la BibliotecaComenzarProtocoloCódigo Fuente
Pythonxahau-pyComenzarXAH / XRPRepositorio
JavaScript / TypeScriptxahau.jsComenzarXAH / XRPRepositorio
JavaScript / TypeScriptxrpl-accountlibComenzar
Ejemplo
XAH / XRPRepositorio
+ +**Consejo:** ¡Para añadir una biblioteca de cliente que no esté listada aquí, sugiera cambios en esta página! diff --git a/src/content/docs/es/docs/features/developer-tooling/curated-tooling.mdx b/src/content/docs/es/docs/features/developer-tooling/curated-tooling.mdx new file mode 100644 index 0000000..2e973ea --- /dev/null +++ b/src/content/docs/es/docs/features/developer-tooling/curated-tooling.mdx @@ -0,0 +1,16 @@ +--- +title: Herramientas Seleccionadas +--- +Estas herramientas simplifican parte del trabajo habitual de acceso y procesamiento de Hooks. + +| Herramienta | Enlace de Referencia | +| ----------------------- | ---------------------------------------------------------------------- | +| **Hooks Builder** | [Enlace al Builder](https://builder.xahau.network/develop) | +| **Hooks Toolkit** | [Enlace al Toolkit](https://hooks-toolkit.com/) | +| **Xpop Toolkit** | [Enlace al Toolkit](https://github.com/Transia-RnD/xpop-toolkit) | +| **Hooks Blog** | [Enlace al Blog](https://dev.to/t/xrplhooks/top/infinity) | +| **XFL Tools** | [Enlace a la Herramienta](https://richardah.github.io/xfl-tools/) | +| **Binary Visualizer** | [Enlace a la Herramienta](https://richardah.github.io/xrpl-binary-visualizer/) | +| **Keylet Tools** | [Enlace a la Herramienta](https://richardah.github.io/xrpl-keylet-tools/) | +| **CTID Visualizer** | [Enlace a la Herramienta](https://transia-rnd.github.io/xrpl-ctid-visualizer/) | +| **C Hook Tx Builder** | [Enlace a la Herramienta](https://transia-rnd.github.io/xrpl-tt-visualizer/) | diff --git a/src/content/docs/es/docs/features/developer-tooling/developer-tricks.mdx b/src/content/docs/es/docs/features/developer-tooling/developer-tricks.mdx new file mode 100644 index 0000000..0522f62 --- /dev/null +++ b/src/content/docs/es/docs/features/developer-tooling/developer-tricks.mdx @@ -0,0 +1,29 @@ +--- +title: Trucos para Desarrolladores +--- +## Firma Wildcard + +Para probar y reproducir fácilmente, use `NetworkID` con el valor `65535` (configuración: `[network_id]`) para deshabilitar la verificación de firmas. + +Añadido: [https://github.com/Xahau/xahaud/pull/201](https://github.com/Xahau/xahaud/pull/201) + +## Definiciones del Servidor + +Las definiciones del servidor pueden obtenerse fácilmente desde los nodos públicos. Estas definiciones incluyen información del codec binario y otros datos específicos de la red necesarios para la serialización y deserialización de transacciones. + +### Mainnet +- [`https://xahau.network/server_definitions.json`](https://xahau.network/server_definitions.json) + +### Testnet +- [`https://xahau-test.net/server_definitions.json`](https://xahau-test.net/server_definitions.json) + +### JSHooks-Testnet +- [`https://jshooks.xahau-test.net/server_definitions.json`](https://jshooks.xahau-test.net/server_definitions.json) + +Estas definiciones del servidor son esenciales para: +- Operaciones de codec binario +- Serialización de transacciones +- Definiciones de tipos de campos +- Constantes específicas de la red + +Puede usar estas definiciones en sus aplicaciones para codificar y decodificar correctamente las transacciones para la red Xahau. diff --git a/src/content/docs/es/docs/features/faucet-and-explorer.mdx b/src/content/docs/es/docs/features/faucet-and-explorer.mdx new file mode 100644 index 0000000..062fa05 --- /dev/null +++ b/src/content/docs/es/docs/features/faucet-and-explorer.mdx @@ -0,0 +1,27 @@ +--- +title: Faucet y Exploradores +--- +El Faucet y los Exploradores de Xahau se pueden encontrar aquí: + +## Testnet + +* **Faucet:** [**https://xahau-test.net**](https://xahau-test.net) + * Para automatizar la financiación de cuentas en testnet, realice un HTTP POST en:\ + [https://xahau-test.net/accounts](https://xahau-test.net/accounts)\ + Cuerpo vacío: nueva cuenta (prefundada)\ + Cuerpo JSON con propiedad `destination`: financiar la cuenta `destination` mencionada. +* **Exploradores:** + * **Xahauexplorer:** [**https://test.xahauexplorer.com**](https://test.xahauexplorer.com) + * **InFTF:** [**https://explorer.xahau-test.net**](https://explorer.xahau-test.net) + * **XRPL.org:** [**https://xahau-testnet.xrpl.org**](https://xahau-testnet.xrpl.org) + * **XRPLWin:** [**https://xahau-testnet.xrplwin.com**](https://xahau-testnet.xrplwin.com/) + +## Mainnet + +* **Página principal:** [**https://xahau.network**](https://xahau.network/) +* **Exploradores:** + * **Xahauexplorer:** [**https://xahauexplorer.com**](https://xahauexplorer.com/) + * **Xahscan:** [**https://xahscan.com/**](https://xahscan.com/) + * **InFTF:** [**https://explorer.xahau.network**](https://explorer.xahau.network/) + * **XRPL.org:** [**https://xahau.xrpl.org**](https://xahau.xrpl.org) + * **XRPLWin:** [**https://xahau.xrplwin.com**](https://xahau.xrplwin.com/) diff --git a/src/content/docs/es/docs/features/governance-game.mdx b/src/content/docs/es/docs/features/governance-game.mdx new file mode 100644 index 0000000..48e632b --- /dev/null +++ b/src/content/docs/es/docs/features/governance-game.mdx @@ -0,0 +1,195 @@ +--- +title: Juego de Gobernanza +description: >- + El Juego de Gobernanza es un mecanismo de gobernanza innovador dentro del ecosistema + Xahau para garantizar un enfoque centrado en la comunidad en la toma de decisiones. +--- + +### Descripción General + +El Juego de Gobernanza de Xahau permite a hasta 400 partes interesadas participar democráticamente en la gestión de la red Xahau a través del Hook de Gobernanza instalado en la Cuenta Génesis. + +### Capa 1 + +El juego consiste en una mesa de "Capa 1" en la que hay 20 asientos. Una cuenta Xahau (dirección r) puede ocupar cada asiento, o puede estar vacío. Cuando un asiento está ocupado, se dice que un miembro de la mesa se sienta allí. + +Para jugar el juego, los miembros de la mesa emiten votos. Los votos son sobre uno de tres tipos de temas: + +* Temas de asientos +* Temas de hooks +* Temas de recompensas. + +Los temas de asientos van de S00 a S19 y representan un voto sobre quién (si alguien) ocupa actualmente ese asiento. Un voto del 80% es suficiente para hacer un cambio. El proceso de votación es continuo, y el voto final que supera el umbral acciona el cambio. + +Los temas de hooks van de H0 a H9 y representan qué Hooks, incluido el propio Hook de Gobernanza, están instalados en la cuenta de la mesa. Estos temas requieren el 100% de los miembros sentados en esa mesa para estar de acuerdo antes de que se pueda hacer un cambio. Esto permite que el Juego de Gobernanza sea actualizado y que se añadan más características a la cuenta génesis con el tiempo. + +Los temas de recompensas son RR y RD, que significan Tasa de Recompensa y Retraso de Recompensa, respectivamente. Estos temas también requieren el 100% de los miembros en la mesa para estar de acuerdo para hacer un cambio. Estos parámetros afectan al sistema de BalanceAdjustments: cuánto puede reclamar cada usuario activo en la red y con qué frecuencia. + +### Capa 2 + +Los miembros que ocupan asientos en la mesa de Capa 1 son cuentas Xahau (direcciones r). El juego de gobernanza está diseñado para ser estructuralmente recursivo, de modo que una de estas cuentas pueda ser en sí misma una mesa que consiste en otros 20 asientos. Esto se llama mesa de Capa 2, y los asientos son asientos de Capa 2. + +Dentro de una mesa de Capa 2, existen los mismos temas de votación de asientos y hooks, con las mismas reglas de votación que la mesa de Capa 1. Esto permite a una mesa gobernar su propia membresía y los hooks que se ejecutan allí. + +Además de estos temas, una mesa de Capa 2 también puede, mediante un voto del 51%, elevar un voto a la mesa de Capa 1. Este es un voto en nombre de la dirección r en la que existe la mesa de Capa 2 y cuenta como un único voto en la mesa de Capa 1. + +El voto de la mesa de Capa 2 puede caer por debajo del 51%, en cuyo caso el voto originalmente elevado a la mesa de Capa 1 **no** se retira. Solo un nuevo voto (diferente) que alcance el 51% puede cambiar el voto de la mesa en Capa 1. + +Las mesas de Capa 2 solo pueden votar sobre temas de Recompensas a través de un voto elevado a Capa 1. + +En resumen, los miembros de Capa 2 pueden votar por: + +* Asientos y Hooks para su propia mesa, y +* Asientos, Hooks y temas de Recompensas para la mesa L1 a través del asiento de Capa 1 en el que reside su mesa de Capa 2. + +### Restricciones del Juego + +* Cualquier mesa puede tener al menos 2 miembros y como máximo 20 miembros. +* Una sola dirección r solo puede ocupar un asiento en una mesa determinada, pero puede ocupar un asiento en cada una de muchas mesas diferentes. +* El Juego de Gobernanza no está diseñado para recurrir más allá de dos capas. No hay ninguna imposibilidad técnica para implementar una mesa de Capa 3, pero el Hook de Gobernanza actual no la soporta. + +### Recompensas de Validadores + +Las recompensas de validadores son un incentivo para ejecutar un validador en la red. Las recompensas son generadas por la red y otorgadas a la intersección de miembros de Capa 1 y validadores UNL activos. Para calificar para las recompensas de validador dentro de un bloque dado de 256 ledgers, lo siguiente debe ser verdad: + +* El validador está en el UNL de Xahau. +* El validador valida exitosamente a los ojos de otros validadores UNL. +* Cuando la clave pública maestra del validador se convierte en una dirección r, esa cuenta se sienta en la Mesa L1. + +Las recompensas son ad hoc y se basan en los Ajustes de Balance de los usuarios de Xahau. Cuando un usuario realiza un Ajuste de Balance, una cantidad igual a su ajuste dividida por 20 se envía a la dirección r de cada uno de los validadores activos que cumplen los criterios anteriores. + +## Especificación Técnica + +El Hook de Gobernanza se instala en la cuenta génesis por la enmienda XahauGenesis varios ledgers después del ledger 1 en una nueva red. Esta es la mesa L1. Para crear una mesa L2, instale el Hook en una cuenta diferente, luego siente esa cuenta en la mesa L1. + +### Parámetros del Hook de Gobernanza + +Cuando se instala el Hook de Gobernanza, se instala con un conjunto de HookParameters. Estos especifican la composición inicial de la mesa. + +Cada HookParameter tiene un nombre de 3 bytes que consiste en 3 caracteres Ascii o 2 caracteres Ascii y un identificador como se indica a continuación. LE = Little Endian. + +``` +Parameter Name: {'I', 'R', 'R'} +Parameter Value: Initial Reward Rate <8 byte XFL fraction between 0 and 1, LE> +Parameter Name: {'I', 'R', 'D'} +Parameter Value: Initial Reward Delay <8 byte LE XFL seconds between rewards> +Parameter Name: {'I', 'M', 'C'} +Parameter Value: Initial Member Count <1 byte> +Parameter Name: {'I', 'S', 0x00} +Parameter Value: Initial seat #0's member's 20 byte Account ID. +Parameter Name: {'I', 'S', 0x01} +Parameter Value: Initial seat #1's member's 20 byte Account ID. +... etc ... up to at most Seat 19. + +``` + +Para iniciar el juego, se debe enviar una transacción Invoke al Hook. Puede ser enviada por cualquier cuenta. No se requieren Blob ni HookParameters. Esta transacción Invoke activa el Hook por primera vez y le solicita que cree entradas de estado para cada asiento inicial, tasa de recompensa y retraso de recompensa. + +### Estado del Hook de Gobernanza + +El Estado del Hook del Hook de Gobernanza se almacena en el espacio de nombres cero: `0000000000000000000000000000000000000000000000000000000000000000.` + +Hay varios tipos de entradas de estado. El primero son lo que se denominan claves de miembro directas e inversas. Estas mapean cada número de asiento al miembro que se sienta allí y cada miembro al asiento en el que se sienta. + +``` +Key: 0x0000000000000000000000000000000000000000000000000000000000000005 +Val: <20 byte AccountID of the member at seat 5 or all 0's or absent.> + +Key: <20 byte AccountID of the member at seat 3> +Val: 0x03 +``` + +A continuación, hay algunas entradas de estado singleton. Conteo de Miembros, Tasa de Recompensa y Retraso de Recompensa, respectivamente: + +``` +Key in Ascii: MC +Key: 0x0000000000000000000000000000000000000000000000000000000000004D43 +Val: <1 byte member count (how many seats are occupied)> + +Key in Ascii: RR +Key: 0x0000000000000000000000000000000000000000000000000000000000005252 +Val: <8 byte LE XFL reward rate (between 0 and 1 (1 being 100%))> + +Key in Ascii: RD +Key: 0x0000000000000000000000000000000000000000000000000000000000005244 +Val: <8 byte LE XFL reward delay in seconds> +``` + +Finalmente, los votos y contadores de votos también se almacenan en el estado del Hook. Cuando un voto es emitido por un asiento, se registra en el estado del Hook de la siguiente manera: + +``` +Vote key is 32 bytes comprising: + 'V' (0x56) - vote + 'H' (0x48) or 'R' (0x52) or 'S' (0x53) - topic type + 'R' (0x52) or 'D' (0x44) or 0 (0x00) to 19 (0x13) - topic detail + 1 (0x01) or 2 (0x02) - target layer for this vote + 0x00 00 00 00 00 00 00 00 - 8 bytes of padding + 20 byte Account ID - the voter +Vote data: + 20 byte Account ID or 8 byte XFL +``` + +Cuando se emite un voto, incrementa una entrada de estado contador de votos. Este contador realiza un seguimiento de cuántos votos hay actualmente para este par tema-dato y permite al Hook accionar el voto cuando la votación supera el umbral requerido. El estado contador es el siguiente: + +``` +Counter key is 32 bytes comprising: + 'C' (0x43) - count + 'H' (0x48) or 'R' (0x52) or 'S' (0x53) - topic type + 'R' (0x52) or 'D' (0x44) or 0 (0x00) to 19 (0x13) - topic detail + 1 (0x01) or 2 (0x02) - target layer for this vote + 0's for padding + vote data or left-truncated vote data +``` + +### Transacciones del Hook de Gobernanza + +Los miembros interactúan con el Hook de Gobernanza usando transacciones ttINVOKE. Además de esto, el Hook también puede emitir sus propias transacciones ttINVOKE si es una mesa L2 elevando un voto a la mesa L1. + +Una transacción de voto contiene un array HookParameters en el nivel superior de la transacción: + +``` +{ + Account: , + TransactionType: Invoke, + NetworkID: 21337, + Destination: , + HookParameters: + [ + { + HookParameter: + { + HookParameterName: "4C", // L - the target layer + HookParameterValue: "01", // 01 for L1 table, 02 for L2 table + // note: this is the table the vote is + // intended for, not the table you're at + // i.e. for a L2 table you can vote on + // your own membership or on L1's + } + }, + { + HookParameter: + { + HookParameterName: "54", // T - topic type + HookParameterValue: "4801", // H [0x00-0x09] or + // S [0x00-0x13] or + // RR or RD + } + }, + { + HookParameter: + { + HookParameterName: "56", // V - vote data + HookParameterValue: <32 or 20 or 8 bytes of vote data> + } + } + ] +} +``` + +### Borrar un Voto + +No hay forma de "eliminar un voto" como tal. Puede cambiar su voto para reflejar la posición actual en su lugar. + +Por ejemplo, si nadie se sienta en el asiento 8 y usted ha votado por la cuenta A para sentarse allí, y luego cambia de opinión, puede hacer un voto para vaciar el asiento 8 (aunque ya esté vacante) alineando así su voto con el estado actual del asiento. + +Para hacer esto, vota con todos ceros en los datos del voto, con la misma longitud que el tema del voto normalmente requiere. Por lo tanto, para un voto de asiento, esto son 20 bytes de ceros. diff --git a/src/content/docs/es/docs/features/http-websocket-apis/admin-api-methods.mdx b/src/content/docs/es/docs/features/http-websocket-apis/admin-api-methods.mdx new file mode 100644 index 0000000..b16aeef --- /dev/null +++ b/src/content/docs/es/docs/features/http-websocket-apis/admin-api-methods.mdx @@ -0,0 +1,61 @@ +--- +title: Métodos de API de Administrador +--- +Estos métodos están destinados exclusivamente al personal de confianza responsable del mantenimiento de las operaciones del servidor xahaud. + +### Métodos de Generación de Claves + +| Método | Descripción | +| ------------------ | -------------------------------------------------------------------------------------------------------------------- | +| validation_create | Genera un par de claves formateado para nodos xahaud. (Los validadores deben usar tokens en lugar de claves de este método.) | +| wallet_propose | Genera claves para una nueva cuenta. | + +### Métodos de Registro y Gestión de Datos + +| Método | Descripción | +| --------------- | ------------------------------------------------------------------------ | +| can_delete | Habilita la eliminación en línea de ledgers hasta un ledger especificado. | +| download_shard | Descarga un fragmento específico del historial del ledger. | +| ledger_cleaner | Configura el limpiador de ledger para detectar y resolver datos corruptos. | +| ledger_request | Consulta a un servidor par por una versión específica del ledger. | +| log_level | Ver o cambiar los niveles de verbosidad del registro. | +| logrotate | Reabre el archivo de registro. | +| node_to_shard | Transfiere datos del almacén del ledger al almacén de fragmentos. | + +### Métodos de Control del Servidor + +| Método | Descripción | +| -------------- | -------------------------------------------------------- | +| ledger_accept | Cierra y avanza el ledger en modo autónomo. | +| stop | Apaga el servidor xahaud. | + +### Métodos de Firma + +| Método | Descripción | +| --------- | -------------------------------------------- | +| sign | Firma criptográficamente una transacción. | +| sign_for | Contribuye a una firma múltiple. | + +### Métodos de Gestión de Pares + +| Método | Descripción | +| ------------------------ | ------------------------------------------------------ | +| connect | Fuerza al servidor a conectarse a un par específico. | +| peer_reservations_add | Añade o actualiza un espacio reservado para un par específico. | +| peer_reservations_del | Elimina un espacio reservado para un par específico. | +| peer_reservations_list | Ver todos los espacios de par reservados. | +| peers | Recupera información sobre los pares conectados. | + +### Métodos de Estado/Depuración + +| Método | Descripción | +| ---------------------- | ------------------------------------------------------------------ | +| consensus_info | Ver el estado actual del proceso de consenso. | +| feature | Recupera información sobre las enmiendas del protocolo. | +| fetch_info | Comprueba el estado de sincronización del servidor con la red. | +| get_counts | Ver estadísticas sobre los componentes internos y el uso de memoria del servidor. | +| manifest | Recupera detalles de clave pública para un validador conocido. | +| print | Accede a información sobre los subsistemas internos. | +| validator_info | Obtiene los detalles de configuración del validador del servidor. | +| validator_list_sites | Ver los sitios que publican listas de validadores. | +| validators | Recupera información sobre los validadores actuales. | diff --git a/src/content/docs/es/docs/features/http-websocket-apis/considerations.mdx b/src/content/docs/es/docs/features/http-websocket-apis/considerations.mdx new file mode 100644 index 0000000..cdcff2a --- /dev/null +++ b/src/content/docs/es/docs/features/http-websocket-apis/considerations.mdx @@ -0,0 +1,16 @@ +--- +title: Consideraciones +--- +## Marcadores + +Algunos métodos devuelven más datos de los que caben eficientemente en una sola respuesta. Cuando los resultados superan el límite de la respuesta, se incluye un campo `marker` en la respuesta. Este campo le permite recuperar páginas adicionales de datos mediante solicitudes posteriores. Para continuar obteniendo datos, incluya el valor `marker` de la respuesta anterior en su próxima solicitud. Si una respuesta no incluye un `marker`, significa que ha llegado al final del conjunto de datos. + +El formato del campo `marker` no está especificado intencionalmente. Cada servidor puede definir el `marker` según sea necesario, lo que significa que podría ser una cadena, un objeto anidado u otro tipo. El formato del `marker` puede variar entre servidores e incluso entre métodos en el mismo servidor. Cada `marker` es temporal y puede volverse inválido después de aproximadamente 10 minutos. + +## Límite de Velocidad + +El servidor `xahaud` aplica límites de velocidad a los clientes de la API que usan APIs públicas para prevenir solicitudes excesivas. El límite de velocidad se aplica en función de la dirección IP del cliente, lo que significa que múltiples clientes que comparten una [traducción de direcciones de red (NAT)](https://es.wikipedia.org/wiki/Traducci%C3%B3n_de_direcciones_de_red) compartirán el mismo límite de velocidad asociado con su IP pública. + +Cuando un cliente se está acercando al límite de velocidad, el servidor incluye un campo `"warning": "load"` en el nivel superior de una respuesta de la API. Esta advertencia no aparece en cada respuesta, pero puede enviarse varias veces antes de que el servidor desconecte al cliente. Los clientes conectados como administrador están exentos del límite de velocidad. + +Si un cliente supera el límite de velocidad, el servidor desconecta al cliente y bloquea temporalmente otras solicitudes de esa dirección IP. Las APIs WebSocket y JSON-RPC manejan las desconexiones de manera diferente, como se describe a continuación. diff --git a/src/content/docs/es/docs/features/http-websocket-apis/public-api-methods.mdx b/src/content/docs/es/docs/features/http-websocket-apis/public-api-methods.mdx new file mode 100644 index 0000000..9edea88 --- /dev/null +++ b/src/content/docs/es/docs/features/http-websocket-apis/public-api-methods.mdx @@ -0,0 +1,77 @@ +--- +title: Métodos de API Pública +--- +Interactúe directamente con un servidor xahaud usando los métodos de API pública. Estos métodos no están necesariamente destinados al uso público en general, pero son accesibles para cualquier cliente conectado al servidor. + +### Métodos de Cuenta + +| Método | Descripción | +| ------------------- | --------------------------------------------------------------------------- | +| account_channels | Lista los canales de pago donde la cuenta es la fuente del canal. | +| account_currencies | Lista las monedas que la cuenta puede enviar o recibir. | +| account_info | Recupera información básica sobre una cuenta. | +| account_lines | Accede a la información de líneas de confianza de una cuenta. | +| account_objects | Recupera todos los objetos del ledger propiedad de una cuenta. | +| account_offers | Ver las ofertas de intercambio de moneda de una cuenta. | +| account_tx | Recupera el historial de transacciones de una cuenta. | +| gateway_balances | Calcula los montos totales emitidos para una cuenta. | +| noripple_check | Sugiere cambios en la configuración de Default Ripple y No Ripple de una cuenta. | + +### Métodos de Ledger + +| Método | Descripción | +| --------------- | ------------------------------------------------------- | +| ledger | Obtiene información sobre una versión específica del ledger. | +| ledger_closed | Recupera la versión del ledger cerrada más recientemente. | +| ledger_current | Recupera la versión actual del ledger de trabajo. | +| ledger_data | Accede al contenido bruto del ledger. | +| ledger_entry | Recupera un elemento específico de una versión del ledger. | + +### Métodos de Transacción + +| Método | Descripción | +| ------------------- | ------------------------------------------------------------------ | +| submit | Envía una transacción a la red. | +| submit_multisigned | Envía una transacción con firma múltiple. | +| transaction_entry | Recupera detalles sobre una transacción en un ledger específico. | +| tx | Recupera información de transacciones en todos los ledgers. | +| sign | (Admin) Firma criptográficamente una transacción. | +| sign_for | (Admin) Contribuye a una firma múltiple. | + +### Métodos de Libro de Órdenes + +| Método | Descripción | +| ------------------- | ----------------------------------------------------------------- | +| book_offers | Ver ofertas para intercambiar dos monedas. | +| deposit_authorized | Comprueba si una cuenta puede enviar pagos directamente a otra. | + +### Métodos de Canal de Pago + +| Método | Descripción | +| ------------------ | ------------------------------------------------ | +| channel_authorize | Firma un reclamo para un canal de pago. | +| channel_verify | Verifica la firma de un reclamo de canal de pago. | + +### Métodos de Suscripción + +| Método | Descripción | +| ----------- | ---------------------------------------- | +| subscribe | Escuchar actualizaciones sobre un tema | +| unsubscribe | Dejar de recibir actualizaciones | + +### Métodos de Información del Servidor + +| Método | Descripción | +| ------------- | --------------------------------------------------------- | +| fee | Recupera información sobre los costos de transacción. | +| server_info | Obtiene el estado del servidor en formato legible. | +| server_state | Obtiene el estado del servidor en formato legible por máquina. | +| manifest | Recupera detalles de clave pública para un validador. | + +### Métodos de Utilidad + +| Método | Descripción | +| ------ | --------------------------------------------------------------------------------- | +| json | Proxy para ejecutar comandos con parámetros JSON. _(Solo línea de comandos.)_ | +| ping | Verifica la conectividad con el servidor. | +| random | Genera números aleatorios. | diff --git a/src/content/docs/es/docs/features/http-websocket-apis/request-formatting-guide.mdx b/src/content/docs/es/docs/features/http-websocket-apis/request-formatting-guide.mdx new file mode 100644 index 0000000..e39ad3b --- /dev/null +++ b/src/content/docs/es/docs/features/http-websocket-apis/request-formatting-guide.mdx @@ -0,0 +1,63 @@ +--- +title: Guía de Formato de Solicitudes +--- +### Servidores Públicos + +* wss://xahau.network o https://xahau.network (Mainnet) +* wss://xahau-test.net o https://xahau-test.net (Testnet) + +### Solicitudes de Ejemplo + +Para enviar una solicitud de ejemplo a la API, use los siguientes comandos. + +### Websocket + +``` +{ + "id": 3, + "command": "account_info", + "account": "rhBDFMmr3jSjgsWMqBAYaATLy3PuXy395y", + "strict": true, + "ledger_index": "validated", + "api_version": 1 +} +``` + +### Estructura de Solicitud WebSocket + +Una vez que establezca una conexión WebSocket al servidor `xahaud`, puede enviar comandos como objetos JSON con estos campos: + +
CampoTipoDescripción
commandStringEl nombre del método de la API
id(Múltiple)(Opcional) Identificador único para la solicitud.
api_versionNumber(Opcional) Especifica la versión de la API.
+ +### JSON-RPC + +``` +POST https://xahau.network/ +Content-Type: application/json + +{ + "method": "account_info", + "params": [ + { + "account": "rhBDFMmr3jSjgsWMqBAYaATLy3PuXy395y", + "strict": true, + "ledger_index": "validated", + "api_version": 1 + } + ] +} +``` + +### Estructura de Solicitud JSON-RPC + +
CampoTipoDescripción
methodStringEl nombre del método de la API
paramsArray(Opcional) Un array de un elemento que contiene un objeto JSON con los parámetros del método.
+ +### Línea de Comandos + +``` +xahaud account_info rhBDFMmr3jSjgsWMqBAYaATLy3PuXy395y validated strict +``` + +### Estructura de Solicitud por Línea de Comandos + +
CampoDescripción
xahaudComenzar a llamar al servicio xahaud
methodEl nombre del método de la API
params(Opcional)
diff --git a/src/content/docs/es/docs/features/http-websocket-apis/response-formatting-guide.mdx b/src/content/docs/es/docs/features/http-websocket-apis/response-formatting-guide.mdx new file mode 100644 index 0000000..c28ed32 --- /dev/null +++ b/src/content/docs/es/docs/features/http-websocket-apis/response-formatting-guide.mdx @@ -0,0 +1,27 @@ +--- +title: Guía de Formato de Respuestas +--- +Las respuestas están estructuradas de manera diferente según si la solicitud se realiza a través de las interfaces WebSocket, JSON-RPC o Línea de Comandos. Las interfaces JSON-RPC y Línea de Comandos comparten el mismo formato, ya que la interfaz de Línea de Comandos usa internamente JSON-RPC. + +### Campos + +| Campo | Tipo | Descripción | +| ------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | (Varía) | (Para WebSocket) El ID de la solicitud original. | +| status | String | (Para WebSocket) Indica `success` cuando la solicitud fue recibida y procesada correctamente. | +| result.status | String | (Para JSON-RPC y Línea de Comandos) Indica `success` cuando la solicitud fue procesada exitosamente. | +| type | String | (Para WebSocket) El valor `response` se usa para respuestas directas a solicitudes de la API. Las notificaciones asíncronas usan otros valores, como `ledgerClosed` o `transaction`. | +| result | Object | Contiene el resultado de la consulta, con contenido que varía según el comando. | +| warning | String | _(Opcional)_ Si está presente, el valor es `load`, indicando que el cliente se está acercando al umbral del límite de velocidad donde el servidor puede desconectarse. | +| warnings | Array | _(Opcional)_ Una lista de **Objetos de Advertencia** con advertencias importantes del servidor. Para más detalles, consulte Advertencias de la API. | +| forwarded | Boolean | _(Opcional)_ `true` indica que la solicitud fue reenviada desde un servidor en Modo de Reporte a un servidor P2P para cumplir con la solicitud. El valor predeterminado es `false`. | + +Advertencias de la API + +Cuando una respuesta contiene un array `warnings`, cada entrada representa una advertencia específica del servidor. Cada **Objeto de Advertencia** incluye los siguientes campos: + +| Campo | Tipo | Descripción | +| ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | Number | Un código numérico único que identifica este mensaje de advertencia. | +| message | String | Una explicación legible por humanos de la advertencia. Evite escribir código que dependa del contenido de este campo; use el `id` (y `details`, si está disponible) para interpretar la advertencia. | +| details | Object | _(Opcional)_ Contexto adicional sobre la advertencia. El contenido varía según el tipo de advertencia. | diff --git a/src/content/docs/es/docs/features/network-features/account-managment.mdx b/src/content/docs/es/docs/features/network-features/account-managment.mdx new file mode 100644 index 0000000..63b1807 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/account-managment.mdx @@ -0,0 +1,44 @@ +--- +title: Gestión de Cuentas +--- +import { LinkCard } from '@astrojs/starlight/components'; + +Las características de Gestión de Cuentas en la red Xahau son un componente crucial para que los usuarios gestionen sus cuentas de manera efectiva. + +Esto incluye varios tipos de transacciones que permiten a los usuarios realizar diversas operaciones en sus cuentas. + +### Tipos de Transacciones + +#### AccountSet + +El tipo de transacción `AccountSet` permite a los usuarios modificar las propiedades de sus cuentas. Esto incluye configuraciones como la tasa de transferencia, las banderas de cuenta y más. + + + +#### AccountDelete + +El tipo de transacción `AccountDelete` permite a los usuarios eliminar sus cuentas de la red Xahau. Esta operación es irreversible y debe usarse con precaución. + + + +#### SetRegularKey + +El tipo de transacción `SetRegularKey` permite a los usuarios establecer un par de claves regular para su cuenta. Este par de claves puede usarse como alternativa al par de claves maestro para firmar transacciones. + + + +#### SignerListSet + +El tipo de transacción `SignerListSet` permite a los usuarios establecer una lista de firmantes para su cuenta. Esto es particularmente útil para las cuentas de firma múltiple donde múltiples partes deben aprobar las transacciones. + + + +#### Import + +El tipo de transacción `Import` se usa para importar transacciones desde otras redes. Esta característica es especialmente útil para los emisores que necesitan importar transacciones para sus titulares de activos. Se recomienda configurar primero las claves de sus cuentas antes de intentar importar transacciones. + +Tenga en cuenta que el proceso de importación para el emisor implica tipos de transacciones específicos y requiere una configuración cuidadosa. Siempre asegúrese de que los hooks estén correctamente configurados y de que las transacciones sean válidas para las operaciones previstas. + + + +Estos tipos de transacciones proporcionan a los usuarios un conjunto completo de herramientas para gestionar sus cuentas en la red Xahau. Como con todas las operaciones, los usuarios deben asegurarse de comprender las implicaciones de cada tipo de transacción antes de usarlos. diff --git a/src/content/docs/es/docs/features/network-features/balance-rewards.mdx b/src/content/docs/es/docs/features/network-features/balance-rewards.mdx new file mode 100644 index 0000000..540dc57 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/balance-rewards.mdx @@ -0,0 +1,20 @@ +--- +title: Recompensas de Balance +--- +import { LinkCard } from '@astrojs/starlight/components'; + +La característica de Recompensas de Balance es un aspecto único de la red Xahau que permite a los usuarios acumular y reclamar recompensas basadas en el balance de su cuenta. Esta característica se implementa mediante una combinación de código nativo (Enmienda BalanceRewards) y código de hook (Hook de Recompensa de la Cuenta Génesis). + +### Tipos de Transacciones + +#### ClaimReward + +Una transacción `ClaimReward` permite a una cuenta reclamar las recompensas que ha acumulado. Las recompensas pueden ser reclamadas por el propietario de la cuenta o por un emisor especificado. La cuenta también puede excluirse de las recompensas estableciendo el campo Flags en 1. + + + +#### GenesisMint + +El tipo de transacción `GenesisMint` también está asociado con la característica de Recompensas de Balance. Esta es una transacción Emitida que se ejecuta a través del Hook de Recompensa cada vez que un usuario reclama sus recompensas de balance. + + diff --git a/src/content/docs/es/docs/features/network-features/check.mdx b/src/content/docs/es/docs/features/network-features/check.mdx new file mode 100644 index 0000000..505f411 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/check.mdx @@ -0,0 +1,26 @@ +--- +title: Check +--- +import { LinkCard } from '@astrojs/starlight/components'; + +La característica Check en la red Xahau es un sistema de pago diferido que permite la creación, cancelación y cobro de cheques dentro del ledger. Esta característica está diseñada para facilitar transacciones seguras y eficientes entre partes. + +### Tipos de Transacciones + +#### CheckCreate + +La transacción `CheckCreate` se usa para crear un objeto Check en el ledger. Esto representa un pago diferido que puede ser cobrado por su destino previsto. + + + +#### CheckCancel + +La transacción `CheckCancel` se usa para cancelar un Check que ha sido creado pero aún no cobrado. Esto permite al remitente detener el procesamiento del pago si es necesario. + + + +#### CheckCash + +La transacción `CheckCash` se usa para cobrar un Check que ha sido creado. Esto permite al destinatario recibir los fondos que han sido diferidos. + + diff --git a/src/content/docs/es/docs/features/network-features/escrow.mdx b/src/content/docs/es/docs/features/network-features/escrow.mdx new file mode 100644 index 0000000..529e991 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/escrow.mdx @@ -0,0 +1,28 @@ +--- +title: Escrow +--- +import { LinkCard } from '@astrojs/starlight/components'; + +La característica de Escrow es una parte crucial de la red Xahau. Proporciona un método seguro y sin confianza para las transacciones entre partes. La característica de Escrow garantiza que los activos involucrados en una transacción se mantengan de forma segura hasta que se cumplan todas las condiciones de la transacción. + +### Tipos de Transacciones + +La característica de Escrow incluye tres tipos de transacciones: + +#### EscrowCreate + +La transacción `EscrowCreate` se usa para crear un nuevo acuerdo de escrow. Esta transacción especifica los términos del escrow, incluyendo las partes involucradas, los activos a mantener en escrow y las condiciones bajo las cuales se liberarán los activos. + + + +#### EscrowFinish + +La transacción `EscrowFinish` se usa para completar un acuerdo de escrow. Esta transacción se ejecuta cuando se cumplen todas las condiciones del escrow. Al ejecutarse, los activos mantenidos en escrow se liberan a la parte correspondiente. + + + +#### EscrowCancel + +La transacción `EscrowCancel` se usa para cancelar un acuerdo de escrow. Esta transacción puede ejecutarse si las condiciones del escrow no se cumplen dentro de un plazo especificado. Al cancelarse, los activos mantenidos en escrow se devuelven a la parte que inició el escrow. + + diff --git a/src/content/docs/es/docs/features/network-features/hooks.mdx b/src/content/docs/es/docs/features/network-features/hooks.mdx new file mode 100644 index 0000000..5a9e593 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/hooks.mdx @@ -0,0 +1,22 @@ +--- +title: Hooks +--- +import { LinkCard } from '@astrojs/starlight/components'; + +Los Hooks son una característica poderosa de la red XRPL, que proporciona una sólida funcionalidad de contratos inteligentes. Son módulos WebAssembly pequeños y eficientes diseñados específicamente para el XRPL, y pueden denominarse Contratos Inteligentes para el Protocolo XRP Ledger. Los Hooks pueden escribirse en cualquier lenguaje que sea compilable con WebAssembly, lo que permite implementar una amplia gama de lógica de negocio y conceptos de contratos inteligentes. + +### Tipos de Transacciones + +La característica Hooks incluye dos tipos de transacciones: + +**SetHook** + +Este tipo de transacción se usa para configurar un hook en una cuenta. + + + +**Invoke** + +Este tipo de transacción se usa para llamar o invocar la funcionalidad de un hook. + + diff --git a/src/content/docs/es/docs/features/network-features/offer.mdx b/src/content/docs/es/docs/features/network-features/offer.mdx new file mode 100644 index 0000000..2a327a3 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/offer.mdx @@ -0,0 +1,20 @@ +--- +title: Oferta +--- +import { LinkCard } from '@astrojs/starlight/components'; + +La característica de Oferta en la red Xahau es un componente crucial del sistema de intercambio descentralizado. Permite a los usuarios crear y cancelar ofertas, facilitando un entorno de trading dinámico y responsivo. + +### Tipos de Transacciones + +#### OfferCreate + +La transacción `OfferCreate` se usa para colocar una oferta en el intercambio descentralizado. + + + +#### OfferCancel + +La transacción `OfferCancel` se usa para cancelar una oferta existente. La documentación para este tipo de transacción se referencia en la Documentación de Xahau pero no se proporciona en el contexto dado. + + diff --git a/src/content/docs/es/docs/features/network-features/payments.mdx b/src/content/docs/es/docs/features/network-features/payments.mdx new file mode 100644 index 0000000..c80a585 --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/payments.mdx @@ -0,0 +1,46 @@ +--- +title: Pagos +--- +import { LinkCard } from '@astrojs/starlight/components'; + +La característica de Pagos en la red Xahau es un componente crucial que permite la transferencia de activos y fondos dentro de la red. Esta característica está diseñada para facilitar transacciones fluidas, garantizando una operación eficiente de la red. + +### Tipos de Transacciones + +La característica de Pagos comprende varios tipos de transacciones, cada uno con un propósito único en la red. Aquí hay una breve descripción de cada tipo de transacción: + +**DepositPreauth** + +Este tipo de transacción permite a una cuenta preautorizar transacciones entrantes desde una fuente especificada. Es una forma de incluir en la lista blanca a las cuentas, garantizando que solo se procesen las transacciones autorizadas. + + + +**TrustSet** + +Este tipo de transacción permite a los usuarios crear una línea de confianza con otra cuenta. Es una forma de establecer confianza entre dos cuentas, permitiéndoles realizar transacciones entre sí. + + + +**Payment** + +Este es el tipo de transacción básico que permite la transferencia de activos entre cuentas. Es el tipo de transacción fundamental para cualquier operación de pago en la red. + + + +**PaymentChannelCreate** + +Este tipo de transacción permite la creación de un canal de pago entre dos cuentas. Los canales de pago son soluciones de escalabilidad fuera del ledger que permiten transacciones de alta frecuencia y bajo costo entre dos partes. + + + +**PaymentChannelFund** + +Este tipo de transacción permite a una cuenta financiar un canal de pago existente. Es una forma de añadir más activos a un canal de pago, permitiendo que se realicen más transacciones. + + + +**PaymentChannelClaim** + +Este tipo de transacción permite a una cuenta reclamar los fondos de un canal de pago. Es una forma de cerrar un canal de pago y recuperar los activos restantes. + + diff --git a/src/content/docs/es/docs/features/network-features/uritoken.mdx b/src/content/docs/es/docs/features/network-features/uritoken.mdx new file mode 100644 index 0000000..418b57a --- /dev/null +++ b/src/content/docs/es/docs/features/network-features/uritoken.mdx @@ -0,0 +1,32 @@ +--- +title: URIToken +--- +import { LinkCard } from '@astrojs/starlight/components'; + +Los URITokens son la implementación de Tokens No Fungibles (NFT) nativa de la red Xahau. Existen como objetos de primera clase en el ledger, identificados de forma única por el hash de su emisor y el Identificador Uniforme de Recursos (URI). Los URITokens pueden apuntar a cualquier contenido digital, y solo puede existir un objeto por URI por cuenta en el ledger. + +El emisor tiene la capacidad de establecer una bandera para permitir la destrucción del objeto en el futuro. La reserva de cada propietario también queda bloqueada al poseer el URIToken. + +### Tipos de Transacciones + +#### URITokenMint + +La transacción URITokenMint acuña un nuevo URIToken y asigna la propiedad a la cuenta especificada. El URIToken acuñado representa un activo digital único que puede usarse en diversas aplicaciones. El emisor puede optar por permitir que el URIToken acuñado sea destruido en el futuro. + + + +#### URITokenBurn + +La transacción URITokenBurn se usa para quemar un URIToken en Xahau. Quemar un URIToken lo elimina permanentemente de la circulación. La transacción no tiene requisitos especiales de costo de transacción. Se requiere la cuenta que posee el URIToken a quemar para esta transacción. + + + +#### URITokenBuy + +La transacción URITokenBuy permite a un usuario comprar un URIToken del emisor. Esta transacción se usa para transferir la propiedad de un URIToken del emisor al comprador. Se requieren la cuenta del comprador, el identificador único del URIToken a comprar y la cantidad de moneda a pagar por el URIToken para esta transacción. + + + + + + diff --git a/src/content/docs/es/docs/features/public-nodes-rpc.mdx b/src/content/docs/es/docs/features/public-nodes-rpc.mdx new file mode 100644 index 0000000..7ca34ff --- /dev/null +++ b/src/content/docs/es/docs/features/public-nodes-rpc.mdx @@ -0,0 +1,33 @@ +--- +title: Nodos Públicos (RPC) +description: >- + Ejecutar su propio nodo: genial. ¿Quiere empezar rápido? Use los nodos RPC públicos de Xahau. +--- +## Mainnet (red 21337) + +* Websocket + * `wss://xahau.network` + * `wss://xahau.org` (alias, algunos bloqueadores de anuncios bloquean .network) +* HTTP POST RPC + * `https://xahau.network` + * `https://xahau.org` (alias, algunos bloqueadores de anuncios bloquean .network) +* Definiciones de Red (Binary Codec, ...) + * [`https://xahau.network/server_definitions.json`](https://xahau.network/server_definitions.json) + +## Testnet (red 21338) + +* Websocket + * `wss://xahau-test.net` +* HTTP POST RPC + * `https://xahau-test.net` +* Definiciones de Red (Binary Codec, ...) + * [`https://xahau-test.net/server_definitions.json`](https://xahau-test.net/server_definitions.json) + +## JSHooks-Testnet (red 31338) + +* Websocket + * `wss://jshooks.xahau-test.net` +* HTTP POST RPC + * `https://jshooks.xahau-test.net` +* Definiciones de Red (Binary Codec, ...) + * [`https://jshooks.xahau-test.net/server_definitions.json`](https://jshooks.xahau-test.net/server_definitions.json) diff --git a/src/content/docs/es/docs/features/transaction-signing/index.mdx b/src/content/docs/es/docs/features/transaction-signing/index.mdx new file mode 100644 index 0000000..09f2386 --- /dev/null +++ b/src/content/docs/es/docs/features/transaction-signing/index.mdx @@ -0,0 +1,64 @@ +--- +title: Firma de Transacciones +description: >- + Las redes con Hooks habilitados requieren campos de transacción específicos y ofrecen más + tipos de transacciones, por lo que no todos los clientes funcionarán de inmediato. `xrpl-accountlib` +--- +## Principales diferencias + +1. Las redes con Hooks habilitados permiten obtener las definiciones de red de forma dinámica. Esto permite a los clientes adaptar los tipos de transacciones disponibles, los objetos del ledger, las propiedades y los tipos de valor. Cuando se implementa correctamente, las bibliotecas de firma y codificación no tienen que actualizarse cuando la red añade tipos/propiedades de transacciones/objetos. **Las bibliotecas a continuación implementan esto y lo gestionarán por usted.** +2. Las redes con Hooks habilitados requieren un **NetworkID** con cada transacción para prevenir la repetición de transacciones en otra cadena. El **NetworkID** también será devuelto por un comando RPC `server_info` en el campo `network_id` (por ejemplo, **`21338`** para Hooks V3 testnet) +3. Las transacciones en una red con Hooks habilitados pueden necesitar tarifas más altas para entregar una transacción a otra cuenta, basándose en los Hooks que se ejecutarán al salir de la cuenta remitente y al recibir en la cuenta de destino. Una tarifa razonable para satisfacer la ejecución de Hooks puede obtenerse dinámicamente desde un nodo emitiendo el comando `fee` mientras se proporciona una transacción como `tx_blob`. **Las bibliotecas a continuación implementan esto y lo gestionarán por usted.** + +## JavaScript/Typescript + +El [**paquete npm `xrpl-accountlib`**](https://www.npmjs.com/package/xrpl-accountlib) puede firmar transacciones para redes con Hooks habilitados, ya que ofrece soporte completo de características de red dinámico, obteniendo las definiciones de red en tiempo de ejecución. + +El [**paquete npm `xrpl-client`**](https://www.npmjs.com/package/xrpl-client) se integra perfectamente con `xrpl-accountlib` (y viene como dependencia) para obtener dinámicamente las definiciones de red mencionadas y los valores de cuenta, ayudando a enviar la transacción. + +### Ejemplo de Código + +```javascript +import { + derive, + utils, + signAndSubmit, +} from "xrpl-accountlib" + +const wss = 'wss://xahau-test.net' +const account = derive.familySeed("s...") + +const networkInfo = await utils.txNetworkAndAccountValues(wss, account) + +const tx = { + TransactionType: "SetHook", + Hooks: [ { Hook: { + CreateCode: "0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22", + Flags: 1, + HookApiVersion: 0, + HookNamespace: "F".repeat(64), + HookOn: "F".repeat(58) + "BFFFFE", + } + }], + ...networkInfo.txValues, + // ^^ Esto añade valores obtenidos automáticamente: + // Sequence, Account, LastLedgerSequence, + // Fee (Hooks habilitados: autodetección (desde el ledger)) +} + +/** + * Nota: el código anterior y `signAndSubmit` resultan en obtener + * y establecer automáticamente una tarifa para usted. Si desea comprobar la tarifa + * para min/max/..., obtenga su propia tarifa (string en drops) usando: + * utils.networkTxFee(wss, tx) + * + * por ejemplo: + * const Fee = await utils.networkTxFee(wss, tx) + * assert(Number(Fee) < 50_000, "Auto fee above 50k drops, abort") + * Object.assign(tx, { Fee, }) + */ + +const submitted = await signAndSubmit(tx, wss, account) + +console.log(submitted) +``` diff --git a/src/content/docs/es/docs/features/transaction-signing/transaction-fees.mdx b/src/content/docs/es/docs/features/transaction-signing/transaction-fees.mdx new file mode 100644 index 0000000..355f07f --- /dev/null +++ b/src/content/docs/es/docs/features/transaction-signing/transaction-fees.mdx @@ -0,0 +1,56 @@ +--- +title: Tarifas de Transacción +description: >- + Los contratos inteligentes (Hooks) de Xahau requieren tarifas específicas para la transacción y el destino. + Puede obtener fácilmente la tarifa requerida del comando RPC `fee`. +--- +import { Aside } from '@astrojs/starlight/components'; + +Aunque las bibliotecas pueden encargarse de la determinación de tarifas por usted, al construir sus propias integraciones con la Red Xahau, es posible que deba implementar la determinación dinámica de tarifas basada en la transacción, la cuenta de origen y la cuenta de destino. + +Dado que el remitente de una transacción tendrá que pagar las tarifas requeridas para los Hooks invocados para el tipo de transacción específico, donde los Hooks pueden existir tanto en la cuenta de origen como en la de destino, puede enviar un TX Blob (firmado con una cuenta ficticia) al comando `fee`, después del cual Xahau devolverá las tarifas específicas requeridas para la transacción específica. + +### Ayudante RPC de Tarifas + +Las tarifas de transacción en un ledger con la enmienda Hooks habilitada se vuelven no triviales para calcular para usuarios finales y/o aplicaciones de cartera. Esto se debe a que los hooks fuertes deben ser pagados por el originador de una transacción, y puede haber hasta 4 hooks fuertes en la cuenta remitente y 4 en la cuenta receptora, así como cualquier otra parte interesada transaccional fuerte involucrada (como puede ser el caso con algunos tipos de transacciones exóticas). Además, si la transacción es un SetHook, el tamaño de los parámetros, el tamaño del código y si es una operación _create_ o _install_ determinan el tamaño de la tarifa. + +Por lo tanto, se recomienda encarecidamente que **todas** las transacciones se ejecuten a través de la llamada RPC de tarifas actualizada antes de ser enviadas al ledger. + +#### Para invocar la llamada RPC: + +1. Abra una conexión WebSocket al nodo Hooks con el que trabajará. +2. Componga la transacción serializada de la que desea conocer la tarifa con lo siguiente: + +* `Fee: 0` +* `SigningPubKey: ""` (Es decir: VL de 0 bytes de tipo 0x73. En hex:`0x7300`.) +* **No** firme la transacción. + +3. Envíela como blob hex al RPC de la siguiente manera: + +```json +{"command":"fee", "tx_blob":""} +``` + +Para HTTP POST RPC, envíela de la siguiente manera: + +```json +{"method":"fee", "params": [{"tx_blob":""}] } +``` + +La respuesta debería tener un aspecto similar a: + +```json +{ + result: { + drops: { + base_fee: '130520', + }, + //... + }, + type: 'response' +} +``` + +Tome la tarifa base y establézcala como el campo `Fee` en la transacción. Ahora firme y envíela según el proceso normal de envío de transacciones. + +Si hay un valor no válido para `tx_blob` o `tx_blob` está ausente, se devolverá un resultado JSON normal con una `base_fee` de 10. diff --git a/src/content/docs/es/docs/features/versioning-process.mdx b/src/content/docs/es/docs/features/versioning-process.mdx new file mode 100644 index 0000000..4eedd84 --- /dev/null +++ b/src/content/docs/es/docs/features/versioning-process.mdx @@ -0,0 +1,63 @@ +--- +title: Proceso de Versionado +description: >- + Este documento describe nuestro flujo de trabajo de versionado en GitHub para agilizar + el desarrollo, pruebas y despliegue de nuevas características y correcciones. +--- +import { Aside } from '@astrojs/starlight/components'; + +Este documento describe el proceso de versionado que usamos en nuestro repositorio de GitHub. Usamos un flujo de trabajo de tres ramas: `dev`, `candidate` y `release`. Este proceso garantiza que todas las nuevas características y correcciones sean probadas exhaustivamente antes del lanzamiento. + +### Rama Dev + +La rama dev es la rama principal para el desarrollo continuo. Todas las nuevas características, correcciones de errores y mejoras se fusionan en esta rama. Esta es la rama más activa, y es donde los desarrolladores deben basar su trabajo. + +Para contribuir a la rama dev, siga estos pasos: + +1. Haga un fork del repositorio en su propia cuenta de GitHub. +2. Clone el repositorio bifurcado en su máquina local. +3. Cree una nueva rama para su característica o corrección de errores. +4. Realice sus cambios y haga commit en su rama. +5. Haga push de su rama a su repositorio bifurcado en GitHub. +6. Cree un pull request desde su rama a la rama dev en el repositorio principal. + + + +Los mantenedores de código revisarán su pull request y proporcionarán retroalimentación. Una vez que el código sea aprobado, se fusionará en la rama dev. + +### Ramas Candidate + +Una vez que las características en la rama `dev` están listas para pruebas, se fusionan en una rama `candidate`. Esta rama sirve como área de preparación para el código que está casi listo para su lanzamiento. + +El código en la rama `candidate` se prueba exhaustivamente. Los errores o problemas encontrados se corrigen en la rama `dev` y luego se fusionan de vuelta en la rama `candidate`. + +La rama `candidate` normalmente está en esta fase de pruebas durante aproximadamente 2 semanas. Sin embargo, este período puede ser más largo o más corto, dependiendo de la urgencia de las correcciones o del tamaño de las nuevas características. + +1. Cree una nueva rama `candidate` desde `dev`. +2. Cree un PR desde la rama `candidate` a la rama `release` con un nombre como "Proposed." +3. Actualice la "Descripción General de Alto Nivel del Cambio" para incluir los Pull Requests de `candidate`. Actualice el "Contexto del Cambio" para incluir cualquier nota adicional sobre los PRs. + +### Rama Release + +Una vez que el código en la rama `candidate` ha sido probado exhaustivamente y todos los problemas han sido abordados, se fusiona en la rama `release`. Este es el paso final antes de que se lance el código. + +La rama `release` contiene el código que está actualmente en producción o está a punto de ser lanzado. Solo el código completamente probado y estable debe estar en esta rama. + +Una vez que el código está en la rama `release`, se etiqueta con un número de versión. Este número de versión se usa para rastrear el lanzamiento y también se usa al crear notas de versión. + +En la rama `release`, se construye y publica un binario en https://build.xahau.tech/. Este binario es el producto final que se entrega a los usuarios finales. + +Para lanzar el código, siga estos pasos: + +1. Fusione el pull request `candidate` en la rama release. +2. Elimine la rama `candidate`. + + + +### Resumen + +Este flujo de trabajo de tres ramas garantiza que todo el código sea probado exhaustivamente antes del lanzamiento. Nos permite detectar y corregir problemas antes de que lleguen a producción, y proporciona un camino claro para mover el código desde el desarrollo hasta el lanzamiento. El uso de una LAN personalizada para pruebas y métricas de perfilado garantiza que nuestro código no solo sea funcional sino también eficiente y con buen rendimiento. diff --git a/src/content/docs/es/docs/hooks/concepts/chaining.mdx b/src/content/docs/es/docs/hooks/concepts/chaining.mdx new file mode 100644 index 0000000..8845369 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/chaining.mdx @@ -0,0 +1,47 @@ +--- +title: Encadenamiento +description: Encadena múltiples hooks para realizar tareas más útiles +--- +import { Aside } from '@astrojs/starlight/components'; + + + +### Historia + +En los primeros días de los Hooks, solo era posible instalar un Hook por cuenta. Esto obligaba a los usuarios a crear Hooks monolíticos si querían hacer más de una cosa: por ejemplo, compensar carbono y actuar como firewall al mismo tiempo. + +Esto iba en contra de la Filosofía de diseño de Hooks, por lo que se introdujo el Encadenamiento de Hooks. + +### Encadenamiento + +Una cadena de Hooks es una secuencia de hasta **10** Hooks instalados en una cuenta de Xahau. + +* Una cadena de Hooks se ejecuta correctamente cuando cada Hook de la cadena ha sido ejecutado individualmente y posteriormente llama a [accept](/docs/hooks/functions/control/accept). +* La ejecución de cada cadena comienza en la posición 0 y termina en la posición 9. Si una posición está vacía (porque nunca fue ocupada o porque el Hook instalado allí ha sido eliminado), entonces esa posición se omite y se considera exitosa. +* Para que una transacción tenga éxito, ambos extremos de la transacción (lado emisor y lado receptor) deben haberse ejecutado correctamente. Esto significa que, si hay una cadena de Hooks instalada en ambos lados, ambas cadenas deben ejecutarse correctamente para que la transacción tenga éxito. + +Los Hooks se instalan en la cadena utilizando la [transacción SetHook](/docs/hooks/concepts/sethook-transaction). Al instalarlos, quien los instala puede especificar [parámetros](/docs/hooks/concepts/parameters) en el momento de la instalación, los cuales pueden cambiar el comportamiento del Hook instalado. + +
+![Example: Execution flow for a transaction passing through two Hook Chains](/assets/spaces_m6f29os4wP16vCS4lHNh_uploads_0OucxySTRinbe13SITJT_5561b32-sethook-Page-3.png) +
*Ejemplo: flujo de ejecución de una transacción que pasa por dos cadenas de Hooks*
+
+ +### Manipulación de la cadena + +Además de las operaciones en el momento de la instalación especificadas en la [transacción SetHook](/docs/hooks/concepts/sethook-transaction), los Hooks tienen cierto control en tiempo de ejecución sobre la ejecución de la cadena: + +* Un Hook puede determinar su propio `HookHash` llamando a [hook_hash](/docs/hooks/functions/hook-context/hook_hash). +* Un Hook puede determinar su posición en la cadena de Hooks utilizando [hook_pos](/docs/hooks/functions/hook-context/hook_pos). +* Un Hook puede omitir (o volver a habilitar) otro Hook más adelante en la cadena utilizando [hook_skip](/docs/hooks/functions/hook-context/hook_skip). +* Un Hook puede modificar los [parámetros](/docs/hooks/concepts/parameters) de otro Hook más adelante en la cadena utilizando [hook_param_set](/docs/hooks/functions/hook-context/hook_param_set). + +### Ejecuciones débiles + +Las cadenas de Hooks se ejecutan de forma [fuerte](/docs/hooks/concepts/weak-and-strong). Sin embargo, cualquier Hook en cualquier cadena puede indicar que requiere una segunda ejecución débil llamando a [hook_again](/docs/hooks/functions/hook-context/hook_again). Si todas las cadenas de Hooks se ejecutan correctamente, entonces la transacción original se aplica. Una vez aplicada la transacción original, pueden producirse ejecuciones débiles en el siguiente orden: + +1. Ejecución `cbak` si se trata de una transacción emitida. +2. Participantes transaccionales débiles que hayan optado por permitir una [Collect Call](/docs/hooks/concepts/collect-call). El orden de ejecución es por orden de llegada según el evento que provocó que el participante fuera marcado (como el pathing). +3. Cualquier Hook marcado como _Again as Weak_ (AAW). El orden de ejecución para AAW es primero numérico según el ID de la cuenta y luego numérico según la posición del Hook. \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/collect-call.mdx b/src/content/docs/es/docs/hooks/concepts/collect-call.mdx new file mode 100644 index 0000000..9f91269 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/collect-call.mdx @@ -0,0 +1,27 @@ +--- +title: Collect Call +--- +import { Card, Aside } from '@astrojs/starlight/components'; + + +_Cada parte afectada por una transacción debería tener la oportunidad de que sus hooks se ejecuten._ + + +Cuando los hooks no se ejecutan de forma fuerte (Strongly Executed), no es justo cargar el coste de su ejecución a la transacción original. Por ejemplo, un _OfferCreate_ que cruza 20 ofertas en el DEX no debería verse obligado a pagar por la ejecución de los Hooks de cada una de esas cuentas. + +Por lo tanto, durante la ejecución débil típica, la tarifa de ejecución se cobra al propietario del Hook. Para habilitar esto: + +* El propietario del Hook debe haber configurado `asfTshCollect` en su cuenta de Xahau utilizando la transacción AccountSet. +* El propietario del Hook debe haber configurado `hsfCollect` en el Hook específico que desea que sea llamado como un TSH débil. + +### Tabla de responsabilidad de tarifas + +| Tipo de ejecución débil | Tarifa | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|

Again As Weak
- Ocurre cuando un Hook ejecutado de forma fuerte llama a hook_again

| Gratis (ya pagado durante la ejecución fuerte). | +|

Callback
- Ocurre cuando una transacción emitida entra en un ledger o se marca como imposible de entrar en un ledger.

| Gratis (ya pagado durante la emisión). | +|

Participante transaccional débil
- Ocurre si una transacción afecta de alguna manera a tu cuenta.

| Pagado por tu cuenta (no por la transacción original) solo si tu cuenta tiene activada la bandera `asfTshCollect` y tu Hook tiene activada la bandera `hsfCollect`. | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/compiling-hooks.mdx b/src/content/docs/es/docs/hooks/concepts/compiling-hooks.mdx new file mode 100644 index 0000000..50edf8f --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/compiling-hooks.mdx @@ -0,0 +1,227 @@ +--- +title: Compilación de Hooks +--- +import { Aside } from '@astrojs/starlight/components'; + +### Restricciones + +Todos los Hooks se compilan en un único [módulo de WebAssembly](https://webassembly.github.io/spec/core/syntax/modules.html) antes de poder ser establecidos en una cuenta de Xahau. + +Un Hook siempre implementa y exporta exactamente una o ambas de las siguientes funciones: + +`int64_t hook(uint32_t ctx) { ... }` _obligatoria_ + +* Se ejecuta cuando una transacción entra o sale de la cuenta en la que está configurado el Hook (`ctx = 0`) o +* Se ejecuta cuando se ejecuta como un [Participante Transaccional Débil](/docs/hooks/concepts/weak-and-strong) (`ctx > 0`). + +`int64_t cbak(uint32_t ctx) { ... }` _opcional_ + +* Se ejecuta cuando una transacción emitida es aceptada con éxito en un ledger (`ctx = 0`) o +* Se ejecuta cuando una transacción emitida no puede ser aceptada en ningún ledger (`ctx = 1`). + +Los Hooks no pueden definir otras funciones. En su lugar, deben hacer un uso ingenioso de macros para realizar todos sus cálculos dentro de estas dos funciones. Esto forma parte de una restricción computacional diseñada para mantener predecible el tiempo de ejecución de los Hooks. + +Además, los Hooks no disponen de memoria _heap_. Toda la memoria necesaria debe reservarse y utilizarse en la pila (_stack_). + +### Ejemplo + +Aquí tienes un ejemplo de un Hook escrito en C. El Hook imprime 0...3 en el log de trazas antes de aceptar la transacción original. + +```c +#include +#define GUARD(maxiter) _g(__LINE__, (maxiter)+1) +extern int32_t _g (uint32_t id, uint32_t maxiter); +extern int64_t accept (uint32_t read_ptr, uint32_t read_len, int64_t error_code); +extern int64_t trace_num (uint32_t read_ptr, uint32_t read_len, int64_t number); + +int64_t hook(uint32_t ctx) +{ + for (int i = 0; GUARD(3), i < 3; ++i) + { + trace_num("test", 4, i); + } + accept (0,0,0); + return 0; +} +```` + + + +### Compilación + +Una [variedad de compiladores](https://www.google.com/search?q=webassembly+compiler+C) puede generar WebAssembly válido a partir de un archivo fuente en C. Una vez compilado, un Hook existe como un archivo binario `.wasm`. Este contiene un módulo de WebAssembly. Utilizando `wasmcc` para compilar y la herramienta `wasm2wat` para convertirlo a una forma legible por humanos, este binario puede representarse en formato comprensible. A continuación se muestra el resultado de compilación del ejemplo anterior. + +``` +(module + (type (;0;) (func (param i32 i32) (result i32))) + (type (;1;) (func (param i32 i32 i64) (result i64))) + (type (;2;) (func)) + (type (;3;) (func (param i32) (result i64))) + (import "env" "_g" (func $_g (type 0))) + (import "env" "trace_num" (func $trace_num (type 1))) + (import "env" "accept" (func $accept (type 1))) + (func $__wasm_call_ctors (type 2)) + (func $cbak (type 3) (param i32) (result i64) + (local i32 i32 i32 i64) + global.get 0 + local.set 1 + i32.const 16 + local.set 2 + local.get 1 + local.get 2 + i32.sub + local.set 3 + i64.const 0 + local.set 4 + local.get 3 + local.get 0 + i64.store offset=8 + local.get 4 + return) + (func $hook (type 3) (param i32) (result i64) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i64 i32 i32 i32 i64 i32 i32 i32) + global.get 0 + local.set 1 + i32.const 16 + local.set 2 + local.get 1 + local.get 2 + i32.sub + local.set 3 + local.get 3 + global.set 0 + i32.const 0 + local.set 4 + local.get 3 + local.get 0 + i64.store offset=8 + local.get 3 + local.get 4 + i32.store offset=4 + block ;; label = @1 + loop ;; label = @2 + i32.const 3 + local.set 5 + i32.const 14 + local.set 6 + i32.const 4 + local.set 7 + local.get 6 + local.get 7 + call $_g + drop + local.get 3 + i32.load offset=4 + local.set 8 + local.get 8 + local.set 9 + local.get 5 + local.set 10 + local.get 9 + local.get 10 + i32.lt_s + local.set 11 + i32.const 1 + local.set 12 + local.get 11 + local.get 12 + i32.and + local.set 13 + local.get 13 + i32.eqz + br_if 1 (;@1;) + i32.const 1024 + local.set 14 + i32.const 4 + local.set 15 + local.get 3 + i32.load offset=4 + local.set 16 + local.get 16 + local.set 17 + local.get 17 + i64.extend_i32_s + local.set 18 + local.get 14 + local.get 15 + local.get 18 + call $trace_num + drop + local.get 3 + i32.load offset=4 + local.set 19 + i32.const 1 + local.set 20 + local.get 19 + local.get 20 + i32.add + local.set 21 + local.get 3 + local.get 21 + i32.store offset=4 + br 0 (;@2;) + end + end + i64.const 0 + local.set 22 + i32.const 0 + local.set 23 + local.get 23 + local.get 23 + local.get 22 + call $accept + drop + i32.const 16 + local.set 24 + local.get 3 + local.get 24 + i32.add + local.set 25 + local.get 25 + global.set 0 + local.get 22 + return) + (table (;0;) 1 1 funcref) + (memory (;0;) 2) + (global (;0;) (mut i32) (i32.const 66576)) + (global (;1;) i32 (i32.const 1029)) + (global (;2;) i32 (i32.const 1024)) + (global (;3;) i32 (i32.const 66576)) + (global (;4;) i32 (i32.const 1024)) + (export "memory" (memory 0)) + (export "__wasm_call_ctors" (func $__wasm_call_ctors)) + (export "__data_end" (global 1)) + (export "__global_base" (global 2)) + (export "__heap_base" (global 3)) + (export "__dso_handle" (global 4)) + (export "cbak" (func $cbak)) + (export "hook" (func $hook)) + (data (;0;) (i32.const 1024) "test\00")) +``` + +El desarrollador promedio de Hooks nunca necesitará examinar directamente WebAssembly. Sin embargo, es un ejercicio conceptual útil revisar el contenido del Hook de ejemplo. + +Arriba podemos ver: + +* Se importan tres funciones desde la API de Hooks (`_g`, `accept`, `trace_num`) +* El Hook define dos funciones (`cbak`, `hook`) +* El Hook exporta dos funciones (de nuevo: `cbak`, `hook`) +* Algunos datos estáticos (constantes) se registran en el Hook (ver `data` al final). + +Es muy importante tener en cuenta que un Hook *solo debe* importar funciones disponibles desde la API de Hooks y *solo debe* exportar las funciones `cbak` y `hook`. Además, todos los Hooks deben importar `_g` desde la API de Hooks, que es la función `guard`. + + + +### Exportaciones no deseadas + +La mayoría de los compiladores de WebAssembly (incluido el anterior) generan exportaciones adicionales para sus propios propósitos de enlace. En muchos casos, desactivar su generación es difícil o imposible. + +Las exportaciones no deseadas provocarán que un Hook válido sea rechazado. Por lo tanto, tras la compilación, los desarrolladores deben usar la [Hook Cleaner Utility](https://github.com/XRPLF/hook-cleaner-c) para eliminarlas. No hacerlo provocará que tu Hook sea rechazado. + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/debugging-hooks.mdx b/src/content/docs/es/docs/hooks/concepts/debugging-hooks.mdx new file mode 100644 index 0000000..260a0ce --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/debugging-hooks.mdx @@ -0,0 +1,71 @@ +--- +title: Depuración de Hooks +description: ¡Cómo imprimir "hello world" desde tu Hook! +--- +import { Aside } from '@astrojs/starlight/components'; + +### ¿Cómo puedo depurar un Hook? + +La API de Hooks proporciona un conjunto de funciones en el espacio de nombres `trace` que escriben salida en el archivo de logs de `xrpld` cuando este está configurado con el nivel de log _trace_. Estas funciones, en términos generales, te permiten ver el valor de variables, buffers y, en general, seguir la ejecución y el estado de un Hook en tiempo de ejecución. + + + +### APIs de Trace + +Las siguientes funciones `trace` están disponibles en la API de Hooks: + +| Hook API | Qué hace | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| [trace](/docs/hooks/functions/trace-debug/trace) | Imprime un mensaje en utf-8, seguido de un buffer especificado por el usuario (este último opcionalmente en hexadecimal). | +| [trace_num](/docs/hooks/functions/trace-debug/trace_num) | Imprime un mensaje en utf-8, seguido de un entero. | +| [trace_float](/docs/hooks/functions/trace-debug/trace_float) | Imprime un mensaje en utf-8, seguido de un número de punto flotante XFL. | + +### Ejemplo + +El siguiente código imprimirá una única línea de traza y luego aceptará la Transacción Originaria. + +```c +#include "../hookapi.h" +int64_t hook(int64_t reserved) +{ + trace_num(SBUF("A number"), 10); + accept(0,0,0); + return 0; +} +```` + +Un ejemplo de la línea de log generada por `xahaud` cuando un pago entra o sale de la cuenta del Hook: + +``` +2021-Apr-13 13:59:11.083700726 UTC View:TRC + HookTrace[rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh-rE3SfnjwfzZFL3JK9cLVfJuy8Ar1XnCqPw]: + A number 10 +``` + +Lo anterior aparece en el log en una sola línea, pero aquí se muestra dividido para mayor claridad. + + + +### Formato del log + +A continuación se muestra un desglose del formato del log: + +| Parte | Descripción | # | +| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | - | +| 2021-Apr-13 13:59:11.083700726 UTC View:TRC | Prefijo de `xahaud` en la línea de log | 1 | +| HookTrace | Indica que es una traza iniciada por el propio Hook y no otro tipo de información. Otros tipos incluyen `HookError`, `HookEmit` y `HookInfo`. | 2 | +| [rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh | La primera cuenta entre corchetes es la cuenta del Hook. | 3 | +| -rE3SfnjwfzZFL3JK9cLVfJuy8Ar1XnCqPw]: | La segunda cuenta entre corchetes es la cuenta que originó la transacción. | 4 | +| A number | Este es el mensaje que el Hook debía mostrar antes de la carga útil de la traza | 5 | +| 10 | Este es el valor de la traza | 6 | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/emitted-transactions.mdx b/src/content/docs/es/docs/hooks/concepts/emitted-transactions.mdx new file mode 100644 index 0000000..35b8dfe --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/emitted-transactions.mdx @@ -0,0 +1,64 @@ +--- +title: Transacciones emitidas +description: ¡Tu Hook puede hacer mucho más que simplemente bloquear o permitir transacciones! +--- +import { Aside } from '@astrojs/starlight/components'; + +### Contexto + +**Todos** los cambios realizados en Xahau _deben_ ser el resultado de aplicar una transacción válida al ledger. Por lo tanto, si se realiza algún cambio _X_, entonces alguna transacción _Y_ es responsable. + +Al diseñar la API de Hooks, necesitábamos una forma de que los Hooks pudieran realizar cambios en el ledger _más allá_ de simplemente aceptar o rechazar una transacción. Sin embargo, asociar estos cambios a la Transacción Originaria resultaba confuso y aumentaba significativamente la complejidad general del sistema. + +Supongamos, por ejemplo, que un Hook necesita enviarte fondos... la operación de envío se aplicaría efectivamente en el ledger a través de la Transacción Originaria, que podría haber sido algo completamente distinto, como una transacción AccountSet. Además, esta operación de envío debería poder activar otro Hook en el lado receptor del pago. + +La solución: **Transacciones emitidas**. Permitimos que la Transacción Originaria haga exactamente lo que indica su contenido. Si nuestro Hook necesita realizar un cambio adicional en el ledger, como enviar un pago, crea y luego _emite_ una nueva transacción. + +### ¿Qué son las Transacciones emitidas? + +Las Transacciones emitidas son transacciones _nuevas_ creadas por la ejecución de un Hook y que entran en consenso para ser procesadas en el siguiente ledger. La transacción puede ser de cualquier tipo, pero debe seguir reglas estrictas de emisión. + +Para emitir una transacción, el Hook primero prepara la transacción serializada y luego llama a [emit](/docs/hooks/functions/emitted-transaction/emit-1). + +Dado que las transacciones emitidas pueden activar Hooks en el siguiente ledger, que a su vez pueden emitir más transacciones, todas las transacciones emitidas incluyen un campo `burden` y un campo `generation` dentro de su bloque `EmitDetails`. El bloque `EmitDetails` reemplaza el campo de firma en una transacción tradicional. + +Los campos `burden` y `generation` previenen conjuntamente ataques de tipo [Fork bomb](https://en.wikipedia.org/wiki/Fork_bomb) en el ledger al aumentar exponencialmente el coste de las transacciones emitidas que crecen de forma exponencial. + +Es importante destacar que la API de Hooks sigue la regla estricta de _no reescritura_. Debes presentar una transacción emitida completa, válida y canónicamente formada a xahaud para su emisión, o será rechazada. No es responsabilidad de xahaud construir tu transacción por ti. El Hook debe hacerlo por sí mismo. + +### Callbacks + +Como se introdujo en [Introducción y Terminología](/docs/hooks/concepts/terminology), las transacciones emitidas activan callbacks cuando son aceptadas en un ledger. Debido a la naturaleza descentralizada del consenso, la aceptación en un ledger de una transacción emitida **no está garantizada**, aunque normalmente es muy probable. + +Si una transacción emitida expira antes de poder ser aceptada en un ledger (por varias razones: los ledgers pueden estar llenos, la comisión puede ser demasiado alta o la transacción puede ser inválida), entonces se crea una _pseudo-transacción_ en el ledger para limpiar la transacción emitida. Esta pseudo-transacción también llama al callback de tu Hook, con `parameter = 1` para indicar que la transacción emitida ha fallado. + +### Reglas de emisión + +La API [emit](/docs/hooks/functions/emitted-transaction/emit-1) aplicará las siguientes reglas sobre una transacción propuesta (a emitir): + +| # | Regla de emisión | Explicación | +| - | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | `sfSequence` = 0 | Las transacciones emitidas _no_ incrementan el número de secuencia de la cuenta del Hook. Siempre debe establecerse en cero. | +| 2 | `sfPubSigningKey` = 0 | Las transacciones emitidas no están firmadas, pero este campo es obligatorio para el procesamiento en xrpld. Debe establecerse en ceros. | +| 3 | `sfEmitDetails` presente y válido | Las transacciones emitidas requieren un bloque `sfEmitDetails` correctamente completado. Consulta la sección EmitDetails más abajo. | +| 4 | `sfSignature` ausente | Este campo debe estar ausente en la transacción emitida, ya que de lo contrario la transacción sería ambigua. | +| 5 | `LastLedgerSequence` válido y en el futuro | Todas las transacciones emitidas deben tener este campo definido para que el Hook pueda detectar fallos si no recibe callback. Actualmente se establece como máximo en 5 ledgers después del ledger actual. | +| 6 | `FirstLedgerSequence` válido y en el siguiente ledger | Todas las transacciones emitidas deben comenzar en el siguiente ledger (después del actual) para evitar ejecuciones recursivas dentro de un mismo ledger. | +| 7 | Fee correctamente calculada y establecida | La comisión depende del tamaño de la transacción emitida y de la carga en la red (por ejemplo, si proviene de otra transacción emitida). | +| 8 | Límite de generación no excedido | Una transacción emitida puede generar otras, formando una cadena. La longitud de esta cadena (`sfEmitGeneration`) está actualmente limitada a 10. | + +### Bloque EmitDetails + +Todas las transacciones emitidas deben contener un objeto `sfEmitDetails` correctamente rellenado con los campos siguientes: + +| Campo | Valor requerido | Descripción | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| sfEmitGeneration |

Si la Transacción Originaria es una transacción emitida, entonces uno más que su sfEmitGeneration.

Si no lo es, entonces 1.

Debe establecerse usando etxn_generation.

| Este campo realiza el seguimiento de la cadena de transacciones emitidas que generan otras transacciones. | +| sfEmitBurden |

Si la Transacción Originaria es una transacción emitida, entonces su burden multiplicado por el número máximo de transacciones que el Hook ha declarado emitir mediante etxn_reserve.

Si no lo es, entonces 1.

Debe establecerse usando etxn_burden.

| Este campo sirve como heurística para detectar ataques tipo fork bomb. Las comisiones aumentan exponencialmente en cadenas de emisión para evitar la saturación de la red. | +| sfEmitParentTxnID| El ID de la Transacción Originaria | Conecta la ejecución del Hook con la transacción original, permitiendo trazar el comportamiento de forma eficiente. | +| sfEmitNonce | Un nonce determinista generado mediante [nonce](/docs/hooks/functions/emitted-transaction/etxn_nonce) | Evita que transacciones idénticas tengan el mismo hash. Todos los nodos deben coincidir en este valor, por lo que se usa una API determinista. | +| sfEmitCallback | El ID de cuenta del Hook (20 bytes) | Permite a xahaud saber a qué Hook y cuenta debe enviar el callback cuando la transacción emitida es aceptada en un ledger. | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx b/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx new file mode 100644 index 0000000..4d5207e --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx @@ -0,0 +1,18 @@ +--- +title: Metadatos de ejecución +description: Qué esperar cuando tu Hook se ejecuta. +--- + +Cuando los Hooks se ejecutan, dejan información sobre el estado de esa ejecución. Esta aparece en los metadatos de la Transacción Originaria como un bloque `sfHookExecutions`. Este bloque contiene los siguientes campos: + +| Campo | Descripción | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| sfHookResult |

Los Hooks pueden terminar de tres maneras: accept, rollback y error.
¡Esto no es lo mismo que sfHookReturnCode!

| +| sfHookHash | El SHA512H del Hook en el momento en que fue ejecutado. | +| sfHookAccount | La cuenta en la que se ejecutó el Hook. | +| sfHookReturnCode | El entero devuelto como tercer parámetro de `accept` o `rollback`. | +| sfHookReturnString | La cadena devuelta en los dos primeros parámetros de `accept` o `rollback`, si existe. | +| sfHookInstructionCount | El número total de instrucciones de WebAssembly ejecutadas durante la ejecución del Hook. | +| sfHookEmitCount | El número total de [Transacciones emitidas](/docs/hooks/concepts/emitted-transactions) producidas por el Hook. | +| sfHookExecutionIndex | El orden en el que se ejecutó el Hook (en relación con otras ejecuciones de Hooks en la misma Transacción Originaria). | +| sfHookStateChangeCount | El número de cambios de [estado del Hook](/docs/hooks/concepts/state-management) realizados durante la ejecución. | \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx b/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx new file mode 100644 index 0000000..7307713 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx @@ -0,0 +1,98 @@ +--- +title: Números de punto flotante (XFL) +description: Los cálculos de alta precisión son nativos en Hooks. +--- +import { Aside } from '@astrojs/starlight/components'; + +### Contexto + +Los [números de punto flotante](https://en.wikipedia.org/wiki/Floating-point_arithmetic) se utilizan ampliamente en informática para realizar cálculos de precisión finita pero escala arbitraria. + +La mayoría de las CPUs modernas son capaces de realizar operaciones rápidas de punto flotante utilizando el [estándar IEEE de punto flotante binario](https://en.wikipedia.org/wiki/Double-precision_floating-point_format), sin embargo `xahaud` **no** utiliza este formato. En su lugar, Xahau utiliza un [estándar decimal de punto flotante personalizado](/docs/protocol-reference/binary-format). + +Este formato personalizado tiene tres propiedades básicas: + +1. El formato es inherentemente decimal, expresado como una `mantisa` decimal multiplicada por `10` elevado a un `exponente`. +2. Todos los valores expresados tienen 16 cifras significativas (decimales). +3. El rango de exponentes es de `-96` a `+80`. + +Cuando se serializa, la mantisa ocupa 54 bits y el exponente 8 bits, con un bit adicional de signo que lleva el tamaño total a 63 bits. + +### ¿Qué es XFL? + +[XLS-17d](https://github.com/XRPLF/XRPL-Standards/discussions/39) es una propuesta de estándar XRPL que define una forma eficiente de empaquetar y almacenar números de punto flotante en xrpld (como se describió anteriormente). + +Los XFL almacenan los bits del número de punto flotante dentro de un _número contenedor_. Este siempre es un `int64_t`. Los números contenedores negativos representan XFL inválidos (por ejemplo, como resultado de una división por cero). + + + +Algunos ejemplos de XFL: + +| Valor de punto flotante | Número contenedor | Representación | +| ------------------------ | ------------------- | ----------------------------- | +| -1 | 1478180677777522688 | -1000000000000000 \* 10^(-15) | +| 0 | 0 | 0 (_cero canónico_) | +| 1 | 6089866696204910592 | +1000000000000000 \* 10^(-15) | +| _PI_ | 6092008288858500385 | +3141592653589793 \* 10^(-15) | +| -_PI_ | 1480322270431112481 | -3141592653589793 \* 10^(-15) | + +Este formato es muy conveniente para Hooks, ya que solo pueden intercambiar valores _enteros_ con xrpld. Al encapsular el número de punto flotante dentro de un entero de forma bien definida, es posible realizar cálculos complejos de punto flotante desde un Hook. Esto resulta útil, por ejemplo, para calcular tipos de cambio. + +### Cero canónico + +Los sistemas de punto flotante suelen tener múltiples formas de representar el cero, lo que puede causar problemas al comprobarlo. Por ejemplo, `0 x 10 ^ 1` es cero y `0 x 10 ^ 2` también es cero. Por esta razón, el estándar y la API de Hooks imponen un cero canónico. Este corresponde al número contenedor cero (`0`). + +### API de Float en Hooks + +Una vez que tienes un XFL, puedes usar la API de Float para realizar distintos cálculos. Cada función recibe uno o más números contenedores XFL y devuelve otro número contenedor XFL. Los valores negativos _siempre_ representan un error de cálculo (como división por cero). No existen números contenedores negativos válidos. + +| Hook API | Qué hace | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------- | +| [float_set](/docs/hooks/functions/float/float_set) | Crear un float a partir de un exponente y una mantisa | +| [float_multiply](/docs/hooks/functions/float/float_multiply) | Multiplicar dos números XFL | +| [float_mulratio](/docs/hooks/functions/float/float_mulratio) | Multiplicar un XFL por un numerador y denominador no-XFL | +| [float_negate](/docs/hooks/functions/float/float_negate) | Negar un número de punto flotante XFL | +| [float_compare](/docs/hooks/functions/float/float_compare) | Comparar dos números XFL | +| [float_sum](/docs/hooks/functions/float/float_sum) | Sumar dos números XFL | +| [float_sto](/docs/hooks/functions/float/float_sto) | Convertir un XFL en un objeto serializado | +| [float_sto_set](/docs/hooks/functions/float/float_sto_set) | Leer una cantidad serializada en un XFL | +| [float_invert](/docs/hooks/functions/float/float_invert) | Calcular el inverso de un XFL | +| [float_divide](/docs/hooks/functions/float/float_divide) | Dividir un XFL entre otro XFL | +| [float_one](/docs/hooks/functions/float/float_one) | Devolver el número 1 como XFL | +| [float_exponent](/docs/hooks/functions/float/float_exponent) | Obtener el exponente de un XFL | +| [float_mantissa](/docs/hooks/functions/float/float_mantissa) | Obtener la mantisa de un XFL | +| [float_sign](/docs/hooks/functions/float/float_sign) | Obtener el signo de un XFL | +| float_exponent_set | Establecer el exponente de un XFL | +| float_mantissa_set | Establecer la mantisa de un XFL | +| float_sign_set | Establecer el signo de un XFL | +| [float_int](/docs/hooks/functions/float/float_int) | Convertir un XFL a entero (redondeo hacia abajo) | +| [float_root](/docs/hooks/functions/float/float_root) | Calcular la raíz n-ésima de un XFL | +| [float_log](/docs/hooks/functions/float/float_log) | Calcular el logaritmo decimal de un XFL | + + + +### Ejemplo + +En el siguiente ejemplo se realiza una conversión de tipo de cambio seguida de una multiplicación de fracciones de alta precisión: + +```c +int64_t max_vault_pusd = + float_multiply(vault_xrp, exchange_rate); + +max_vault_pusd = + float_mulratio(max_vault_pusd, 0, + NEW_COLLATERALIZATION_NUMERATOR, NEW_COLLATERALIZATION_DENOMINATOR); +```` + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/grants.mdx b/src/content/docs/es/docs/hooks/concepts/grants.mdx new file mode 100644 index 0000000..7ac77cf --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/grants.mdx @@ -0,0 +1,90 @@ +--- +title: Grants +description: Hook Grants +--- +import { Aside } from '@astrojs/starlight/components'; + + + +### Grants + +Los Grants proporcionan una forma para que quien instala un Hook asigne permisos de [gestión de estado](/docs/hooks/concepts/state-management) a un Hook _externo_ en otras cuentas de Xahau. + +Una [transacción SetHook](/docs/hooks/concepts/sethook-transaction) puede especificar un array `HookGrants` dentro de cualquier objeto `Hook` en su array `Hooks`. El array `HookGrants` contiene uno o más objetos `HookGrant` (hasta un máximo de 8). + +A diferencia de los [Parameters](/docs/hooks/concepts/parameters), el array `HookGrants` siempre se establece exactamente como se especifica en la [transacción SetHook](/docs/hooks/concepts/sethook-transaction). Por lo tanto, si deseas actualizar un `HookGrant` manteniendo otros previamente definidos, debes obtener primero el array existente, modificarlo y reenviar el array completo en una operación de [_Update_](/docs/hooks/concepts/sethook-transaction). + +Para eliminar todos los Grants, envía un array `HookGrants` vacío. + + + +Un Grant permite que una cuenta XRPL externa o un Hook modifique el estado del Hook dentro del namespace del Hook específico para el que se define el Grant. + +El HookGrant debe especificar al menos: + +* `HookHash`\ + Y también puede especificar una cuenta: +* `Authorize` + +Solo el Hook especificado por `HookHash` puede modificar el estado del Hook dentro del namespace del Hook para el cual se define el Grant. Si se especifica `Authorize`, este permiso se restringe aún más al Hook con ese `HookHash` cuando está instalado en la cuenta indicada en `Authorize`. + + + +### Ejemplo + +```json +Account: "rALicebv3hMYNBWtu1VEEWkToArgYsYERs", +TransactionType: "SetHook", +Hooks: +[ + { + Hook: { + ..., + HookNamespace: "3963ADEB1B0E8934C0963680531202FD511FF1E16D5864402C2DA63861C420A8", + HookGrants: + [ + { + HookGrant: // primer grant + { + HookHash: "78CAF69EEE950A6C55A450AC2A980DE434D624CD1B13148E007E28B7B6461CC8" + }, + HookGrant: // segundo grant + { + Authorize: "rCLairev2ma2gNZdcHJeTk7fCQ1ki84vr9", + HookHash: "A5B8D62154DA1C329BE13582086B52612476720CEBD097EB85CEE1455E1C70A6" + } + }, + ] + } + } +], +... +```` + +El *primer grant* anterior permite: + +* cualquier instancia del Hook cuyo código tenga el hash `78CAF69EEE950A6C55A450AC2A980DE434D624CD1B13148E007E28B7B6461CC8` +* ejecutándose en **cualquier cuenta** +* modificar el estado del Hook de la cuenta `rALicebv3hMYNBWtu1VEEWkToArgYsYERs` +* dentro del namespace `3963ADEB1B0E8934C0963680531202FD511FF1E16D5864402C2DA63861C420A8` + +El *segundo grant* anterior permite: + +* cualquier instancia del Hook cuyo código tenga el hash `A5B8D62154DA1C329BE13582086B52612476720CEBD097EB85CEE1455E1C70A6` +* pero solo cuando se ejecuta en la cuenta `rCLairev2ma2gNZdcHJeTk7fCQ1ki84vr9` +* modificar el estado del Hook de la cuenta `rALicebv3hMYNBWtu1VEEWkToArgYsYERs` +* dentro del namespace `3963ADEB1B0E8934C0963680531202FD511FF1E16D5864402C2DA63861C420A8` + +### Uso del Grant + +Para utilizar un grant, un Hook modifica objetos de estado en una cuenta externa llamando a [state_foreign_set](/docs/hooks/functions/state/state_foreign_set). \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/hook-fees.mdx b/src/content/docs/es/docs/hooks/concepts/hook-fees.mdx new file mode 100644 index 0000000..e9cbee8 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/hook-fees.mdx @@ -0,0 +1,65 @@ +--- +title: Comisiones de Hooks +description: Qué esperar cuando tu Hook se ejecuta. +--- + +### Comisiones de creación de Hooks + +Las transacciones SetHook se cobran por byte de WebAssembly creado. La tarifa es de 500 drops por byte. Por lo tanto, un Hook de 1 KiB costará 0.5 XAH crearlo. + +### Comisiones de ejecución de Hooks + +Cuando los Hooks se ejecutan de forma [fuerte](/docs/hooks/concepts/weak-and-strong), la transacción originaria debe pagar estas ejecuciones dentro de su propia comisión. + +Las comisiones de ejecución de Hooks se cobran a razón de 1 drop por instrucción de WebAssembly en el peor caso de ejecución de la función `hook` (o `cbak` en el caso de un callback). Por lo tanto, un Hook pequeño con muchos bucles puede generar comisiones elevadas en tiempo de ejecución. + +### Helper RPC de comisiones + +Las comisiones de transacción en un ledger con la enmienda Hooks habilitada se vuelven complejas de calcular para usuarios finales y/o aplicaciones de cartera. Esto se debe a que los Hooks fuertes deben ser pagados por el originador de la transacción, y puede haber hasta 4 Hooks fuertes en la cuenta emisora y 4 en la cuenta receptora, además de otros posibles participantes transaccionales fuertes (como ocurre en algunos tipos de transacciones más complejos). Además, si la transacción es un SetHook, el tamaño de los parámetros, el tamaño del código y si se trata de una operación de _create_ o _install_ también afectan a la comisión. + +Por lo tanto, se recomienda encarecidamente que **todas** las transacciones se pasen por la llamada RPC de comisiones actualizada antes de enviarlas al ledger. + +Para invocar la llamada RPC: + +1. Abre una conexión websocket con el nodo Hooks con el que vas a trabajar. +2. Construye la transacción serializada para la que quieres conocer la comisión con los siguientes campos: + +* `Fee: "0"` +* `SigningPubKey: ""` (es decir: VL de 0 bytes de tipo 0x73. En hexadecimal: `0x7300`) +* **No firmes la transacción** + +3. Envíala como un blob hexadecimal al RPC de la siguiente forma: + +```json +{"command":"fee", "tx_blob":""} +```` + +Para HTTP POST RPC: + +```json +{"method":"fee", "params": [{"tx_blob":""}] } +``` + +La respuesta tendrá un formato similar a: + +```json +{ + result: { + drops: { + base_fee: '130520', + }, + //... + }, + type: 'response' +} +``` + +Toma el valor de `base_fee` y establécelo como el campo `Fee` en la transacción. Después, fírmala y envíala siguiendo el proceso habitual. + +Si `tx_blob` es inválido o falta, se devolverá un resultado JSON estándar con un `base_fee` de 10. + +### Comisiones de emisión + +Los Hooks tienen acceso al mismo cálculo que el *Fee RPC Helper*. Para usarlo, llama a [etxn_fee_base](/docs/hooks/functions/emitted-transaction/etxn_fee_base) pasando como argumento un buffer con la transacción serializada. Al igual que en la llamada RPC, debes asegurarte de que el campo `Fee` está presente en la transacción serializada (su valor es irrelevante). + +Cuando `etxn_fee_base` devuelve la comisión recomendada, puedes usar [sto_emplace](/docs/hooks/functions/serialization/sto_emplace) para insertarla en la transacción serializada antes de emitirla. El campo correspondiente es `sfFee`. \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/hookon-field.mdx b/src/content/docs/es/docs/hooks/concepts/hookon-field.mdx new file mode 100644 index 0000000..156a44c --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/hookon-field.mdx @@ -0,0 +1,44 @@ +--- +title: Campo HookOn +description: Especifica en qué tipos de transacción debe activarse un Hook +--- +import { LinkCard } from '@astrojs/starlight/components'; + +### Comprendiendo el campo HookOn + +Cada bit en este entero sin signo de 256 bits indica si el Hook debe ejecutarse para un tipo de transacción concreto. Todos los bits son _activo bajo_ **excepto** el bit 22, que es _activo alto_. Dado que el 22 corresponde a ttHOOK_SET, esto significa que el valor por defecto de todos los bits en 0 no activará el Hook en una transacción SetHook, pero sí en todos los demás tipos de transacción. Esta es una decisión de diseño intencionada para evitar que los usuarios bloqueen su cuenta de Xahau con un Hook defectuoso. + +Los bits se numeran de derecha a izquierda: + +* bit 0 - el más a la derecha, es decir, el bit menos significativo. +* bit 63 - el más a la izquierda, es decir, el bit más significativo. + +Ejemplos (asumiendo un entero sin signo de 256 bits): + +1. Si queremos desactivar completamente el Hook: + +```c +~(1ULL << 22) /* todos los bits son 1 excepto el bit 22 que es 0 */ +```` + +2. Si queremos desactivar el Hook en todo excepto ttPAYMENT: + +```c +~(1ULL << 22) & ~(1ULL) +``` + +3. Si queremos activar el Hook en todo excepto ttHOOK_SET: + +```c +0 +``` + +4. Si queremos activar el Hook en ttHOOK_SET (peligroso) y en todos los demás tipos de transacción: + +```c +(1ULL << 22) +``` + +### Calculadora HookOn + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/introduction/example-usage.mdx b/src/content/docs/es/docs/hooks/concepts/introduction/example-usage.mdx new file mode 100644 index 0000000..1905a3d --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/introduction/example-usage.mdx @@ -0,0 +1,24 @@ +--- +title: Ejemplo de uso +--- +Por favor, lee [la introducción de Hooks en este blog](https://coil.com/p/XUMM/XRPL-Labs-is-working-on-the-transaction-HOOKS-amendment-for-the-XRP-Ledger-Supporting-business-logic/kEmqhoqMW). + +Mientras trabajábamos en Hooks, publicamos varios blogs sobre nuestro progreso, ideas y conceptos relacionados con Hooks. Puedes [leer todo sobre ello en nuestros blogs en Dev.to](https://dev.to/t/xrplhooks/top/infinity) + +### Ejemplos (escenarios) + +#### 1. El Hook receptor ejecuta lógica adicional + +![senarios-1](/assets/hook-examples-senarios-1.png) + +#### 2. El Hook receptor bloquea una transacción entrante + +![senarios-2](/assets/hook-examples-senarios-2.png) + +#### 3. El Hook emisor bloquea una transacción saliente + +![senarios-3](/assets/hook-examples-senarios-3.png) + +#### 4. El Hook controla una cuenta institucional + +![senarios-4](/assets/hook-examples-senarios-4.png) \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/introduction/index.mdx b/src/content/docs/es/docs/hooks/concepts/introduction/index.mdx new file mode 100644 index 0000000..706055e --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/introduction/index.mdx @@ -0,0 +1,33 @@ +--- +title: Introducción +--- + +import { Aside } from '@astrojs/starlight/components'; + +Los Hooks añaden funcionalidad de smart contracts a Xahau: código personalizado de _capa uno_ para influir en el comportamiento y flujo de las transacciones. Los Hooks son pequeñas y eficientes piezas de código definidas en una cuenta de Xahau, que permiten ejecutar lógica antes y/o después de las transacciones en Xahau. + + + +Xahau es conocida y valorada por su alto rendimiento en transacciones, su velocidad y sus bajas comisiones. Combinado con tipos de transacciones avanzados disponibles como multifirma, escrows, canales de pago e incluso un exchange descentralizado (todo en el ledger, listo para usar, sin necesidad de smart contracts), Xahau ofrece mucho a empresas y desarrolladores creativos. + +Los Hooks añaden funcionalidad de smart contracts a Xahau: código personalizado de _capa uno_ para influir en el comportamiento y flujo de las transacciones. Los Hooks son pequeñas y eficientes piezas de código definidas en una cuenta de Xahau, que permiten ejecutar lógica antes y/o después de las transacciones en Xahau. Estos Hooks pueden ser muy simples, como: “rechazar pagos < 10 XAH”, o “para todos los pagos salientes, enviar el 10% a mi cuenta de ahorros”, o más avanzados. + +
+![Hooks high level concept](/assets/spaces_m6f29os4wP16vCS4lHNh_uploads_sEBiInWuRskTqxB29Xgd_7359187-Hooks_High_Level2x_1.png) +
*Concepto general de Hooks*
+
+ +Al permitir que los Hooks no solo ejecuten lógica eficiente, sino también almacenen pequeños objetos de datos simples, se podría definir un Hook como: “para transacciones de pago entrantes, comprobar si la cuenta emisora está en una lista mantenida por otro Hook y, si está presente: rechazar la transacción”. + +Los Hooks no son deliberadamente Turing-completos. Aunque a menudo se presenta como el santo grial de los smart contracts, la completitud de Turing en realidad no es apropiada para los smart contracts. (Ver [Blog 2](https://dev.to/wietse/hooked-2-hooks-security-smart-contracts-on-the-xrp-ledger-83e).) + +Actualmente, los Hooks están activos en una testnet pública. Es momento de probar, programar, experimentar y romper cosas, para que una futura enmienda que añada Hooks a la red principal de Xahau pueda proponerse con confianza. + +### Recursos + +* [Xahau Testnet](https://xahau-test.net/) +* [Xahau Testnet Explorer](https://explorer.xahau-test.net/) +* [Ejemplos (código fuente)](https://github.com/XRPL-Labs/xrpld-hooks/tree/hooks-ssvm/hook-api-examples) +* [Conceptos en blogs](https://dev.to/t/xrplhooks/top/infinity) \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/loops-and-guarding.mdx b/src/content/docs/es/docs/hooks/concepts/loops-and-guarding.mdx new file mode 100644 index 0000000..56513f0 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/loops-and-guarding.mdx @@ -0,0 +1,90 @@ +--- +title: Bucles y Guards +description: Los guards son necesarios para realizar bucles en un Hook. +--- +import { Aside } from '@astrojs/starlight/components'; + +### ¿Qué son los guards? + +Los Hooks no son deliberadamente [Turing completos](https://en.wikipedia.org/wiki/Turing_completeness). Esto significa que los bucles arbitrarios no están permitidos. En su lugar, debes _proteger_ tus bucles con un límite máximo de iteraciones. + +Un guard es una marca que se coloca en tu código al inicio de cada bucle. Esta marca informa a Xahau cuál será el límite superior de iteraciones _en cualquier escenario posible_. Así, si tu bucle normalmente se ejecuta dos veces pero en ocasiones puede ejecutarse _500_ veces, entonces tu guard deberá indicar 500. + +Los guards se utilizan para que Xahau determine el _tiempo de ejecución en el peor caso_ (en número de instrucciones) de tu Hook antes de ejecutarlo. Esto sirve de base para calcular la comisión que se cobra por la ejecución del Hook y hace que los tiempos de ejecución sean predecibles y controlables. + + + +### La función guard + +La función guard indica al ledger el **número máximo de iteraciones** que tendrá un bucle. Concretamente, la función recibe dos argumentos: + +```c +int32_t _g (uint32_t id, uint32_t maxiter); +```` + +El primer argumento `id` es el identificador del guard. Es una constante única elegida por el desarrollador, normalmente se usa el número de línea del archivo fuente. + +El segundo argumento `maxiter` es una promesa del desarrollador al ledger de que este guard no será ejecutado más de `maxiter` veces durante la ejecución del Hook. Si el guard se ejecuta más veces, el Hook hará automáticamente rollback con un error `GUARD_VIOLATION` ([códigos de retorno de la Hook API](/docs/hooks/functions/overview/return-codes)). Como el guard se ejecuta *antes* de comprobar la condición del bucle, es importante sumar uno al número total esperado de iteraciones. (Nota: la macro GUARD() ya suma uno). + + + +### Aplicación de los guards + +Considera el siguiente bucle for en C: + +```c +#define GUARD(maxiter) _g(__LINE__, (maxiter)+1) +for (int i = 0; GUARD(3), i < 3; ++i) +{ + ... +} +``` + +En C, el operador coma ejecuta cada expresión en una lista (por ejemplo `A, B, C`) y devuelve la última (`C`). Por lo tanto, la condición sigue siendo `i < 3`, pero el guard se ejecuta antes de evaluar la condición. Esta es la única forma de cumplir la *regla del guard* al usar un bucle for en C. + + + +A continuación se muestra la salida en WebAssembly al compilar el ejemplo anterior. Observa cómo la función guard se llama al inicio del bucle. Las únicas instrucciones permitidas antes de esta llamada son aquellas que no implican saltos (normalmente manipulación de constantes). + +``` + block ;; label = @1 + loop ;; label = @2 + i32.const 3 + i32.const 14 +=====> call $_g <===== + drop + ... +``` + +### Bucles anidados + +Cuando se utilizan bucles anidados, el argumento `maxiter` debe reflejar el número total de veces que el guard será ejecutado. Esto significa que debes multiplicar los bucles entre sí. + +Considera el siguiente ejemplo: + +```c +#define GUARD(maxiter) _g(__LINE__, (maxiter)+1) +for (int i = 0; GUARD(3), i < 3; ++i) +{ + for (int j = 0; GUARD(15), j < 5; ++j) + { + ... + } +} +``` + +Observa que el guard del bucle interno está configurado en **15**. Esto se debe a que debes multiplicar las iteraciones de ambos bucles para calcular el máximo número de ejecuciones del guard interno. + +### Sin recursión + +Las llamadas a funciones que no pertenecen a la Hook API no están permitidas en la enmienda Hooks. Todo el código del usuario debe estar contenido dentro de las dos funciones permitidas: `cbak` y `hook`. + + diff --git a/src/content/docs/es/docs/hooks/concepts/namespaces.mdx b/src/content/docs/es/docs/hooks/concepts/namespaces.mdx new file mode 100644 index 0000000..66126fd --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/namespaces.mdx @@ -0,0 +1,42 @@ +--- +title: Namespaces +description: Evita sobrescrituras de estado utilizando el namespace correcto +--- + +### Namespaces + +Para evitar que dos o más Hooks instalados en la misma cuenta sobrescriban accidentalmente el [estado del Hook](/docs/hooks/concepts/state-management) entre sí, se debe proporcionar un namespace de 32 bytes al crear o instalar cada Hook. + +El namespace puede ser cualquier valor arbitrario de 32 bytes elegido por el desarrollador. Siempre que el namespace sea único dentro de la cadena de Hooks, no se producirá sobrescritura de estado. + +Recomendamos encarecidamente usar `SHA256` sobre el nombre de trabajo del Hook definido por el desarrollador. SHA256 es uno de los dos algoritmos de hash utilizados en la generación de direcciones en Xahau (a partir de la clave maestra de una cuenta), por lo que suele estar fácilmente disponible para el desarrollador. + +El campo `HookNamespace` se proporciona como un blob _hexadecimal_ de 32 bytes dentro de cada objeto `Hook` en el array `Hooks` al [ejecutar una transacción SetHook](/docs/hooks/concepts/sethook-transaction). + +El namespace configurado bajo el que opera un Hook modifica los [Keylets](/docs/hooks/concepts/slots-and-keylets) bajo los que se almacena su [estado](/docs/hooks/concepts/state-management). Por lo tanto, dos Hooks bajo diferentes namespaces instalados en la misma cuenta de Xahau pueden usar la misma clave de estado para referirse a diferentes objetos de estado. Por el contrario, dos Hooks distintos que utilicen el mismo namespace en la misma cuenta pueden acceder y modificar los objetos de estado del otro utilizando las mismas claves. + +### Ejemplo + +En JavaScript, al importar `ripple-address-codec` se obtiene acceso a SHA256.\ +(También es posible usar `crypto.subtle` en navegador o `crypto.createHash` en Node para acceder a este algoritmo de hash.) + +```js +HookNamespace: addr.codec.sha256('carbon').toString('hex') +```` + +### Namespace por defecto + +El primer usuario que [establece un Hook nuevo](/docs/hooks/concepts/sethook-transaction) define un `HookNamespace` que se convierte en el *namespace por defecto* para ese Hook. Esto significa que cualquier usuario posterior que [referencie la misma *HookDefinition*](/docs/hooks/concepts/reference-counted-hook-definitions) recibirá este namespace por defecto. + +El usuario posterior puede especificar su propio namespace, sobrescribiendo el namespace por defecto solo para su instalación. + +### APIs de Hook afectadas + +La elección del HookNamespace afecta al comportamiento de las siguientes APIs de Hook: + +* [state](/docs/hooks/functions/state/state) +* [state_set](/docs/hooks/functions/state/state_set) + +### Helper de API para namespaces + +Consulta [account_info](/docs/hooks/functions/websocket-apis/account_info) y [account_namespace](/docs/hooks/functions/websocket-apis/account_namespace) para obtener información sobre cómo consultar el ledger respecto a namespaces. \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/parameters.mdx b/src/content/docs/es/docs/hooks/concepts/parameters.mdx new file mode 100644 index 0000000..51f9e5a --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/parameters.mdx @@ -0,0 +1,58 @@ +--- +title: Parámetros +description: Los parámetros en tiempo de instalación permiten que los Hooks sean genéricos y flexibles +--- + +### Parámetros + +Los desarrolladores de Hooks pueden optar por utilizar parámetros en _tiempo de instalación_ (llamados Hook Parameters) en sus Hooks. Esto permite que quienes instalen posteriormente el Hook puedan modificar ciertos comportamientos definidos por el programador sin necesidad de recompilar o volver a subir el Hook (siempre que al menos una cuenta siga [referenciando](/docs/hooks/concepts/reference-counted-hook-definitions) la definición existente del Hook). + +Los Hook Parameters son un conjunto de pares clave-valor establecidos durante la [transacción SetHook](/docs/hooks/concepts/sethook-transaction) y recuperables por el Hook en tiempo de ejecución. Tanto `ParameterName` como `ParameterValue` se definen como blobs _hexadecimales_, con un tamaño máximo de 32 bytes y 256 bytes respectivamente. + +Una [transacción SetHook](/docs/hooks/concepts/sethook-transaction) puede definir hasta _16_ parámetros por cada Hook instalado. + +### Establecer parámetros + +El array `HookParameters` se define opcionalmente dentro de cada `Hook` en el array `Hooks`, como se muestra a continuación: + +```json +TransactionType: "SetHook", +Hooks: +[ + { + Hook: { + ..., + HookParameters: + [ + { + HookParameter: + { + HookParameterName: "ABCDEF12", + HookParameterValue: "12345678" + } + }, + ... // opcionalmente hasta 15 parámetros más + ] + } + } +], +... +```` + +### Parámetros por defecto + +El primer usuario que [establece un Hook nuevo](/docs/hooks/concepts/sethook-transaction) puede definir Hook Parameters que se convierten en los *parámetros por defecto* de ese Hook. Esto significa que cualquier usuario posterior que [referencie la misma *HookDefinition*](/docs/hooks/concepts/reference-counted-hook-definitions) recibirá estos parámetros por defecto. + +El usuario posterior puede definir sus propios parámetros, sobrescribiendo los parámetros por defecto para su instalación. + +Para eliminar un parámetro en una instalación posterior, especifica la clave `ParameterName` sin incluir la clave `ParameterValue`. + +### Uso de parámetros en Hooks + +Los parámetros pueden ser leídos por los Hooks utilizando [hook_param](/docs/hooks/functions/hook-context/hook_param). + +Si hay más de un Hook instalado en una cadena de Hooks, entonces [hook_param_set](/docs/hooks/functions/hook-context/hook_param_set) puede utilizarse en ciertos casos para modificar los parámetros de un Hook situado más adelante en la cadena dentro de la misma cuenta. + +### Parámetros en tiempo de ejecución + +En Xahau y en la testnet de Xahau, los HookParameters también pueden incluirse en el nivel superior de cualquier tipo de transacción, respetando las mismas reglas y límites de tamaño. Estos parámetros pueden ser accedidos dentro de un Hook mediante la API [otxn_param](/docs/hooks/functions/originating-transaction/otxn_param). \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/reference-counted-hook-definitions.mdx b/src/content/docs/es/docs/hooks/concepts/reference-counted-hook-definitions.mdx new file mode 100644 index 0000000..221104b --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/reference-counted-hook-definitions.mdx @@ -0,0 +1,15 @@ +--- +title: Definiciones de Hook con conteo de referencias +description: Evita volver a subir el mismo bytecode al ledger +--- + +Cuando el bytecode WebAssembly de un Hook nuevo se sube a Xahau, se impone una carga de almacenamiento significativa en la red. Esta carga se refleja en las [comisiones de Hooks](/docs/hooks/concepts/hook-fees) que cobra la red. + +Para evitar esta carga (y las altas comisiones para los usuarios), se utiliza el conteo de referencias: + +* La primera vez que se instala un Hook nuevo, la [transacción SetHook](/docs/hooks/concepts/sethook-transaction) debe pagar una comisión elevada. +* El bytecode WebAssembly del Hook se convierte en un objeto sin propietario y con conteo de referencias en el ledger (llamado `HookDefinition`). +* Las instalaciones posteriores, por el mismo u otros usuarios, de un Hook idéntico (es decir, con el mismo bytecode) incrementan el contador de referencias. Estas instalaciones apuntan al mismo objeto en el ledger. Estas transacciones se cobran de forma similar a la creación de una Trust Line, ya que la carga de almacenamiento ya fue cubierta por la primera transacción SetHook. +* Mientras el contador de referencias de la Hook Definition sea mayor que cero (es decir, una o más cuentas sigan teniendo el Hook instalado), el objeto permanecerá en el ledger. + +![Reference Counted Hook Definitions](/assets/spaces_m6f29os4wP16vCS4lHNh_uploads_TlDL7tsVNYi1yU64EZQh_3ef0cee-sethook-Page-2.png) \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/serialized-objects.mdx b/src/content/docs/es/docs/hooks/concepts/serialized-objects.mdx new file mode 100644 index 0000000..7dfeff7 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/serialized-objects.mdx @@ -0,0 +1,55 @@ +--- +title: Objetos serializados +description: ¡Manipula objetos serializados de xahaud directamente! +--- + +### ¿Qué son los objetos serializados? + +Xahau tiene formas [serializadas](/docs/protocol-reference/binary-format) canónicas de todos los objetos sujetos a consenso. Al escribir un Hook, es inevitable encontrarse con objetos serializados. Estos aparecen como buffers que pueden parecer blobs binarios opacos para el desarrollador. Sin embargo, pueden analizarse utilizando el [XRPL-Binary-Visualiser](https://richardah.github.io/xrpl-binary-visualizer/). + +Por ejemplo, un campo `sfAmount` se serializa como una secuencia de bytes como `61D50F26109A32B7EC`. + +### API de objetos serializados + +Para ayudar a los desarrolladores de Hooks a trabajar con objetos serializados, se creó el espacio de nombres `sto` dentro de la API de Hooks. Estas funciones manipulan punteros dentro de un buffer proporcionado por el Hook. Consulta la siguiente tabla: + +| Hook API | Qué hace | +| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| [sto_subfield](/docs/hooks/functions/serialization/sto_subfield) | Indexa dentro de un objeto serializado de xrpld y devuelve la posición y longitud de un subcampo | +| [sto_subarray](/docs/hooks/functions/serialization/sto_subarray) | Indexa dentro de un array serializado de xrpld y devuelve la posición y longitud de un índice | +| [sto_emplace](/docs/hooks/functions/serialization/sto_emplace) | Inserta un campo en un STObject en su posición canónica | +| [sto_erase](/docs/hooks/functions/serialization/sto_erase) | Elimina un campo de un STObject | +| [sto_validate](/docs/hooks/functions/serialization/sto_validate) | Valida un STObject | + +Cuando corresponde, estas APIs devuelven un _offset_ y una _longitud_ codificados en un único `int64_t`. Consulta la documentación específica para más detalles. + +### Ejemplo + +Un caso típico en el que usarías la API STO es al procesar memos en una Transacción Originaria. Dado que probablemente necesites acceder al memo completo, una forma eficiente de procesar un conjunto de memos es copiar todo el campo `sfMemos` a un buffer y luego indexar dentro de él. Aunque también es posible hacerlo con la API de slots, esto implicaría más código y más operaciones de copia. + +```c +#define SUB_OFFSET(x) ((int32_t)(x >> 32)) +#define SUB_LENGTH(x) ((int32_t)(x & 0xFFFFFFFFULL)) +#define SBUF(str) (uint32_t)(str), sizeof(str) + +uint8_t memos[2048]; +int64_t memos_len = otxn_field(SBUF(memos), sfMemos); +for (int i = 0; GUARD(3), i < 3; ++i) +{ + int64_t memo_lookup = sto_subarray(memos, memos_len, i); + if (memo_lookup < 0) + rollback(SBUF("Error al buscar memo"), 1); + uint8_t* memo_ptr = SUB_OFFSET(memo_lookup) + memos; + uint32_t memo_len = SUB_LENGTH(memo_lookup); + // lo anterior ahora apunta al memo ... haz algo aquí +} +```` + +### Solapamiento con slots + +Puede que observes cierta superposición entre las APIs de slots y las APIs STO. La diferencia clave es quién *posee* los datos subyacentes: + +* Si usas *slots*, entonces xrpld es quien posee el objeto con el que interactúas. +* Si usas la *API STO*, entonces el **Hook** es quien posee el buffer con el que interactúas. + +Ambos conjuntos de funciones permiten indexar dentro de un objeto serializado sin realizar copias innecesarias. \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/sethook-transaction.mdx b/src/content/docs/es/docs/hooks/concepts/sethook-transaction.mdx new file mode 100644 index 0000000..4bb08de --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/sethook-transaction.mdx @@ -0,0 +1,155 @@ +--- +title: Transacción SetHook +--- + +### Transacción SetHook + +El bytecode WebAssembly de un Hook se instala en una cuenta de Xahau utilizando la transacción `SetHook`. + +Un ejemplo: + +```js +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: { + CreateCode: fs.readFileSync('accept.wasm').toString('hex').toUpperCase(), + HookOn: '0000000000000000', + HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), + HookApiVersion: 0 + } + } + ] +} +```` + +La transacción parece sencilla, pero oculta una complejidad significativa que se describe a continuación. + +### Array Hooks + +El cuerpo principal de la transacción SetHook es el array Hooks: + +```js +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Hooks: // Este es el array Hooks + [ + { Hook: { ... } }, // HookSet Object (posición 0) + { Hook: { ... } }, + { Hook: { ... } }, + { Hook: { ... } }. // HookSet Object (posición 3) + ] +} +``` + +Este array *refleja* la [cadena de Hooks](/docs/hooks/concepts/chaining) instalada en la cuenta: + +* La posición 0 del array corresponde a la posición 0 en la cadena. +* La posición 3 corresponde a la posición 3 en la cadena, etc. + +### HookSet Object y Hook correspondiente + +Cada entrada del array Hooks se llama *HookSet Object*, y su Hook correspondiente en la cuenta se llama *Hook correspondiente*. + +### HookDefinition + +Cada Hook correspondiente contiene una referencia a un objeto `HookDefinition`. + +Este objeto es un objeto del ledger sin propietario y con conteo de referencias que evita duplicar bytecode idéntico. + +Consulta: [Reference Counting](/docs/hooks/concepts/reference-counted-hook-definitions) + +### Valores por defecto del Hook + +Cuando se crea un `HookDefinition`, contiene los [Parameters](/docs/hooks/concepts/parameters), [Namespace](/docs/hooks/concepts/namespaces) y [Grants](/docs/hooks/concepts/grants) iniciales. Estos se convierten en valores por defecto. + +### Operaciones HookSet + +Existen seis operaciones: No Operation, Create, Install, Update, Delete y Namespace Reset. + +Se determinan según los campos incluidos u omitidos en el HookSet Object. + +--- + +### No Operation + +**Ocurre cuando**: + +* El HookSet Object está vacío + +**Comportamiento**: + +* No se realiza ningún cambio + +--- + +### Create Operation + +**Ocurre cuando**: + +* No existe Hook o se usa `FLAG_OVERRIDE` +* Se incluye `CreateCode` +* No existe aún ese bytecode en el ledger + +**Comportamiento**: + +* Se crea un `HookDefinition` +* Se crea el Hook en la cuenta +* El Hook apunta a ese HookDefinition + +--- + +### Install Operation + +**Ocurre cuando**: + +* Existe HookDefinition previo (mismo bytecode o hash) + +**Comportamiento**: + +* Se incrementa el contador de referencias +* El Hook apunta al HookDefinition existente + +--- + +### Update Operation + +**Ocurre cuando**: + +* El Hook ya existe +* Se modifican parámetros, namespace o grants + +**Comportamiento**: + +* Se actualizan los campos del Hook + +--- + +### Delete Operation + +**Ocurre cuando**: + +* Se usa `CreateCode: ""` y `hsfOVERRIDE` + +**Comportamiento**: + +* Se elimina el Hook +* Se reduce el contador de referencias + +--- + +### Namespace Reset + +**Ocurre cuando**: + +* Se usa `hsfNSDELETE` +* Se especifica namespace + +**Comportamiento**: + +* Se eliminan entradas de estado asociadas al namespace \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/slots-and-keylets.mdx b/src/content/docs/es/docs/hooks/concepts/slots-and-keylets.mdx new file mode 100644 index 0000000..0c264fb --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/slots-and-keylets.mdx @@ -0,0 +1,62 @@ +--- +title: Slots y Keylets +description: Inspecciona y manipula objetos en el ledger. +--- +import { Aside } from '@astrojs/starlight/components'; + +### Contexto + +Xahau contiene numerosos tipos de objetos heterogéneos a los que un Hook tiene acceso de lectura. Por ejemplo: _transacciones_, _cuentas_, _ledgers_ y los subcomponentes de cada uno, entre otros. + +Es muy fácil programar de forma descuidada un sistema que realice muchas operaciones de copia innecesarias, cuando un acceso disciplinado a los mismos datos subyacentes (por ejemplo, mediante una vista) sería suficiente. La evitación deliberada de copias en programación se conoce como [Zero copy](https://en.wikipedia.org/wiki/Zero-copy). + +Con Hooks se aplica el mismo principio: queremos evitar copias siempre que sea posible. En particular, queremos evitar copiar objetos grandes como ledgers completos, así como serializarlos y deserializarlos innecesariamente. + +### ¿Qué son los slots? + +Los slots forman parte de la API de Hooks y proporcionan un sistema de acceso _heterogéneo_ sin copias a objetos y transacciones en el ledger. + +* Cada Hook tiene acceso a 255 slots durante su ejecución. +* Cada slot puede estar vacío o contener un objeto _asignado_ (slotted). +* La API de slots permite navegar dentro de objetos internos y asignarlos también a otros slots. +* La API permite volcar objetos a buffers o leerlos directamente desde el Hook. + +Las APIs disponibles son: + +| Hook API | Qué hace | +| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| [slot](/docs/hooks/functions/slot/slot) | Serializa y devuelve un objeto asignado a un slot | +| [slot_clear](/docs/hooks/functions/slot/slot_clear) | Libera un slot ocupado | +| [slot_count](/docs/hooks/functions/slot/slot_count) | Cuenta los elementos de un array en un slot | +| slot_id | Calcula el hash canónico del objeto en el slot y lo devuelve | +| [slot_set](/docs/hooks/functions/slot/slot_set) | Localiza un objeto mediante su keylet y lo coloca en un slot | +| [slot_subarray](/docs/hooks/functions/slot/slot_subarray) | Indexa un array en un slot y asigna un subobjeto a otro slot | +| [slot_subfield](/docs/hooks/functions/slot/slot_subfield) | Indexa un objeto en un slot y asigna un subobjeto a otro slot | +| [slot_type](/docs/hooks/functions/slot/slot_type) | Obtiene el tipo de campo de un objeto en un slot y otra información opcional | +| [slot_float](/docs/hooks/functions/slot/slot_float) | Convierte un STI_AMOUNT en el slot a un número XFL | +| [slot_size](/docs/hooks/functions/slot/slot_size) | Calcula el tamaño serializado de un objeto en un slot | + +### ¿Qué son los keylets? + +Los keylets se utilizan para localizar (apuntar a) objetos en el ledger. Básicamente, son un _hash_ de la información identificativa del objeto, que actúa como identificador canónico. + +Los Hooks utilizan un formato serializado de 34 bytes para keylets, que puede generarse con la función [util_keylet](/docs/hooks/functions/utilities/util_keylet). Sin esto, localizar y asignar objetos sería prácticamente imposible. + + + +### Ejemplo + +En el siguiente ejemplo se genera un keylet de 34 bytes para un objeto `signers` y se asigna a un slot: + +```c +uint8_t keylet[34]; +if (util_keylet(SBUF(keylet), KEYLET_SIGNERS, SBUF(hook_accid), 0, 0, 0, 0) != 34) + rollback(SBUF("Notary: Error interno, no se pudo generar el keylet"), 10); + +// solicitar a XRPLD que coloque ese keylet en un slot +int64_t slot_no = slot_set(SBUF(keylet), 0); +if (slot_no < 0) + rollback(SBUF("Notary: No se pudo asignar el keylet al slot"), 10); +```` diff --git a/src/content/docs/es/docs/hooks/concepts/state-management.mdx b/src/content/docs/es/docs/hooks/concepts/state-management.mdx new file mode 100644 index 0000000..5c7ef89 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/state-management.mdx @@ -0,0 +1,65 @@ +--- +title: Gestión de estado +description: Los Hooks pueden leer y guardar pequeños fragmentos de datos en el ledger 🚀 +--- +import { Aside } from '@astrojs/starlight/components'; + +### ¿Qué es el estado de un Hook? + +El [estado](https://en.wikipedia.org/wiki/State_\(computer_science\)) en informática describe la información que un sistema mantiene entre ejecuciones (a diferencia de entradas y salidas). Por ejemplo, tu navegador te mantiene conectado a un sitio web incluso después de cerrarlo y volver a abrirlo. La cookie de sesión se guarda en el _estado_ del navegador. + +El **estado de un Hook** se refiere a un mapeo clave-valor que existe lógicamente para cada cuenta en Xahau, independientemente de si actualmente hay claves almacenadas o no. Las claves son siempre de 32 bytes (entero sin signo de 256 bits) y los valores tienen longitud variable, con un tamaño máximo determinado por votación de validadores (en el momento de escribir esto, 256 bytes). + +La gestión de estado se realiza mediante: + +* [state](/docs/hooks/functions/state/state) +* [state_set](/docs/hooks/functions/state/state_set) +* [state_foreign](/docs/hooks/functions/state/state_foreign) + +### Almacenamiento y recuperación + +El siguiente ejemplo utiliza la API [state_set](/docs/hooks/functions/state/state_set) para asignar el valor `0xC001CAFE` a la clave `0x0..000001` (uint256 = 1) en el estado del Hook de la cuenta: + +```c +uint8_t key[32] = { + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U +}; +uint8_t value[4] = { 0xC0U, 0x01U, 0xCAU, 0xFEU }; +if (state_set(value, 4, key, 32) == 4) +{ + // ... estado guardado correctamente +} +```` + +En una ejecución posterior del Hook, este valor puede recuperarse utilizando la misma clave: + +```c +uint8_t value[4]; +uint8_t key[32] = { + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U +}; +if (state(value, 4, key, 32) < 0) +{ + // ... error al recuperar el estado +} +``` + +Después de ejecutar este código, el buffer `value` contendrá el valor almacenado en esa clave. + + + +### Estado externo (foreign state) + +En ocasiones puede ser útil que un Hook que se ejecuta en una cuenta lea el estado de otro Hook en otra cuenta. La API [state_foreign](/docs/hooks/functions/state/state_foreign) permite hacer esto. Dado que el ledger es público, no hay expectativa real de privacidad. Por tanto, cualquier Hook puede *leer* (pero no escribir) el estado de otro Hook. + +### Namespaces y consultas + +Consulta [Namespaces](/docs/hooks/concepts/namespaces) \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/terminology.mdx b/src/content/docs/es/docs/hooks/concepts/terminology.mdx new file mode 100644 index 0000000..4406c67 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/terminology.mdx @@ -0,0 +1,38 @@ +--- +title: Terminología +description: Bienvenido a Hooks 👋 +--- + +### ¿Qué son los Hooks? + +Los Hooks son pequeños y eficientes módulos de WebAssembly diseñados específicamente para Xahau. Pueden escribirse en cualquier lenguaje que compile a WebAssembly, y la mayoría de la lógica de negocio y conceptos de smart contracts pueden implementarse en un Hook. Normalmente, se escriben en C. + +Los Hooks se instalan en una cuenta de Xahau mediante una transacción `SetHook`. Una vez instalados, un Hook puede: + +1. Bloquear o permitir transacciones entrantes y salientes en la cuenta, +2. Modificar y mantener estado interno y lógica específica del Hook en esa cuenta, y +3. Emitir nuevas transacciones en nombre de la cuenta. + +### Glosario + +Esta documentación utiliza términos específicos que pueden resultar desconocidos. Consulta la siguiente tabla si necesitas orientación: + +| Término | Explicación | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Hook |

Este término puede referirse a varias cosas según el contexto
1. Un binario WebAssembly que puede subirse a Xahau mediante una transacción SetHook.
2. Un binario WebAssembly ya instalado o configurado en una cuenta.
3. El código fuente de dicho binario.

| +| Transacción originaria | La transacción que dispara la ejecución del Hook. Puede ser una transacción enviada desde o hacia una cuenta con un Hook instalado. | +| Cuenta originaria | La cuenta que envió la transacción originaria. | +| Cuenta del Hook | La cuenta donde reside el Hook que se está ejecutando. Es la cuenta que lo instaló mediante la transacción SetHook y donde se almacena su estado. | +| Instalador | La cuenta que está instalando un Hook mediante la transacción SetHook. | +| Transacción emitida | Una nueva transacción creada por un Hook durante su ejecución (distinta de la originaria). Normalmente se usa para enviar fondos de vuelta. Ver: [Emitted Transactions](/docs/hooks/concepts/emitted-transactions). | +| Estado | Un mapa clave-valor por cuenta donde las claves son de 32 bytes y los valores datos arbitrarios. Todos los Hooks de una cuenta comparten este estado. Vive en la cuenta del Hook, no en la cuenta originaria. Ver: [State Management](/docs/hooks/concepts/state-management). | +| SetHook | Tipo de transacción introducido por Hooks que permite instalar un Hook en una cuenta. Ver: [SetHook Transaction](/docs/hooks/concepts/sethook-transaction). | +| Guards | Mecanismo de control obligatorio para usar bucles en Hooks. Ver: [Loops and Guarding](/docs/hooks/concepts/loops-and-guarding). | +| Grants | Permisos que un instalador puede otorgar a otros Hooks o cuentas para modificar su estado. | +| Namespace | Código único de 32 bytes que separa espacios de estado. Permite que distintos Hooks usen las mismas claves sin conflicto. | +| Parameters | Parámetros definidos en el momento de instalación de un Hook. | +| Reference Counting | Sistema donde un objeto del ledger se elimina cuando ya no es referenciado por ninguna cuenta. | +| XFL o coma flotante | Método para cálculos de alta precisión en Hooks (por ejemplo, tasas de cambio). Ver: [Floating Point Numbers (XFL)](/docs/hooks/concepts/floating-point-numbers-xfl). | +| Objetos serializados (STO) | Forma en que xahaud almacena y transmite objetos del ledger. Ver: [Serialized Objects](/docs/hooks/concepts/serialized-objects). | +| Slots y Keylets | Los slots contienen objetos del ledger y los keylets los identifican. Ver: [Slots and Keylets](/docs/hooks/concepts/slots-and-keylets). | +| Trace | Método para imprimir logs desde un Hook en la salida de xrpld. Ver: [Debugging Hooks](/docs/hooks/concepts/debugging-hooks). | \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/weak-and-strong.mdx b/src/content/docs/es/docs/hooks/concepts/weak-and-strong.mdx new file mode 100644 index 0000000..79ea3b2 --- /dev/null +++ b/src/content/docs/es/docs/hooks/concepts/weak-and-strong.mdx @@ -0,0 +1,116 @@ +--- +title: Débil y Fuerte +description: ¿Qué Hooks pueden ejecutarse y cuándo? +--- +import { Aside } from '@astrojs/starlight/components'; + + + +Los Transactional Stake Holders (TSH) son las partes que tienen algún tipo de interés o se ven afectadas por una transacción. Su relación puede ser _débil_ o _fuerte_. El grado de conexión determina si tienen derecho a ejecutar sus Hooks y quién paga por esa ejecución. + +Por ejemplo: + +* En una transacción **Payment** directa de XAH, los TSH son la _cuenta originaria_ y la _cuenta destino_. +* En una transacción **SetSignerList**, los TSH son la _cuenta originaria_ y cada cuenta incluida en la lista de firmantes. +* En una transacción **OfferCreate**, las cuentas cuyas ofertas son cruzadas son TSH débiles. +* Con la enmienda **IOUIssuerWeakTSH**, los emisores de moneda pueden ejecutar Hooks en transacciones de terceros si lo han activado. + +Debido a la diversidad de transacciones en Xahau, los TSH pueden ser complejos y poco intuitivos. + +### Débil y Fuerte + +Cada TSH tiene una conexión débil o fuerte: + +#### Conexión Fuerte + +1. La transacción paga la ejecución del Hook. +2. Puede hacer rollback completo usando `rollback()`. + +#### Conexión Débil + +1. La transacción **no paga** la ejecución. +2. El TSH paga su ejecución mediante [Collect Call Hooks](/docs/hooks/concepts/collect-call). +3. Debe tener activado `asfTshCollect`. +4. **No puede hacer rollback**, pero sí modificar estado o emitir transacciones. + +### Antes o Después + +* Los Hooks **fuertes** se ejecutan **antes** de aplicar la transacción → pueden bloquearla. +* Los Hooks **débiles** se ejecutan **después** → no pueden bloquearla pero acceden al metadata. + + + +### Contexto de ejecución + +El parámetro `uint32_t` indica el contexto: + +#### En `hook`: + +* 0 → ejecución fuerte +* 1 → ejecución débil +* 2 → débil tras `hook_again` + +#### En `cbak`: + +* 0 → transacción emitida aceptada +* 1 → transacción emitida fallida + +### Tabla de referencia + +Si una transacción no aparece, solo tiene como TSH a la cuenta originaria. + +| Tipo de transacción | Tipo TSH | Quién es el TSH | +|--------------------|---------|----------------| +| AccountDelete | Fuerte | Cuenta destino | +| AccountSet | Ninguno | N/A | +| CheckCancel | Débil | Cuenta destino | +| CheckCreate | Fuerte | Cuenta destino | +| ClaimReward | Fuerte | Emisor | +| DepositPreauth | Fuerte | Cuenta autorizada | +| EscrowCreate | Fuerte | Cuenta destino | +| OfferCreate | Débil | Cuentas cruzadas | +| Payment | Fuerte + Débil | Destino (fuerte), intermediarios (débil) | +| SetHook | Ninguno | N/A | +| TrustSet | Débil | Emisor | + +### Tablas detalladas + +**AccountSet** + +| OTXN | TSH | AccountSet | +| ------- | ------- | ---------- | +| Account | Account | Fuerte | + +**AccountDelete** + +| OTXN | TSH | AccountDelete | +| ------- | ----------- | ------------- | +| Account | Account | Ninguno | +| Account | Beneficiario| Fuerte | + +**Payment** + +| OTXN | TSH | Payment | +| ------- | ----------- | ------- | +| Account | Account | Fuerte | +| Account | Destino | Fuerte | +| Account | Cruzado | Débil | + +**TrustSet** + +| OTXN | TSH | TrustSet | +| ------- | ------- | -------- | +| Account | Account | Fuerte | +| Account | Emisor | Débil | + +**URIToken** + +| OTXN | Burnable | TSH | Mint | Burn | Buy | Sell | Cancel | +| ------ | -------- | ------ | ------ | ------ | ------ | ------ | ------ | +| Owner | False | Owner | Ninguno| Fuerte | Fuerte | Fuerte | Fuerte | +| Owner | False | Issuer | Ninguno| Débil | Débil | Débil | Ninguno| +| Owner | True | Issuer | Ninguno| Débil | Fuerte | Fuerte | Ninguno| diff --git a/src/content/docs/es/docs/hooks/functions/control/accept.mdx b/src/content/docs/es/docs/hooks/functions/control/accept.mdx new file mode 100644 index 0000000..443bd65 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/control/accept.mdx @@ -0,0 +1,95 @@ +--- +title: accept +description: Acepta la transacción originaria y confirma los cambios realizados por el hook. +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Introducción +Metadatos de ejecución + +### Comportamiento + +Finaliza la ejecución del hook con estado: éxito. + +* Registra una cadena de retorno y un código de retorno en los metadatos de la transacción. +* Confirma todos los cambios de estado. +* Envía todas las transacciones `emit()`. +* Permite que la transacción originaria continúe. + + + +### Definición + + + +```c +int64_t accept ( + uint32_t read_ptr, + uint32_t read_len, + uint64_t error_code +); +```` + + + + +```javascript +function accept(msg: string, code: number): number +``` + + + +### Ejemplo + + + +```c +accept("Éxito", 7, 100); +``` + + + +```javascript +accept('Éxito', 100) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ----------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| read_ptr | uint32_t |

Puntero a una cadena de retorno que se almacenará en los metadatos de ejecución.
Puede ser cualquier texto definido por el desarrollador. Puede ser nulo.

| +| read_len | uint32_t | Longitud de la cadena de retorno. Máximo 32. Puede ser nulo. | +| error_code | uint64_t |

Código de retorno específico del hook que se almacenará en los metadatos.

Similar al código de salida de una aplicación en sistemas *nix. Por convención, éxito es 0.

| +
+ + +| Nombre | Tipo | Descripción | +| ------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| msg | string |

Cadena que se almacenará en los metadatos de ejecución.
Puede ser cualquier texto definido por el desarrollador. Puede ser nulo.

| +| code | number |

Código de retorno específico del hook que se almacenará en los metadatos.

Similar al código de salida en sistemas *nix. Por convención, éxito es 0.

| +
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t | Accept finaliza el hook, por lo que no devuelve valor al llamador. Por convención todas las APIs devuelven `int64_t`, pero aquí no se retorna nada. | + + + +| Tipo | Descripción | +| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| number | Accept finaliza el hook, por lo que no devuelve valor al llamador. Por convención las APIs devuelven un número, pero aquí no se retorna nada. | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/control/rollback.mdx b/src/content/docs/es/docs/hooks/functions/control/rollback.mdx new file mode 100644 index 0000000..cfb7648 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/control/rollback.mdx @@ -0,0 +1,81 @@ +--- +title: rollback +--- +import { Aside, Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Introducción +Metadatos de ejecución + +### Comportamiento + +Finaliza la ejecución del hook con estado: rechazo. + +* Registra una cadena de retorno y un código de retorno en los metadatos de la transacción. +* Descarta todos los cambios de estado. +* Descarta todas las transacciones `emit()`. +* Impide que la transacción originaria continúe. + + + +### Definición + + + +```c +int64_t rollback ( + uint32_t read_ptr, + uint32_t read_len, + uint64_t error_code +); +```` + + + +```javascript +function rollback(error_msg: string, error_code: number): number +``` + + + +### Ejemplo + + + +```c +rollback("¡Rechazado!", 9, 100); +``` + + +```javascript +rollback('¡Rechazado!', 100) +``` + + + +### Parámetros + + + + +
NombreTipoDescripción
read_ptruint32_tPuntero a una cadena de retorno que se almacenará en los metadatos de ejecución.
Puede ser cualquier texto definido por el desarrollador. Puede ser nulo.
read_lenuint32_tLongitud de la cadena de retorno. Máximo 32. Puede ser nulo.
error_codeuint64_tCódigo de retorno específico del hook que se almacenará en los metadatos.

Similar al código de salida de una aplicación en sistemas *nix. Por convención, los errores son valores distintos de cero.
+
+ + +
NombreTipoDescripción
error_msgstringCadena que se almacenará en los metadatos de ejecución.
Puede ser cualquier texto definido por el desarrollador. Puede ser nulo.
error_codenumberCódigo de retorno específico del hook que se almacenará en los metadatos.

Similar al código de salida de una aplicación en sistemas *nix. Por convención, los errores son valores distintos de cero.
+
+
+ +### Código de retorno + + + +
TipoDescripción
int64_tRollback finaliza el hook, por lo que no devuelve valor al llamador. Por convención todas las APIs devuelven int64_t, pero en este caso no se retorna nada.
+
+ +
TipoDescripción
numberRollback finaliza el hook, por lo que no devuelve valor al llamador. Por convención todas las APIs devuelven number, pero en este caso no se retorna nada.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/developer-defined/cbak-callback.mdx b/src/content/docs/es/docs/hooks/functions/developer-defined/cbak-callback.mdx new file mode 100644 index 0000000..54ade6e --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/developer-defined/cbak-callback.mdx @@ -0,0 +1,87 @@ +--- +title: cbak / Callback +description: La función de callback de tu hook +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Compilación de Hooks + +### Comportamiento + +* `cbak` es una función definida por el usuario que es llamada por `xahaud` para informar a tu hook sobre el estado de una transacción previamente emitida. +* Se pueden realizar cambios de estado y nuevas llamadas a `emit` desde `cbak`, pero no puede ejecutar `rollback`. +* Cuando se ejecuta `cbak`, la transacción emitida a la que se refiere el callback pasa a ser la transacción originaria. + +### Definición + + + +```c +int64_t cbak ( + uint32_t what +) +```` + + + + +```javascript +type Callback = (reserved: number) => number +``` + + + +### Ejemplo + + + +```c +int64_t cbak(uint32_t reserved) +{ + return 0; +} +``` + + + +```javascript +const Callback = (reserved: number) => { + return 0 +} +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| reserved | uint32_t |

si es 0:
- la transacción emitida asociada a este callback fue aceptada correctamente en un ledger.

si es 1:
- la transacción emitida NO fue aceptada antes de expirar.

| +
+ + +| Nombre | Tipo | Descripción | +| -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| reserved | number |

si es 0:
- la transacción emitida asociada a este callback fue aceptada correctamente en un ledger.

si es 1:
- la transacción emitida NO fue aceptada antes de expirar.

| +
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t | Un código de retorno arbitrario que desees devolver desde tu hook. Estará presente en los metadatos de la transacción originaria. | + + + +| Tipo | Descripción | +| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| number | Un código de retorno arbitrario que desees devolver desde tu hook. Estará presente en los metadatos de la transacción originaria. | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/developer-defined/hook.mdx b/src/content/docs/es/docs/hooks/functions/developer-defined/hook.mdx new file mode 100644 index 0000000..4b0ab0b --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/developer-defined/hook.mdx @@ -0,0 +1,83 @@ +--- +title: hook +description: La función principal de tu hook +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Compilación de Hooks + +### Comportamiento + +* `hook` es una función definida por el usuario que es llamada por `xahaud` para ejecutar tu hook. +* Tu función `hook` debe llamar a `accept` o `rollback` para permitir o rechazar la transacción originaria. +* Si la ejecución llega al final de la función sin llamar a ninguna de ellas, se considera implícitamente un `accept`. + +### Definición + + + +```c +int64_t hook ( + uint32_t reserved +) +```` + + + + +```javascript +type Hook = (reserved: number) => number +``` + + + +### Ejemplo + + + +```c +int64_t hook(uint32_t reserved) +{ + return 0; +} +``` + + + +```javascript +const Hook = (reserved: number) => { + return 0 +} +``` + + + +### Parámetros + + + +
NombreTipoDescripción
reserveduint32_tReservado para uso futuro.
+
+ + +
NombreTipoDescripción
reservednumberReservado para uso futuro.
+
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t | Un código de retorno arbitrario que desees devolver desde tu hook. Estará presente en los metadatos de la transacción originaria. | + + + +| Tipo | Descripción | +| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| number | Un código de retorno arbitrario que desees devolver desde tu hook. Estará presente en los metadatos de la transacción originaria. | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/emit-1.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/emit-1.mdx new file mode 100644 index 0000000..a5533d0 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/emit-1.mdx @@ -0,0 +1,93 @@ +--- +title: emit +description: Emite una nueva transacción desde el hook +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones emitidas + +### Comportamiento + + + +* Lee una transacción desde `read_ptr` +* Valida la transacción según las reglas de emisión +* Emite la transacción al consenso si es válida +* Escribe el hash canónico de la transacción en `write_ptr` + + + +* Esta función emite el JSON de transacción proporcionado. +* En caso de éxito, devuelve el número de hashes de transacciones emitidas. +* Si hay un error, devuelve un código de error. + + + +### Definición + + + +```c +int64_t emit ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript +function emit( + txJson: Record | Transaction + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c +if (emit(tx, tx_len) < 0) + rollback("¡Error al emitir!", 15, 1); +``` + + + +```javascript +const emitResult = emit(txJson) +if(typeof emitResult === 'number') + rollback("¡Error al emitir!", 1) +``` + + + +### Parámetros + + + +
NombreTipoDescripción
write_ptruint32_tPuntero a un buffer donde se escribirá el hash de la transacción
write_lenuint32_tTamaño del buffer donde se escribirá el hash (debe ser 32)
read_ptruint32_tPuntero a la transacción a emitir
read_lenuint32_tLongitud de la transacción
+
+ + +
NombreTipoDescripción
txJsonRecord<string, any> | TransactionEl JSON de la transacción a emitir.
+
+
+ +### Código de retorno + + + +
TipoDescripción
int64_tEn caso de éxito, el número de bytes del hash de la transacción escritos (32), o:

Si es negativo, un error:
OUT_OF_BOUNDS
- punteros/longitudes fuera de la memoria del hook.

PREREQUISITE_NOT_MET
- se debe llamar antes a emit_reserve

TOO_MANY_EMITTED_TXN
- se han emitido más transacciones de las prometidas

EMISSION_FAILURE
- la transacción es inválida según las reglas de emisión.
+
+ + +
TipoDescripción
ErrorCode | ByteArrayDevuelve un ErrorCode si hay error, o un array de hashes de transacciones emitidas en caso de éxito.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/emit.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/emit.mdx new file mode 100644 index 0000000..e0998db --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/emit.mdx @@ -0,0 +1,61 @@ +--- +title: prepare +description: Prepara una transacción JSON para su emisión. +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones + +### Comportamiento + + + +* Esta función toma un objeto JSON de transacción y lo prepara para su emisión. +* La transacción debe estar completa excepto el campo Account, que siempre debe ser la cuenta del Hook. + + + +### Definición + + + +```javascript +function prepare( + txJson: Record | Transaction + ): ErrorCode | Record | Transaction +```` + + + + +### Ejemplo + + + +```javascript +const prepared_txn = prepare({ + TransactionType: "Payment", + Destination: util_raddr(p1address_ns), + Amount: parseFloat(drops_sent)*2 + }) +``` + + + +### Parámetros + + + +
NombreTipoDescripción
txJsonRecord<string, any> | TransactionEl JSON de la transacción, debe estar completo excepto el campo Account (siempre la cuenta del Hook).
+
+
+ +### Código de retorno + + + +
TipoDescripción
ErrorCode | Record<string, any> | TransactionDevuelve un ErrorCode si hay un error, o el JSON de la transacción preparada o el objeto Transaction.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_burden.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_burden.mdx new file mode 100644 index 0000000..eff658c --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_burden.mdx @@ -0,0 +1,64 @@ +--- +title: etxn_burden +description: Obtiene la carga (burden) de una transacción hipotéticamente emitida +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones emitidas + +### Comportamiento + +* Devuelve la carga (burden) que tendrá una transacción emitida. + +### Definición + + + +```c +int64_t etxn_burden ( + void +); +```` + + + + +```javascript id="tp8diy" +function etxn_burden(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="67n9h7" +int64_t burden = etxn_burden(); +``` + + + +```javascript id="sh99t6" +const burden = etxn_burden() +``` + + + +### Parámetros + +Ninguno + +### Código de retorno + + + +
TipoDescripción
int64_tLa carga (burden) que necesitará una transacción emitida para poder pasar correctamente a emit()
+
+ + +
TipoDescripción
numberDevuelve un ErrorCode si hay un error, o el valor actual de la carga en caso de éxito.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_details.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_details.mdx new file mode 100644 index 0000000..4ff462f --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_details.mdx @@ -0,0 +1,96 @@ +--- +title: etxn_details +description: Genera un sfEmitDetails adecuado para una transacción que está a punto de ser emitida +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones emitidas + +### Comportamiento + + + +* Genera y escribe un objeto sfEmitDetails de 105 bytes en `write_ptr` si cbak no está definido +* Genera y escribe un objeto sfEmitDetails de 127 bytes en `write_ptr` si cbak está definido + + + +* Esta función proporciona información detallada sobre la transacción. +* Devuelve un ErrorCode si hay un error, o un array de detalles de la transacción en caso de éxito. + + + +### Definición + + + +```c +int64_t etxn_details ( + uint32_t write_ptr, + uint32_t write_len +); +```` + + + + +```javascript id="gafmxu" +function etxn_details(): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="r3de95" +uint8_t emitdet[105]; +int64_t result = + etxn_details(emitdet, 105); +if (result != 105) + rollback("Etxndetails falló.", 19, 1); +``` + + + +```javascript id="g0pizp" +const emitdet = etxn_details() +if (typeof emitdet === 'string || emitdet.length != 105) + rollback("Etxndetails falló.", 1) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | --------- | -------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero al buffer que recibirá el registro sfEmitDetails | +| write_len | uint32_t | Longitud del buffer | + + + +Sin parámetros en JavaScript + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos.

Si es negativo, error:
OUT_OF_BOUNDS
- punteros/longitudes fuera de la memoria del hook.

TOO_SMALL
- el buffer no es lo suficientemente grande

PREREQUISITE_NOT_MET
- no se llamó previamente a etxn_reserve(n)

FEE_TOO_LARGE
- la carga es demasiado alta para la red

INTERNAL_ERROR
- error interno al generar el campo requerido

| +
+ + +| Tipo | Descripción | +| ---------------------- | -------------------------------------------------------------------------------------------- | +| ErrorCode \| ByteArray | Un ErrorCode si hay error, o un array de detalles de la transacción en caso de éxito. | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_fee_base.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_fee_base.mdx new file mode 100644 index 0000000..f8be81c --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_fee_base.mdx @@ -0,0 +1,81 @@ +--- +title: etxn_fee_base +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + + + +### Conceptos + +Transacciones emitidas + +### Comportamiento + +* Devuelve la cantidad de comisión en drops recomendada para una transacción que va a ser emitida. + +### Definición + + + +```c +int64_t etxn_fee_base ( + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript +function etxn_fee_base(txblob: ByteArray | HexString): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t fee_to_pay = + etxn_fee_base(tx_blob, tx_blob_len); +``` + + + +```javascript +const fee_to_pay = etxn_fee_base(tx_blob) +``` + + + +### Parámetros + + + +
NombreTipoDescripción
read_ptruint32_tPuntero al buffer que contiene la transacción serializada que se desea emitir. El campo de comisión es obligatorio pero se ignora (puedes usar cero). Usa el resultado de esta función para rellenar correctamente el campo de comisión.
read_lenuint32_tLa longitud del blob de la transacción.
+
+ + +
NombreTipoDescripción
txblobByteArray | HexStringEl blob de la transacción, que puede ser un array de números o una cadena.
+
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número mínimo de drops que una transacción emitida necesita para ser aceptada.

Si es negativo, error:
OUT_OF_BOUNDS
- El buffer proporcionado no es válido dentro de la memoria del hook.

PREREQUISITE_NOT_MET
- No se ha llamado previamente a etxn_reserve.

INVALID_TXN
- El buffer no contiene una transacción serializada válida (fallo de deserialización o falta un campo requerido).

| +
+ + +| Tipo | Descripción | +| ------ | --------------------------------------------------------------------------- | +| number | Devuelve un ErrorCode si hay un error, o la comisión base calculada si tiene éxito. | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_generation.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_generation.mdx new file mode 100644 index 0000000..faa32a6 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_generation.mdx @@ -0,0 +1,69 @@ +--- +title: etxn_generation +description: Obtiene la generación de una transacción hipotéticamente emitida +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones emitidas + +### Comportamiento + +* Devuelve la generación que tendrá una transacción emitida. + +### Definición + + + +```c +int64_t etxn_generation ( + void +); +```` + + + + +```javascript +function etxn_generation(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t generation = + etxn_generation(); +``` + + + +```javascript +const generation = etxn_generation() +``` + + + +### Parámetros + +Ninguno + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------- | +| int64_t | La generación que necesitará una transacción emitida para poder pasar correctamente a `emit()` | + + + +| Tipo | Descripción | +| ------ | ----------------------------------------------------------------------------------------------------------- | +| number | Devuelve un ErrorCode si hay un error, o un número que indica el resultado de la generación en caso de éxito. | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_nonce.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_nonce.mdx new file mode 100644 index 0000000..6412a4a --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_nonce.mdx @@ -0,0 +1,86 @@ +--- +title: etxn_nonce +description: Genera un nonce de 32 bytes para usar en una transacción emitida +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones emitidas + +### Comportamiento + + + +* Escribe el hash de 32 bytes en `write_ptr` + + + +* Devuelve un ErrorCode si hay un error, o un array que contiene el valor del nonce en caso de éxito. + + + +### Definición + + + +```c +int64_t etxn_nonce ( + uint32_t write_ptr, + uint32_t write_len +); +```` + + + + +```javascript id="7xw2qf" +function etxn_nonce(): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="m9q3zk" +uint8_t n[32]; +int64_t bytes_written = + etxn_nonce(n, 32); +``` + + + +```javascript id="v5n1pt" +const nonce = etxn_nonce() +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | --------- | ------------------------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer de tamaño adecuado para almacenar la salida. Debe ser al menos 32 bytes | +| write_len | uint32_t | Longitud del buffer de salida | + + + +Sin parámetros + + + +### Código de retorno + + + +
TipoDescripción
int64_tEl número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros/longitudes fuera de la memoria del hook.
+
+ + +
TipoDescripción
ErrorCode \| ByteArrayDevuelve un ErrorCode si hay un error, o un array con el valor del nonce en caso de éxito.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_reserve.mdx b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_reserve.mdx new file mode 100644 index 0000000..9d1f9db --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/emitted-transaction/etxn_reserve.mdx @@ -0,0 +1,80 @@ +--- +title: etxn_reserve +description: Estima la comisión requerida para que una transacción sea emitida con éxito +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Transacciones emitidas + +### Comportamiento + +* Especifica el número de transacciones emitidas que este hook podría emitir durante su ejecución. + +### Definición + + + +```c +int64_t etxn_fee_base ( + uint32_t count +); +```` + + + + +```javascript id="3w7g5v" +function etxn_reserve(count: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="bbn2dc" +etxn_reserve(2); +``` + + + +```javascript id="t9p8qm" +etxn_reserve(2) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | --------- | -------------------------------------------------------------------------------------------- | +| count | uint32_t | El número máximo de transacciones que este hook podría emitir durante una ejecución. | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------------------------------------------------------ | +| count | number | El número máximo de transacciones que este Hook puede emitir. | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número máximo de transacciones emitidas que este hook puede emitir. Siempre será igual al parámetro count o un error como se indica a continuación.

Si es negativo, error:
ALREADY_SET
- El hook ya llamó a esta función anteriormente.

TOO_BIG
- El número de transacciones especificado es demasiado grande.

| +
+ + +| Tipo | Descripción | +| ------ | --------------------------------------------------------------------------- | +| number | Devuelve un ErrorCode si hay un error, o el número de transacciones configurado en caso de éxito. | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_compare.mdx b/src/content/docs/es/docs/hooks/functions/float/float_compare.mdx new file mode 100644 index 0000000..463f25a --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_compare.mdx @@ -0,0 +1,110 @@ +--- +title: float_compare +description: Realiza una comparación entre dos números de punto flotante XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Evalúa una comparación entre dos números de punto flotante XFL +* Devuelve el resultado de la comparación como un booleano codificado en un int64_t. + + + +* Evalúa una comparación entre dos números de punto flotante XFL +* Devuelve un código de error o el resultado de la comparación como un número. + + + +### Definición + + + +```c +int64_t float_compare ( + int64_t float1, + int64_t float2, + uint32_t mode +); +```` + + + + +```javascript id="6xt3c7" +function float_compare( + f1: bigint, + f2: bigint, + mode: number + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="az5p3m" +if (float_compare(pusd_to_send, 0, COMPARE_LESS) == 1) +{ + // pusd_to_send es menor que 0 +} +``` + + + +```javascript id="k9v8n2" +if (float_compare(pusd_to_send, 0n, COMPARE_LESS) == 1) +{ + // pusd_to_send es menor que 0 +} +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| float1 | int64_t | Número XFL que representa el primer operando de la comparación | +| float2 | int64_t | Número XFL que representa el segundo operando de la comparación | +| mode | uint32_t | Campo de flags que puede contener cualquiera de (o combinaciones válidas de) los siguientes valores:
COMPARE_EQUAL `1`
COMPARE_LESS `2`
COMPARE_GREATER `4`

Combinaciones válidas:
COMPARE_LESS \| COMPARE_GREATER
- Distinto

COMPARE_LESS \| COMPARE_EQUAL
- Menor o igual

COMPARE_GREATER \| COMPARE_EQUAL
- Mayor o igual | + + +
+ + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------------------------------------------------ | +| f1 | bigint | El primer valor flotante a comparar | +| f2 | bigint | El segundo valor flotante a comparar | +| mode | number | El modo de comparación (por ejemplo: menor, igual, mayor) | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t | 0 si la comparación es falsa.
1 si la comparación es verdadera.

Si es negativo, error:
INVALID_FLOAT
- alguno de los parámetros no es un número XFL válido

INVALID_ARGUMENT
- combinación inválida de flags de comparación | +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------------------------- | +| ErrorCode o number | Devuelve un código de error o el resultado de la comparación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_divide.mdx b/src/content/docs/es/docs/hooks/functions/float/float_divide.mdx new file mode 100644 index 0000000..f02cfaa --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_divide.mdx @@ -0,0 +1,95 @@ +--- +title: float_divide +description: Divide un número XFL entre otro número de punto flotante XFL +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Divide un XFL entre otro XFL +* Devuelve un nuevo XFL como un int64_t + + + +* Divide una representación flotante entre otra. +* Devuelve un código de error o el cociente como bigint. + + + +### Definición + + + +```c +int64_t float_divide ( + int64_t float1, + int64_t float2 +); +```` + + + + +```javascript id="w8n3jf" + function float_divide(f1: bigint, f2: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="u7k2lz" +int64_t still_one = + float_divide(float_one(), float_one()); +``` + + + +```javascript id="m2p9xc" +const still_one = + float_divide(float_one(), float_one()) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | ---------------------------------------------------------------- | +| float1 | int64_t | Número XFL que actúa como numerador | +| float2 | int64_t | Número XFL que actúa como denominador | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------ | +| f1 | bigint | El dividendo | +| f2 | bigint | El divisor | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17) resultante

Si es negativo, error:
INVALID_FLOAT
- el parámetro no es un número XFL válido o el resultado no puede representarse

DIVISION_BY_ZERO
- el divisor es cero.

| +
+ + +| Tipo | Descripción | +| ------------------- | ------------------------------------------- | +| bigint o ErrorCode | Devuelve un código de error o el cociente | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_exponent.mdx b/src/content/docs/es/docs/hooks/functions/float/float_exponent.mdx new file mode 100644 index 0000000..da588c5 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_exponent.mdx @@ -0,0 +1,67 @@ +--- +title: float_exponent +description: Obtiene el exponente de un número XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + + + + + + + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Devuelve la parte del exponente de un XFL como un entero con signo + + + +### Definición + + + +Debido a que los exponentes pueden ser negativos, y los valores negativos están reservados para estados de error, los exponentes no pueden devolverse desde funciones. Por ello, esta función se ha convertido en una macro como se muestra a continuación. + +```c +#define float_exponent(f)\ + (((int32_t)(((f) >> 54U) & 0xFFU)) - 97) +```` + + + + +```javascript id="4c9m2t" +const float_exponent = (f) => (Number(((f) >> 54n) & 0xFFn) - 97) +``` + + + +### Ejemplo + + + +```c id="d8k3pz" +int64_t exponent = + float_exponent(float_one()); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | --------------------------------------- | +| float1 | int64_t | Número de punto flotante XFL | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_int.mdx b/src/content/docs/es/docs/hooks/functions/float/float_int.mdx new file mode 100644 index 0000000..3c00e0b --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_int.mdx @@ -0,0 +1,107 @@ +--- +title: float_int +description: Convierte un número de punto flotante XFL en un entero (floor) +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Desplaza a la izquierda (multiplica por 10) el XFL según el número de decimales especificado +* Convierte el XFL resultante a un entero, descartando cualquier resto +* Devuelve el entero + + + +* Convierte una representación flotante en un entero con un número específico de decimales. +* Devuelve un código de error o el entero resultante como número. + + + +### Definición + + + +```c +int64_t float_int ( + int64_t float1, + uint32_t decimal_places, + uint32_t absolute +); +```` + + + + +```javascript id="u2c8fh" +function float_int( + f1: bigint, + decimal_places: number, + abs: number + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="p9k4wd" +int64_t drops = + float_int(xahbalance, 6, 0); +``` + + + +```javascript id="q7x3mz" +const drops = + float_int(xahbalance, 6, 0); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| float1 | int64_t | Número XFL que representa el operando | +| decimal_places | uint32_t | Número de posiciones decimales a desplazar antes de calcular el valor entero | +| absolute | uint32_t | Si es `1`, devuelve el valor absoluto del resultado | + + + + + +| Nombre | Tipo | Descripción | +| --------------- | ------ | ------------------------------------------------- | +| f1 | bigint | El número flotante a convertir | +| decimal_places | number | Número de decimales a considerar | +| abs | number | Indica si se debe tomar el valor absoluto | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El entero positivo calculado

Si es negativo, error:
INVALID_FLOAT
- uno de los parámetros no es un número XFL válido

INVALID_ARGUMENT
- se intentó usar más de 15 decimales

CANT_RETURN_NEGATIVE
- se intentó devolver un entero negativo, lo cual no está permitido; usa absolute = 1

| +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------------------------- | +| number o ErrorCode | Devuelve un código de error o el entero resultante | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_invert.mdx b/src/content/docs/es/docs/hooks/functions/float/float_invert.mdx new file mode 100644 index 0000000..80b316e --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_invert.mdx @@ -0,0 +1,92 @@ +--- +title: float_invert +description: Divide uno entre un número de punto flotante XFL +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Invierte una representación flotante. +* Devuelve el valor invertido como un bigint o un ErrorCode + + + +* Divide `1` entre un XFL +* Devuelve un nuevo XFL como un int64_t + + + +### Definición + + + +```c +int64_t float_invert ( + int64_t float1 +); +```` + + + + +```javascript id="k2n8xf" +function float_invert(f1: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="p4z9vm" +int64_t still_one = + float_invert(float_one()); +``` + + + +```javascript id="m8q2ry" +const still_one = + float_invert(float_one()) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | --------------------------------------- | +| float1 | int64_t | Número de punto flotante XFL | + + + +| Nombre | Tipo | Descripción | +| ------ | ----- | ----------------------- | +| f1 | float | El número a invertir | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17) resultante

Si es negativo, error:
INVALID_FLOAT
- el parámetro no es un número XFL válido o el resultado no puede representarse

DIVISION_BY_ZERO
- el parámetro es cero.

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------- | +| ErrorCode \| bigint | Devuelve un código de error o el valor invertido | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_log.mdx b/src/content/docs/es/docs/hooks/functions/float/float_log.mdx new file mode 100644 index 0000000..777119d --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_log.mdx @@ -0,0 +1,100 @@ +--- +title: float_log +description: Calcula el logaritmo decimal de un XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Calcula el logaritmo decimal de un número XFL +* Devuelve un nuevo XFL + + + + + +* Calcula el logaritmo de una representación flotante. +* Devuelve un código de error o el logaritmo como bigint. + + + +### Definición + + + +```c +int64_t float_log ( + int64_t float1 +); +```` + + + + +```javascript id="z8k2rm" +function float_log(f1: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="p6w4tx" +int64_t zero = + float_log(float_one()); +``` + + + + + +```javascript id="j9c3nf" +const zero = + float_log(float_one()) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | ------------------------------------------------------------------------------------------------------------ | +| float1 | int64_t | Número XFL que representa el valor del cual se desea calcular el logaritmo | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------------------------------ | +| f1 | bigint | El número flotante del que calcular el logaritmo | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El logaritmo calculado

Si es negativo, error:
INVALID_FLOAT
- el parámetro no es un número XFL válido

COMPLEX_NOT_SUPPORTED
- el parámetro es negativo y produciría un resultado complejo

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------- | +| bigint o ErrorCode | Devuelve un código de error o el logaritmo como bigint | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_mantissa.mdx b/src/content/docs/es/docs/hooks/functions/float/float_mantissa.mdx new file mode 100644 index 0000000..d50a463 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_mantissa.mdx @@ -0,0 +1,95 @@ +--- +title: float_mantissa +description: Obtiene la mantisa de un número XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Devuelve la parte de la mantisa de un XFL como un entero sin signo + + + +* Obtiene la mantisa de una representación flotante. +* Devuelve un código de error o la mantisa como bigint. + + + +### Definición + + + +```c +int64_t float_mantissa ( + int64_t float1 +); +```` + + + + +```javascript id="k7p2df" +function float_mantissa(f1: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="q8z4nv" +int64_t mantissa = + float_mantissa(float_one()); +``` + + + + + +```javascript id="r2m9jc" +const mantissa = + float_mantissa(float_one()); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------------------------- | +| f1 | bigint | El número flotante del que obtener la mantisa | + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | --------------------------------------- | +| float1 | int64_t | Número de punto flotante XFL | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

La mantisa del XFL

Si es negativo, error:
INVALID_FLOAT
- el parámetro no es un número XFL válido

| +
+ + +| Tipo | Descripción | +| ------------------- | ------------------------------------------- | +| bigint o ErrorCode | Devuelve un código de error o la mantisa | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_mulratio.mdx b/src/content/docs/es/docs/hooks/functions/float/float_mulratio.mdx new file mode 100644 index 0000000..8bc95c2 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_mulratio.mdx @@ -0,0 +1,112 @@ +--- +title: float_mulratio +description: Multiplica un número de punto flotante XFL por un numerador y denominador no XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Calcula la multiplicación de un número de punto flotante XFL (xls17) por el cociente de dos enteros +* Devuelve un nuevo XFL como un int64_t + + + +* Multiplica un número flotante por una razón definida por un numerador y un denominador. +* Devuelve un código de error o un nuevo XFL como bigint. + + + +### Definición + + + +```c +int64_t float_mulratio ( + int64_t float1, + uint32_t round_up, + uint32_t numerator, + uint32_t denominator +); +```` + + + + +```javascript id="9v2kdf" +function float_mulratio( + f1: bigint, + round_up: number, + numerator: number, + denominator: number + ): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="d3m8pz" +int64_t max_vault_pusd = + float_mulratio(max_vault_pusd, 0, + COLLATERALIZATION_NUMERATOR, COLLATERALIZATION_DENOMINATOR); +``` + + + +```javascript id="p6x4qr" +const max_vault_pusd = + float_mulratio(max_vault_pusd, 0, + COLLATERALIZATION_NUMERATOR, COLLATERALIZATION_DENOMINATOR); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ----------- | -------- | --------------------------------------------------------------------------------------------- | +| float1 | int64_t | Número XFL que representa el primer operando de la multiplicación | +| round_up | uint32_t | Si es distinto de cero, todos los cálculos se redondean hacia arriba | +| numerator | uint32_t | Numerador del cociente por el cual se multiplicará el valor flotante | +| denominator | uint32_t | Denominador del cociente por el cual se multiplicará el valor flotante | + + + + + +| Nombre | Tipo | Descripción | +| ----------- | ------ | --------------------------------------------------------------------------------------------- | +| f1 | bigint | Número XFL que representa el primer operando de la multiplicación | +| round_up | number | Si es distinto de cero, todos los cálculos se redondean hacia arriba | +| numerator | number | Numerador del cociente por el cual se multiplicará el valor flotante | +| denominator | number | Denominador del cociente por el cual se multiplicará el valor flotante | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17) resultante

Si es negativo, error:
INVALID_FLOAT
- alguno de los parámetros no es un número XFL válido

OVERFLOW
- el resultado es demasiado grande para representarse en XFL

DIVISION_BY_ZERO
- el denominador es cero.

| +
+ + +| Tipo | Descripción | +| ------------------- | ----------------------------------------------------------------- | +| ErrorCode o bigint | Devuelve un código de error o el número XFL (xls17) resultante | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_multiply.mdx b/src/content/docs/es/docs/hooks/functions/float/float_multiply.mdx new file mode 100644 index 0000000..e5d97bb --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_multiply.mdx @@ -0,0 +1,99 @@ +--- +title: float_multiply +description: Multiplica dos números XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Calcula la multiplicación de dos números de punto flotante XFL (xls17) +* Devuelve un nuevo XFL como un int64_t + + + +* Calcula la multiplicación de dos números de punto flotante XFL (xls17) +* Devuelve un código de error o un nuevo XFL como bigint. + + + +### Definición + + + +```c +int64_t float_multiply ( + int64_t float1, + int64_t float2 +); +```` + + + + +```javascript id="p3n8wd" +function float_multiply(f1: bigint, f2: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="v7m2kx" +int64_t max_vault_pusd = + float_multiply(vault_xrp, exchange_rate); +``` + + + +```javascript id="t9r4jc" +const max_vault_pusd = + float_multiply(vault_xrp, exchange_rate) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | --------------------------------------------------------------------------------------------- | +| float1 | int64_t | Número XFL que representa el primer operando de la multiplicación | +| float2 | int64_t | Número XFL que representa el segundo operando de la multiplicación | + + + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | --------------------------------------------------------------------------------------------- | +| f1 | bigint | Número XFL que representa el primer operando de la multiplicación | +| f2 | bigint | Número XFL que representa el segundo operando de la multiplicación | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17) resultante

Si es negativo, error:
INVALID_FLOAT
- alguno de los parámetros no es un número XFL válido

OVERFLOW
- el resultado es demasiado grande para representarse en XFL.

| +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------------- | +| ErrorCode o bigint | Devuelve un código de error o el número XFL resultante | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_negate.mdx b/src/content/docs/es/docs/hooks/functions/float/float_negate.mdx new file mode 100644 index 0000000..b67a3df --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_negate.mdx @@ -0,0 +1,96 @@ +--- +title: float_negate +description: Niega un número de punto flotante XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Multiplica un XFL por `-1` +* Devuelve un nuevo XFL como un int64_t + + + +* Niega una representación flotante. +* Devuelve un código de error o el valor negado como bigint. + + + +### Definición + + + +```c +int64_t float_negate ( + int64_t float1 +); +```` + + + + +```javascript id="x7n2rf" +function float_negate(f1: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="m4k9pz" +int64_t negative_one = + float_negate(float_one()); +``` + + + + + +```javascript id="q3v8tc" +const negative_one = + float_negate(float_one()); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | --------------------------------------- | +| float1 | int64_t | Número de punto flotante XFL | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------ | +| f1 | bigint | El número a negar | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17) resultante

Si es negativo, error:
INVALID_FLOAT
- alguno de los parámetros no es un número XFL válido

| +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------------- | +| ErrorCode o bigint | Devuelve un código de error o el número XFL resultante | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_one.mdx b/src/content/docs/es/docs/hooks/functions/float/float_one.mdx new file mode 100644 index 0000000..5f4ffb8 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_one.mdx @@ -0,0 +1,75 @@ +--- +title: float_one +description: Devuelve el número 1 representado como un número XFL +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Devuelve uno (`1`) como un XFL en formato int64_t + + + +* Obtiene la representación flotante del número uno. + + + +### Definición + + + +```c +int64_t float_one(); +```` + + + + +```javascript id="k5n8zp" +function float_one(): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="t9m2xc" +int64_t one = + float_one(); +``` + + + +```javascript id="v3q7rd" +const one = float_one() +``` + + + +### Parámetros + +Esta función no tiene parámetros. + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------- | +| int64_t | El número XFL (xls17) | + + + +| Tipo | Descripción | +| ------------------- | ----------------------------------- | +| ErrorCode \| bigint | El número XFL (xls17) | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_root.mdx b/src/content/docs/es/docs/hooks/functions/float/float_root.mdx new file mode 100644 index 0000000..c705070 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_root.mdx @@ -0,0 +1,103 @@ +--- +title: float_root +description: Calcula la raíz n-ésima de un XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Calcula la raíz `n`-ésima de un número XFL +* Devuelve un nuevo XFL + + + + + +* Calcula la raíz n-ésima de una representación flotante. +* Devuelve un código de error o la raíz como bigint. + + + +### Definición + + + +```c +int64_t float_root ( + int64_t float1, + uint32_t n +); +```` + + + + +```javascript id="n4t8zp" +function float_root(f1: bigint, n: number): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="k2p7wd" +int64_t three = + float_root(nine, 2); +``` + + + + + +```javascript id="q9m3vx" +const three = + float_root(nine, 2) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | ----------------------------------------------------------------------------------------------------------- | +| float1 | int64_t | Número XFL del que se desea calcular la raíz | +| n | uint32_t | Grado de la raíz, por ejemplo `2` representa la raíz cuadrada | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------------------------ | +| f1 | bigint | El número flotante del que calcular la raíz | +| n | number | El grado de la raíz a calcular | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

La raíz n-ésima calculada

Si es negativo, error:
INVALID_FLOAT
- el parámetro no es un número XFL válido

COMPLEX_NOT_SUPPORTED
- el parámetro es negativo y daría lugar a una raíz compleja

| +
+ + +| Tipo | Descripción | +| ------------------- | -------------------------------------------------------- | +| bigint o ErrorCode | Devuelve un código de error o la raíz resultante | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_set.mdx b/src/content/docs/es/docs/hooks/functions/float/float_set.mdx new file mode 100644 index 0000000..0af523a --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_set.mdx @@ -0,0 +1,102 @@ +--- +title: float_set +description: Crear un número flotante a partir de un exponente y una mantisa +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Calcula un número de punto flotante XFL (xls17) a partir del exponente y la mantisa proporcionados +* Devuelve ese XFL como un int64_t + + + +* Establece el exponente y la mantisa para una representación flotante. +* Devuelve un código de error o un nuevo XFL como bigint. + + + +### Definición + + + +```c +int64_t float_set ( + int32_t exponent, + int64_t mantissa +); +```` + + + + +```javascript +function float_set(exponent: number, mantissa: number): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c +int64_t small_amount = + float_set(-81, 1); +``` + + + +```javascript +const small_amount = float_set(-81, 1); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | -------- | ------------------------------------------------------------------- | +| exponent | int32_t | Un exponente en el rango `-96` a `80` | +| mantissa | int64_t | Una mantisa. Si es negativa, el signo del número será negativo. | + + + + + + + +| Nombre | Tipo | Descripción | +| -------- | ------ | ------------------------------------------------------------------- | +| exponent | bigint | Un exponente en el rango `-96` a `80` | +| mantissa | bigint | Una mantisa. Si es negativa, el signo del número será negativo. | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17)

Si es negativo, error:
INVALID_FLOAT
- El ajuste de la mantisa a 16 dígitos produjo un desbordamiento o subdesbordamiento.

| +
+ + +| Tipo | Descripción | +| ------------------- | -------------------------------------------------- | +| ErrorCode \| bigint | Un código de error o el número XFL (xls17). | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_sign.mdx b/src/content/docs/es/docs/hooks/functions/float/float_sign.mdx new file mode 100644 index 0000000..0fa6d91 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_sign.mdx @@ -0,0 +1,94 @@ +--- +title: float_sign +description: Obtener el signo de un número XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Devuelve `1` si el XFL es negativo, en caso contrario devuelve `0` + + + +* Devuelve `1` si el XFL es negativo, en caso contrario devuelve `0` + + + +### Definición + + + +```c +int64_t float_sign ( + int64_t float1 +); +```` + + + + +```javascript +function float_sign(f1: bigint): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t sign = + float_sign(float_one()); +``` + + + + + +```javascript +const sign = + float_sign(float_one()); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | -------------------------------------- | +| float1 | int64_t | Un número de punto flotante XFL | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ---------------------------------------- | +| f1 | bigint | El número flotante del que obtener el signo | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El signo del XFL:
0 si es positivo, 1 si es negativo.

Si es negativo, error:
INVALID_FLOAT
- el parámetro no es un número XFL válido

| +
+ + +| Tipo | Descripción | +| ------------------- | ------------------------------------------------ | +| number o ErrorCode | Un código de error o el resultado del signo | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_sto.mdx b/src/content/docs/es/docs/hooks/functions/float/float_sto.mdx new file mode 100644 index 0000000..3304d6c --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_sto.mdx @@ -0,0 +1,123 @@ +--- +title: float_sto +description: Generar un XFL como objeto serializado +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) +Objetos serializados + +### Comportamiento + + + +* Lee un número de punto flotante XFL y opcionalmente un código de campo y código de moneda +* Escribe una cantidad serializada en `write_ptr` según los parámetros proporcionados + + + +* Almacena una representación flotante en un campo específico. +* Devuelve un código de error o el valor actualizado como un array de números. + + + +### Definición + + + +```c +int64_t float_sto ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t cread_ptr, + uint32_t cread_len, + uint32_t iread_ptr, + uint32_t iread_len, + int64_t float1, + uint32_t field_code +); +```` + + + + +```javascript id="fsto-js" +function float_sto( + currency: ByteArray | HexString | undefined, + issuer: ByteArray | HexString | undefined, + f1: bigint, + field_code: number + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="fsto-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +uint8_t amt_out[48]; +if (float_sto(SBUF(amt_out), + SBUF(currency), SBUF(hook_accid), pusd_to_send, -1) < 0) + rollback(SBUF("Peggy: No se pudo serializar la cantidad pusd"), 1); +``` + + + +```javascript id="fsto-js-ex" +const amt_out = float_sto(currency, hook_accid, pusd_to_send, -1) +if (typeof amt_out === 'number') + rollback("Peggy: No se pudo serializar la cantidad pusd", 1) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ----------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer de tamaño adecuado para almacenar el campo serializado. Se recomiendan al menos 48 bytes. | +| write_len | uint32_t | Longitud del buffer de salida. | +| cread_ptr | uint32_t | Puntero a un buffer que contiene el código de moneda a serializar. _Puede ser null._ | +| cread_len | uint32_t | Longitud del código de moneda. Debe ser 20, 3 o 0 (null). | +| iread_ptr | uint32_t | Puntero a un buffer que contiene el Account ID del emisor. _Puede ser null._ | +| iread_len | uint32_t | Longitud del Account ID del emisor. Debe ser 20 o 0 (null). | +| float1 | int64_t | Número XFL a serializar. | +| field_code | uint32_t |

Código de campo sf para prefijar la cantidad serializada (ej. sfAmount).
Si es 0xFFFFFFFFU (o (uint32_t)(-1)) no se añade código de campo ni moneda/emisor, pero se serializa como flotante.
Si es 0, tampoco se añade código de campo ni moneda/emisor, pero se serializa como cantidad nativa XRP.

| + + +
+ + +| Nombre | Tipo | Descripción | +| ---------- | ----------------------------------- | --------------------------------------------------------- | +| currency | ByteArray \| HexString \| undefined | Valor de moneda a almacenar | +| issuer | ByteArray \| HexString \| undefined | Emisor a almacenar | +| f1 | bigint | Número flotante XFL | +| field_code | number | Código de campo donde almacenar el valor | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos en el buffer.

Si es negativo, error:
INVALID_FLOAT
- el número no es un XFL válido

OUT_OF_BOUNDS
- punteros fuera de memoria del hook

INVALID_ARGUMENT
- parámetros incorrectos para modo XRP o sin field code

TOO_SMALL
- buffer demasiado pequeño

XFL_OVERFLOW
- desbordamiento al normalizar

| +
+ + +| Tipo | Descripción | +| ---------------------- | ------------------------------------------------------------------ | +| ErrorCode \| ByteArray | Código de error o array con el valor serializado | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_sto_set.mdx b/src/content/docs/es/docs/hooks/functions/float/float_sto_set.mdx new file mode 100644 index 0000000..1c2061b --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_sto_set.mdx @@ -0,0 +1,98 @@ +--- +title: float_sto_set +description: Leer una cantidad serializada en un XFL +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) +Objetos serializados + +### Comportamiento + + + +* Lee un número de punto flotante serializado. +* Si hay más campos/datos después del número flotante serializado, se ignoran. +* Lo devuelve como un número XFL + + + +* Establece el buffer para almacenar representaciones flotantes. +* Devuelve un ErrorCode o el resultado como número. + + + +### Definición + + + +```c +int64_t float_sto_set ( + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript +function float_sto_set(buf: ByteArray | HexString): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t vault_pusd = float_sto_set(vault, 8); +if (vault_pusd < 0) + rollback("Failed to parse serialized float.", 33, 1); +``` + + + +```javascript +const vault_pusd = float_sto_set(vault) +if (typeof vault_pusd === 'string') + rollback("Failed to parse serialized float.", 1) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | --------- | ------------------------------------------------------------------ | +| read_ptr | uint32_t | Puntero a un buffer que contiene el XFL serializado. _Puede ser null._ | +| read_len | uint32_t | Longitud del buffer. | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | ---------------------- | +| buf | ByteArray \| HexString | El buffer a procesar. | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| int64_t |

El número de bytes escritos en el buffer de salida.

Si es negativo, error:
NOT_AN_OBJECT
- el buffer no contiene un número flotante serializado válido

OUT_OF_BOUNDS
- los punteros/longitudes están fuera de la memoria del hook.

| +
+ + +| Tipo | Descripción | +| ------------------- | ------------------------------------------ | +| ErrorCode o number | Un código de error o el resultado como número. | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/float/float_sum.mdx b/src/content/docs/es/docs/hooks/functions/float/float_sum.mdx new file mode 100644 index 0000000..6adc628 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/float/float_sum.mdx @@ -0,0 +1,99 @@ +--- +title: float_sum +description: Sumar dos números XFL +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Números de punto flotante (XFL) + +### Comportamiento + + + +* Calcula la suma de dos números de punto flotante XFL (xls17) +* Devuelve un nuevo XFL como un int64_t + + + +* Suma dos representaciones flotantes. +* Devuelve un código de error o la suma como bigint. + + + +### Definición + + + +```c +int64_t float_sum ( + int64_t float1, + int64_t float2 +); +```` + + + + +```javascript id="float-sum-js" +function float_sum(f1: bigint, f2: bigint): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c id="float-sum-c" +int64_t two = + float_sum(float_one(), float_one()); +``` + + + +```javascript id="float-sum-js-ex" +const two = + float_sum(float_one(), float_one()); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------ | -------- | --------------------------------------------------------------------------- | +| float1 | int64_t | Número XFL que representa el primer operando de la suma | +| float2 | int64_t | Número XFL que representa el segundo operando de la suma | + + + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | --------------------------- | +| f1 | bigint | Primer número a sumar | +| f2 | bigint | Segundo número a sumar | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El número XFL (xls17)

Si es negativo, error:
INVALID_FLOAT
- alguno de los parámetros no es válido

OVERFLOW
- la suma es demasiado grande

| +
+ + +| Tipo | Descripción | +| ------------------- | ------------------------------------ | +| ErrorCode o bigint | Un código de error o la suma | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_account.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_account.mdx new file mode 100644 index 0000000..ea3c0f2 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_account.mdx @@ -0,0 +1,86 @@ +--- +title: hook_account +description: Obtener el Account ID de 20 bytes en el que se está ejecutando el Hook +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Escribe el Account ID de 20 bytes en `write_ptr` + + + +* Obtiene el Account ID de 20 bytes en el que se está ejecutando el Hook. + + + +### Definición + + + +```c +int64_t hook_account ( + uint32_t write_ptr, + uint32_t write_len +); +```` + + + + +```javascript id="hook-account-js" +function hook_account(): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="hook-account-c" +uint8_t hook_acc_id[20]; +int64_t bytes_written = + hook_account(hook_acc_id, 20); +``` + + + +```javascript id="hook-account-js-ex" +const hook_acc_id = hook_account() +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | --------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida (mínimo 20 bytes) | +| write_len | uint32_t | Longitud del buffer de salida | + + + +Sin parámetros + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

| +
+ + +| Tipo | Descripción | +| ---------------------- | --------------------------------------------------------------------------------------------- | +| ErrorCode o ByteArray | Devuelve el Account ID del Hook o un código de error si falla la obtención | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_again.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_again.mdx new file mode 100644 index 0000000..70a0b39 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_again.mdx @@ -0,0 +1,57 @@ +--- +title: hook_again +description: Devuelve la posición en la cadena de hooks que ocupa el hook en ejecución +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Si el hook se está ejecutando en modo fuerte, marca este hook en la cadena para [Again As Weak Execution](/docs/hooks/concepts/weak-and-strong). +* Si la transacción originaria se aplica correctamente, el hook será llamado de nuevo en una segunda ejecución débil. + +### Definición + + + +```c +int64_t hook_again(void); +```` + + + +```javascript id="hook-again-js" +function hook_again(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="hook-again-c" +int64_t result = + hook_again(); +``` + + +```javascript id="hook-again-js-ex" +const result = hook_again() +``` + + + +### Parámetros + +Esta API no tiene parámetros + +### Código de retorno + + + +
TipoDescripción
int64_t1 si se marcó correctamente para Again As Weak.

PREREQUISITE_NOT_MET
- Este hook ya se está ejecutando en modo débil en el momento de la llamada.

ALREADY_SET
- La función ya fue llamada en esta ejecución.
+
+ +
TipoDescripción
numberDevuelve un código de estado que indica el resultado de la operación.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_hash.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_hash.mdx new file mode 100644 index 0000000..dacd5b9 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_hash.mdx @@ -0,0 +1,87 @@ +--- +title: hook_hash +description: Obtener el SHA512H (con sesgo de namespace) de 32 bytes del Hook en ejecución +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca el hash del hook instalado en la cuenta del hook en la posición `hook_no` +* Escribe el hash de 32 bytes en `write_ptr` + + +* Obtiene el hash del hook instalado en la cuenta del hook en la posición indicada. +* Devuelve el SHA512H (con sesgo de namespace) del hook en ejecución, o un código de error si falla. + + + +### Definición + + + +```c +int64_t hook_hash ( + uint32_t write_ptr, + uint32_t write_len, + int32_t hook_no +); +```` + + + +```javascript id="hook-hash-js" +function hook_hash(hookno: number): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="hook-hash-c" +uint8_t hash[32]; +int64_t bytes_written = + hook_hash(hash, 32, -1); +``` + + +```javascript id="hook-hash-js-ex" +const hash = hook_hash(hookno) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ------------------------------------------------------------------------------------------------ | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida (mínimo 32 bytes) | +| write_len | uint32_t | Longitud del buffer de salida | +| hook_no | int32_t | Posición del hook en la cadena, o `-1` para el hook en ejecución | + + +| Nombre | Tipo | Descripción | +| ------- | ------ | ------------------------------------------------------------------------------------------------ | +| hook_no | number | Posición del hook en la cadena, o `-1` para el hook en ejecución | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de memoria

DOESNT_EXIST
- el hook indicado no existe en la cadena

| +
+ +| Tipo | Descripción | +| ---------------------- | --------------------------------------------------------------------------------------------------------- | +| ByteArray o ErrorCode | Devuelve el SHA512H del hook en ejecución o un código de error si falla la operación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_param.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_param.mdx new file mode 100644 index 0000000..4c583f4 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_param.mdx @@ -0,0 +1,96 @@ +--- +title: hook_param +description: Obtener el valor de un parámetro de hook por nombre +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca el valor de un parámetro con nombre especificado en `read_ptr` +* Escribe el valor del parámetro en `write_ptr` + + + +* Obtiene el valor de un parámetro asociado a la clave especificada. +* Devuelve el valor asociado a la clave, o un código de error si falla la operación. + + + +### Definición + + + +```c +int64_t hook_param ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript id="hook-param-js" +function hook_param(key: ByteArray | HexString): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="hook-param-c" +uint8_t pname[] = {0xCAU, 0xFEU}; +uint8_t pvalue[32]; +int64_t value_len = + hook_param(pvalue, 32, pname, 2); +``` + + + +```javascript id="hook-param-js-ex" +const pname = [0xCA, 0xFE] +const pvalue = hook_param(pname) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | --------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida (mínimo 32 bytes) | +| write_len | uint32_t | Longitud del buffer de salida | +| read_ptr | uint32_t | Puntero a un buffer que contiene el nombre del parámetro | +| read_len | uint32_t | Longitud del nombre del parámetro | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | ------------------------------------------------ | +| key | ByteArray o HexString | Clave del parámetro a recuperar | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de memoria

DOESNT_EXIST
- el parámetro no existe o es nulo

TOO_SMALL
- el nombre del parámetro no puede ser nulo

TOO_BIG
- el nombre supera los 32 bytes

| +
+ + +| Tipo | Descripción | +| ---------------------- | --------------------------------------------------------------------------------- | +| ByteArray o ErrorCode | Devuelve el valor del parámetro o un código de error si falla la operación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_param_set.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_param_set.mdx new file mode 100644 index 0000000..3b1b391 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_param_set.mdx @@ -0,0 +1,115 @@ +--- +title: hook_param_set +description: >- + Establecer o eliminar un parámetro en un hook de la misma cuenta más adelante + en la cadena de ejecución +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca en la cadena de hooks de la cuenta un hash de 32 bytes indicado por `hread_ptr` +* Si se encuentra: establece un parámetro: +* Con el nombre indicado por `kread_ptr` y +* El valor indicado por `read_ptr` + + + +* Establece un parámetro para el hook con la clave y valor especificados, asociado a un hash. +* Devuelve un código de estado que indica el resultado de la operación. + + + +### Definición + + + +```c +int64_t hook_param_set ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t kread_ptr, + uint32_t kread_len, + uint32_t hread_ptr, + uint32_t hread_len +); +```` + + + +```javascript id="hook-param-set-js" +function hook_param_set( + val: ByteArray | HexString, + key: ByteArray | HexString, + hash: ByteArray | HexString + ): number +``` + + + +### Ejemplo + + + +```c id="hook-param-set-c" +uint8_t pvalue[] = "valor de parámetro"; +uint8_t pname[] = "nombre_param"; +uint8_t phash[] = { 0x19U, 0xFEU, 0x69U, 0xF1U, 0x53U, 0x66U, 0x4EU, 0x8CU, + 0x97U, 0xF4U, 0x4CU, 0x5CU, 0x3CU, 0x65U, 0x63U, 0x79U, + 0xC2U, 0xD0U, 0x26U, 0xE7U, 0x90U, 0xEFU, 0x38U, 0xF7U, + 0xEDU, 0x73U, 0xE9U, 0xCEU, 0x9CU, 0x9DU, 0xBFU, 0x03U }; +int64_t result = + hook_param_set(pvalue, sizeof(pvalue), + pname, sizeof(pname), + phash, sizeof(phash)); +``` + + +```javascript id="hook-param-set-js-ex" +const pvalue = "valor de parámetro" +const pname = "nombre_param" +const phash = [ 0x19, 0xFE, 0x69, 0xF1, 0x53, 0x66, 0x4E, 0x8C, + 0x97, 0xF4, 0x4C, 0x5C, 0x3C, 0x65, 0x63, 0x79, + 0xC2, 0xD0, 0x26, 0xE7, 0x90, 0xEF, 0x38, 0xF7, + 0xED, 0x73, 0xE9, 0xCE, 0x9C, 0x9D, 0xBF, 0x03 ] +const result = hook_param_set(str2hex(pvalue), str2hex(pname), phash) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ---------------------------------------- | +| read_ptr | uint32_t | Puntero al valor del parámetro | +| read_len | uint32_t | Longitud del valor del parámetro | +| kread_ptr | uint32_t | Puntero al nombre del parámetro | +| kread_len | uint32_t | Longitud del nombre del parámetro | +| hread_ptr | uint32_t | Puntero al hash del hook | +| hread_len | uint32_t | Longitud del hash (siempre 32) | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | ------------------------------------------- | +| val | ByteArray o HexString | Valor del parámetro | +| key | ByteArray o HexString | Clave asociada al parámetro | +| hash | ByteArray o HexString | Hash asociado al parámetro | + + + +### Código de retorno + + + +
TipoDescripción
int64_tLongitud del valor del parámetro establecido correctamente

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook.

TOO_SMALL
- el nombre del parámetro no puede ser nulo

TOO_BIG
- el nombre del parámetro supera los 32 bytes
+
+ + +
TipoDescripción
numberDevuelve un código de estado que indica el resultado de la operación.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_pos.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_pos.mdx new file mode 100644 index 0000000..d1e6248 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_pos.mdx @@ -0,0 +1,60 @@ +--- +title: hook_pos +description: Devuelve la posición en la cadena de hooks que ocupa el hook en ejecución +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Devuelve la posición en la cadena de hooks que ocupa el hook en ejecución. + +### Definición + + + +```c +int64_t hook_pos(void); +```` + + + +```javascript id="hook-pos-js" +hook_pos() +``` + + + +### Ejemplo + + + +```c id="hook-pos-c" +int64_t pos = + hook_pos(); +``` + + +```javascript id="hook-pos-js-ex" +const pos = hook_pos() +``` + + + +### Parámetros + +Esta API no tiene parámetros + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------- | +| int64_t | Posición en la cadena del hook en ejecución. La primera posición es 0. | + + +| Tipo | Descripción | +| ------ | -------------------------------------------------------------------------------------------- | +| number | Devuelve la posición actual en la cadena de hooks o un código de error si falla la operación | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/hook-context/hook_skip.mdx b/src/content/docs/es/docs/hooks/functions/hook-context/hook_skip.mdx new file mode 100644 index 0000000..cef1c11 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/hook-context/hook_skip.mdx @@ -0,0 +1,97 @@ +--- +title: hook_skip +description: Omitir un hook que aparece más adelante en la cadena de hooks de la cuenta +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca en la cadena de hooks un hook identificado por el hash en `read_ptr` +* Lo marca como deshabilitado para esta ejecución de la cadena + + + +* Omite la ejecución de un hook basándose en el hash y el flag proporcionados. +* Devuelve un código de estado indicando el resultado de la operación. + + + +### Definición + + + +```c +int64_t hook_skip ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t flags +); +```` + + + +```javascript id="hook-skip-js" +function hook_skip( + hash: ByteArray | HexString, + flag: number + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="hook-skip-c" +uint8_t phash[] = { 0x19U, 0xFEU, 0x69U, 0xF1U, 0x53U, 0x66U, 0x4EU, 0x8CU, + 0x97U, 0xF4U, 0x4CU, 0x5CU, 0x3CU, 0x65U, 0x63U, 0x79U, + 0xC2U, 0xD0U, 0x26U, 0xE7U, 0x90U, 0xEFU, 0x38U, 0xF7U, + 0xEDU, 0x73U, 0xE9U, 0xCEU, 0x9CU, 0x9DU, 0xBFU, 0x03U }; +int64_t result = + hook_skip(phash, 32, 0); +``` + + +```javascript id="hook-skip-js-ex" +const phash = [ 0x19, 0xFE, 0x69, 0xF1, 0x53, 0x66, 0x4E, 0x8C, + 0x97, 0xF4, 0x4C, 0x5C, 0x3C, 0x65, 0x63, 0x79, + 0xC2, 0xD0, 0x26, 0xE7, 0x90, 0xEF, 0x38, 0xF7, + 0xED, 0x73, 0xE9, 0xCE, 0x9C, 0x9D, 0xBF, 0x03 ] +const result = hook_skip(phash, 0); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | -------- | ---------------------------------------------------------------------------------------------------- | +| read_ptr | uint32_t | Puntero a un buffer que contiene el hash del hook | +| read_len | uint32_t | Longitud del hash (siempre 32) | +| flags | uint32_t |

Si es 0:
- añade el hash a la lista de hooks omitidos

Si es 1:
- elimina el hash de la lista de hooks omitidos

| +
+ + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | --------------------------------------------- | +| hash | ByteArray o HexString | Hash del hook a omitir | +| flag | number | Indicador de la acción (añadir o eliminar) | + +
+ +### Código de retorno + + + +
TipoDescripción
int64_tSi tiene éxito: 1

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de memoria

DOESNT_EXIST
- el parámetro no existe o es nulo

INVALID_ARGUMENT
- el hash no tiene 32 bytes
+
+ + +
TipoDescripción
number o ErrorCodeDevuelve un código de estado indicando el resultado de la operación.
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/ledger/fee_base.mdx b/src/content/docs/es/docs/hooks/functions/ledger/fee_base.mdx new file mode 100644 index 0000000..39463f7 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/ledger/fee_base.mdx @@ -0,0 +1,67 @@ +--- +title: fee_base +description: Obtener la tarifa base del ledger actual +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Comisiones de Hooks + +### Comportamiento + +* Devuelve la tarifa base del ledger actual + +### Definición + + + +```c +int64_t fee_base(); +```` + + + + +```javascript id="fee-base-js" +function fee_base(): number +``` + + + +### Ejemplo + + + +```c id="fee-base-c" +int64_t fee = + fee_base(); +``` + + + +```javascript id="fee-base-js-ex" +const fee = fee_base() +``` + + + +### Parámetros + +Esta API no recibe parámetros. + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------- | +| int64_t | La tarifa base del ledger actual | + + + +| Tipo | Descripción | +| ------ | ---------------------------------------- | +| number | La tarifa base del ledger actual | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/ledger/ledger_keylet.mdx b/src/content/docs/es/docs/hooks/functions/ledger/ledger_keylet.mdx new file mode 100644 index 0000000..955079d --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/ledger/ledger_keylet.mdx @@ -0,0 +1,106 @@ +--- +title: ledger_keylet +description: Buscar un keylet dentro de un rango especificado en el ledger actual +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee un Keylet de 34 bytes desde `lread_ptr` +* Lee un Keylet de 34 bytes desde `hread_ptr` +* Busca en el ledger el primer (más bajo) Keylet de este tipo dentro de ese rango +* Si se encuentra alguno, lo escribe en `write_ptr` + + + +* Esta función busca en el ledger el primer (más bajo) Keylet de este tipo dentro del rango indicado. +* Devuelve el número de bytes escritos (34 bytes) en caso de éxito, o un código de error si ocurre un fallo. + + + +### Definición + +C + + + +```c +int64_t ledger_keylet ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t lread_ptr, + uint32_t lread_len, + uint32_t hread_ptr, + uint32_t hread_len +); +```` + + + + +```javascript id="ledger-keylet-js" +function ledger_keylet( + low: ByteArray | HexString, + high: ByteArray | HexString + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + +C + + + +```c id="ledger-keylet-c" +//TODO +``` + + + +```javascript id="ledger-keylet-js-ex" +ledger_keylet(low, high) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ------------------------------------------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer donde almacenar el Keylet serializado | +| write_len | uint32_t | Longitud del buffer de salida (debe ser 34 bytes) | +| lread_ptr | uint32_t | Puntero al Keylet serializado de 34 bytes que representa el límite inferior del rango | +| lread_len | uint32_t | Siempre 34 bytes | +| hread_ptr | uint32_t | Puntero al Keylet serializado de 34 bytes que representa el límite superior del rango | +| hread_len | uint32_t | Siempre 34 bytes | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------- | +| low | ByteArray \| HexString | Keylet serializado de 34 bytes que representa el límite inferior del rango | +| high | ByteArray \| HexString | Keylet serializado de 34 bytes que representa el límite superior del rango | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos (34 bytes) en caso de éxito.

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL / TOO_BIG
- los tamaños no son 34 bytes

INVALID_ARGUMENT
- uno o más Keylets no son válidos

DOES_NOT_MATCH
- los Keylets no son del mismo tipo

DOESNT_EXIST
- no se encontró ningún Keylet en el rango

| +
+ + +| Tipo | Descripción | +| ---------------------- | ----------------------------------------------------------------------------------------------- | +| ErrorCode \| ByteArray | Devuelve los 34 bytes del Keylet o un código de error si falla | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/ledger/ledger_last_hash.mdx b/src/content/docs/es/docs/hooks/functions/ledger/ledger_last_hash.mdx new file mode 100644 index 0000000..2e45ee0 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/ledger/ledger_last_hash.mdx @@ -0,0 +1,86 @@ +--- +title: ledger_last_hash +description: Obtener el SHA512H de 32 bytes (con sesgo de namespace) del último ledger cerrado +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Escribe el hash de 32 bytes en `write_ptr` + + + +* Obtiene el hash del último ledger. + + + +### Definición + + + +```c +int64_t ledger_last_hash ( + uint32_t write_ptr, + uint32_t write_len +); +```` + + + + +```javascript +function ledger_last_hash(): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c +uint8_t hash[32]; +int64_t bytes_written = + ledger_last_hash(hash, 32); +``` + + + +```javascript +const hash = ledger_last_hash() +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | --------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida (mínimo 32 bytes) | +| write_len | uint32_t | Longitud del buffer de salida | + + + + + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

| +
+ + +| Tipo | Descripción | +| ------ | ---------------------------------------------------------------------------------------------------- | +| number | Devuelve un código de error si ocurre un error, o un array que representa el hash del último ledger | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/ledger/ledger_last_time.mdx b/src/content/docs/es/docs/hooks/functions/ledger/ledger_last_time.mdx new file mode 100644 index 0000000..ccfb788 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/ledger/ledger_last_time.mdx @@ -0,0 +1,69 @@ +--- +title: ledger_last_time +description: Obtener la marca de tiempo del último ledger cerrado +--- +import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Devuelve la marca de tiempo de Xahau del último ledger cerrado. + + + +### Definición + + + +```c +int64_t ledger_last_time(); +```` + + + + +```javascript +function ledger_last_time(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t ts = + ledger_last_time(); +``` + + + +```javascript +const ts = ledger_last_time() +``` + + + +### Parámetros + +Esta API no recibe parámetros. + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------- | +| int64_t | La marca de tiempo XRPL del último ledger cerrado | + + + +| Tipo | Descripción | +| ------ | ---------------------------------------------------------------------------------------------------- | +| number | Devuelve un código de error si ocurre un fallo, o un número que representa la marca de tiempo del último ledger | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/ledger/ledger_nonce.mdx b/src/content/docs/es/docs/hooks/functions/ledger/ledger_nonce.mdx new file mode 100644 index 0000000..f8860b3 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/ledger/ledger_nonce.mdx @@ -0,0 +1,88 @@ +--- +title: ledger_nonce +description: Generar un nonce de 32 bytes para usar en una transacción emitida +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Escribe un valor aleatorio de 32 bytes en `write_ptr` + + + +* Obtiene el nonce del ledger actual. + + + +### Definición + +C + + + +```c +int64_t ledger_nonce ( + uint32_t write_ptr, + uint32_t write_len +); +```` + + + + +```javascript id="ledger-nonce-js" +function ledger_nonce(): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="ledger-nonce-c" +uint8_t n[32]; +int64_t bytes_written = + ledger_nonce(n, 32); +``` + + + +```javascript id="ledger-nonce-js-ex" +const nonce = ledger_nonce() +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | --------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida (mínimo 32 bytes) | +| write_len | uint32_t | Longitud del buffer de salida | + + + + + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

| +
+ + +| Tipo | Descripción | +| ---------------------- | ---------------------------------------------------------------------------------------------------- | +| ErrorCode \| ByteArray | Devuelve un código de error o un array que representa el nonce del ledger actual | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/ledger/ledger_seq.mdx b/src/content/docs/es/docs/hooks/functions/ledger/ledger_seq.mdx new file mode 100644 index 0000000..79d05df --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/ledger/ledger_seq.mdx @@ -0,0 +1,65 @@ +--- +title: ledger_seq +description: Obtener el número de secuencia del ledger actual +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Devuelve el número de secuencia del ledger actual + +### Definición + +C + + + +```c +int64_t ledger_seq(); +```` + + + + +```javascript id="ledger-seq-js" +function ledger_seq(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="ledger-seq-c" +int64_t seq = + ledger_seq(); +``` + + + +```javascript id="ledger-seq-js-ex" +const seq = ledger_seq() +``` + + + +### Parámetros + +Esta API no recibe parámetros. + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------- | +| int64_t | El número de secuencia del ledger actual | + + + +| Tipo | Descripción | +| ------ | ------------------------------------------- | +| number | El número de secuencia del ledger actual | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/meta_slot.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/meta_slot.mdx new file mode 100644 index 0000000..df37586 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/meta_slot.mdx @@ -0,0 +1,77 @@ +--- +title: meta_slot +description: Cargar los metadatos de la transacción origen en un slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Si el Hook se está ejecutando de forma [débil (Weak Execution)](/docs/hooks/concepts/weak-and-strong), coloca los metadatos de la transacción origen en el slot especificado o en uno nuevo si no se especifica ninguno + +### Definición + + + +```c +int64_t meta_slot ( + uint32_t slot_no +); +```` + + + + +```javascript id="meta-slot-js" +function meta_slot(slotno: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="meta-slot-c" +int64_t meta_slot_no = + meta_slot(0); +``` + + + +```javascript id="meta-slot-js-ex" +const meta_slot_no = meta_slot(0) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | --------------------------------------------------------------------------- | +| slot_no | uint32_t | Número de slot donde colocar los datos, o 0 para usar el siguiente disponible | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ------------------------------------------- | +| slotno | number | El número de slot del que obtener metadatos | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El slot en el que se colocó la transacción origen

INVALID_ARGUMENT
- el número de slot especificado excede el máximo permitido

NO_FREE_SLOTS
- no hay slots disponibles para almacenar la transacción

PREREQUISITE_NOT_MET
- el hook se está ejecutando de forma fuerte (Strong Execution) y no hay metadatos disponibles

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------------- | +| ErrorCode \| number | Devuelve un código de error o los metadatos del slot | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_burden.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_burden.mdx new file mode 100644 index 0000000..ce93fbe --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_burden.mdx @@ -0,0 +1,74 @@ +--- +title: otxn_burden +description: Obtener la carga (burden) de la transacción origen +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Devuelve la carga de la transacción origen o `1` si no existe el campo burden. + + + +* Obtiene la carga de la transacción origen. +* Devuelve la carga como un número, o un ErrorCode si falla. + + + +### Definición + + + +```c +int64_t otxn_burden ( + void +); +```` + + + + +```javascript id="otxn-burden-js" +function otxn_burden(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="otxn-burden-c" +int64_t burden = + otxn_burden(); +``` + + + +```javascript id="otxn-burden-js-ex" +const burden = otxn_burden() +``` + + + +### Parámetros + +Ninguno + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------- | +| int64_t | La carga de la transacción origen, o `1` si no existe el campo burden en la transacción origen | + + + +| Tipo | Descripción | +| ------------------- | ------------------------------------------------------------------------ | +| number o ErrorCode | Devuelve la carga como número o un ErrorCode si falla la obtención | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_field.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_field.mdx new file mode 100644 index 0000000..5ce5cae --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_field.mdx @@ -0,0 +1,98 @@ +--- +title: otxn_field +description: Serializar y devolver un campo de la transacción origen +--- +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca el campo `sf` especificado en la transacción origen +* Escribe la versión serializada del campo en el buffer de salida + + + +* Obtiene el valor de un campo específico en la transacción origen. +* Devuelve el valor del campo como un array de números, o un ErrorCode si falla. + + + +### Definición + + + +```c +int64_t otxn_field ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t field_id +); +```` + + + + +```javascript id="otxn-field-js" +function otxn_field(field_id: number): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="otxn-field-c" +int64_t account_field_len = + otxn_field(account_field, 20, sfAccount); +``` + + + +```javascript id="otxn-field-js-ex" +const account_field = otxn_field(sfAccount) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida | +| write_len | uint32_t | Longitud del buffer de salida | +| field_id | uint32_t |

Código sf del campo que se desea obtener.

Para calcularlo manualmente: toma el type serializado y desplázalo a los 16 bits más altos de un uint32_t, luego coloca el field en los 16 bits más bajos.

Ejemplo:
sfEmitNoncetype=5, field=11 → 0x050BU

| + + +
+ + +| Nombre | Tipo | Descripción | +| -------- | ------ | ------------------------------------------------------------------------------------------------------------ | +| field_id | number | Devuelve el valor del campo especificado como un array de números, o un error si falla la búsqueda | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL
- el buffer de salida es demasiado pequeño

INVALID_FIELD
- el field_id no es válido

DOESNT_EXIST
- el campo no existe en la transacción origen

| +
+ + +| Tipo | Descripción | +| ---------------------- | ------------------------------------------------------------------------------------------------------------ | +| ByteArray o ErrorCode | Devuelve el valor del campo como un array de números, o un ErrorCode si falla la búsqueda | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_generation.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_generation.mdx new file mode 100644 index 0000000..cbd240d --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_generation.mdx @@ -0,0 +1,74 @@ +--- +title: otxn_generation +description: Obtener la generación de la transacción origen +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Devuelve la generación de la transacción origen o `1` si no existe el campo de generación. + + + +* Obtiene el número de generación de la transacción origen. +* Devuelve el número de generación como un número. + + + +### Definición + + + +```c +int64_t otxn_generation ( + void +); +```` + + + + +```javascript id="otxn-generation-js" +function otxn_generation(): number +``` + + + +### Ejemplo + + + +```c id="otxn-generation-c" +int64_t generation = + otxn_generation(); +``` + + + +```javascript id="otxn-generation-js-ex" +const generation = otxn_generation() +``` + + + +### Parámetros + +Ninguno + +### Código de retorno + + + +| Tipo | Descripción | +| ------- | --------------------------------------------------------- | +| number | Devuelve el número de generación como un número | + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------- | +| int64_t | La generación de la transacción origen, o `1` si no existe el campo de generación en la transacción origen | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_id.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_id.mdx new file mode 100644 index 0000000..f0e710e --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_id.mdx @@ -0,0 +1,92 @@ +--- +title: otxn_id +description: Obtener el hash canónico de la transacción origen +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Escribe el hash canónico de la transacción origen en el buffer de salida. +* Si `flags = 1` y la transacción es de tipo EMIT_FAILURE, escribe el hash canónico de la transacción origen que provocó la emisión. + + + +* Obtiene el hash canónico de la transacción origen. +* Devuelve el hash como un array de números, o un ErrorCode si falla. + + + +### Definición + + + +```c +int64_t otxn_id ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t flags +); +```` + + + + +```javascript id="otxn-id-js" +function otxn_id(flag: number): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="otxn-id-c" +uint8_t txn_id[32]; +int64_t bytes_written = + otxn_id(txn_id, 32, 0); +``` + + + +```javascript id="otxn-id-js-ex" +const tx_id = otxn_id(0) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer donde almacenar el hash | +| write_len | uint32_t | Longitud del buffer de salida (mínimo 32 bytes) | +| flags | uint32_t |

Si 0:
Escribe el hash canónico de la transacción origen.

Si 1 y la transacción es EMIT_FAILURE:
Escribe el hash canónico de la transacción emisora.

| +
+ + +| Nombre | Tipo | Descripción | +| ------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| flags | number |

Si 0:
Devuelve el hash canónico de la transacción origen.

Si 1 y la transacción es EMIT_FAILURE:
Devuelve el hash canónico de la transacción emisora.

| +
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL
- buffer insuficiente

| +
+ + +| Tipo | Descripción | +| ---------------------- | ------------------------------------------------------------------------------------------------ | +| ErrorCode \| ByteArray | Devuelve el hash de la transacción como array de números, o un ErrorCode si falla | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_json.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_json.mdx new file mode 100644 index 0000000..9ae3691 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_json.mdx @@ -0,0 +1,49 @@ +--- +title: otxn_json +description: Devolver la transacción origen en formato JSON +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Devuelve la transacción origen en formato JSON. +* Retorna la transacción origen como un objeto JSON o Transaction, o un ErrorCode si falla la obtención. + + + +### Definición + + + +```javascript id="otxn-json-js" +function otxn_json(): ErrorCode | Record | Transaction +```` + + + + +### Ejemplo + + + +```javascript id="otxn-json-js-ex" +const tx_json = otxn_json() +``` + + + +### Parámetros + +Sin parámetros + +### Código de retorno + + + +| Tipo | Descripción | +| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | +| ErrorCode \| Record\ \| Transaction | Devuelve la transacción origen como un objeto JSON o Transaction, o un ErrorCode si falla | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_param.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_param.mdx new file mode 100644 index 0000000..28f00b1 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_param.mdx @@ -0,0 +1,96 @@ +--- +title: otxn_param +description: Obtener el valor de un parámetro nombrado de una transacción Invoke +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca el valor de un parámetro nombrado especificado en `read_ptr` dentro de la transacción origen. +* Escribe el valor del parámetro en `write_ptr` + + + +* Busca el valor de un parámetro nombrado en la transacción origen. +* Devuelve el valor del parámetro especificado, o un ErrorCode si falla la búsqueda. + + + +### Definición + + + +```c +int64_t otxn_param ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript id="otxn-param-js" +function otxn_param(name: ByteArray | HexString): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="otxn-param-c" +uint8_t pname[] = {0xCAU, 0xFEU}; +uint8_t pvalue[32]; +int64_t value_len = + otxn_param(pvalue, 32, pname, 2); +``` + + + +```javascript id="otxn-param-js-ex" +const pname = [0xCA, 0xFE] +const pvalue = otxn_param(pname) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | --------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer adecuado para almacenar la salida (mínimo 32 bytes) | +| write_len | uint32_t | Longitud del buffer de salida | +| read_ptr | uint32_t | Puntero a un buffer que contiene el nombre del parámetro | +| read_len | uint32_t | Longitud del nombre del parámetro | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | --------------------------------------------------------------------------- | +| name | ByteArray \| HexString | Nombre del parámetro a buscar, como ByteArray o cadena | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

DOESNT_EXIST
- el parámetro no existe o es nulo

TOO_SMALL
- el nombre es nulo

TOO_BIG
- el nombre supera 32 bytes

| +
+ + +| Tipo | Descripción | +| ---------------------- | -------------------------------------------------------------------------------------------- | +| ErrorCode \| ByteArray | Devuelve el valor del parámetro o un ErrorCode si falla | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_slot.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_slot.mdx new file mode 100644 index 0000000..72fb29b --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_slot.mdx @@ -0,0 +1,77 @@ +--- +title: otxn_slot +description: Cargar la transacción origen en un slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Coloca la transacción origen en el slot especificado o en uno nuevo si no se indica ninguno + +### Definición + + + +```c +int64_t otxn_slot ( + uint32_t slot_no +); +```` + + + + +```javascript id="otxn-slot-js" +function otxn_slot(slotno: number): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="otxn-slot-c" +int64_t otxn_slot_no = + otxn_slot(0); +``` + + + +```javascript id="otxn-slot-js-ex" +const otxn_slot_no = otxn_slot(0) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | --------------------------------------------------------------------------- | +| slot_no | uint32_t | Número de slot donde colocar la transacción, o 0 para usar el siguiente disponible | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ---------------------------------------- | +| slotno | number | Número de slot a consultar | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

El slot en el que se colocó la transacción origen

INVALID_ARGUMENT
- el número de slot excede el máximo permitido

NO_FREE_SLOTS
- no hay slots disponibles para almacenar la transacción origen

| +
+ + +| Tipo | Descripción | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| ErrorCode \| ByteArray | Devuelve el valor del slot como un array de números, o un ErrorCode si falla la consulta | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_type.mdx b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_type.mdx new file mode 100644 index 0000000..c505359 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/originating-transaction/otxn_type.mdx @@ -0,0 +1,105 @@ +--- +title: otxn_type +description: Obtener el tipo de transacción de la transacción origen +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Devuelve el tipo de transacción de la transacción origen + +### Definición + + + +```c +int64_t otxn_type ( + void +); +```` + + + + +```javascript id="otxn-type-js" +function otxn_type(): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="otxn-type-c" +int64_t tt = + otxn_type(); +``` + + + +```javascript id="otxn-type-js-ex" +const tt = txn_type() +``` + + + +### Parámetros + +Ninguno + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t | El tipo de transacción de la transacción origen. Consulta la tabla inferior para los valores conocidos | + + + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------------------------------- | +| ErrorCode \| number | Devuelve el tipo de transacción como número o un ErrorCode si falla | + + + +### Tipos de transacción conocidos + +| Nombre | Valor | +| ---------------------------- | ----- | +| ttPAYMENT | 0 | +| ttESCROW_CREATE | 1 | +| ttESCROW_FINISH | 2 | +| ttACCOUNT_SET | 3 | +| ttESCROW_CANCEL | 4 | +| ttREGULAR_KEY_SET | 5 | +| ttOFFER_CREATE | 7 | +| ttOFFER_CANCEL | 8 | +| ttTICKET_CREATE | 10 | +| ttTICKET_CANCEL | 11 | +| ttSIGNER_LIST_SET | 12 | +| ttPAYCHAN_CREATE | 13 | +| ttPAYCHAN_FUND | 14 | +| ttPAYCHAN_CLAIM | 15 | +| ttCHECK_CREATE | 16 | +| ttCHECK_CASH | 17 | +| ttCHECK_CANCEL | 18 | +| ttDEPOSIT_PREAUTH | 19 | +| ttTRUST_SET | 20 | +| ttACCOUNT_DELETE | 21 | +| ttHOOK_SET | 22 | +| ttURITOKEN_MINT | 45 | +| ttURITOKEN_BURN | 46 | +| ttURITOKEN_BUY | 47 | +| ttURITOKEN_CREATE_SELL_OFFER | 48 | +| ttURITOKEN_CANCEL_SELL_OFFER | 49 | +| ttGENESIS_MINT | 96 | +| ttIMPORT | 97 | +| ttCLAIM_REWARD | 98 | +| ttINVOKE | 99 | +| ttAMENDMENT | 100 | +| ttFEE | 101 | +| ttUNL_MODIFY | 102 | +| ttEMIT_FAILURE | 103 | +| ttUNL_REPORT | 104 | \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/overview/hook-api-conventions.mdx b/src/content/docs/es/docs/hooks/functions/overview/hook-api-conventions.mdx new file mode 100644 index 0000000..5280d68 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/overview/hook-api-conventions.mdx @@ -0,0 +1,67 @@ +--- +title: Convenciones de la API de Hooks +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Convenciones de nomenclatura + +Todas las APIs de Hooks siguen una convención de nombres estándar: + +| | | | | +| --------- | --------------- | ------------ | --------------- | +| namespace | \[ _ sustantivo #1 ] | \[ _ verbo ] | \[ _ sustantivo #2 ] | + +Esto puede parecer confuso al principio, pero en realidad es bastante simple: + +* Si falta el primer sustantivo, entonces implícitamente es el mismo que el namespace +* Si falta el verbo, entonces implícitamente es `get` + +Por lo tanto: + +* `state()` significa: obtener el estado de un hook. +* `state_set()` significa: establecer el estado de un hook. +* `state_foreign()` significa: obtener el estado de un hook externo. + +### Modelo de memoria + +Cada Hook se ejecuta como un único frame de pila (stack frame). Toda la memoria de trabajo debe existir dentro de este frame. No hay heap ni memoria dinámica. + +Cuando los Hooks se comunican con `xahaud`, solo pueden pasar valores _enteros_. Normalmente estos enteros son punteros dentro de la memoria del Hook. Dado que el Hook se ejecuta dentro de xahaud, estos punteros pueden ser resueltos por xahaud y utilizados para escribir o leer datos según sea necesario para ejecutar la función de la API. + +### Funciones permitidas + +Solo se permiten dos funciones dentro de un Hook: `hook()` y `cbak()`. Puedes leer más sobre esto [aquí](/docs/hooks/concepts/compiling-hooks) + +### Parámetros + + + +Todos los parámetros pasados a una API de Hook deben ser uno de los siguientes tipos: `uint32_t, int32_t, uint64_t, int64_t`. Normalmente son punteros y longitudes de buffers dentro del stack frame del Hook. En algunos casos pueden ser [números en coma flotante codificados como enteros (XFL)](/docs/hooks/concepts/floating-point-numbers-xfl) u otros datos. + +Los parámetros de una API de Hook siempre siguen este orden: + +1. Puntero de escritura _si existe_ +2. Longitud de escritura _si existe_ +3. Puntero de lectura _si existe_ +4. Longitud de lectura _si existe_ +5. Campos específicos / adicionales _si existen_ + +Algunas APIs solo escriben, otras solo leen, y algunas no hacen ninguna de las dos y devuelven únicamente un valor mediante el código de retorno. + + + +Todos los parámetros pasados a una API de Hook deben ser uno de los siguientes tipos: `string, number[], bigint(xfl), object(json)`. Normalmente representan buffers o datos dentro del contexto del Hook. En algunos casos pueden ser [números en coma flotante codificados como enteros (XFL)](/docs/hooks/concepts/floating-point-numbers-xfl) u otros datos. + +Los parámetros de una API de Hook siempre siguen este orden: + +1. Variable de escritura _si existe_ +2. Variable de lectura _si existe_ +3. Campos específicos / adicionales _si existen_ + +Algunas APIs solo escriben, otras solo leen, y algunas no hacen ninguna de las dos y devuelven únicamente un valor mediante el código de retorno. + + + +### Códigos de retorno + +Todas las APIs de Hooks devuelven un _entero con signo_. Puedes leer más sobre los códigos de retorno aquí: [Códigos de retorno](/docs/hooks/functions/overview/return-codes) \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/overview/return-codes.mdx b/src/content/docs/es/docs/hooks/functions/overview/return-codes.mdx new file mode 100644 index 0000000..092a49b --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/overview/return-codes.mdx @@ -0,0 +1,66 @@ +--- +title: Códigos de retorno +--- + +### Diseño de códigos de retorno + +WebAssembly permite excepciones (traps), sin embargo esta característica no se utiliza en Hooks. En su lugar, solo existe una forma de devolver valores desde cualquier API de Hook (puedes pensar que todas las APIs son `noexcept`). + +Para facilitar un manejo eficiente de errores: + +1. Todas las funciones de la API de Hooks devuelven un entero _con signo_. +2. Todos los códigos negativos representan un error. +3. Todos los códigos `0` o mayores representan una salida válida de la función, normalmente (aunque no siempre) el número de bytes leídos o escritos. + +### Códigos de error + +Los códigos de error son globales para todas las APIs de Hooks y se muestran en la siguiente tabla: + +| Nombre | Valor | Descripción | +|--------------------------------|--------|-------------| +| SUCCESS | >= 0 | Los valores no negativos indican éxito y normalmente representan bytes escritos o eventos realizados | +| OUT_OF_BOUNDS | -1 | Un puntero o longitud apunta fuera de la memoria permitida del Hook | +| INTERNAL_ERROR | -2 | Error interno, no relacionado con entradas. Debe reportarse | +| TOO_BIG | -3 | Valor o parámetro demasiado grande | +| TOO_SMALL | -4 | Buffer de salida demasiado pequeño | +| DOESNT_EXIST | -5 | Elemento no encontrado | +| NO_FREE_SLOTS | -6 | No hay slots disponibles (máximo 255) | +| INVALID_ARGUMENT | -7 | Parámetro inválido | +| ALREADY_SET | -8 | Parámetro ya establecido previamente | +| PREREQUISITE_NOT_MET | -9 | Falta requisito previo para llamar a la API | +| FEE_TOO_LARGE | -10 | Fee calculado excesivamente grande | +| EMISSION_FAILURE | -11 | Fallo al ejecutar `emit()` | +| TOO_MANY_NONCES | -12 | Más de 256 llamadas a `nonce()` | +| TOO_MANY_EMITTED_TXN | -13 | Se emitieron más transacciones de las declaradas | +| NOT_IMPLEMENTED | -14 | API no implementada completamente | +| INVALID_ACCOUNT | -15 | Account ID inválido | +| GUARD_VIOLATION | -16 | Violación del límite de iteraciones en bucle | +| INVALID_FIELD | -17 | Campo serializado inválido | +| PARSE_ERROR | -18 | Error al parsear datos | +| RC_ROLLBACK | -19 | Evento interno de rollback | +| RC_ACCEPT | -20 | Evento interno de aceptación | +| NO_SUCH_KEYLET | -21 | Keylet no encontrado o inválido | +| NOT_AN_ARRAY | -22 | Objeto no es un array | +| NOT_AN_OBJECT | -23 | Objeto no es un objeto válido | +| INVALID_FLOAT | -10024 | Número flotante inválido | +| DIVISION_BY_ZERO | -25 | División por cero | +| MANITSSA_OVERSIZED | -26 | Mantisa demasiado grande | +| MANTISSA_UNDERSIZED | -27 | Mantisa demasiado pequeña | +| EXPONENT_OVERSIZED | -28 | Exponente demasiado grande | +| EXPONENT_UNDERSIZED | -29 | Exponente demasiado pequeño | +| OVERFLOW | -30 | Overflow en operación XFL | +| NOT_IOU_AMOUNT | -31 | Se esperaba IOU pero era XRP | +| NOT_AN_AMOUNT | -32 | Objeto no es un STAmount | +| CANT_RETURN_NEGATIVE | -33 | No se puede devolver valor negativo | +| NOT_AUTHORIZED | -34 | No autorizado para modificar estado | +| PREVIOUS_FAILURE_PREVENTS_RETRY| -35 | Fallo previo impide reintento | +| TOO_MANY_PARAMS | -36 | Demasiados parámetros en hook | +| INVALID_TXN | -37 | Transacción inválida | +| RESERVE_INSUFFICIENT | -38 | Reserva insuficiente | +| COMPLEX_NOT_SUPPORTED | -39 | Resultado complejo no soportado | +| DOES_NOT_MATCH | -40 | Tipos incompatibles | +| INVALID_KEY | -41 | Clave pública inválida | +| NOT_A_STRING | -42 | No es una cadena válida | +| MEM_OVERLAP | -43 | Buffers solapados | +| TOO_MANY_STATE_MODIFICATIONS | -44 | Demasiadas modificaciones de estado | +| TOO_MANY_NAMESPACES | -45 | Demasiados namespaces | \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_emplace.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_emplace.mdx new file mode 100644 index 0000000..4aefe9c --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_emplace.mdx @@ -0,0 +1,155 @@ +--- +title: sto_emplace +description: Insertar un campo en un STObject existente en su posición canónica +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Parsea un STObject `S` (objeto origen) apuntado por `sread_ptr` +* Parsea un STObject `F` (campo a insertar/incrustar) apuntado por `fread_ptr` +* Escribe un nuevo STObject en `write_ptr` que inserta `F` dentro de `S` en la posición canónica `field_id` + + + + + +* Recibe el objeto STO mediante el parámetro `sto` +* Recibe los bytes del campo a añadir mediante `field_bytes` +* Recibe el identificador del campo mediante `field_id` +* Devuelve el objeto STO actualizado en formato binario de datos del ledger, o un error si falla + + + +### Definición + +C + + + +```c +int64_t sto_emplace ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t sread_ptr, + uint32_t sread_len, + uint32_t fread_ptr, + uint32_t fread_len, + uint32_t field_id +); +```` + + + + +```javascript id="sto-emplace-js" +function sto_emplace( + sto: ByteArray | HexString, + field_bytes: ByteArray | HexString, + field_id: number + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="sto-emplace-c" +uint8_t tx_out[1024]; + +int64_t tx_len = +sto_emplace(tx_out, sizeof(tx_out), +tx_in, tx_len, +sequence_field, 5, sfSequence); + +if (tx_len <= 0) +rollback("Emplacing failed.", 17, 1); + +```` + + + +```javascript id="sto-emplace-js-ex" +const tx_out = sto_emplace(tx_in, sequence_field, sfSequence) +if (typeof tx_out === 'number') + rollback("Emplacing failed.", 1) +```` + + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| write_ptr | uint32_t | Buffer donde se escribirá el STObject modificado | +| write_len | uint32_t | Longitud del buffer de salida | +| sread_ptr | uint32_t | Buffer que contiene el STObject origen | +| sread_len | uint32_t | Longitud del objeto origen | +| fread_ptr | uint32_t | Buffer que contiene el campo a insertar | +| fread_len | uint32_t | Longitud del campo a insertar | +| field_id | uint32_t | Código `sf` donde insertar el campo. Si ya existe, se sobrescribe; si no, se inserta | + + + +| Nombre | Tipo | Descripción | +| ----------- | ---------------------- | --------------------------------------------------------------------------- | +| sto | ByteArray \| HexString | Objeto STO (datos binarios del ledger) donde se insertará el campo | +| field_bytes | ByteArray \| HexString | Bytes del campo a añadir | +| field_id | number | Identificador del campo a añadir | + + + +### Código de retorno + + + + + + + + + + + + + +
TipoDescripción
int64_t +Número de bytes escritos en write_ptr

+Si es negativo, error:
+OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

+TOO_SMALL
- buffer insuficiente (debe cubrir objeto + campo)

+TOO_BIG
- el campo es demasiado grande

+PARSE_ERROR
- el STObject es inválido o mal formado +
+
+ + + + + + + + + + + + +
TipoDescripción
ErrorCode \| ByteArray +Devuelve el objeto STO actualizado en formato binario, o un código de error si falla +
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_erase.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_erase.mdx new file mode 100644 index 0000000..6928cce --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_erase.mdx @@ -0,0 +1,121 @@ +--- +title: sto_erase +description: Eliminar un campo de un STObject +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Parsea un STObject apuntado por `read_ptr` +* Escribe un nuevo STObject en `write_ptr` pero sin el `field_id` si estaba presente en el objeto original + + + +* Busca el objeto STO (datos del ledger codificados en binario) del cual se eliminará el campo +* Busca el identificador del campo a eliminar +* Devuelve el objeto STO actualizado en formato binario, o un código de error si falla + + + +### Definición + + + +```c +int64_t sto_erase ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len, + uint32_t field_id +); +```` + + + + + +```javascript +function sto_erase( + sto: ByteArray | HexString, + field_id: number + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c +int64_t result = + sto_erase(tx_out, sizeof(tx_out), + tx_in, tx_len, sfSigners); + +if (tx_len <= 0) +rollback("Erasing failed.", 15, 1); + +```` + + + + + +```javascript +const tx_out = sto_erase(tx_in, sfSigners) + +if (typeof tx_out === 'number') + rollback("Erasing failed.", 1) +```` + + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ------------------------------------------------ | +| write_ptr | uint32_t | Buffer donde se escribirá el STObject modificado | +| write_len | uint32_t | Longitud del buffer de salida | +| read_ptr | uint32_t | Buffer que contiene el STObject origen | +| read_len | uint32_t | Longitud del objeto origen | +| field_id | uint32_t | Código `sf` (posición) del campo a eliminar | + + + +| Nombre | Tipo | Descripción | +| -------- | ---------------------- | --------------------------------------------------------------------------- | +| sto | ByteArray \| HexString | Objeto STO (datos binarios del ledger) del que se eliminará el campo | +| field_id | number | Identificador del campo a eliminar | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos en write_ptr

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL
- el buffer debe ser al menos tan grande como el objeto origen

TOO_BIG
- el campo a eliminar es demasiado grande

PARSE_ERROR
- el STObject es inválido o mal formado

DOESNT_EXIST
- el field_id no existe en el STObject

| +
+ + +| Tipo | Descripción | +| ---------------------- | ----------------------------------------------------------------------------------------------------- | +| ErrorCode \| ByteArray | Objeto STO actualizado en formato binario, o un código de error si la operación falla | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_from_json.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_from_json.mdx new file mode 100644 index 0000000..f38cf45 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_from_json.mdx @@ -0,0 +1,65 @@ +--- +title: sto_from_json +description: Formatear JSON como un objeto STO (datos del ledger codificados en binario). +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Toma un objeto JSON y lo convierte en un formato binario de datos del ledger. +* Devuelve un objeto STO en formato binario de datos del ledger, o un código de error si la conversión falla. + + + +### Definición + + + +```javascript +function sto_from_json( + jsonobj: Record | Transaction + ): ErrorCode | ByteArray +```` + + + + +### Ejemplo + + + +```javascript +const stoBlob = sto_from_json(stoJson) +``` + + + +### Parámetros + + + + +| Nombre | Tipo | Descripción | +| ------- | --------------------------------- | ----------------------------------------------- | +| jsonobj | Record | Transaction | Objeto JSON que se convertirá en un objeto STO. | + + + + +### Código de retorno + + + + +| Tipo | Descripción | +| --------------------- | ----------------------------------------------------------------------------------------------- | +| ErrorCode | ByteArray | Objeto STO en formato binario de datos del ledger, o un código de error si la conversión falla. | + + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_subarray.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_subarray.mdx new file mode 100644 index 0000000..d2b6d5f --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_subarray.mdx @@ -0,0 +1,144 @@ +--- +title: sto_subarray +description: >- + Indexar dentro de un array serializado de xahaud y devolver la ubicación y longitud de un índice +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Parsea un STArray apuntado por `read_ptr` +* Encuentra el índice del array especificado por `array_id` +* Devuelve el desplazamiento en bytes y la longitud del campo serializado dentro del STObject, si se encuentra + + + + + +* Recibe el objeto STO (datos del ledger codificados en binario) del que extraer el subarray +* Encuentra el índice del array especificado por `array_id` +* Devuelve un subarray del objeto STO + + + +### Definición + + + +```c +int64_t sto_subarray ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t array_id +); +```` + + + + +```javascript +function sto_subarray( + sto: ByteArray | HexString, + array_id: number + ): bigint | number +``` + + + +### Ejemplo + + + +```c +#define SUB_OFFSET(x) ((int32_t)(x >> 32)) +#define SUB_LENGTH(x) ((int32_t)(x & 0xFFFFFFFFULL)) + +int64_t memo_lookup = +sto_subarray(memos, memos_len, 0); + +if (memo_lookup < 0) +{ +// sfMemo no fue encontrado en el STObject apuntado por memo_ptr +} +else +{ +// El índice 0 del STArray fue encontrado y su ubicación es la siguiente: +uint8_t* memo_ptr = SUB_OFFSET(memo_lookup) + memos; +uint32_t memo_len = SUB_LENGTH(memo_lookup); +} + +```` + + + + + +```javascript +const SUB_OFFSET = (x) => Number(x >> 32n) +const SUB_LENGTH = (x) => Number(x & 0xFFFFFFFFn) + +const memo_lookup = sto_subarray(memos, 0) + +if (typeof memo_lookup === 'number') +{ + // sfMemo no fue encontrado en el STObject +} +else +{ + // El índice 0 del STArray fue encontrado y su ubicación es la siguiente: + const memo_start = SUB_OFFSET(memo_lookup) + const memo_len = SUB_LENGTH(memo_lookup) + const memo = memos.slice(memo_start, memo_len) +} +```` + + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | -------- | ---------------------------------------------------------------------------- | +| read_ptr | uint32_t | Puntero al buffer que contiene el STArray | +| read_len | uint32_t | Longitud del STArray | +| array_id | uint32_t | Índice del elemento dentro del STArray que se desea obtener. Comienza en 0. | + + + +| Nombre | Tipo | Descripción | +| -------- | ---------------------- | ------------------------------------------------------------------------------- | +| sto | ByteArray \| HexString | Objeto STO (datos binarios del ledger) del que se extraerá el subarray | +| array_id | number | Índice del array a extraer | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Ubicación del campo dentro del buffer especificado:
- Los 32 bits altos son el desplazamiento (offset)
- Los 32 bits bajos son la longitud

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL
- el buffer es demasiado pequeño para contener un STArray válido

DOESNT_EXIST
- el índice buscado no existe

PARSE_ERROR
- el STArray es inválido o mal formado

| +
+ + +| Tipo | Descripción | +| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bigint / ErrorCode |

Ubicación del campo dentro del buffer:
- 32 bits altos = offset
- 32 bits bajos = longitud

o un código de error si la extracción falla

| +
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_subfield.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_subfield.mdx new file mode 100644 index 0000000..35a7b13 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_subfield.mdx @@ -0,0 +1,139 @@ +--- +title: sto_subfield +description: >- + Indexar dentro de un objeto serializado de xahaud y devolver la ubicación y longitud de un subcampo +--- +import { Tabs, TabItem, LinkButton, Aside } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Parsea un STObject apuntado por `read_ptr` +* Encuentra el campo especificado por `field_id` +* Si el campo se encuentra, y: +* + 1. Es un array, devuelve el inicio y la longitud del array incluyendo los bytes de cabecera y cierre, o +* + 2. **No** es un array, devuelve el inicio y la longitud del PAYLOAD del campo (excluyendo los bytes de cabecera) + + + + + +* Parsea un STObject en la variable `sto` +* Encuentra el campo especificado por `field_id` + + + +### Definición + + + +```c +int64_t sto_subfield ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t field_id +); +```` + + + + +```javascript +function sto_subfield( + sto: ByteArray | HexString, + field_id: number + ): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c +#define SUB_OFFSET(x) ((int32_t)(x >> 32)) +#define SUB_LENGTH(x) ((int32_t)(x & 0xFFFFFFFFULL)) +int64_t memos_lookup = + sto_subfield(txn_ptr, txn_len, sfMemos); +if (memos_lookup < 0) +{ + // sfMemos no fue encontrado en el STObject apuntado por memo_ptr +} +else +{ + // sfMemos fue encontrado y su ubicación es la siguiente: + uint8_t* memos_ptr = SUB_OFFSET(memos_lookup) + memos_ptr; + int64_t memos_len = SUB_LENGTH(memos_lookup); +} +``` + + + + + +```javascript +const SUB_OFFSET = (x) => Number(x >> 32n) +const SUB_LENGTH = (x) => Number(x & 0xFFFFFFFFn) +const memos_lookup = sto_subfield(txn, sfMemos); +if (typeof memos_lookup === 'number') +{ + // sfMemos no fue encontrado en el STObject +} +else +{ + // sfMemos fue encontrado y su ubicación es la siguiente: + const memo_start = SUB_OFFSET(memos_lookup) + const memo_len = SUB_LENGTH(memos_lookup) + const memo = txn.slice(memo_start, memo_len) +} +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| read_ptr | uint32_t | Puntero al buffer que contiene el STObject | +| read_len | uint32_t | Longitud del STObject | +| field_id | uint32_t |

Código sf del campo que se desea buscar.

Para calcularlo manualmente, toma el type serializado y desplázalo a los 16 bits más altos de un uint32_t, luego toma el field y colócalo en los 16 bits más bajos.

Ejemplo:
sfEmitNonce tiene type 5 y field 11, por lo que su valor es 0x050BU

| +
+ + +| Nombre | Tipo | Descripción | +| -------- | ---------------------- | ------------------------------------------------------------------------------- | +| sto | ByteArray or HexString | Objeto STO (datos del ledger codificados en binario) del que extraer el subcampo | +| field_id | number | Identificador del campo a extraer | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Ubicación del campo dentro del buffer especificado:
- Los 32 bits altos son el desplazamiento (offset)
- Los 32 bits bajos son la longitud

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL
- el buffer es demasiado pequeño para contener un STObject válido

DOESNT_EXIST
- el campo no existe en el STObject

PARSE_ERROR
- el STObject es inválido o mal formado

| +
+ + +| Tipo | Descripción | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| bigint / ErrorCode |

Ubicación del campo dentro del buffer:
- 32 bits altos = offset
- 32 bits bajos = longitud

o un código de error si la extracción falla

| +
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_to_json.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_to_json.mdx new file mode 100644 index 0000000..74e534a --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_to_json.mdx @@ -0,0 +1,67 @@ +--- +title: sto_to_json +description: Formatear un objeto STO (datos del ledger codificados en binario) a formato JSON. +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Formatea un objeto STO (datos del ledger codificados en binario) a formato JSON. + + Esta función toma una transacción serializada `blob` y la convierte en un formato JSON legible por humanos. +* Devuelve la representación JSON decodificada del objeto STO, o un código de error si la conversión falla. + + + +### Definición + + + +```javascript +function sto_to_json( + blob: ByteArray | HexString + ): ErrorCode | Record | Transaction +```` + + + + +### Ejemplo + + + +```javascript +const jsonSto = sto_to_json(stoBlob) +``` + + + +### Parámetros + + + + +| Nombre | Tipo | Descripción | +| ------ | --------------------- | -------------------------------------------------------------- | +| blob | ByteArray | HexString | El blob (por ejemplo, una transacción serializada) a convertir | + + + + +### Código de retorno + + + + +| Tipo | Descripción | +| --------------------------------------------- | -------------------------------------------------------------------------------------------- | +| ErrorCode | Record | Transaction | Representación JSON decodificada del objeto STO, o un código de error si la conversión falla | + + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/serialization/sto_validate.mdx b/src/content/docs/es/docs/hooks/functions/serialization/sto_validate.mdx new file mode 100644 index 0000000..bb2d0e8 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/serialization/sto_validate.mdx @@ -0,0 +1,101 @@ +--- +title: sto_validate +description: Validar un STObject +--- +import { Tabs, TabItem, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Objetos Serializados + +### Comportamiento + + + +* Parsea un STObject apuntado por `read_ptr` +* Devuelve 1 si la serialización es válida, 0 en caso contrario + + + +* Se proporciona el `blob` (por ejemplo, una transacción serializada) para ser validado +* Devuelve 1 si el STObject es válido, 0 si no lo es, o un código de error si la validación falla + + + +### Definición + + + +```c +int64_t sto_validate ( + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript +function sto_validate(blob: ByteArray | HexString): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t result = + sto_validate(tx_out, sizeof(tx_out)); + +if (tx_len <= 0) +rollback("STO inválido.", 12, 1); + +```` + + + +```javascript +const result = sto_validate(tx_out) + +if (result <= 0) + rollback("STO inválido.", 1) +```` + + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | -------- | -------------------------------------------- | +| read_ptr | uint32_t | Buffer que contiene el STObject origen | +| read_len | uint32_t | Longitud del objeto origen | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | -------------------------------------------------------- | +| blob | ByteArray \| HexString | Blob (por ejemplo, una transacción serializada) a validar | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

1 si el STObject apuntado por read_ptr es válido.
0 si no lo es.

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook.

| +
+ + +| Tipo | Descripción | +| ------------------- | ----------------------------------------------------------------------------------------------- | +| ErrorCode \| number | Devuelve 1 si el STObject es válido, 0 si no lo es, o un código de error si la validación falla | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot.mdx new file mode 100644 index 0000000..28c1cb6 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot.mdx @@ -0,0 +1,96 @@ +--- +title: slot +description: Serializar y devolver un objeto almacenado en un slot +--- +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Serializa el objeto que ocupa actualmente el slot especificado +* Escribe la versión serializada del objeto en el buffer de salida + + + + + +* Obtiene los datos asociados al slot especificado +* Devuelve un código de error o los datos del slot + + + +### Definición + + + +```c +int64_t slot ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t slot_no +); +```` + + + + +```javascript id="slot-js" +function slot(slotno: number): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="slot-c" +uint8_t txn[512]; +int64_t bytes_written = + slot(txn, 512, 1); // asume que hay una transacción en el slot=1 +``` + + + +```javascript id="slot-js-ex" +const txn = slot(1) // asume que hay una transacción en el slot=1 +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| --------- | -------- | ----------------------------------------------------------- | +| write_ptr | uint32_t | Puntero a un buffer de tamaño adecuado para la salida | +| write_len | uint32_t | Longitud del buffer de salida | +| slot_no | uint32_t | Número del slot | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ----------------- | +| slotno | number | Número del slot | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_SMALL
- el buffer no es lo suficientemente grande

| +
+ + +| Tipo | Descripción | +| ---------------------- | ------------------------------------------------ | +| ErrorCode \| ByteArray | Devuelve un código de error o los datos del slot | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_clear.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_clear.mdx new file mode 100644 index 0000000..bcb315d --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_clear.mdx @@ -0,0 +1,76 @@ +--- +title: slot_clear +description: Liberar un slot actualmente ocupado +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Libera el slot especificado, liberando cualquier objeto que estuviera almacenado en él + +### Definición + + + +```c +int64_t slot_clear ( + uint32_t slot_no +); +```` + + + + +```javascript +function slot_clear(slotno: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +slot_clear(1); // asume que hay una transacción en el slot=1 +``` + + + +```javascript +slot_clear(1) // asume que hay una transacción en el slot=1 +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | ----------------- | +| slot_no | uint32_t | Número del slot | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ----------------- | +| slotno | number | Número del slot | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| int64_t |

1 o un error

Si es negativo, error:
DOESNT_EXIST
- el slot especificado no contiene ningún objeto o es inválido

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------------------- | +| ErrorCode \| number | Devuelve un código de error o el resultado de la operación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_count.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_count.mdx new file mode 100644 index 0000000..8616b72 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_count.mdx @@ -0,0 +1,77 @@ +--- +title: slot_count +description: Contar los elementos de un objeto array en un slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Cuenta los elementos de un array en el slot especificado +* Devuelve el número de elementos + +### Definición + + + +```c +int64_t slot_count ( + uint32_t slot_no +); +```` + + + + +```javascript +function slot_count(slotno: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +slot_count(1); // asume que hay un array en el slot=1 +``` + + + +```javascript +slot_count(1) // asume que hay un array en el slot=1 +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | ----------------- | +| slot_no | uint32_t | Número del slot | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ----------------- | +| slotno | number | Número del slot | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de elementos dentro del array almacenado en el slot

Si es negativo, error:
DOESNT_EXIST
- el slot especificado no contiene ningún objeto o es inválido

NOT_AN_ARRAY
- el slot especificado no contiene un array

| +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------- | +| ErrorCode or number | Devuelve un código de error o el número de elementos | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_float.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_float.mdx new file mode 100644 index 0000000..8415384 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_float.mdx @@ -0,0 +1,87 @@ +--- +title: slot_float +description: >- + Parsear el STI_AMOUNT en el slot especificado y devolverlo como un número XFL encapsulado +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Parsea el STI_AMOUNT en el slot especificado y lo devuelve como un número en formato XFL + + + +* Obtiene el valor bigint asociado al slot especificado +* Devuelve un código de error o el valor bigint + + + +### Definición + + + +```c +int64_t slot_float ( + uint32_t slot_no +); +```` + + + + +```javascript +function slot_float(slotno: number): ErrorCode | bigint +``` + + + +### Ejemplo + + + +```c +int64_t xfl = + slot_float(amt_slot); +``` + + + +```javascript +const xfl = slot_float(amt_slot) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | ----------------- | +| slot_no | uint32_t | Número del slot | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | -------------------------------------------------------- | +| slotno | number | Número del slot del que obtener el valor bigint | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| int64_t |

Número en formato XFL

Si es negativo, error:
DOESNT_EXIST
- el slot no contiene ningún objeto o es inválido

NOT_AN_AMOUNT
- el slot no contiene un objeto STI_AMOUNT

| +
+ + +| Tipo | Descripción | +| ------------------- | ------------------------------------------ | +| bigint o ErrorCode | Devuelve un código de error o el valor bigint | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_set.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_set.mdx new file mode 100644 index 0000000..c953653 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_set.mdx @@ -0,0 +1,95 @@ +--- +title: slot_set +description: Localizar un objeto a partir de su keylet y colocarlo en un slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Localiza un objeto dado el Keylet proporcionado en `read_ptr` +* Inserta el objeto localizado en el slot especificado o en uno nuevo si no se especifica (0) + + + +* Establece los datos en el slot especificado +* Devuelve un código de error o el resultado de la operación + + + +### Definición + + + +```c +int64_t slot_set ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t slot_no +); +```` + + + + +```javascript +function slot_set( + kl: ByteArray | HexString, + slotno: number + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t slot_no = + slot_set(keylet, 34, 0); +``` + + + +```javascript +const slot_no = slot_set(keylet, 0) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------- | -------- | -------------------------------------------------------------------------------------------- | +| read_ptr | uint32_t | Puntero a un buffer que contiene el keylet del objeto a localizar (también puede ser un hash de transacción) | +| read_len | uint32_t | Longitud del buffer. Debe ser 32 o 34 bytes | +| slot_no | uint32_t | Número de slot donde insertar el objeto, o 0 para usar el siguiente disponible | + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | --------------------------------------------------------- | +| kl | ByteArray \| HexString | Datos a almacenar en el slot (array o string) | +| slotno | number | Número del slot donde guardar los datos | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de slot en el que se insertó el objeto

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

INVALID_ARGUMENT
- read_len debe ser 32 o 34 bytes
- el hash o keylet es inválido

DOESNT_EXIST
- el objeto no fue encontrado

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------------- | +| ErrorCode o number | Devuelve un código de error o el resultado de la operación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_size.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_size.mdx new file mode 100644 index 0000000..5fd0d4b --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_size.mdx @@ -0,0 +1,84 @@ +--- +title: slot_size +description: Calcular el tamaño serializado de un objeto en un slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Devuelve el número de bytes que ocupa el objeto en el slot especificado cuando está serializado + + + +* Obtiene el tamaño del slot especificado + + + +### Definición + + + +```c +int64_t slot_size ( + uint32_t slot_no +); +```` + + + + +```javascript +function slot_size(slotno: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t bytes_needed = slot_size(1); // obtener tamaño del slot 1 +``` + + + +```javascript +const bytes_needed = slot_size(1); // obtener tamaño del slot 1 +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | ----------------- | +| slot_no | uint32_t | Número del slot | + + + +| Nombre | Tipo | Descripción | +| ------ | ------ | ---------------------------------------- | +| slotno | number | Número del slot del que obtener el tamaño | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes que ocupa el objeto cuando está serializado

Si es negativo, error:
DOESNT_EXIST
- el slot no contiene ningún objeto o es inválido

| +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------- | +| ErrorCode \| number | Devuelve un código de error o el tamaño del slot | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_subarray.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_subarray.mdx new file mode 100644 index 0000000..802f844 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_subarray.mdx @@ -0,0 +1,101 @@ +--- +title: slot_subarray +description: Indexar dentro de un array en un slot y asignar un subobjeto a otro slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca el array en el slot `parent_slot` +* Recupera el subobjeto en el índice especificado por `array_id` +* Coloca el subobjeto en el slot `new_slot` o en el siguiente slot disponible si `new_slot` es 0 +* Devuelve el número del nuevo slot + + + +* Crea un subarray en el slot padre especificado +* Devuelve un código de error o el resultado de la creación del subarray + + + +### Definición + + + +```c +int64_t slot_subarray ( + uint32_t parent_slot, + uint32_t array_id, + uint32_t new_slot +); +```` + + + + +```javascript +function slot_subarray( + parent_slotno: number, + array_id: number, + new_slotno: number + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t subslot = 0; +subslot = + slot_subarray(slot_no, i, (uint32_t)subslot); +``` + + + +```javascript +let subslot = 0 +subslot = slot_subarray(slot_no, i, subslot) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| parent_slot | uint32_t | Slot donde se encuentra el array padre | +| array_id | uint32_t |

Código sf del campo que se desea buscar.

Para calcularlo manualmente, toma el type serializado y desplázalo a los 16 bits más altos de un uint32_t, luego coloca el field en los 16 bits más bajos.

Ejemplo:
sfEmitNonce tiene type 5 y field 11, por lo que su valor es 0x050BU

| +| new_slot | uint32_t | Nuevo número de slot donde colocar el objeto del índice seleccionado. Si es 0, se usará el siguiente slot disponible. | +
+ + +| Nombre | Tipo | Descripción | +| ------------- | ------ | ------------------------------------------------ | +| parent_slotno | number | Número del slot padre | +| array_id | number | Identificador del array del que crear subarray | +| new_slotno | number | Nuevo número de slot para el subarray | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de slot del nuevo objeto asignado

Si es negativo, error:

DOESNT_EXIST
- el array_id no existe en el array del parent_slot

NO_FREE_SLOTS
- no hay slots disponibles

NOT_AN_ARRAY
- el parent_slot no contiene un STArray

| +
+ + +| Tipo | Descripción | +| ------ | -------------------------------------------------------------- | +| number | Devuelve un código de error o el resultado de la operación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_subfield.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_subfield.mdx new file mode 100644 index 0000000..d701c33 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_subfield.mdx @@ -0,0 +1,99 @@ +--- +title: slot_subfield +description: Indexar dentro de un objeto en un slot y asignar un subobjeto a otro slot +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Busca el objeto en el slot `parent_slot` +* Recupera el subobjeto en `field_id` +* Coloca el subobjeto en el slot `new_slot` o en el siguiente slot disponible si `new_slot` es 0 +* Devuelve el número del nuevo slot + + + +* Crea un subcampo en el slot padre especificado +* Devuelve un código de error o el resultado de la creación del subcampo + + + +### Definición + + + +```c +int64_t slot_subfield ( + uint32_t parent_slot, + uint32_t field_id, + uint32_t new_slot +); +```` + + + + +```javascript id="slot-subfield-js" +function slot_subfield( + parent_slotno: number, + field_id: number, + new_slotno: number + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="slot-subfield-c" +int64_t amt_slot = + slot_subfield(oslot, sfAmount, 0); +``` + + + +```javascript id="slot-subfield-js-ex" +const amt_slot = slot_subfield(oslot, sfAmount, 0) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| parent_slot | uint32_t | Slot donde se encuentra el objeto padre | +| field_id | uint32_t |

Código sf del campo que se desea buscar.

Para calcularlo manualmente, toma el type serializado y desplázalo a los 16 bits más altos de un uint32_t, luego coloca el field en los 16 bits más bajos.

Ejemplo:
sfEmitNonce tiene type 5 y field 11, por lo que su valor es 0x050BU

| +| new_slot | uint32_t | Nuevo número de slot donde colocar el objeto del campo seleccionado. Si es 0, se usará el siguiente slot disponible | +
+ + +| Nombre | Tipo | Descripción | +| ------------- | ------ | ------------------------------------------------ | +| parent_slotno | number | Número del slot padre | +| field_id | number | Identificador del campo del que crear subcampo | +| new_slotno | number | Nuevo número de slot para el subcampo | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de slot del nuevo objeto asignado

Si es negativo, error:

DOESNT_EXIST
- el campo no existe en el objeto o el slot está vacío

NO_FREE_SLOTS
- no hay slots disponibles

INVALID_FIELD
- el campo no es un sf válido

NOT_AN_OBJECT
- el objeto en el slot no es un STObject válido

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------------------- | +| number o ErrorCode | Devuelve un código de error o el resultado de la operación | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/slot_type.mdx b/src/content/docs/es/docs/hooks/functions/slot/slot_type.mdx new file mode 100644 index 0000000..87aeaf9 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/slot_type.mdx @@ -0,0 +1,91 @@ +--- +title: slot_type +description: >- + Obtener el código de campo de un objeto en un slot y, opcionalmente, otra información +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Localiza el objeto apuntado por el `slot_no` especificado +* Determina su código de campo `sf` y lo devuelve, u otra información (ver abajo) si se usan `flags` + + + +* Obtiene el tipo del slot especificado +* Devuelve un código de error o el tipo del slot + + + +### Definición + + + +```c +int64_t slot_type ( + uint32_t slot_no, + uint32_t flags +); +```` + + + + +```javascript id="slot-type-js" +function slot_type(slotno: number, flags: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="slot-type-c" +int64_t field_code = + slot_type(1, 0); +``` + + + +```javascript id="slot-type-js-ex" +const field_code = slot_type(1, 0) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| slot_no | uint32_t | Número del slot | +| flags | uint32_t |

Para uso normal debe ser 0.

Para determinar si un tipo STI_AMOUNT contiene una cantidad nativa (XAH) o un valor en coma flotante (IOU), usar 1.

| +
+ + +| Nombre | Tipo | Descripción | +| ------ | ------ | ----------------------------------------- | +| slotno | number | Número del slot a consultar | +| flags | number | Flags para determinar el tipo | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Si flags es 0:
Código de campo sf del objeto en el slot

Si flags es 1:
1 solo si el objeto es un STI_AMOUNT y el tipo es XAH

Si es negativo, error:
DOESNT_EXIST
- el slot no contiene un objeto

NOT_AN_AMOUNT
- flags es 1 pero el objeto no es un STI_AMOUNT

| +
+ + +| Tipo | Descripción | +| ------------------- | ---------------------------------------------- | +| ErrorCode o number | Devuelve un código de error o el tipo del slot | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/slot/xpop_slot.mdx b/src/content/docs/es/docs/hooks/functions/slot/xpop_slot.mdx new file mode 100644 index 0000000..4384feb --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/slot/xpop_slot.mdx @@ -0,0 +1,81 @@ +--- +title: xpop_slot +description: Serializar y devolver el blob de transacción xpop y sus metadatos +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Localiza el blob xpop en la transacción `Import` +* Inserta (emplace) los objetos de transacción y metadatos en los slots especificados + +### Definición + + + +```c +int64_t xpop_slot ( + uint32_t slot_no_tx, + uint32_t slot_no_meta +); +```` + + + + +```javascript +function xpop_slot(slotno_tx: number, slotno_meta: number): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +int64_t bytes_written = + xpop_slot(1, 2); // asume que la transacción está en el slot=1 y el meta en el slot=2 +``` + + + +```javascript +const bytes_written = xpop_slot(1, 2) +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| -------------- | -------- | -------------------------------------------------------- | +| slot_no_tx | uint32_t | Número de slot donde insertar el blob de la transacción | +| slot_no_meta | uint32_t | Número de slot donde insertar el blob de metadatos | + + + +| Nombre | Tipo | Descripción | +| ------------ | ------ | ------------------------------------------ | +| slotno_tx | number | Número de slot de la transacción a extraer | +| slotno_meta | number | Número de slot de los metadatos a extraer | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| int64_t |

PREREQUISITE_NOT_MET

- La transacción de origen no es de tipo Import.

NO_FREE_SLOTS

- Se requiere un nuevo slot pero no hay slots disponibles.

| +
+ + +| Tipo | Descripción | +| ------------------- | --------------------------------------------------------------- | +| number o ErrorCode | Devuelve un código de error o el resultado de la operación pop | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/state/state.mdx b/src/content/docs/es/docs/hooks/functions/state/state.mdx new file mode 100644 index 0000000..1807141 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/state/state.mdx @@ -0,0 +1,102 @@ +--- +title: state +description: >- + Recuperar los datos apuntados por una clave de Hook State y escribirlos en un + buffer de salida +--- +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee una clave de Hook State de 32 bytes desde `kread_ptr` +* Escribe los datos (valor) asociados a esa clave en el buffer apuntado por `write_ptr` + + + +* Recupera el valor del Hook State asociado a la clave especificada +* Devuelve un código de error o el valor del Hook State para la clave + + + +### Definición + + + +```c +int64_t state ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t kread_ptr, + uint32_t kread_len +); +```` + + + + +```javascript id="state-js" +function state(key: ByteArray | HexString): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="state-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +if (state(SBUF(vault), SBUF(vault_key)) != 16) + rollback(SBUF("Error: no se pudo leer el estado!"), 1); +``` + + + +```javascript id="state-js-ex" +const value = state(SBUF(vault), SBUF(vault_key)) +if (typeof value === 'number' || value.length != 16) + rollback("Error: no se pudo leer el estado!", 1); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | ----------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero al buffer donde escribir los datos del Hook State | +| write_len | uint32_t | Longitud del buffer de escritura | +| kread_ptr | uint32_t | Puntero a un buffer que contiene la clave del Hook State | +| kread_len | uint32_t | Longitud de la clave del Hook State (debe ser 32) | + + + + + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | ----------------------------------------------------- | +| key | ByteArray o HexString | La clave del Hook State de la que obtener el valor | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos en el buffer de salida

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

DOESNT_EXIST
- la clave de Hook State no tiene valor asociado

TOO_BIG
- la clave supera los 32 bytes

TOO_SMALL
- el buffer es demasiado pequeño

| +
+ + +| Tipo | Descripción | +| ---------------------- | --------------------------------------------------------- | +| ByteArray o ErrorCode | Devuelve un código de error o el valor del Hook State | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/state/state_foreign.mdx b/src/content/docs/es/docs/hooks/functions/state/state_foreign.mdx new file mode 100644 index 0000000..5d1841e --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/state/state_foreign.mdx @@ -0,0 +1,122 @@ +--- +title: state_foreign +description: >- + Recuperar los datos apuntados, en otra cuenta, por una clave de Hook State y + escribirlos en un buffer de salida +--- +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee un Account ID de 20 bytes desde `aread_ptr` +* Lee una clave de Hook State de 32 bytes desde `kread_ptr` +* Escribe los datos (valor) asociados a esa clave en ese Account ID en el buffer apuntado por `write_ptr` + + + +* Recupera el valor del Hook State externo perteneciente a otra cuenta para la clave especificada +* Devuelve un código de error o el valor del Hook State para la clave + + + +### Definición + + + +```c +int64_t state_foreign ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t kread_ptr, + uint32_t kread_len, + uint32_t nread_ptr, + uint32_t nread_len, + uint32_t aread_ptr, + uint32_t aread_len +); +```` + + + + +```javascript id="state-foreign-js" +function state_foreign( + key: ByteArray | HexString, + namespace: ByteArray | HexString | undefined | null, + accountid: ByteArray | HexString | undefined | null + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="state-foreign-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +uint8_t ns[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +int64_t lookup = + state_foreign(SBUF(blacklist_status), SBUF(otxn_accid), SBUF(ns), SBUF(blacklist_accid)); +if (lookup < 0) + rollback(SBUF("Error: no se pudo encontrar la clave en el estado externo."), 1); +``` + + + +```javascript id="state-foreign-js-ex" +const ns = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] +const blacklist_status = + state_foreign(otxn_accid, ns, blacklist_accid) +if (typeof blacklist_status === 'number') + rollback("Error: no se pudo encontrar la clave en el estado externo.", 1); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | --------------------------------------------------------------------------- | +| write_ptr | uint32_t | Puntero al buffer donde escribir los datos del Hook State | +| write_len | uint32_t | Longitud del buffer de escritura | +| kread_ptr | uint32_t | Puntero a un buffer que contiene la clave del Hook State | +| kread_len | uint32_t | Longitud de la clave (debe ser 32) | +| nread_ptr | uint32_t | Puntero al buffer que contiene el namespace de 32 bytes | +| nread_len | uint32_t | Longitud del namespace (debe ser 32) | +| aread_ptr | uint32_t | Puntero a un buffer con el Account ID de 20 bytes | +| aread_len | uint32_t | Longitud del Account ID (debe ser 20) | + + + + + +| Nombre | Tipo | Descripción | +| ---------- | ---------------------- | --------------------------------------------------------- | +| key | ByteArray o HexString | La clave del Hook State de la que obtener el valor | +| namespace | ByteArray o HexString | El namespace del Hook donde buscar | +| accountid | ByteArray o HexString | El propietario del estado | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| int64_t |

Número de bytes escritos en el buffer de salida

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

DOESNT_EXIST
- la clave de Hook State no tiene valor asociado

TOO_BIG
- la clave supera los 32 bytes

TOO_SMALL
- el buffer es demasiado pequeño

INVALID_ACCOUNT
- la cuenta especificada es inválida o no existe

| +
+ + +| Tipo | Descripción | +| ---------------------- | --------------------------------------------------------- | +| ErrorCode o ByteArray | Devuelve un código de error o el valor del Hook State | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/state/state_foreign_set.mdx b/src/content/docs/es/docs/hooks/functions/state/state_foreign_set.mdx new file mode 100644 index 0000000..0d61a81 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/state/state_foreign_set.mdx @@ -0,0 +1,121 @@ +--- +title: state_foreign_set +description: Establecer el Hook State en otra cuenta para una clave, valor y namespace dados +--- +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee una clave de Hook State de 32 bytes desde `kread_ptr` +* Lee una cantidad arbitraria de datos desde `read_ptr` (el valor) +* Lee un namespace de 32 bytes desde `nread_ptr` +* Lee un Account ID de 20 bytes desde `aread_ptr` +* Actualiza la clave de Hook State en la cuenta especificada dentro del namespace indicado con el valor dado +* Pero solo si un [Grant](https://xrpl-hooks.readme.io/docs/grants) en esa cuenta lo permite +* Si la cuenta del Hook se especifica en `aread_ptr`, el comportamiento será el de `state_set`, pero permitiendo aún especificar el namespace mediante `nread_ptr` + + + +* Establece el Hook State externo con el valor, clave, namespace y Account ID especificados +* Esta operación requiere autorización y un Grant que permita esta acción +* Devuelve el número de bytes escritos en el Hook State (la longitud de los datos), negativo en caso de error + + + +### Definición + + + +```c +int64_t state_foreign_set ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t kread_ptr, + uint32_t kread_len, + uint32_t nread_ptr, + uint32_t nread_len, + uint32_t aread_ptr, + uint32_t aread_len +); +```` + + + + +```javascript +function state_foreign_set( + value: ByteArray | HexString | undefined | null, + key: ByteArray | HexString, + namespace: ByteArray | HexString | undefined | null, + accountid: ByteArray | HexString | undefined | null + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c +#define SBUF(str) (uint32_t)(str), sizeof(str) +if (state_foreign_set(SBUF(vault), SBUF(vault_key), SBUF(namespace), SBUF(account)) < 0) + rollback(SBUF("Error: no se pudo establecer el estado externo!"), 1); +``` + + + +```javascript +if (state_foreign_set(vault, vault_key, namespace, account) < 0) + rollback("Error: no se pudo establecer el estado externo!", 1); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| read_ptr | uint32_t |

Puntero a los datos (valor) a escribir en el Hook State.
Si es 0 (null), se elimina el dato en esa clave. Puede ser null.

| +| read_len | uint32_t |

Longitud de los datos.
Si es 0 (null), se elimina el dato en esa clave. Puede ser null.

| +| kread_ptr | uint32_t | Puntero a la clave de Hook State donde se almacenará el valor | +| kread_len | uint32_t | Longitud de la clave (debe ser siempre 32) | +| nread_ptr | uint32_t | Puntero al namespace al que pertenece la clave | +| nread_len | uint32_t | Longitud del namespace (debe ser siempre 32) | +| aread_ptr | uint32_t | Puntero al Account ID cuyo estado se desea modificar | +| aread_len | uint32_t | Longitud del Account ID (debe ser siempre 20) | + + +
+ + +| Nombre | Tipo | Descripción | +| ---------- | ---------------------- | ----------------------------------------------- | +| value | ByteArray o HexString | El valor de los datos a almacenar | +| key | ByteArray o HexString | La clave del Hook State donde guardar el valor | +| namespace | ByteArray o HexString | El namespace del Hook | +| accountid | ByteArray o HexString | El propietario del estado | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos en el Hook State (longitud de los datos)

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_BIG
- kread_len mayor que 32 o
- read_len mayor que el tamaño máximo permitido

TOO_SMALL
- kread_len es 0

NOT_AUTHORIZED
- no existe un HookGrant válido en la cuenta externa

PREVIOUS_FAILURE_PREVENTS_RETRY
- una llamada previa falló con NOT_AUTHORIZED y no se permite reintentar

| +
+ + +| Tipo | Descripción | +| ------------------- | ----------------------------------------------------------------------------------------------- | +| number o ErrorCode | Devuelve el número de bytes escritos o un error (negativo en caso de fallo) | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/state/state_set.mdx b/src/content/docs/es/docs/hooks/functions/state/state_set.mdx new file mode 100644 index 0000000..6f0ada8 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/state/state_set.mdx @@ -0,0 +1,113 @@ +--- +title: state_set +description: Establecer el Hook State para una clave y valor dados +--- +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee una clave de Hook State de 32 bytes desde `kread_ptr` +* Lee una cantidad arbitraria de datos desde `read_ptr` (el valor) +* Actualiza la clave de Hook State con el valor + + + +* Establece el Hook State con el valor y la clave especificados +* Devuelve el número de bytes escritos en el Hook State (longitud de los datos), negativo en caso de error + + + +### Definición + + + +```c +int64_t state_set ( + uint32_t read_ptr, + uint32_t read_len, + uint32_t kread_ptr, + uint32_t kread_len +); +```` + + + + +```javascript id="state-set-js" +function state_set( + value: ByteArray | HexString | undefined | null, + key: ByteArray | HexString + ): ErrorCode | number +``` + + + +### Ejemplo + + + +```c id="state-set-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +if (state_set(SBUF(vault), SBUF(vault_key)) < 0) + rollback(SBUF("Error: no se pudo establecer el estado!"), 1); +``` + + + + + +```javascript id="state-set-js-ex" +const result = state_set(vault, vault_key) +if (result < 0) + rollback("Error: no se pudo establecer el estado!", 1); +``` + + + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| read_ptr | uint32_t |

Puntero a los datos (valor) a escribir en el Hook State.
Si es 0 (null), se elimina el dato en esa clave. Puede ser null.

| +| read_len | uint32_t |

Longitud de los datos.
Si es 0 (null), se elimina el dato en esa clave. Puede ser null.

| +| kread_ptr | uint32_t | Puntero a la clave de Hook State donde almacenar el valor | +| kread_len | uint32_t | Longitud de la clave (debe ser siempre 32) | + + +
+ + +| Nombre | Tipo | Descripción | +| ------ | ---------------------- | ----------------------------------------------- | +| value | ByteArray o HexString | El valor de los datos a almacenar | +| key | ByteArray o HexString | La clave del Hook State donde guardar el valor | + +
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos en el Hook State (longitud de los datos)

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

TOO_BIG
- kread_len mayor que 32 o
- read_len mayor que el tamaño máximo permitido

TOO_SMALL
- kread_len es 0

| +
+ + +| Tipo | Descripción | +| ------------------- | ----------------------------------------------------------------------------------------------- | +| number o ErrorCode | Devuelve el número de bytes escritos o un error (negativo en caso de fallo) | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/trace-debug/trace.mdx b/src/content/docs/es/docs/hooks/functions/trace-debug/trace.mdx new file mode 100644 index 0000000..4c78cb4 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/trace-debug/trace.mdx @@ -0,0 +1,91 @@ +--- +title: trace +description: Escribir el contenido de un buffer en el registro de trazas de Xahaud +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Escribe un buffer desde el Hook en el log de trazas junto con un mensaje (si se proporciona) + +### Definición + + + +```c +int64_t trace ( + uint32_t mread_ptr, + uint32_t mread_len, + uint32_t dread_ptr, + uint32_t dread_len, + uint32_t as_hex +); +```` + + + + +```javascript id="trace-js" +function trace( + message: string | null, + data: any, + hex: boolean | 0 | 1 + ): ErrorCode +``` + + + +### Ejemplo + + + +```c id="trace-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +trace(SBUF("Contenido del buffer"), SBUF(some_buffer), 1); +``` + + + +```javascript id="trace-js-ex" +trace("Contenido del buffer", some_buffer, 1); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | -------------------------------------------------------------------------------------------------------- | +| mread_ptr | uint32_t | Puntero a un mensaje a mostrar antes del buffer. Puede ser null. | +| mread_len | uint32_t | Longitud del mensaje. Puede ser null. | +| dread_ptr | uint32_t | Puntero al buffer a mostrar | +| dread_len | uint32_t | Longitud del buffer | +| as_hex | uint32_t |

Si es 1 muestra el buffer en hexadecimal.
Si es 0 lo muestra en UTF-8.

| +
+ + +| Nombre | Tipo | Descripción | +| ------- | ------- | ------------------------------------------------------------------- | +| message | string | Mensaje (clave de log) a mostrar antes del buffer (puede ser null) | +| data | any | Datos a registrar | +| hex | boolean |

¿Mostrar en HEX?

0 - NO
1 - SÍ

| +
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

0 si tiene éxito

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook.

| +
+ + +| Tipo | Descripción | +| --------- | ------------------------------------------------------------------------------------------------ | +| ErrorCode |

int64_t, valor 0 si tiene éxito

Si es negativo, error: OUT_OF_BOUNDS

| +
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/trace-debug/trace_float.mdx b/src/content/docs/es/docs/hooks/functions/trace-debug/trace_float.mdx new file mode 100644 index 0000000..21d1ba4 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/trace-debug/trace_float.mdx @@ -0,0 +1,57 @@ +--- +title: trace_float +description: Escribir un número flotante XFL en el registro de trazas de Xahaud +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Escribe un número en coma flotante XFL en el log de trazas junto con un mensaje (si se proporciona) + +### Definición + + + +```c +int64_t trace_float ( + uint32_t mread_ptr, + uint32_t mread_len, + int64_t float1 +); +```` + + + + +### Ejemplo + + + +```c id="trace-float-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +trace_float(SBUF("Esto es un float"), float_one()); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| mread_ptr | uint32_t | Puntero a un mensaje a mostrar antes del valor. Puede ser null. | +| mread_len | uint32_t | Longitud del mensaje. Puede ser null. | +| float1 | int64_t | Número entero que encapsula el valor XFL | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

0 si tiene éxito

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook.

| +
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/trace-debug/trace_num.mdx b/src/content/docs/es/docs/hooks/functions/trace-debug/trace_num.mdx new file mode 100644 index 0000000..ee8676d --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/trace-debug/trace_num.mdx @@ -0,0 +1,57 @@ +--- +title: trace_num +description: Escribir un número entero en el registro de trazas de Xahaud +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +* Escribe un número entero en el log de trazas junto con un mensaje (si se proporciona) + +### Definición + + + +```c +int64_t trace_num ( + uint32_t mread_ptr, + uint32_t mread_len, + int64_t number +); +```` + + + + +### Ejemplo + + + +```c id="trace-num-c" +#define SBUF(str) (uint32_t)(str), sizeof(str) +trace_num(SBUF("Esto es un entero"), 10); +``` + + + +### Parámetros + + + +| Nombre | Tipo | Descripción | +| ---------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| mread_ptr | uint32_t | Puntero a un mensaje a mostrar antes del valor. Puede ser null. | +| mread_len | uint32_t | Longitud del mensaje. Puede ser null. | +| number | int64_t | El número entero | + + + +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

0 si tiene éxito

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook.

| +
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/utilities/util_accid.mdx b/src/content/docs/es/docs/hooks/functions/utilities/util_accid.mdx new file mode 100644 index 0000000..cc4ca0a --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/utilities/util_accid.mdx @@ -0,0 +1,109 @@ +--- +title: util_accid +description: Convertir una r-address en un Account ID de 20 bytes +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee una r-address desde `read_ptr` +* Escribe un Account ID de 20 bytes en `write_ptr` + + + +* Lee una r-address desde `raddress` +* Devuelve un Account ID de 20 bytes o un ErrorCode + + + +### Definición + + + +```c +int64_t util_accid ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript id="util-accid-js" +function util_accid(raddress: string): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="util-accid-c" +uint8_t accid_out[20]; +uint8_t raddr_in[] = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; + +int64_t bytes_written = +util_accid(accid_out, 20, raddr_in, sizeof(raddr_in)-1); +// Nota: si se especifica como string en C, tener en cuenta el carácter nulo + +```` + + + +```javascript id="util-accid-js-ex" +const accId = util_accid('rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh') +```` + + + + +### Parámetros + + + + + + + + + + + + + +
NombreTipoDescripción
write_ptruint32_tPuntero a un buffer adecuado para almacenar el Account ID (mínimo 20 bytes)
write_lenuint32_tLongitud del buffer de salida
read_ptruint32_tPuntero a la r-address
read_lenuint32_tLongitud de la r-address
+
+ + + + + + + + + +
NombreTipoDescripción
raddressstringLa r-address a convertir en Account ID en formato HEX
+
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| int64_t |

Número de bytes escritos (longitud del Account ID)

Si es negativo, error:
OUT_OF_BOUNDS
- punteros fuera de la memoria del hook

INVALID_ARGUMENT
- `read_ptr` no apunta a una r-address válida

TOO_SMALL
- el buffer es insuficiente (debe ser 20 bytes)

TOO_BIG
- `read_len` es demasiado grande

| +
+ + +| Tipo | Descripción | +| --------------- | ---------------------------------------------------------------------------------------------------- | +| string / number | Devuelve error si falla, o el Account ID en HEX como array de números | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/utilities/util_keylet.mdx b/src/content/docs/es/docs/hooks/functions/utilities/util_keylet.mdx new file mode 100644 index 0000000..8af2773 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/utilities/util_keylet.mdx @@ -0,0 +1,151 @@ +--- +title: util_keylet +description: Calcular un keylet serializado de un tipo dado +--- +import { Tabs, TabItem, Aside, LinkButton } from '@astrojs/starlight/components'; + +### Conceptos + +Slots y Keylets + + + +### Comportamiento + +* Calcula un keylet del tipo `keylet_type` según los parámetros `a` a `f` +* Escribe el keylet serializado de 34 bytes en `write_ptr` + +### Definición + + + +```c +int64_t util_keylet ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t keylet_type, + uint32_t a, + uint32_t b, + uint32_t c, + uint32_t d, + uint32_t e, + uint32_t f +); +```` + + + + +```javascript id="util-keylet-js" +function util_keylet( + keylet_type: number, + accountid: ByteArray | HexString, + statekey: ByteArray | HexString, + namespace: ByteArray | HexString + ): ErrorCode | ByteArray +``` + + + +### Ejemplo + + + +```c id="util-keylet-c" +uint8_t keylet[34]; +if (util_keylet(keylet, 34, KEYLET_LINE, + hook_accid, 20, + account_field, 20, + currency_code, 20) != 34) + rollback("Keylet Failed.", 14, 1); +``` + + + +```javascript id="util-keylet-js-ex" +if (util_keylet( + KEYLET_LINE, hook_accid, account_field, currency_code + ).length < 34) + rollback("Keylet Failed.", 1) +``` + + + +### Parámetros + + + + + + + + + + + + + + + + + + +
NombreTipoDescripción
write_ptruint32_tPuntero al buffer donde se escribirá el keylet
write_lenuint32_tLongitud del buffer (mínimo 34 bytes)
keylet_typeuint32_tTipo de keylet definido en hookapi.h
auint32_tVer tabla inferior
buint32_tVer tabla inferior
cuint32_tVer tabla inferior
duint32_tVer tabla inferior
euint32_tVer tabla inferior
fuint32_tVer tabla inferior
+
+ + + + + + + + + + + + +
NombreTipoDescripción
keylet_typenumberTipo de keylet a crear
accountid(Opcional) Primer dato del keylet
statekey(Opcional) Segundo dato del keylet
namespace(Opcional) Tercer dato del keylet
+
+
+ +### Tabla de Keylets + + + +| Tipo de Keylet | Parámetros | +|---------------|-----------| +| KEYLET_HOOK_STATE | a=AccountID, b=20, c=clave estado, d=32, e=namespace, f=32 | +| KEYLET_AMENDMENTS / KEYLET_FEES / KEYLET_NEGATIVE_UNL / KEYLET_EMITTED_DIR | Todos 0 | +| KEYLET_SKIP | Todos 0 o a=LedgerIndex, b=1 | +| KEYLET_LINE | a=Account High, b=20, c=Account Low, d=20, e=Currency, f=20 | +| KEYLET_QUALITY | a=keylet, b=34, c/d=uint64, e/f=0 | +| KEYLET_DEPOSIT_PREAUTH | a/b=Account1, c/d=Account2 | +| KEYLET_UNCHECKED / CHILD / EMITTED_TXN | a=clave, b=32 | +| KEYLET_OWNER_DIR / SIGNERS / ACCOUNT / HOOK | a=AccountID, b=20 | +| KEYLET_PAGE | a=clave, b=32, c/d=uint64 | +| KEYLET_OFFER / CHECK / ESCROW / NFT_OFFER | a=AccountID, b=20 + secuencia o clave | +| KEYLET_PAYCHAN | combinación de cuentas + secuencia o clave | + + + + + + + +### Código de retorno + + + +| Tipo | Descripción | +|--------|-------------| +| int64_t | Bytes escritos (34). Error si negativo: OUT_OF_BOUNDS, INVALID_ARGUMENT, TOO_SMALL | + + + +| Tipo | Descripción | +|--------|-------------| +| number | ErrorCode o keylet como array de números | + + \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/utilities/util_raddr.mdx b/src/content/docs/es/docs/hooks/functions/utilities/util_raddr.mdx new file mode 100644 index 0000000..a944e45 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/utilities/util_raddr.mdx @@ -0,0 +1,117 @@ +--- +title: util_raddr +description: Convertir un Account ID de 20 bytes en una dirección r +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Lee un Account ID de 20 bytes desde `read_ptr` +* Escribe la dirección r equivalente para ese Account ID en `write_ptr` + + + +* Lee un Account ID de 20 bytes desde `accountid` +* Devuelve la dirección r equivalente para ese Account ID + + + +### Definición + + + +```c +int64_t util_raddr ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript +function util_raddr(accountid: ByteArray | HexString): ErrorCode | string +``` + + + +### Ejemplo + + + +```c +uint8_t raddr_out[40]; +uint8_t acc_id[20] = +{ + 0x2dU, 0xd8U, 0xaaU, 0xdbU, 0x4eU, 0x15U, + 0xebU, 0xeaU, 0x0eU, 0xfdU, 0x78U, 0xd1U, 0xb0U, + 0x35U, 0x91U, 0x04U, 0x7bU, 0xfaU, 0x1eU, 0x0eU +}; +int64_t bytes_written = + util_raddr(raddr_out, sizeof(raddr_out), acc_id, 20); +``` + + + +```javascript +const raddr = util_raddr('8D329C03074A98EF0488AB6ABBF5883F68CCFD4E') +// o +const raddr = util_raddr([ + 0x8D, 0x32, 0x9C, 0x03, 0x07, 0x4A, 0x98, 0xEF, 0x04, 0x88, + 0xAB, 0x6A, 0xBB, 0xF5, 0x88, 0x3F, 0x68, 0xCC, 0xFD, 0x4E +]) +``` + + + +### Parámetros + + + + + + + + + + + + + + +
NombreTipoDescripción
write_ptruint32_tPuntero a un buffer de tamaño suficiente para almacenar la dirección r. Se recomiendan al menos 35 bytes.
write_lenuint32_tLongitud del buffer de salida.
read_ptruint32_tPuntero al Account ID.
read_lenuint32_tLongitud de la entrada. Siempre 20.
+ +
+ + + + + + + + + +
NombreTipoDescripción
accountidnumber[] / stringEl Account ID en HEX que se convertirá a dirección r. Puede proporcionarse como array de números o como string.
+
+
+ +### Código de retorno + + + +| Tipo | Descripción | +| -------- | ----------- | +| int64_t |

Número de bytes escritos (longitud de la dirección r generada).

Si es negativo, indica error:
OUT_OF_BOUNDS
- punteros/longitudes fuera de la memoria del hook.

INVALID_ARGUMENT
- read_len no era 20.

TOO_SMALL
- write_len no era suficiente para almacenar la dirección r.

| +
+ + +| Tipo | Descripción | +| ------------- | ----------- | +| string / number | Devuelve un ErrorCode si hay error, o la dirección r como string | + +
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/utilities/util_sha512h.mdx b/src/content/docs/es/docs/hooks/functions/utilities/util_sha512h.mdx new file mode 100644 index 0000000..bd19978 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/utilities/util_sha512h.mdx @@ -0,0 +1,117 @@ +--- +title: util_sha512h +description: Calcular un sha512-half sobre unos datos +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + + + +* Calcula un hash `SHA512` sobre los datos apuntados por `read_ptr` +* Escribe la primera mitad del hash en `write_ptr` + + + +* Calcula un hash `SHA512` sobre los datos indicados en `data` +* Devuelve la primera mitad del hash + + + +### Definición + + + +```c +int64_t util_sha512h ( + uint32_t write_ptr, + uint32_t write_len, + uint32_t read_ptr, + uint32_t read_len +); +```` + + + + +```javascript +function util_sha512h(data: ByteArray | HexString): ErrorCode | ByteArray +``` + + + +### Ejemplo + +C + + + +```c +uint8_t hash_out[32]; +if (util_sha512h(hash_out, 32, data_in_ptr, data_in_len) < 0) + rollback("No se pudo generar el hash", 23, 1); +``` + + + +```javascript +if (util_sha512h(data) < 0) + rollback("No se pudo generar el hash", 1) +``` + + + +### Parámetros + + + + + + + + + + + + + +
NombreTipoDescripción
write_ptruint32_tPuntero al buffer donde se escribirá el hash
write_lenuint32_tLongitud del buffer de salida (mínimo 32 bytes)
read_ptruint32_tPuntero al buffer de entrada (datos a hashear)
read_lenuint32_tLongitud de los datos de entrada
+
+ + + + + + + + + +
NombreTipoDescripción
dataByteArray o HexStringDatos sobre los que calcular el hash, pueden ser un array de números o un string
+
+
+ +### Código de retorno + + + + + + + + + + +
TipoDescripción
int64_tEl número de bytes escritos (siempre 32).

Si es negativo, indica error:
OUT_OF_BOUNDS
- punteros/longitudes fuera de la memoria del hook.

TOO_SMALL
- el buffer de salida no es suficientemente grande
+
+ + + + + + + + + +
TipoDescripción
ByteArrayDevuelve un ErrorCode si ocurre un error, o el hash SHA512-half como un array de números
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/utilities/util_verify.mdx b/src/content/docs/es/docs/hooks/functions/utilities/util_verify.mdx new file mode 100644 index 0000000..6dcd6fe --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/utilities/util_verify.mdx @@ -0,0 +1,134 @@ +--- +title: util_verify +description: Verificar una firma criptográfica +--- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +### Comportamiento + +Verifica una firma criptográfica + +* Si la clave pública tiene el prefijo `0xED`, se usa `ED25519` +* En caso contrario, se asume `SECP256k1` + +### Definición + + + +```c +int64_t util_verify ( + uint32_t dread_ptr, + uint32_t dread_len, + uint32_t sread_ptr, + uint32_t sread_len, + uint32_t kread_ptr, + uint32_t kread_len +); +```` + + + + +```javascript id="util-verify-js" +function util_verify( + signedData: ByteArray | HexString, + signature: ByteArray | HexString, + pubkey: ByteArray | HexString + ): 0 | 1 +``` + + + +### Ejemplo + + + +```c id="util-verify-c" +if (!util_verify(payload_ptr, payload_len, + signature_ptr, signature_len, + publickey_ptr, publickey_len)) + rollback("Firma inválida", 17, 60); +``` + + + +```javascript id="util-verify-js-ex" +if (util_verify(signedData, signature, pubkey)) + rollback("Firma inválida", 60) +``` + + + +### Parámetros + + + + + + + + + + + + + + + +
NombreTipoDescripción
dread_ptruint32_tPuntero a los datos firmados
dread_lenuint32_tLongitud de los datos firmados
sread_ptruint32_tPuntero a la firma
sread_lenuint32_tLongitud de la firma
kread_ptruint32_tPuntero a la clave pública
kread_lenuint32_tLongitud de la clave pública
+
+ + + + + + + + + + + +
NombreTipoDescripción
signedDatanumber / stringDatos firmados a verificar, como array de números o string
signaturenumber / stringFirma a verificar, como array de números o string
pubkeynumber / stringClave pública asociada a la firma, como array de números o string
+
+
+ +### Código de retorno + + + + + + + + + + + + + +
TipoDescripción
int64_t +0 - validación fallida, la firma es inválida.
+1 - validación correcta, la firma es válida.

+Si es negativo, indica error:
+OUT_OF_BOUNDS
+- punteros/longitudes fuera de la memoria del hook. +
+
+ + + + + + + + + + + + +
TipoDescripción
number +0 - validación fallida, la firma es inválida.
+1 - validación correcta, la firma es válida. +
+
+
\ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/websocket-apis/account_info.mdx b/src/content/docs/es/docs/hooks/functions/websocket-apis/account_info.mdx new file mode 100644 index 0000000..c90baad --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/websocket-apis/account_info.mdx @@ -0,0 +1,44 @@ +--- +title: account_info +--- + +### Nuevas funcionalidades + +La API `account_info` ahora proporcionará, además de su comportamiento habitual: + +* Una lista de namespaces actualmente en uso por al menos un objeto Hook State +* Un recuento total de todos los objetos Hook State que tiene la cuenta + +Ejemplo de consulta: + +JSON + +```json +{ + "command": "account_info", + "account": "raaFre81618XegCrzTzVotAmarBcqNSAvK" +} +```` + +Ejemplo de respuesta: + +JSON + +```json +{ + "result": { + "account_data": { + "Account": "raaFre81618XegCrzTzVotAmarBcqNSAvK", + ..., + "HookNamespaces": [ + "01EAF09326B4911554384121FF56FA8FECC215FDDE2EC35D9E59F2C53EC665A0" + ], + "HookStateCount": 49, + ... + }, + "ledger_current_index": 5555046, + "validated": false + }, + "status": "success", + "type": "response" +} \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/functions/websocket-apis/account_namespace.mdx b/src/content/docs/es/docs/hooks/functions/websocket-apis/account_namespace.mdx new file mode 100644 index 0000000..a64f121 --- /dev/null +++ b/src/content/docs/es/docs/hooks/functions/websocket-apis/account_namespace.mdx @@ -0,0 +1,64 @@ +--- +title: account_namespace +--- + +Usa la API websocket `account_namespace` para consultar los objetos Hook State de una cuenta concreta dentro de un namespace específico. + +### Uso + +JSON + +```json +{ + "command": "account_namespace", + "account": "", + "namespace_id": "" +} +```` + +### Ejemplo de consulta + +JSON + +```json +{ + "command": "account_namespace", + "account": "raaFre81618XegCrzTzVotAmarBcqNSAvK", + "namespace_id": "01EAF09326B4911554384121FF56FA8FECC215FDDE2EC35D9E59F2C53EC665A0" +} +``` + +### Ejemplo de resultado + +JSON + +```json +{ + "result": { + "account": "raaFre81618XegCrzTzVotAmarBcqNSAvK", + "ledger_current_index": 5554739, + "namespace_entries": [ + { + "Flags": 0, + "HookStateData": "CE66D3EBD1A91E9D6F47ADCF8890C92C3EE65A42313174682047656E20496E74656C28522920436F726528544D292069372D31313635473720322E3800080AF0000C3500000009C400000FA0", + "HookStateKey": "4556520237F1F3A48DFAED331FDB8F894522B5CE634C86A0258BA1B300000018", + "LedgerEntryType": "HookState", + "OwnerNode": "0", + "index": "065E103AC0838155A392DECA99D77FAE768EC822BFEC6BC999268ECBD16C8FAF" + }, + { + "Flags": 0, + "HookStateData": "00000000044E8000", + "HookStateKey": "4556520100000000000000000000000000000000000000000000000000000004", + "LedgerEntryType": "HookState", + "OwnerNode": "0", + "index": "0890BE9EE8CD129D21728FC3C2423CC0AB99D325A269A8A749C840F712989E5B" + }, + ... + ], + "namespace_id": "01EAF09326B4911554384121FF56FA8FECC215FDDE2EC35D9E59F2C53EC665A0", + "validated": false + }, + "status": "success", + "type": "response" +} \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/index.mdx b/src/content/docs/es/docs/hooks/index.mdx new file mode 100644 index 0000000..f98d6cb --- /dev/null +++ b/src/content/docs/es/docs/hooks/index.mdx @@ -0,0 +1,85 @@ +--- +title: Hooks +description: 'Introduciendo Hooks: la funcionalidad de contratos inteligentes para Xahau.' +--- + +import { Aside } from '@astrojs/starlight/components'; + + + +### ¿Qué son los Hooks? + +Los Hooks permiten crear lógica personalizada y automatización dentro de Xahau, haciendo las transacciones más inteligentes y convenientes. Estos módulos pequeños y eficientes añaden funcionalidad personalizada directamente en el ledger, como la creación de triggers (disparadores) para eventos específicos. + +Estos triggers pueden usarse para ejecutar acciones en el ledger o responder automáticamente a eventos definidos. Actualmente, los Hooks están disponibles en la [red Xahau](https://xahau.network/). + +> _Para aprender más sobre los conceptos teóricos de Hooks, visita la sección de_ [_Conceptos_](/docs/hooks/concepts/introduction)_._ + +> _Para aprender a programar Hooks en C y sus funciones, visita_ [_Hooks C-Functions_](/docs/hooks/functions/overview/hook-api-conventions/)_._ + +> _Existe una herramienta llamada_ [_Hooks Builder_](https://builder.xahau.network/) _donde puedes desarrollar, probar, depurar y desplegar tus propios Hooks en testnet desde el navegador._ + +> _[Hookstore](https://hookstore.xahau.network/) ofrece una plataforma para descubrir, compartir y gestionar Hooks. Usa la [Hookstore Console](https://console.hookstore.xahau.network/) para administrar tus Hooks y explorar el ecosistema._ + +> _Está en desarrollo la posibilidad de escribir Hooks en JavaScript (JSHooks). Actualmente puede probarse en el repositorio [JSHooks](https://github.com/Xahau/jshooks-alpha)._ + +### ¿Por qué los Hooks son importantes? + +En pocas palabras, los Hooks añaden una potente funcionalidad de contratos inteligentes a Xahau, permitiéndote crear y desplegar aplicaciones con lógica personalizada según tus necesidades. + +Los Hooks proporcionan una plataforma versátil para implementar una amplia variedad de lógica de negocio y modelos de smart contracts. Una vez configurado un hook en una cuenta, permite: + +* Bloquear o permitir transacciones hacia y desde la cuenta. +* Modificar y mantener el estado interno del hook para tomar decisiones programáticas. +* Iniciar automáticamente nuevas transacciones en nombre de la cuenta. + +Los Hooks pueden escribirse en C o en cualquier lenguaje compatible con WebAssembly. + +
+![Usando Hooks Builder puedes desarrollar, probar, depurar y desplegar Hooks en testnet.](/assets/cdn.feather-2.webp) +
*Con Hooks Builder puedes desarrollar, probar, depurar y desplegar tus Hooks usando ejemplos o desde cero.*
+
+ +Hooks Builder actúa como un entorno de desarrollo integrado que facilita la creación, prueba, depuración y despliegue de Hooks. + +### Ejemplos de Hooks y casos de uso + +Algunos ejemplos prácticos: + +* **Hook de ahorro automático**: Transfiere automáticamente una cantidad de XAH a una cuenta de ahorro en intervalos definidos (diario, semanal, mensual). Ideal para apps financieras o suscripciones. +* **Hook de compensación de carbono**: Cada transacción envía automáticamente un 1% a una cuenta de compensación ambiental gestionada por una ONG. +* **Hook firewall**: Filtra transacciones entrantes/salientes, bloquea cuentas maliciosas y memos sospechosos, y puede aplicar límites de gasto. + +### Diferencias con la EVM + +Aunque ambos permiten lógica personalizada: + +* **Compatibilidad**: Hooks → Xahau / EVM → Ethereum +* **Eficiencia**: Hooks usan WebAssembly (más rápido) +* **Tiempo de ejecución**: Hooks tienen ejecución predecible + +### Alternativas en XRPL + +Existe una sidechain EVM anunciada por Ripple y Peersyst: + +* Funciona como blockchain independiente (Layer 2) +* Requiere mover XRP a la sidechain y обратно +* No puede prevenir transacciones (solo actuar después) + +Hooks en cambio: + +* Operan directamente en Layer 1 (Xahau) +* Pueden decidir si una transacción se ejecuta o no +* Están más integrados con XRPL + +### Futuro de Hooks + +Los Hooks añaden capacidades nativas de contratos inteligentes a Xahau, permitiendo crear aplicaciones personalizadas y nuevas funcionalidades. + +A medida que Xahau crece, los Hooks serán clave para impulsar la innovación y adopción tanto por usuarios individuales como empresas. \ No newline at end of file diff --git a/src/content/docs/es/docs/index.mdx b/src/content/docs/es/docs/index.mdx new file mode 100644 index 0000000..37d1234 --- /dev/null +++ b/src/content/docs/es/docs/index.mdx @@ -0,0 +1,28 @@ +--- +title: Documentación de Xahau +--- + +import { LinkCard } from '@astrojs/starlight/components'; + +Bienvenido a la Documentación de Xahau. Esta es tu guía completa para entender y trabajar con Xahau. La documentación está dividida en tres categorías principales: Características, Infraestructura y Técnica. + +Cada categoría está diseñada para proporcionarte información detallada e instrucciones sobre los diferentes aspectos de Xahau. + +### Características + +En la sección de Características encontrarás información sobre los aspectos únicos de Xahau. Una de las áreas clave cubierta en esta sección es el Tooling para Desarrolladores. + +La página de Tooling para Desarrolladores cubre las Herramientas de Hooks y las Bibliotecas de Cliente, simplificando el proceso de interacción con los Hooks y la Red Xahau. Esta sección está diseñada para ayudarte a entender la funcionalidad y las capacidades de Xahau, con ejemplos prácticos para ilustrar estas características en acción. + +### Referencia de Protocolo + +La sección de Referencia de Protocolo de la documentación de Xahau ofrece una visión en profundidad de los aspectos únicos de la plataforma, incluyendo varios tipos de transacciones como AccountDelete, CheckCancel y Payment, cada uno con su propio uso y características específicas. + +También cubre los diferentes objetos del ledger integrales para el funcionamiento de la red, como AccountRoot y Amendments. Esta visión general completa tiene como objetivo mejorar la comprensión de las funcionalidades y capacidades de Xahau, asegurando que los usuarios puedan aprovechar al máximo las características de la red. + +### Infraestructura + +La infraestructura es el núcleo de la Red Xahau. Los servidores que ejecutan el software xahaud permiten a los usuarios realizar acciones como enviar, verificar y consultar transacciones. La documentación de esta sección proporciona instrucciones para instalar, actualizar, configurar y compilar xahaud. También se discuten conceptos como la atestación de la identidad de un servidor o la ejecución de xahaud como validador. + + +**Esperamos que esta documentación te proporcione la información que necesitas para entender, usar y contribuir a la Red Xahau. ¡Buena exploración!** diff --git a/src/content/docs/es/docs/infrastructure/advanced-configuration.mdx b/src/content/docs/es/docs/infrastructure/advanced-configuration.mdx new file mode 100644 index 0000000..75ad411 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/advanced-configuration.mdx @@ -0,0 +1,102 @@ +--- +title: Configuración avanzada de xahaud +--- + +Existen numerosas opciones de configuración disponibles para los operadores de xahaud. Esta sección cubre algunas de las más utilizadas, incluyendo aquellas necesarias para clustering de servidores y configuración de bases de datos. + +Para una documentación completa, consulta los archivos de configuración de ejemplo en el [repositorio GitHub de xahaud](https://github.com/Xahau/xahaud/tree/dev/cfg). + +## Bases de datos en memoria + +Los usuarios que buscan maximizar el rendimiento pueden ejecutar las bases de datos en memoria en lugar de almacenamiento físico. Sin embargo: + +* No son persistentes tras reiniciar xahaud +* La cantidad de historial depende de la memoria disponible + +Por ello, es obligatorio usar: + +* `online_delete` +* `advisory_delete` + +Además, se recomienda desactivar SWAP para evitar que la memoria se escriba en disco. + +Configuración: + +``` + +[relational_db] +type=RWDB + +[node_db] +type=RWDB +online_delete=256 +advisory_delete=0 + +``` + +## Clustering + +El clustering permite que múltiples servidores xahaud confíen entre sí y compartan carga. + +Beneficios: + +* Compartir información sobre conexiones maliciosas +* Propagar transacciones automáticamente +* Mayor probabilidad de inclusión en el ledger +* Mejor conectividad para validadores seguros + +Recomendaciones: + +* No conectar con servidores externos +* Baja latencia (idealmente mismo datacenter) + +### Crear cluster + +1. Generar claves en cada nodo: + +``` + +./xahaud validation_create + +``` + +2. Configurar `xahaud.cfg`: + +* `[ips_fixed]`: IP y puerto de peers +* `[node_seed]`: clave privada +* `[cluster_nodes]`: claves públicas de peers + +3. Reiniciar: + +``` + +systemctl restart xahaud + +``` + +4. Verificar: + +``` + +./xahaud peers + +``` + +### Ejemplo + +``` + +[ips_fixed] +10.1.1.2 21337 +10.1.1.3 21337 +10.1.1.4 21337 + +[cluster_nodes] +clave_pub_1 +clave_pub_2 +clave_pub_3 + +[node_seed] +clave_privada_local + +``` \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/index.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/index.mdx new file mode 100644 index 0000000..63a1260 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/index.mdx @@ -0,0 +1,45 @@ +--- +title: Build xahaud +description: Configuración del entorno de compilación de xahaud y compilación de xahaud +--- + +import { Aside } from '@astrojs/starlight/components'; + +Construir software, como xahaud, a partir del código fuente disponible públicamente es un proceso complejo que requiere conocimientos técnicos avanzados y experiencia. Por ello, existen múltiples enfoques que los desarrolladores pueden adoptar, dependiendo del entorno (por ejemplo, Linux, MacOS, Windows). Las instrucciones de los siguientes capítulos están diseñadas para simplificar y ampliar las del [repositorio de GitHub de xahaud](https://github.com/Xahau/xahaud/blob/dev/BUILD.md). Es posible que los desarrolladores necesiten desviarse de estas instrucciones para realizar tareas específicas o asegurar compatibilidad con determinados sistemas operativos. + +Los siguientes artículos detallan el proceso de configuración del entorno de compilación y la construcción de xahaud en distintos sistemas operativos. + + + +## Construcción de software desde el código fuente + +Cuando los desarrolladores escriben software, lo hacen en lenguajes de programación diseñados para ser legibles por humanos. Sin embargo, no es eficiente que los ordenadores ejecuten directamente este código. Por ello, es necesario "compilar" el código a un formato (bytecode) que pueda ser interpretado de forma eficiente por la máquina. + +Este proceso se complica porque los desarrolladores suelen depender de software escrito por otros, llamados "dependencias", ya que un software necesita de otro para funcionar. Para que estas dependencias formen parte del producto final, deben ser "enlazadas" antes de la compilación. Este proceso puede ser intensivo, ya que las dependencias también pueden tener sus propias dependencias, generando múltiples capas. Para simplificar esto, se utilizan herramientas como Conan, que ayudan a localizar, configurar y enlazar dependencias. + +Todo el proceso de gestionar dependencias, compilar el software y ejecutar pruebas se denomina "build". + +Dado que xahaud es [software de código abierto publicado en GitHub](https://github.com/Xahau/xahaud), cualquiera puede ver, auditar, modificar, compilar y ejecutar el código. Compilar desde el código fuente garantiza que el software ejecutado corresponde exactamente al código público auditado. Por ello, los operadores de validadores que priorizan la seguridad deberían considerar este enfoque. + +## Dependencias + +Para asegurar la compatibilidad, es importante utilizar versiones específicas del software requerido. xahaud está desarrollado en C++20. + +Requisitos actuales para compilar xahaud: + +| Dependencia | Versión | +|------------|---------| +| Python3 | >= 3.7 | +| GCC / G++ | >= 14.x | +| CMake | >= 3.16 | +| Conan2 | 2.x | +| openssl | 1.1.1 | +| boost | 1.86.0 | +| SQLite3 | 3.42.0 | +| Snappy* | 1.1.10 | +| SOCI* | 4.0.3 | +| WasmEdge* | 0.11.2 | + +\* Incluidos en el repositorio GitHub de Xahau/xahaud. \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx new file mode 100644 index 0000000..dae34e9 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx @@ -0,0 +1,211 @@ +--- +title: Instrucciones de compilación en Linux +--- + +import { Aside } from '@astrojs/starlight/components'; + +Estas instrucciones están diseñadas para funcionar en distribuciones basadas en Debian (como Ubuntu 22.04 y 24.04) y Red Hat Enterprise Linux (9 o 10). Muchas instrucciones son comunes, aunque se indican diferencias entre sistemas operativos cuando corresponde. Aunque se intenta probar en múltiples entornos, Ubuntu es el entorno más probado y soportado para compilar y ejecutar xahaud. + +Para instrucciones adicionales, consulta el archivo [BUILD.md](https://github.com/Xahau/xahaud/blob/dev/BUILD.md) en el repositorio GitHub de Xahau/xahaud. + + + +## Instalar dependencias + +Usuarios Debian/Ubuntu: + +``` + +sudo apt install -y git curl wget python3-pip python3-venv python3-dev ca-certificates gcc g++ build-essential cmake ninja-build libc6-dev libssl-dev libsqlite3-dev + +``` + +Usuarios RHEL 9/10: + +``` + +sudo dnf install epel-release && sudo dnf update -y +sudo dnf config-manager --set-enabled crb -y +sudo dnf groupinstall "Development Tools" -y +sudo dnf install curl wget git ca-certificates cmake glibc-headers glibc-devel ninja-build perl-interpreter perl perl-FindBin sqlite-devel libstdc++ libstdc++-devel libstdc++-static gcc-c++ -y + +``` + +## Clonar el repositorio + +``` + +git clone [https://github.com/Xahau/xahaud.git](https://github.com/Xahau/xahaud.git) + +``` + +### Seleccionar rama + +``` + +git checkout [nombre-de-rama] + +``` + +### Preparar directorio de build + +``` + +mkdir [/ruta/xahaud]/.build + +``` + +## Instalar y configurar Conan2 + +``` + +cd [/ruta/xahaud]/.build +python3 -m venv env +source ./env/bin/activate +pip install --upgrade pip +pip install conan +conan profile detect + +``` + +Exportar dependencias: + +``` + +conan export external/snappy --version 1.1.10 --user xahaud --channel stable +conan export external/soci --version 4.0.3 --user xahaud --channel stable +conan export external/wasmedge --version 0.11.2 --user xahaud --channel stable + +``` + +Editar perfil Conan si es necesario: + +``` + +[settings] +compiler.cppstd=20 +compiler.libcxx=libstdc++11 + +[conf] +tools.build:cxxflags=['-Wno-restrict'] + +``` + +## Compilar xahaud + +``` + +conan install .. --output-folder . --build missing --settings build_type=["Release" o "Debug"] + +``` + +Opcional: + +``` + +conan install .. --output-folder . --build missing --settings build_type=["Release" o "Debug"] -s compiler=gcc ... + +``` + +Ejecutar cmake: + +``` + +cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW +-DCMAKE_BUILD_TYPE=["Release" o "Debug"] +-DCMAKE_TOOLCHAIN_FILE=build/generators/conan_toolchain.cmake +.. + +``` + +Compilar: + +``` + +cmake --build . + +``` + +El binario resultante es `rippled`. Renómbralo a `xahaud`. + +## Test + +``` + +./xahaud --unittest + +``` + +## Entornos de compilación + +### Contenedores + +Puedes usar Docker para aislar el entorno. + +Instalación: + +``` + +# Ubuntu + +sudo apt install docker.io docker-compose-v2 docker-buildx + +# RHEL + +sudo dnf install docker-ce docker-ce-cli containerd.io + +``` + +Ejemplo: + +``` + +docker buildx build -t xahaud-builder . +docker run -d --name xahaud xahaud:latest + +``` + +### Sistemas amnésicos + +Permiten restaurar el sistema tras reiniciar. + +#### Debian + +``` + +apt install overlayroot +sudo sed -i '...' /etc/overlayroot.conf +update-initramfs -u +reboot + +``` + +#### RHEL + +``` + +dnf install dracut +dracut -f +grubby --update-kernel=ALL --args="systemd.volatile=overlay" + +``` + +### Desactivar modo amnésico + +Debian: + +``` + +overlayroot=disabled + +``` + +RHEL: + +``` + +grubby --remove-args="systemd.volatile=overlay" + +``` \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/macos.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/macos.mdx new file mode 100644 index 0000000..c31e257 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/macos.mdx @@ -0,0 +1,9 @@ +--- +title: macOS +--- + +import { Aside } from '@astrojs/starlight/components'; + + \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/enabling-validation.mdx b/src/content/docs/es/docs/infrastructure/enabling-validation.mdx new file mode 100644 index 0000000..87d5694 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/enabling-validation.mdx @@ -0,0 +1,152 @@ +--- +title: Habilitar validación en xahaud +--- + +import { Aside } from '@astrojs/starlight/components'; + +Los validadores son nodos de xahaud configurados con un par de claves pública/privada adicional, utilizado para firmar cada ledger propuesto. Por ello, los validadores son el mecanismo principal para lograr consenso sobre el orden de las transacciones en la red Xahau. + +## Consideraciones previas + +### Seguridad y disponibilidad + +Operar un validador requiere altos niveles de seguridad y disponibilidad: + +* Monitorización continua del servidor +* Respuesta rápida ante caídas +* Uso de servidores de respaldo en distintos centros de datos + +Ejecutar un validador desde casa es posible, pero difícilmente alcanzará el nivel de confianza necesario (por ejemplo, inclusión en UNLs). + +Recomendaciones: + +* No ejecutar otros servicios en el mismo servidor +* Separar nodos de consulta (RPC/WebSocket) de validadores +* Proteger el archivo `xahaud.cfg`: +``` + +chmod 400 xahaud.cfg +chown root:root xahaud.cfg + +```id="f6e1n7" + +Las claves privadas deben almacenarse de forma segura y offline. + +### Identidad + +Para evitar ataques Sybil y generar confianza: + +* Firmar un dominio con las claves del validador +* Publicar un archivo TOML en: + +``` + +[https://tu-dominio.com/.well-known/xahau.toml](https://tu-dominio.com/.well-known/xahau.toml) + +```id="g0e9m3" + +Este archivo permite verificar la identidad del validador o cuentas. + +### Peering + +Para mayor seguridad: + +* Solo conectarse a nodos confiables +* Usar `peer_private` y `ips_fixed` +* Usar firewall + +Advertencia: menos de ~5 peers puede causar desincronización. + +### Gobernanza y confianza + +Xahau usa el [Governance Game](/docs/features/governance-game) y listas UNL. + +Un validador confiable suele tener: + +1. Alta disponibilidad (24/7) +2. Alto consenso con la red +3. Identidad clara (propietario y ubicación) +4. Participación activa en enmiendas y fees + +## Habilitar validación + +Proceso: + +1. Generar claves +2. Crear token de validación +3. Instalar token en `xahaud.cfg` + +### Herramienta de claves + +No existe binario oficial, por lo que debes: + +* Compilar desde el repositorio: +https://github.com/Xahau/validator-keys-tool + +Recomendado: hacerlo en máquina offline segura. + +Nota: `validation_create` NO genera tokens de validación, solo claves para identificar nodos. + +### Generar e instalar claves + +1. Ir al directorio: +``` + +cd [/ruta/tool] + +```id="y3m7g5" + +2. Generar claves: +``` + +./validator-keys create_keys + +```id="dlf9g2" + +3. Se guardan en: +``` + +~/.xahaud/validator-keys.json + +```id="qk8l1z" + +4. Opcional: añadir dominio: +``` + +./validator-keys set_domain ejemplo.com + +```id="k2r6js" + +O generar token sin dominio: +``` + +./validator-keys create_token --keyfile ~/.xahaud/validator-keys.json + +```id="n8f3qp" + +5. Guardar: + +* `validator_token` +* `attestation=""` (si usas dominio) + +⚠️ Importante: +El campo `token_sequence` se incrementa automáticamente. +Tokens antiguos serán ignorados si existe uno más reciente. + +6. Añadir en `xahaud.cfg`: + +``` + +[validation_token] +... + +```id="4g8t1c" + +7. Añadir attestation al archivo TOML + +8. Reiniciar xahaud + +--- + +🔒 Recomendación final: +Mantén siempre las claves privadas fuera del servidor validador. \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/identity.mdx b/src/content/docs/es/docs/infrastructure/identity.mdx new file mode 100644 index 0000000..fd7536e --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/identity.mdx @@ -0,0 +1,274 @@ +--- +title: Servir un archivo TOML para verificación de identidad +--- + +***La verificación de identidad requiere dos partes. NUNCA CONFÍES únicamente en archivos TOML o en atestaciones de validadores/cuentas en la red para confirmar identidad, ya que cualquiera puede configurarlas. Un sitio web (URL) debe reclamar la propiedad del validador/cuenta, y los datos en la red deben coincidir.*** + +Dado que la confianza es fundamental en la red Xahau, es ideal que las entidades que operan validadores xahaud asuman la autoría de sus servidores. La atestación de identidad proporciona garantías a los usuarios de que una sola entidad no está obteniendo un control desproporcionado sobre los validadores confiables (UNL por defecto) en la red. + +Esto se logra publicando dos atestaciones: + +1. Desde un servidor validador en la red Xahau +2. Desde un servidor web que sirva el dominio mediante TLS + +De esta forma: + +* El validador declara su asociación con el dominio web +* El dominio web declara su asociación con el validador + +*Sin ambas pruebas, no se puede confiar en la identidad.* + +--- + +De forma similar, los titulares de cuentas pueden publicar un archivo TOML para demostrar que controlan determinadas cuentas en la red. + +Esto es especialmente relevante para: + +* Exchanges +* Instituciones financieras + +La verificación también requiere dos partes: + +* Un servidor web que reclame la propiedad +* Una cuenta en la red que confirme esa propiedad + +Esto da confianza a los usuarios al enviar fondos. + +--- + +El formato es similar al usado en: + +* [Stellar](https://developers.stellar.org/docs/tokens/publishing-asset-info) +* [XRP Ledger](https://xrpl.org/docs/references/xrp-ledger-toml) + +--- + +## Configuración del servidor web y DNS + +1. El archivo debe estar en formato [TOML](https://github.com/toml-lang/toml) +2. Debe servirse desde: + +``` + +https://[subdominio-opcional.tu-dominio.com]/.well-known/xahau.toml + +``` + +* La ruta debe ser exactamente `/.well-known/xahau.toml` +* Todo en minúsculas + +3. Debe usarse TLS válido +4. Se recomienda DNSSEC +5. Se pueden usar subdominios +6. Content-Type: `application/toml` +7. Debe incluir CORS: + +``` + +Access-Control-Allow-Origin: * + +``` + +8. Se pueden añadir cabeceras adicionales +9. Se permiten campos personalizados +10. Ningún campo es obligatorio + +--- + +### Configuración CORS + +Apache: +``` + + +Header set Access-Control-Allow-Origin "*" + +``` + +Nginx: +``` + +location /.well-known/xahau.toml { +add_header 'Access-Control-Allow-Origin' '*'; +} + +```` + +--- + +## Contenido del archivo TOML + +Secciones típicas: + +* METADATA +* ORGANIZATION +* PRINCIPALS +* VALIDATORS +* SERVERS +* ACCOUNTS +* CURRENCIES + +--- + +### Ejemplo + +```toml +[METADATA] +modified = 2025-08-04T14:24:34.123Z +expired = 2025-12-31T14:24:34.123Z + +[ORGANIZATION] +name = "A Company B.V." +website = "https://example.com" +email = "contact@example.com" + +[[PRINCIPALS]] +name = "A. Person" +email = "a_person@example.com" + +[[VALIDATORS]] +public_key = "..." +attestation = "..." + +[[ACCOUNTS]] +address = "rabc..." +desc = "Wallet de depósitos" + +[[CURRENCIES]] +code = "USD" +issuer = "rabc..." +```` + +--- + +## Metadata + +* Fechas en UTC con milisegundos +* Solo una sección permitida + +| Campo | Tipo | Descripción | +| -------- | --------- | ------------------- | +| modified | Date-Time | Última modificación | +| expires | Date-Time | Fecha de expiración | + +--- + +## Organización + +Identifica la entidad responsable. + +| Campo | Descripción | +| -------- | -------------- | +| name | Nombre | +| email | Email | +| website | Web | +| social_x | Redes sociales | + +--- + +## Principales (contactos) + +| Campo | Descripción | +| -------- | ----------- | +| name | Nombre | +| email | Email | +| website | Web | +| social_x | Redes | + +--- + +## Validadores + +Se recomienda incluir: + +* Clave pública +* Atestación +* País +* ASN +* UNL + +--- + +## Servidores + +| Campo | Descripción | +| -------- | ------------- | +| ws | WebSocket | +| json_rpc | RPC | +| peer | Conexión peer | +| network | Red | + +--- + +## Cuentas + +| Campo | Descripción | +| ------- | ---------------- | +| address | Dirección (r...) | +| network | Red | +| desc | Descripción | + +--- + +## Monedas + +⚠️ IMPORTANTE: verificar emisor además del código + +| Campo | Descripción | +| ---------------- | ----------- | +| code | Código | +| issuer | Emisor | +| symbol | Símbolo | +| network | Red | +| display_decimals | Decimales | + +--- + +## Verificación de dominio del validador + +El archivo TOML permite reclamar propiedad, pero: + +* El validador también debe confirmarlo +* Es esencial para la confianza + +Si ya generaste claves: + +* Añade `attestation=""` al TOML +* Verifica `[validation_token]` en `xahaud.cfg` + +Si no: + +``` +./validator-keys set_domain ejemplo.com +``` + +Ruta del archivo: + +``` +~/.xahaud/validator-keys.json +``` + +--- + +## Verificación de dirección de wallet + +Requiere: + +1. Incluir en TOML: + +``` +[[ACCOUNTS]] +address = "r..." +``` + +2. Enviar transacción: + +``` +AccountSet (con campo Domain) +``` + +--- + +Esto garantiza que la dirección pertenece al dominio indicado. + +``` \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/installing-xahaud.mdx b/src/content/docs/es/docs/infrastructure/installing-xahaud.mdx new file mode 100644 index 0000000..aaa1f0f --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/installing-xahaud.mdx @@ -0,0 +1,214 @@ +--- +title: Install xahaud +description: >- + The software behind Xahau is open source, and anyone can run a node locally. Users can run a Docker container, a local instance, or a binary file. +--- +import { Aside } from '@astrojs/starlight/components'; + +When running a node, users will have to configure settings based on whether the node will run on the test network or the main network. When transitioning a single node from one network to the other, database files must be wiped, except wallet.db, which contains the server's identity credentials. + +The most common techniques for installing xahaud are either locally using systemd or inside a container, such as Docker. + + + +## Linux Install Process +Regardless of how xahaud is installed (Docker or system-wide), the overall process is similar across Linux systems. +The following sections, [Docker Container](#docker-container-install-script) and [Local Install](#local-install-script), take advantage of bash scripts, which automate the following steps: + +1. Obtain the xahaud binary: + - Downoad a compiled binary image from [https://build.xahau.tech](https://build.xahau.tech) + - [Build from source](/docs/infrastructure/build-xahaud/) +2. Obtain the configuration files: + - [xahaud.cfg](https://raw.githubusercontent.com/Xahau/xahaud/refs/heads/dev/cfg/xahaud-example.cfg) + - [validators-xahau.txt](https://raw.githubusercontent.com/Xahau/xahaud/refs/heads/dev/cfg/validators-example.txt) +3. If desired, create a xahaud user and group, which can own the binary and other relevant files: + - `sudo groupadd --system xahaud` + - `sudo useradd --system --gid xahaud --no-create-home xahaud` +4. Decide on (and create) a directory structure to store: + - The xahaud binary. The default is typically: `/opt/xahaud/bin/xahaud` + - Two xahaud configuration files, `xahaud.cfg` and `validators-xahau.txt`. The default is: `/etc/xahaud/`, though `/opt/xahaud/etc/` is often used. These two locations can be symbolically linked. + - The xahaud databases. The default is often: `/opt/xahaud/db/` + - A logfile location, such as: `/var/log/xahaud/default.log` +5. Move the xahaud binary and configuration files into their places in the directory structure. +6. Edit `xahaud.cfg` so paths in the configuration match the paths in the directory structure. +7. If needed, change ownership permissions. If running xahaud as a validator, it is important to restrict the `xahaud.cfg` file, as that contains the validation token. + - `chown -R xahaud:xahaud /opt/xahaud /var/log/xahaud` + - `chmod -R 750 /opt/xahaud /var/log/xahaud` +8. Create a systemd service file (such as the example [below](#example-systemd-service-file) to run xahaud as a daemon. + - The file is located at: `/etc/systemd/system/xahaud.service` + - After creating or editing the file, run: `systemctl daemon-reload` + - To run xahaud automatically at system startup: `systemctl enable --now xahaud` + - If preferred, xahaud can be run without systemd: `/path/to/xahaud --conf=/path/to/xahaud.cfg` +9. Create a wrapper to run xahaud commands without having to specify the full path. + - Typically stored at `/usr/local/bin/xahaud` + - Contents might be: `exec ${XAHAUD_DIR}xahaud --conf=${CONF_DIR}xahaud.cfg "$@"` + +### Example systemd Service File +The following service file should be modified based on the user's selected directory structure and ownership permissions. +``` +[Unit] +Description=Xahaud Daemon +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +ExecStart=/path/to/xahaud --silent --conf=/path/to/xahaud.cfg +Restart=on-failure +User=xahaud +Group=xahaud +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +### Example Linux Install Script +A basic bash script used to install xahaud. This script follows the instructions provided earlier this this section. +``` +### VARIABLES ### + +#### Directory structure #### +XAHAUD_DIR="/opt/xahaud/bin/" # Path where xahaud binary will be stored +CONF_DIR="/opt/xahaud/etc/" # Path where the xahaud.cfg and validators-xahau.txt will be stored +DB_DIR="/opt/xahaud/db/" # Path where xahaud will store databases +LOG_DIR="/var/log/xahaud/" # Path where logfile(s) will be stored. + +#### Ownership #### +XAHAUD_USER="xahaud" # User that owns the xahaud process. + +#### Download links #### +BINARY_URL="https://build.xahau.tech/2025.9.8-HEAD%2B2194" # URL to the xahaud binary that will be downloaded. +CFG_URL="https://raw.githubusercontent.com/Xahau/xahaud/refs/heads/dev/cfg/xahaud-example.cfg" # This will be renamed to 'xahaud.cfg' +VAL_URL="https://raw.githubusercontent.com/Xahau/xahaud/refs/heads/dev/cfg/validators-example.txt" # This will be renamed to 'validators-xahau.txt' + + + +########## SCRIPT BEGINS HERE. DO NOT ADJUST VARIABLES BELOW THIS LINE ########## + +### CREATE DIRECTORIES #### +echo "Checking directory structure." +sudo mkdir -p ${XAHAUD_DIR} ${CONF_DIR} ${DB_DIR} ${LOG_DIR} + +### CREATE xahaud GROUP AND USER ### +echo "Checking for user and group." +if ! getent group ${XAHAUD_USER} > /dev/null; then + sudo groupadd --system ${XAHAUD_USER} +fi + +if ! getent passwd ${XAHAUD_USER} > /dev/null; then + sudo useradd --system --gid ${XAHAUD_USER} --no-create-home ${XAHAUD_USER} +fi + +### DOWNLOAD CONFIGURATION FILES ### +echo "Downloading files." +if [[ ! -f "${CONF_DIR}xahaud.cfg" ]]; then + curl -fsSL ${CFG_URL} -o ${CONF_DIR}xahaud.cfg +fi +if [[ ! -f "${CONF_DIR}validators-xahau.txt" ]]; then + curl -fsSL ${VAL_URL} -o ${CONF_DIR}validators-xahau.txt +fi + +### DOWNLOAD xahaud ### +if [[ ! -f "${XAHAUD_DIR}xahaud" ]]; then + curl -fsSL ${BINARY_URL} -o ${XAHAUD_DIR}xahaud +elif [[ -f "${XAHAUD_DIR}xahaud" ]]; then + echo "Existing xahaud binary found. It will be renamed to 'xahaud.old'." + mv ${XAHAUD_DIR}xahaud ${XAHAUD_DIR}xahaud.old + curl -fsSL ${BINARY_URL} -o ${XAHAUD_DIR}xahaud +fi + +### CHANGE OWNERSHIP AND PERMISSIONS ### +echo "Checking ownership and permissions." +sudo chown -R ${XAHAUD_USER}:${XAHAUD_USER} ${XAHAUD_DIR} ${CONF_DIR} ${DB_DIR} ${LOG_DIR} +sudo chmod -R 0750 ${XAHAUD_DIR} ${CONF_DIR} ${DB_DIR} ${LOG_DIR} + +### Install systemd SERVICE FILE ### +if [[ ! -f "/etc/systemd/system/xahaud.service" ]]; then +echo "Installing system service file." +sudo cat > /etc/systemd/system/xahaud.service < /usr/local/bin/xahaud <git clone [repository-url] +2. Navigate to the repository directory: cd [repository-name] +3. Run: ./build +4. Run: ./up +5. Commands and additional information are located in the README.md file in the Docker repository. Configuration files and databases are located in the `store` directory inside the Docker directory. + +## Local Install Script +The Xahau Docker repositories (Mainnet and Testnet) each contains a script to automate the local install process, so that xahaud can be run outside of Docker. These scripts are similar to the [Linux Install Summary](#linux-install-process), as they will create systemd files, a 'xahaud' user, and default configuration files. The URLs for these scripts are in the table at the bottom of this page. To install locally: + +1. Download and run the install script: curl -sL [https://link-to-script] | bash +2. Edit the configuration file: /opt/xahahud/etc/xahaud.cfg +3. Verify and, if needed, edit the contents of the trusted validators file: /opt/xahaud/etc/validators-xahau.txt +4. Start and enable xahaud to run automatically: systemctl enable --now xahaud +5. Verify xahaud is running: /opt/xahaud/bin/xahaud server_info + +## Resources, Peering, and Configurations +This peering is relevant for both Docker containers and local installations. + + + + + + + + + + + + + + + + + + + + + + +
ResourceMain NetworkTest Network
Documentation and Resourceshttps://xahau.network/Same as Mainnet
Hooks Smart Contract Documentationhttps://xahau.network/docs/hooks/Same as Mainnet
Explorerhttps://explorer.xahau.network/https://explorer.xahau-test.net
Public WebSocket URLwss://xahau.networkwss://xahau-test.net
Network ID and Peer Listening Port21337 IANA assigned port21338
Peering and Bootstrap Serversbacab.alloy.ee 21337

hubs.xahau.as16089.net 21337
79.110.60.122 21338

79.110.60.124 21338

79.110.60.125 21338

79.110.60.121 21338



2a0c:3bc0::1c74 21338

2a0c:3bc0::169d 21338

2a0c:3bc0::1aaf 21338

2a0c:3bc0::1d78 21338
Docker Containerhttps://github.com/Xahau/mainnet-dockerhttps://github.com/Xahau/Xahau-Testnet-Docker
Local Install Scriptshttps://raw.githubusercontent.com/Xahau/mainnet-docker/refs/heads/main/xahaud-install-update.shhttps://github.com/Xahau/Xahau-Testnet-Docker/blob/main/xahaud-install-update.sh
Binary Releaseshttps://build.xahau.techSame as Mainnet
Sample Configuration Filehttps://github.com/Xahau/xahaud/blob/dev/cfg/xahaud-example.cfghttps://github.com/Xahau/Xahau-Testnet-Docker/blob/main/store/etc/xahaud.cfg
Sample Trusted Validators (UNL) Filehttps://github.com/Xahau/xahaud/blob/dev/cfg/validators-example.txthttps://github.com/Xahau/Xahau-Testnet-Docker/blob/main/store/etc/validators-xahau.txt
Documented Configuration Fileshttps://github.com/Xahau/xahaud/tree/dev/cfgSame as Mainnet
Github Build Actions (release numbers)https://github.com/Xahau/xahaud/actions?query=branch%3Arelease+is%3Asuccess+build+using+dockerSame as Mainnet
\ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/interacting.mdx b/src/content/docs/es/docs/infrastructure/interacting.mdx new file mode 100644 index 0000000..b22c674 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/interacting.mdx @@ -0,0 +1,65 @@ +--- +title: Interactuar con xahaud usando WebSocket y RPC +--- + +El software xahaud proporciona interfaces tanto WebSocket como RPC que pueden configurarse para diversos casos de uso, como enviar transacciones o consultar el historial del ledger. Algunos usuarios pueden optar por colocar software proxy delante de xahaud para proporcionar cifrado, balanceo de carga u otros beneficios. Es posible instalar certificados TLS en el archivo `xahaud.cfg` usando parámetros como `ssl_key = [/ruta/a/clave]`. + +## Configuración de puertos WebSocket y RPC + +Para habilitar puertos de escucha, edita el archivo `xahaud.cfg`. Los puertos habilitados se enumeran en la sección `[server]` del archivo de configuración. Cada puerto listado bajo la sección `[server]` debe definirse además mediante su propia sección. + +Además de configurar puertos WebSocket o RPC, los administradores también pueden configurar el puerto utilizado para escuchar conexiones peer entrantes (`port_peer`). En servidores validadores, lo ideal es eliminar `port_peer` del archivo de configuración para evitar conexiones entrantes. + +Un archivo de configuración con el protocolo peer, un puerto WebSocket y un puerto RPC podría verse así: + +``` + +[server] +port_peer +port_ws_public +port_rpc_public + +[port_peer] # Nombre del puerto. +protocol = peer # Campo obligatorio. +port = 21337 # Campo obligatorio. +ip = :: # Dirección de la interfaz a la que se vincula. + +[port_ws_public] +protocol = ws +port = 16006 +ip = :: +limit = 150 # Número máximo de clientes permitidos en este puerto. "0" significa ilimitado. +admin = [ 10.10.10.5, 10.11.11.0/24 ] # Direcciones IP o subredes autorizadas para enviar solicitudes [admin](/docs/features/http-websocket-apis/admin-api-methods). +secure_gateway = [ 10.10.10.20, 10.15.15.0/24 ] # Direcciones autorizadas para enviar cabeceras X-Forwarded-For y X-User. + +[port_rpc_public] +protocol = http +port = 16007 +ip = :: + +```id="j1gk8r" + +Opciones adicionales de configuración para conexiones WebSocket y RPC están disponibles en el [archivo de configuración de ejemplo](https://github.com/Xahau/xahaud/blob/dev/cfg/rippled-example.cfg). + +## UDP RPC + +xahaud soporta RPC basado en UDP para consultas de alto rendimiento y baja latencia. UDP RPC es útil para aplicaciones que necesitan realizar muchas consultas rápidas y pueden tolerar alguna pérdida ocasional de paquetes. + +Para habilitar UDP RPC, añade una definición de puerto UDP en tu `xahaud.cfg`: + +``` + +[server] +port_udp_rpc + +[port_udp_rpc] +protocol = http +port = 16008 +ip = :: +transport = udp + +```id="dc0rrx" + +Las solicitudes UDP RPC utilizan el mismo formato JSON-RPC que HTTP RPC, pero se envían como datagramas UDP. Las respuestas también se envían por UDP. Como UDP no mantiene conexión, cada solicitud debe incluir todo el contexto necesario, y los clientes deben manejar posibles pérdidas de paquetes implementando lógica de reintento. + +**Nota:** UDP RPC es más adecuado para operaciones de solo lectura. El envío de transacciones debe hacerse usando WebSocket o HTTP RPC para mayor fiabilidad. \ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/system-requirements.mdx b/src/content/docs/es/docs/infrastructure/system-requirements.mdx new file mode 100644 index 0000000..5a6c171 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/system-requirements.mdx @@ -0,0 +1,37 @@ +--- +title: Requisitos del sistema +--- + +Los requisitos de hardware para nodos personalizados según distintas tareas (por ejemplo, RPC/WS, hubs, validadores, etc.) deben ser consistentes con las especificaciones indicadas a continuación. Considera ajustar tu sistema según el caso de uso previsto. + +## Tipos de nodos + +Es posible ejecutar xahaud en diversas configuraciones según las necesidades del usuario. Del mismo modo, un servidor xahaud puede configurarse para múltiples propósitos, como un servidor de historial completo que también se utilice para llamadas RPC/WS. El propósito del servidor determina los requisitos necesarios. Algunas configuraciones posibles incluyen: + +1. **Servidor estándar (stock)** + Este término se usa comúnmente para referirse a cualquier nodo xahaud que no esté configurado como validador. Generalmente tiene muy pocos cambios respecto a la configuración por defecto. + +2. **Servidores de historial completo** + Son útiles para consultar datos históricos. Además de un gran espacio de almacenamiento, pueden requerir mayor rendimiento de disco (IOPS) y ancho de banda de red dependiendo del número de usuarios que consulten el servidor. + +3. **Servidores RPC/WebSocket** + Están orientados a tareas como enviar transacciones o consultar datos actuales del ledger, como libros de órdenes o el flujo de validación. A menudo se coloca Nginx u otro software proxy delante de estos servidores para proporcionar balanceo de carga, cifrado y otros beneficios. + +4. **Servidor hub** + El peering entre nodos es fundamental para retransmitir mensajes en la red Xahau, y un solo servidor puede configurarse para dar servicio a cientos de peers. Sin embargo, puede requerir un gran ancho de banda (10 Gbit+). + +5. **Servidores validadores** + Los validadores se diferencian de otros nodos en que requieren una clave criptográfica adicional para firmar la secuencia de transacciones en un ledger propuesto. Dado que la disponibilidad y la seguridad son críticas, no se recomienda usar un validador para otras funciones. + +## Notas generales + +* Las compilaciones suelen probarse en Ubuntu LTS, pero Docker, binarios portables y builds personalizados permiten soporte para múltiples sistemas operativos. +* Normalmente se necesita una dirección IPv4 y/o IPv6 por cada instancia de xahaud. No se recomienda ejecutar múltiples instancias detrás de una sola IP. +* Los servidores que almacenan historial completo deben usar XFS o similar para evitar limitaciones de tamaño de archivo en EXT4 (máximo 16 TB). Para menor historial, EXT4 es suficiente. +* Es posible ejecutar xahaud en máquinas que no cumplan los requisitos mínimos, pero esto puede provocar inestabilidad. +* Estos requisitos pueden aumentar con el tiempo. Por ejemplo, el espacio necesario para historial completo crece continuamente. +* A fecha de 1 de noviembre de 2025, **el historial completo de la red Xahau es de 10 TB**. + +## Especificaciones recomendadas para servidores xahaud en producción + +
MínimoRecomendadoIdeal
CPU (2.5+ GHz x86_64)8 núcleos20 núcleos40+ núcleos
Memoria32GB64GB128GB+
IO de disco (sostenido)15k RW aleatorio20k RW aleatorio30k RW aleatorio
Tamaño de disco500GB1TB20TB+
Sistema de archivosXFSXFSXFS
IO de red500Mbit+1Gbit10Gbit
\ No newline at end of file diff --git a/src/content/docs/es/docs/infrastructure/updating-xahaud.mdx b/src/content/docs/es/docs/infrastructure/updating-xahaud.mdx new file mode 100644 index 0000000..1e5a202 --- /dev/null +++ b/src/content/docs/es/docs/infrastructure/updating-xahaud.mdx @@ -0,0 +1,171 @@ +--- +title: Actualizar xahaud +--- + +El proceso para actualizar xahaud varía según el método de instalación utilizado, sin embargo, los tres métodos dependen de las versiones publicadas en [https://build.xahau.tech](https://build.xahau.tech). Al actualizar un validador, hub u otra infraestructura crítica, es importante comprobar el estado de la red antes de reiniciar el servidor para aplicar la actualización. + +Es posible automatizar el proceso de actualización mediante una entrada en crontab y un script, pero no se recomienda hacerlo, ya que las actualizaciones automáticas pueden provocar reinicios en momentos en que la red esté inestable. Además, la supervisión humana permite verificar que la actualización se ha realizado correctamente, minimizando el tiempo de inactividad. + +## Copias de seguridad + +Los usuarios deben mantener siempre copias de seguridad de: + +1. Archivo de configuración principal: `xahaud.cfg` + - La ubicación depende del tipo de instalación. + +2. Archivo de validadores confiables: `validators-xahau.txt` + - La ubicación está definida en `xahaud.cfg`. + +3. Credenciales de identidad del servidor: `wallet.db` + - Ubicado en el directorio de base de datos definido en `xahaud.cfg`. + +4. Los validadores deben mantener su clave privada de validación en un entorno seguro y fuera de línea. + +--- + +## Actualizar contenedores Docker + +Actualizar xahaud en un contenedor Docker implica reemplazar el binario en ejecución por una nueva versión descargada desde [https://build.xahau.tech](https://build.xahau.tech). Esto puede hacerse reemplazando el binario dentro del contenedor o actualizando todo el contenedor. + +### Actualizar el binario dentro del contenedor + +1. Descargar el script: +``` + +wget [https://gist.githubusercontent.com/WietseWind/2ed35d85dcd056d82645de2958934f86/raw/34be773fd6af42e82cc3a21baf70bfb1e2a6c583/update.sh](https://gist.githubusercontent.com/WietseWind/2ed35d85dcd056d82645de2958934f86/raw/34be773fd6af42e82cc3a21baf70bfb1e2a6c583/update.sh) + +```id="k4o2dj" + +2. Editar el script y cambiar la primera línea por la versión deseada +3. Ejecutar el script: +``` + +bash ./update.sh + +```id="2y8n3p" + +4. Verificar: +``` + +docker exec xahaud-[mainnet/testnet] xahaud server_info + +```id="9r0qfw" + +--- + +### Reemplazar la imagen Docker completa + +1. Ir al repositorio: +``` + +cd [/ruta/al/repositorio] + +```id="w9lm1x" + +2. Actualizar: +``` + +git pull + +```id="xq5p2k" + +3. Ver contenedores activos: +``` + +docker ps + +```id="j3v8ns" + +4. Detener instancia: +``` + +docker stop xahaud-[mainnet/testnet] + +```id="c8f7rd" + +5. Eliminar instancia: +``` + +docker rm xahaud-[mainnet/testnet] + +```id="5b2hya" + +6. Iniciar nueva: +``` + +./build && ./up + +```id="l6m4qp" + +--- + +## Actualizar instalaciones locales + +1. Descargar nuevo binario: +https://build.xahau.tech + +2. Dar permisos de ejecución: +``` + +chmod +x [/ruta/al/binario] + +```id="r2w8kf" + +3. Detener xahaud: +``` + +/opt/xahaud/bin/xahaud stop + +```id="0g6ytn" + +4. Reemplazar binario: +``` + +mv [/ruta/al/binario] /opt/xahaud/bin/xahaud + +```id="h9p2xe" + +5. Iniciar: +``` + +systemctl start xahaud + +```id="q8j5vd" + +6. Verificar: +``` + +/opt/xahaud/bin/xahaud server_info + +```id="f4z7nm" + +Existe un script que automatiza estos pasos: +https://gist.githubusercontent.com/WietseWind/9480a4fc95e904e54524406005c8c963/raw/2b200fdc2e5b471ae4f6625674aff1765d63e744/update.sh + +--- + +## Actualizar archivos binarios + +1. Eliminar versión actual: +``` + +rm [/ruta/a/xahaud] + +```id="k1z7tx" + +2. Descargar nueva versión: +https://build.xahau.tech + +3. Dar permisos: +``` + +chmod 500 [/ruta/a/xahaud] + +```id="e7h2qs" + +4. Ejecutar: +``` + +./[ruta/a/xahaud] --net --conf [/ruta/a/xahaud.cfg] + +```id="p6n3wa" diff --git a/src/content/docs/es/docs/protocol-reference/binary-format.mdx b/src/content/docs/es/docs/protocol-reference/binary-format.mdx new file mode 100644 index 0000000..dcf7acf --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/binary-format.mdx @@ -0,0 +1,296 @@ +--- +title: Formato Binario +--- +[\[Source\]](https://github.com/Xahau/xahaud/blob/dev/src/ripple/protocol/impl/STObject.cpp#L696-L718) + +Esta página describe el formato binario canónico de Xahau para transacciones y otros datos. Este formato binario es necesario para crear y verificar firmas digitales del contenido de esas transacciones, y también se usa en otros lugares, incluidas las comunicaciones entre pares de servidores. Las APIs de `xahaud` típicamente usan JSON para comunicarse con aplicaciones cliente. Sin embargo, JSON no es adecuado como formato para serializar transacciones que van a ser firmadas digitalmente, porque JSON puede representar los mismos datos de muchas formas diferentes pero equivalentes. + +El proceso de serializar una transacción desde JSON u otra representación a su formato binario canónico puede resumirse con estos pasos: + +1. Asegurarse de que todos los campos requeridos estén provistos, incluyendo los campos requeridos pero "auto-rellenables". + + La Referencia de Formatos de Transacción define los campos requeridos y opcionales para las transacciones de Xahau. + + **Nota:** El `SigningPubKey` también debe proporcionarse en este paso. Al firmar, puedes derivar esta clave a partir de la clave secreta proporcionada para firmar. +2. Convertir los datos de cada campo a su formato binario "interno". +3. Ordenar los campos en orden canónico. +4. Prefijar cada campo con un ID de campo. +5. Concatenar los campos (incluidos los prefijos) en su orden ordenado. + +El resultado es un único blob binario que puede firmarse usando algoritmos de firma bien conocidos como ECDSA (con la curva elíptica secp256k1) y Ed25519. Para los propósitos de Xahau, también debes \[hashear]\[Hash] los datos con el prefijo apropiado (`0x53545800` si es firma simple, o `0x534D5400` si es multi-firma). Después de firmar, debes re-serializar la transacción con el campo `TxnSignature` incluido. + +**Nota:** Xahau usa el mismo formato de serialización para representar otros tipos de datos, como objetos del ledger y transacciones procesadas. Sin embargo, solo ciertos campos son apropiados para incluir en una transacción que se firma. (Por ejemplo, el campo `TxnSignature`, que contiene la firma misma, no debe estar presente en el blob binario que se firma.) Por ello, algunos campos se designan como campos de "Firma", que se incluyen en los objetos cuando esos objetos se firman, y campos de "no firma", que no se incluyen. + +#### Ejemplos + +Tanto las transacciones firmadas como las no firmadas pueden representarse en formatos JSON y binario. Los siguientes ejemplos muestran la misma transacción firmada en sus formatos JSON y binario: + +**JSON:** + +```json + +
+ +``` + +**Binario (representado en hexadecimal):** + +``` + +
+ +``` + +### Código de Ejemplo + +Los procesos de serialización descritos aquí están implementados en varios lugares y lenguajes de programación: + +* En C++ [en la base de código de `rippled`](https://github.com/Xahau/xahaud/blob/dev/src/ripple/protocol/impl/STObject.cpp). +* En JavaScript en la sección de ejemplos de código de este repositorio. +* En Python 3 en la sección de ejemplos de código de este repositorio. + +Además, muchas bibliotecas cliente ofrecen soporte de serialización bajo licencias de código abierto permisivas, por lo que puedes importar, usar o adaptar el código según tus necesidades. + +### Formato Interno + +Cada campo tiene un formato binario "interno" usado en el código fuente de `xahaud` para representar ese campo al firmar (y en la mayoría de los demás casos). Los formatos internos para todos los campos están definidos en el código fuente de [`SField.cpp`](https://github.com/Xahau/xahaud/blob/master/src/ripple/protocol/impl/SField.cpp). (Este archivo también incluye campos que no son de transacciones.) La Referencia de Formatos de Transacción también lista los formatos internos para todos los campos de transacciones. + +Por ejemplo, el campo común `Flags` se convierte en un UInt32 (entero sin signo de 32 bits). + +#### Archivo de Definiciones + +El siguiente archivo JSON define las constantes importantes que necesitas para serializar datos de Xahau a su formato binario y deserializarlos desde binario: + +[**https://github.com/Xahau/xahau.js/tree/main-xahau/packages/xahau-binary-codec/src/enums/definitions.json**](https://github.com/Xahau/xahau.js/tree/main-xahau/packages/xahau-binary-codec/src/enums/definitions.json) + +La siguiente tabla define los campos de nivel superior del archivo de definiciones: + +| Campo | Contenido | +| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `TYPES` | Mapa de tipos de datos a su "código de tipo" para construir IDs de campo y ordenar campos en orden canónico. Los códigos menores a 1 no deben aparecer en datos reales; los códigos mayores a 10000 representan tipos de objetos "de alto nivel" especiales como "Transaction" que no pueden serializarse dentro de otros objetos. Consulta la Lista de Tipos para detalles. | +| `LEDGER_ENTRY_TYPES` | Mapa de objetos del ledger a su tipo de dato. Aparecen en datos de estado del ledger y en la sección de "nodos afectados" de los metadatos de transacciones procesadas. | +| `FIELDS` | Un arreglo ordenado de tuplas que representan todos los campos que pueden aparecer en transacciones, objetos del ledger u otros datos. El primer miembro de cada tupla es el nombre de cadena del campo y el segundo es un objeto con las propiedades de ese campo. | +| `TRANSACTION_RESULTS` | Mapa de códigos de resultado de transacciones a sus valores numéricos. Los tipos de resultado no incluidos en ledgers tienen valores negativos; `tesSUCCESS` tiene valor numérico 0; los códigos clase `tec` representan fallos que se incluyen en ledgers. | +| `TRANSACTION_TYPES` | Mapa de todos los tipos de transacciones a sus valores numéricos. | + +Para los propósitos de serializar transacciones para firma y envío, los campos `FIELDS`, `TYPES` y `TRANSACTION_TYPES` son necesarios. + +Los objetos de definición de campo en el arreglo `FIELDS` tienen los siguientes campos: + +| Campo | Tipo | Contenido | +| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `nth` | Number | El código de campo de este campo, para construir su ID de campo y ordenarlo con otros campos del mismo tipo de dato. | +| `isVLEncoded` | Boolean | Si es `true`, este campo tiene prefijo de longitud. | +| `isSerialized` | Boolean | Si es `true`, este campo debe codificarse en datos binarios serializados. Cuando es `false`, el campo típicamente se reconstruye bajo demanda en lugar de almacenarse. | +| `isSigningField` | Boolean | Si es `true`, este campo debe serializarse al preparar una transacción para firmar. Si es `false`, este campo debe omitirse de los datos a firmar. | +| `type` | String | El tipo de dato interno de este campo. Se mapea a una clave en el mapa `TYPES`, que proporciona el código de tipo para este campo. | + +#### IDs de Campo + +[\[Source - Encoding\]](https://github.com/seelabs/rippled/blob/cecc0ad75849a1d50cc573188ad301ca65519a5b/src/ripple/protocol/impl/Serializer.cpp#L117-L148) [\[Source - Decoding\]](https://github.com/seelabs/rippled/blob/cecc0ad75849a1d50cc573188ad301ca65519a5b/src/ripple/protocol/impl/Serializer.cpp#L484-L509) + +Cuando combinas el código de tipo de un campo con su código de campo, obtienes el identificador único del campo, que se prefija antes del campo en el blob serializado final. El tamaño del ID de campo es de uno a tres bytes dependiendo del código de tipo y de campo que combina. Consulta la siguiente tabla: + +| | Código de Tipo < 16 | Código de Tipo >= 16 | +| -------------------- | ------------------- | -------------------- | +| **Código de Campo < 16** | | | +| **Código de Campo >= 16** | | | + +Al decodificar, puedes saber cuántos bytes tiene el ID de campo por cuáles bits **del primer byte** son ceros. Esto corresponde a los casos de la tabla anterior: + +| | Los 4 bits superiores son distintos de cero | Los 4 bits superiores son cero | +| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| **Los 4 bits inferiores son distintos de cero** | 1 byte: los 4 bits superiores definen el tipo; los 4 bits inferiores definen el campo. | 2 bytes: los 4 bits inferiores del primer byte definen el campo; el siguiente byte define el tipo | +| **Los 4 bits inferiores son cero** | 2 bytes: los 4 bits superiores del primer byte definen el tipo; los 4 bits inferiores del primer byte son 0; el siguiente byte define el campo | 3 bytes: el primer byte es `0x00`, el segundo define el tipo; el tercero define el campo | + +**Precaución:** Aunque el ID de campo consiste en los dos elementos usados para ordenar los campos, no debes ordenar por el ID de campo serializado en sí, porque la estructura de bytes del ID de campo cambia el orden de clasificación. + +#### Prefijado de Longitud + +Algunos tipos de campos de longitud variable tienen un indicador de longitud como prefijo. Los campos `Blob` (que contienen datos binarios arbitrarios) son un tipo así. Para ver qué tipos tienen prefijo de longitud, consulta la tabla de Lista de Tipos. + +**Nota:** Algunos tipos de campos que varían en longitud no tienen prefijo de longitud. Esos tipos tienen otras formas de indicar el final de su contenido. + +El prefijo de longitud consiste en uno a tres bytes que indican la longitud del campo inmediatamente después del prefijo de tipo y antes del contenido. + +* Si el campo contiene de 0 a 192 bytes de datos, el primer byte define la longitud del contenido, seguido inmediatamente por esa cantidad de bytes de datos. +* Si el campo contiene de 193 a 12480 bytes de datos, los primeros dos bytes indican la longitud del campo con la siguiente fórmula: + + ``` + 193 + ((byte1 - 193) * 256) + byte2 + ``` +* Si el campo contiene de 12481 a 918744 bytes de datos, los primeros tres bytes indican la longitud del campo con la siguiente fórmula: + + ``` + 12481 + ((byte1 - 241) * 65536) + (byte2 * 256) + byte3 + ``` +* Un campo con prefijo de longitud no puede contener más de 918744 bytes de datos. + +Al decodificar, puedes saber por el valor del primer byte de longitud si hay 0, 1 o 2 bytes de longitud adicionales: + +* Si el primer byte de longitud tiene un valor de 192 o menos, ese es el único byte de longitud y contiene la longitud exacta del contenido del campo en bytes. +* Si el primer byte de longitud tiene un valor de 193 a 240, hay dos bytes de longitud. +* Si el primer byte de longitud tiene un valor de 241 a 254, hay tres bytes de longitud. + +### Orden Canónico de Campos + +Todos los campos en una transacción se ordenan en un orden específico basado primero en el tipo del campo (específicamente, un "código de tipo" numérico asignado a cada tipo), luego en el propio campo (un "código de campo"). (Piénsalo como ordenar por apellido, luego nombre, donde el apellido es el tipo del campo y el nombre es el campo mismo.) + +#### Códigos de Tipo + +Cada tipo de campo tiene un código de tipo arbitrario, con códigos menores ordenando primero. Estos códigos están definidos en [`SField.h`](https://github.com/Xahau/xahaud/blob/master/src/ripple/protocol/SField.h#L57-L74). + +Por ejemplo, [UInt32 tiene código de tipo 2](https://github.com/Xahau/xahaud/blob/72e6005f562a8f0818bc94803d222ac9345e1e40/src/ripple/protocol/SField.h#L59), por lo que todos los campos UInt32 van antes que todos los [campos Amount, que tienen código de tipo 6](https://github.com/Xahau/xahaud/blob/72e6005f562a8f0818bc94803d222ac9345e1e40/src/ripple/protocol/SField.h#L63). + +El archivo de definiciones lista los códigos de tipo para cada tipo en el mapa `TYPES`. + +#### Códigos de Campo + +Cada campo tiene un código de campo, que se usa para ordenar campos que tienen el mismo tipo, con códigos menores ordenando primero. Estos campos están definidos en [`SField.cpp`](https://github.com/Xahau/xahaud/blob/72e6005f562a8f0818bc94803d222ac9345e1e40/src/ripple/protocol/impl/SField.cpp#L72-L266). + +Por ejemplo, el campo `Account` de una \[transacción Payment]\[] [tiene código de ordenamiento 1](https://github.com/Xahau/xahaud/blob/72e6005f562a8f0818bc94803d222ac9345e1e40/src/ripple/protocol/impl/SField.cpp#L219), por lo que va antes que el campo `Destination` que [tiene código de ordenamiento 3](https://github.com/Xahau/xahaud/blob/72e6005f562a8f0818bc94803d222ac9345e1e40/src/ripple/protocol/impl/SField.cpp#L221). + +Los códigos de campo se reutilizan para campos de diferentes tipos de campo, pero los campos del mismo tipo nunca tienen el mismo código de campo. Cuando combinas el código de tipo con el código de campo, obtienes el ID de campo único del campo. + +### Lista de Tipos + +Las instrucciones de transacción pueden contener campos de cualquiera de los siguientes tipos: + +| Nombre del Tipo | Código de Tipo | Longitud en Bits | ¿Prefijo de Longitud? | Descripción | +| --------------- | -------------- | ---------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| AccountID | 8 | 160 | Sí | El identificador único para una cuenta. | +| Amount | 6 | 64 o 384 | No | Una cantidad de XAH o tokens. La longitud del campo es de 64 bits para XAH o 384 bits (64+160+160) para tokens. | +| Blob | 7 | Variable | Sí | Datos binarios arbitrarios. Un campo importante es `TxnSignature`, la firma que autoriza una transacción. | +| Hash128 | 4 | 128 | No | Un valor binario arbitrario de 128 bits. El único campo así es `EmailHash`, destinado a almacenar el hash MD-5 del correo del propietario de una cuenta para obtener un [Gravatar](https://www.gravatar.com/). | +| Hash160 | 17 | 160 | No | Un valor binario arbitrario de 160 bits. Puede definir un código de moneda o emisor. | +| Hash256 | 5 | 256 | No | Un valor binario arbitrario de 256 bits. Generalmente representa el hash "SHA-512Half" de una transacción, versión de ledger u objeto de datos del ledger. | +| PathSet | 18 | Variable | No | Un conjunto de posibles rutas de pago para un pago entre monedas. | +| STArray | 15 | Variable | No | Un arreglo que contiene un número variable de miembros, que pueden ser de distintos tipos dependiendo del campo. Dos casos son los memos y listas de firmantes usados en multi-firma. | +| STIssue | 24 | 160 o 320 | No | Una definición de activo, XAH o un token, sin cantidad. | +| STObject | 14 | Variable | No | Un objeto que contiene uno o más campos anidados. | +| UInt8 | 16 | 8 | No | Un entero sin signo de 8 bits. | +| UInt16 | 1 | 16 | No | Un entero sin signo de 16 bits. El `TransactionType` es un caso especial de este tipo, con cadenas específicas mapeadas a valores enteros. | +| UInt32 | 2 | 32 | No | Un entero sin signo de 32 bits. Los campos `Flags` y `Sequence` en todas las transacciones son ejemplos de este tipo. | + +Además de todos los tipos de campo anteriores, los siguientes tipos pueden aparecer en otros contextos, como objetos del ledger y metadatos de transacciones: + +| Nombre del Tipo | Código de Tipo | ¿Prefijo de Longitud? | Descripción | +| --------------- | -------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Transaction | 10001 | No | Un tipo "de alto nivel" que contiene una transacción completa. | +| LedgerEntry | 10002 | No | Un tipo "de alto nivel" que contiene un objeto de ledger completo. | +| Validation | 10003 | No | Un tipo "de alto nivel" usado en comunicaciones entre pares para representar un voto de validación en el proceso de consenso. | +| Metadata | 10004 | No | Un tipo "de alto nivel" que contiene metadatos para una transacción. | +| UInt64 | 3 | No | Un entero sin signo de 64 bits. Este tipo no aparece en instrucciones de transacciones, pero varios objetos del ledger usan campos de este tipo. | +| Vector256 | 19 | Sí | Este tipo no aparece en instrucciones de transacciones, pero el campo `Amendments` del objeto Amendments del ledger lo usa para representar qué enmiendas están habilitadas actualmente. | + +#### Campos AccountID + +Los campos de este tipo contienen el identificador de 160 bits para una cuenta del XRP Ledger. En JSON, estos campos se representan como direcciones XRP Ledger en \[base58]\[], con datos de suma de verificación adicionales para que los errores tipográficos raramente resulten en direcciones válidas. El formato binario para estos campos no contiene datos de suma de verificación ni el prefijo de tipo `0x00` utilizado en la codificación base58 de direcciones. + +Los AccountIDs que aparecen como campos independientes (como `Account` y `Destination`) tienen prefijo de longitud a pesar de tener una longitud fija de 160 bits. Como resultado, el indicador de longitud para estos campos es siempre el byte `0x14`. Los AccountIDs que aparecen como hijos de campos especiales (Amount `issuer` y PathSet `account`) _no_ tienen prefijo de longitud. + +#### Campos Amount + +El tipo "Amount" es un tipo de campo especial que representa una cantidad de moneda, ya sea XAH o un token. Este tipo consiste en dos subtipos: + +* XAH + + XAH se serializa como un entero sin signo de 64 bits (orden big-endian), excepto que el bit más significativo siempre es 0 para indicar que es XAH, y el segundo bit más significativo es `1` para indicar que es positivo. Dado que la cantidad máxima de XAH (1017 drops) solo requiere 57 bits, puedes calcular el formato serializado de XAH tomando el entero sin signo estándar de 64 bits y realizando una operación OR bit a bit con `0x4000000000000000`. +* **Tokens** + + Los tokens consisten en tres segmentos en orden: + + 1. 64 bits que indican el monto en el formato de cantidad de token. El primer bit es `1` para indicar que no es XAH. + 2. 160 bits que indican el código de moneda. + 3. 160 bits que indican el AccountID del emisor. + +Puedes saber cuál de los dos subtipos es según el primer bit: `0` para XAH; `1` para tokens. + +**Formato de Cantidad de Token** + +[\[Source\]](https://github.com/Xahau/xahaud/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/STAmount.cpp) + +Xahau usa 64 bits para serializar el monto numérico de un token (fungible). En formato binario, el monto numérico consiste en un bit "no XAH", un bit de signo, dígitos significativos y un exponente, en orden: + +1. El primer bit (más significativo) para un monto de token es `1` para indicar que no es un monto XAH. +2. El bit de signo indica si el monto es positivo o negativo. A diferencia de los enteros estándar en [complemento a dos](https://en.wikipedia.org/wiki/Two's_complement), `1` indica **positivo** en el formato de Xahau, y `0` indica negativo. +3. Los siguientes 8 bits representan el exponente como un entero sin signo en el rango de -96 a +80 (inclusive). Sin embargo, al serializar, se suma 97 al exponente para poder serializarlo como un entero sin signo. +4. Los 54 bits restantes representan los dígitos significativos (a veces llamados _mantisa_) como un entero sin signo, normalizado al rango 1015 a 1016-1 inclusive, excepto en el caso especial del valor 0. + +**Códigos de Moneda** + +A nivel de protocolo, los códigos de moneda en Xahau son valores arbitrarios de 160 bits, excepto que los siguientes valores tienen significado especial: + +* El código de moneda `0x0000000000000000000000005852500000000000` está **siempre prohibido**. (Este es el código "XAH" en el "formato estándar".) +* El código de moneda `0x0000000000000000000000000000000000000000` (todo ceros) está **generalmente prohibido**. + +Las APIs de `xahaud` admiten un **formato estándar** para traducir códigos ASCII de tres caracteres a valores hexadecimales de 160 bits: + +1. Los primeros 8 bits deben ser `0x00`. +2. Los siguientes 88 bits están reservados y deben ser todos `0`. +3. Los siguientes 24 bits representan 3 caracteres ASCII. Se recomienda usar códigos [ISO 4217](https://www.xe.com/iso4217.php), o pseudo-códigos ISO 4217 populares como "BTC". El código de moneda XAH (todo en mayúsculas) está reservado para XAH. +4. Los siguientes 40 bits están reservados y deben ser todos `0`. + +El **formato no estándar** es cualquier dato de 160 bits siempre que los primeros 8 bits no sean `0x00`. + +#### Campos Array + +Algunos campos de transacciones, como `SignerEntries` (en \[transacciones SignerListSet]\[]) y `Memos`, son arreglos de objetos (llamados tipo "STArray"). + +Los arreglos contienen varios campos de objeto en su formato binario nativo en un orden específico. En JSON, cada miembro del arreglo es un objeto JSON "envoltorio" con un único campo, que es el nombre del campo objeto miembro. El valor de ese campo es el objeto ("interno") mismo. + +En el formato binario, cada miembro del arreglo tiene un prefijo de ID de campo (basado en la única clave del objeto envoltorio) y contenido (comprendiendo el objeto interno, serializado como un objeto). Para marcar el final de un arreglo, agrega un elemento con un "ID de campo" de `0xf1` (el código de tipo para arreglo con código de campo 1) y sin contenido. + +#### Campos Blob + +El tipo Blob es un campo con prefijo de longitud y datos arbitrarios. Dos campos comunes que usan este tipo son `SigningPubKey` y `TxnSignature`, que contienen (respectivamente) la clave pública y la firma que autorizan la ejecución de una transacción. + +Los campos Blob no tienen más estructura en su contenido, por lo que consisten exactamente en la cantidad de bytes indicada en la codificación de longitud variable, después de los prefijos de ID de campo y longitud. + +#### Campos Hash + +Xahau tiene varios tipos "hash": Hash128, Hash160 y Hash256. Estos campos contienen datos binarios arbitrarios del número de bits indicado, que pueden o no representar el resultado de una operación hash. + +Todos estos campos se serializan como el número específico de bits, sin indicador de longitud, en orden de bytes big-endian. + +#### Campos Issue + +Algunos campos especifican un _tipo_ de activo, que puede ser XAH o un token fungible, sin una cantidad. Estos campos consisten en uno o dos segmentos de 160 bits en orden: + +1. Los primeros 160 bits son el código de moneda del activo. Para XAH, son todos 0. +2. Si los primeros 160 bits son todos 0 (el activo es XAH), el campo termina ahí. De lo contrario, el activo es un token y los siguientes 160 bits son el AccountID del emisor del token. + +#### Campos Object + +Algunos campos, como `SignerEntry` (en \[transacciones SignerListSet]\[]) y `Memo` (en arreglos `Memos`) son objetos (llamados tipo "STObject"). La serialización de objetos es muy similar a la de arreglos, con una diferencia: **los miembros del objeto deben colocarse en orden canónico** dentro del campo objeto, donde los campos de arreglo tienen un orden explícito. + +El orden canónico de campo de los objetos es el mismo que el orden canónico para todos los campos de nivel superior, pero los miembros del objeto deben ordenarse dentro del mismo. Después del último miembro, hay un ID de campo "fin de objeto" de `0xe1` sin contenido. + +#### Campos PathSet + +El campo `Paths` de una \[transacción Payment]\[] entre monedas es un "PathSet", representado en JSON como un arreglo de arreglos. Para más información sobre para qué se usan las rutas, consulta Rutas. + +Un PathSet se serializa como **1 a 6** rutas individuales en secuencia. Cada ruta completa va seguida de un byte que indica qué sigue: + +* `0xff` indica que sigue otra ruta +* `0x00` indica el final del PathSet + +Cada ruta consiste en **1 a 8** pasos de ruta en orden. Cada paso comienza con un byte de **tipo**, seguido de uno o más campos que describen el paso de ruta. El tipo indica qué campos están presentes en ese paso de ruta a través de indicadores bit a bit. + +La siguiente tabla describe los campos posibles y los indicadores bit a bit para establecer en el byte de tipo: + +| Indicador de Tipo | Campo Presente | Tipo de Campo | Tamaño en Bits | Orden | +| ----------------- | -------------- | ------------- | -------------- | ----- | +| `0x01` | `account` | AccountID | 160 bits | 1ro | +| `0x10` | `currency` | Código de Moneda | 160 bits | 2do | +| `0x20` | `issuer` | AccountID | 160 bits | 3ro | + +Los AccountIDs en los campos `account` e `issuer` se presentan _sin_ prefijo de longitud. Cuando la `currency` es XRP, el código de moneda se representa como 160 bits de ceros. + +#### Campos UInt + +Xahau tiene varios tipos enteros sin signo: UInt8, UInt16, UInt32 y UInt64. Todos son enteros binarios sin signo big-endian estándar con el número de bits especificado. + +Al representar estos campos en objetos JSON, la mayoría se representan como números JSON por defecto. Una excepción es UInt64, que se representa como cadena porque algunos decodificadores JSON pueden intentar representar estos enteros como números de punto flotante de "doble precisión" de 64 bits, que no pueden representar todos los valores UInt64 distintos con precisión completa. + +Otro caso especial es el campo `TransactionType`. En JSON, este campo se representa convencionalmente como una cadena con el nombre del tipo de transacción, pero en binario, este campo es un UInt16. El objeto `TRANSACTION_TYPES` en el archivo de definiciones mapea estas cadenas a valores numéricos específicos. diff --git a/src/content/docs/es/docs/protocol-reference/data-types/base-58-encodings.mdx b/src/content/docs/es/docs/protocol-reference/data-types/base-58-encodings.mdx new file mode 100644 index 0000000..c8e4f3d --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/data-types/base-58-encodings.mdx @@ -0,0 +1,24 @@ +--- +title: Codificaciones Base 58 +--- +Las APIs de Xahau frecuentemente usan una codificación "base58" con suma de verificación (a veces llamada "Base58Check") para representar direcciones de cuentas y otros tipos de valores relacionados con claves criptográficas. Esta codificación es igual a [la usada para las direcciones de Bitcoin](https://en.bitcoin.it/wiki/Base58Check_encoding), excepto que Xahau usa el siguiente diccionario: `rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`. + +Xahau prefija diferentes tipos de valores con un número de 8 bits específico antes de codificarlos para distinguir entre diferentes tipos de datos. Con la disposición de caracteres en el diccionario base58 de Xahau, el resultado es que las representaciones base58 para diferentes tipos de valores codificados comienzan con letras específicas según el tipo. + +La siguiente tabla lista todas las codificaciones que usa Xahau: + +| Tipo de Dato | Comienza con | Prefijo de Tipo | Tamaño del contenido¹ | Máximo de caracteres | +| ---------------------------------------- | ------------ | --------------- | --------------------- | -------------------- | +| Dirección de cuenta | r | `0x00` | 20 bytes | 35 | +| Clave pública de cuenta | a | `0x23` | 33 bytes | 53 | +| Valor semilla (para claves secretas) | s | `0x21` | 16 bytes | 29 | +| Clave pública de validación o nodo | n | `0x1C` | 33 bytes | 53 | + +¹ El tamaño del contenido excluye el prefijo de tipo de 1 byte. + +### Véase También + +* Codificación de Direcciones - información detallada sobre la codificación de direcciones +* Claves Criptográficas - tipos de claves criptográficas en Xahau y cómo se usan +* \[Referencia wallet_propose]\[método wallet_propose] - Método API para generar claves de cuenta +* \[Referencia validation_create]\[método validation_create] - Método API para generar claves de validador diff --git a/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx b/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx new file mode 100644 index 0000000..f69ca16 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx @@ -0,0 +1,117 @@ +--- +title: Formatos de Moneda +--- +Xahau tiene dos tipos de activos digitales: XAH y tokens. Ambos tipos tienen alta precisión, aunque sus formatos son diferentes. + +### Comparación + +La siguiente tabla resume algunas de las diferencias entre XAH y tokens en Xahau: + +| XAH | Tokens | +| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- | +| No tiene emisor. | Siempre emitido por una cuenta de Xahau. | +| Se especifica como una cadena. | Se especifica como un objeto. | +| Se rastrea en cuentas. | Se rastrea en líneas de confianza. | +| Nunca puede crearse; solo puede destruirse. | Puede emitirse o canjearse libremente. | +| Valor mínimo: `0`. (No puede ser negativo.) | Valor mínimo: `-9999999999999999e80`. Valor absoluto mínimo no nulo: `1000000000000000e-96`. | +| Valor máximo `100000000000` (1011) XAH. Eso es `100000000000000000` (1017) "drops". | Valor máximo `9999999999999999e80`. | +| Preciso al "drop" más cercano (0.000001 XAH) | 15 dígitos decimales de precisión. | +| No se puede congelar. | El emisor puede congelar saldos. | +| Sin tarifas de transferencia; los pagos XAH a XAH son siempre directos. | Puede tomar rutas indirectas con cada emisor cobrando una tarifa de transferencia porcentual. | +| Se puede usar en Canales de Pago y Escrow. | Se puede usar con Canales de Pago o Escrow. | + +Para más información, consulta ¿Qué es XAH? y Tokens. + +### Especificando Montos de Moneda + +Usa el formato apropiado para el tipo de moneda que quieres especificar: + +* Montos XAH +* Montos de Token + +#### Montos XAH + +Para especificar una cantidad de XAH, usa un número de tipo String que indique _drops_ de XAH, donde cada drop equivale a 0.000001 XAH. Por ejemplo, para especificar 13.1 XAH: + +``` +"13100000" +``` + +**No especifiques XAH como un objeto.** + +Los montos XAH no pueden ser negativos. + +#### Montos de Token + +Para especificar una cantidad de un token (fungible), usa un objeto Amount. Este es un objeto JSON con tres campos: + +| `Campo` | Tipo | Descripción | +| ---------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `currency` | String - Código de Moneda | Código de moneda arbitrario para el token. No puede ser XAH. | +| `value` | String Number | Representación decimal entre comillas del monto del token. Puede incluir notación científica, como `1.23e11` que significa 123,000,000,000. Puede ser negativo al mostrar saldos, pero los valores negativos no están permitidos en otros contextos como al especificar cuánto enviar. | +| `issuer` | String | Generalmente, la cuenta que emite este token. En casos especiales, puede referirse a la cuenta que tiene el token en lugar de eso (por ejemplo, en una transacción Clawback). | + +**Precaución:** Estos nombres de campo son sensibles a mayúsculas y minúsculas. + +Por ejemplo, para representar $153.75 dólares estadounidenses emitidos por la cuenta `r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59`, especificarías: + +```json +{ + "currency": "USD", + "value": "153.75", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59" +} +``` + +#### Especificando Sin Montos + +En algunos casos, necesitas definir un activo (que puede ser XAH o un token) sin una cantidad específica, como al definir un libro de órdenes en el intercambio descentralizado. + +Para describir un token sin una cantidad, especifícalo como un objeto de moneda, pero omite el campo `value`. Por ejemplo: + +```json +{ + "currency": "TST", + "issuer": "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd" +} +``` + +Para describir XAH sin una cantidad, especifícalo como un objeto JSON con _solo_ un campo `currency`. Nunca incluyas un campo `issuer` para XAH. Por ejemplo: + +```json +{ + "currency": "XAH" +} +``` + +### Números de Cadena + +### Precisión de XAH + +XAH tiene la misma precisión que un entero sin signo de 64 bits donde cada unidad equivale a 0.000001 XAH. Usa matemáticas enteras, por lo que cualquier monto menor a un drop completo se redondea hacia abajo. + +### Precisión de Tokens + +Los tokens pueden representar una amplia variedad de activos, incluidos los típicamente medidos en denominaciones muy pequeñas o muy grandes. Este formato usa dígitos significativos y un exponente de potencia de diez de manera similar a la notación científica. El formato admite dígitos significativos y exponentes positivos y negativos dentro del rango especificado. A diferencia de las representaciones típicas de punto flotante de números no enteros, este formato usa matemáticas enteras para todos los cálculos, por lo que siempre mantiene 15 dígitos decimales de precisión. + +Al enviar montos de token en la red entre pares de Xahau, los servidores serializan el monto a un valor binario de 64 bits. + +**Consejo:** Para tokens que no deben ser divisibles en absoluto, consulta Tokens No Fungibles (NFTs). + +### Códigos de Moneda + +#### Códigos de Moneda Estándar + +El formato estándar para los códigos de moneda es una cadena de tres caracteres como `USD`. Está destinado para su uso con [Códigos de Moneda ISO 4217](https://www.xe.com/iso4217.php). Se aplican las siguientes reglas: + +* Los códigos de moneda deben tener exactamente 3 caracteres ASCII de longitud. Los siguientes caracteres están permitidos: todas las letras mayúsculas y minúsculas, dígitos, así como los símbolos `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `<`, `>`, `(`, `)`, `{`, `}`, `[`, `]` y `|`. +* Los códigos de moneda son sensibles a mayúsculas y minúsculas. +* El código de moneda XAH (todo en mayúsculas) está prohibido. El XAH real normalmente no usa un código de moneda en el protocolo de Xahau. + +A nivel de protocolo, este formato se serializa en un valor binario de 160 bits que comienza con `0x00`. + +#### Códigos de Moneda No Estándar + +También puedes usar una cadena hexadecimal de 160 bits (40 caracteres) como `015841551A748AD2C1F76FF6ECB0CCCD00000000` como código de moneda. Para evitar que sea tratado como un código de moneda "estándar", los primeros 8 bits NO DEBEN ser `0x00`. + +**Obsoleto:** Algunas versiones anteriores de [ripple-lib](https://github.com/XRPLF/xrpl.js) admitían un tipo de código de moneda "devengador de intereses" o "con demurraje". Estos códigos tienen los primeros 8 bits como `0x01`. Las monedas con demurraje/devengadoras de intereses ya no están soportadas, pero puedes encontrarlas en datos del ledger. diff --git a/src/content/docs/es/docs/protocol-reference/data-types/index.mdx b/src/content/docs/es/docs/protocol-reference/data-types/index.mdx new file mode 100644 index 0000000..0732fdf --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/data-types/index.mdx @@ -0,0 +1,105 @@ +--- +title: Tipos de Datos +--- +Los diferentes tipos de objetos se identifican de maneras únicas: + +Las cuentas se identifican por su Dirección, por ejemplo `"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"`. Las direcciones siempre comienzan con "r". Muchos métodos de `rippled` también aceptan una representación hexadecimal. + +Las transacciones se identifican por un Hash del formato binario de la transacción. También puedes identificar una transacción por su cuenta emisora y Número de Secuencia. + +Cada Ledger cerrado tiene un Índice de Ledger y un valor Hash. Al \[Especificar Ledgers]\[] puedes usar cualquiera de los dos. + +### Direcciones + +### Hashes + +#### Prefijos de Hash + +[\[Source\]](https://github.com/Xahau/xahaud/blob/master/src/ripple/protocol/HashPrefix.h) + +En muchos casos, Xahau prefija los datos binarios de un objeto con un código de 4 bytes antes de calcular su hash, para que objetos de distintos tipos tengan hashes diferentes incluso si sus formatos binarios son iguales. Los códigos de 4 bytes existentes están estructurados como tres caracteres alfabéticos, codificados como ASCII, seguidos de un byte cero. + +Algunos tipos de hash aparecen en solicitudes y respuestas de API. Otros solo se calculan como el primer paso para firmar cierto tipo de datos o calcular un hash de nivel superior. La siguiente tabla muestra todos los prefijos de hash de 4 bytes que usa Xahau: + +| Tipo de Objeto | Campos de API | Prefijo Hash (Hex) | Prefijo Hash (Texto) | +| ------------------------------------- | -------------------------------- | ------------------ | -------------------- | +| Propuesta de consenso | N/A | `0x50525000` | `PRP\0` | +| Versión de Ledger | `ledger_hash` | `0x4C575200` | `LWR\0` | +| Datos de estado del ledger | `account_state` en encabezado del ledger | `0x4D4C4E00` | `MLN\0` | +| Nodo interno de datos del ledger | N/A | `0x4D494E00` | `MIN\0` | +| Nodo interno de datos del ledger (SHAMapv2) | N/A | `0x494E5200` | `INR\0` | +| Reclamo de Canal de Pago | N/A | `0x434C4D00` | `CLM\0` | +| Transacción firmada | `hash` de transacciones | `0x54584E00` | `TXN\0` | +| Transacción con metadatos | N/A | `0x534E4400` | `SND\0` | +| Transacción sin firmar (Firma simple) | N/A | `0x53545800` | `STX\0` | +| Transacción sin firmar (Multi-firma) | N/A | `0x534D5400` | `SMT\0` | +| Voto de validación | N/A | `0x56414C00` | `VAL\0` | +| Manifiesto del validador | N/A | `0x4D414E00` | `MAN\0` | + +Los IDs de objetos del ledger se calculan de manera similar, pero usan un prefijo de 2 bytes llamado "clave de espacio" en lugar del prefijo en la forma descrita aquí. + +### Secuencia de Cuenta + +### Índice de Ledger + +#### Especificando Ledgers + +Muchos métodos de API requieren que especifiques una instancia del ledger, con los datos recuperados considerados actualizados a partir de esa versión particular del ledger compartido. Los comandos que aceptan una versión de ledger funcionan de la misma manera. Hay tres formas de especificar qué ledger quieres usar: + +1. Especifica un ledger por su Índice de Ledger en el parámetro `ledger_index`. Cada ledger cerrado tiene un índice de ledger que es 1 mayor que el ledger anterior. + + ``` + "ledger_index": 61546724 + ``` +2. Especifica un ledger por su valor Hash en el parámetro `ledger_hash`. + + ``` + "ledger_hash": "8BB204CE37CFA7A021A16B5F6143400831C4D1779E6FE538D9AC561ABBF4A929" + ``` +3. Especifica un ledger por uno de los siguientes atajos, en el parámetro `ledger_index`: + * `validated` para el ledger más reciente que ha sido validado por consenso + + ``` + "ledger_index": "validated" + ``` + * `closed` para el ledger más reciente que ha sido cerrado para modificaciones y propuesto para validación + * `current` para la versión de trabajo actual del ledger del servidor. + +También hay un parámetro `ledger` obsoleto que acepta cualquiera de los tres formatos anteriores. _No_ uses este parámetro; puede eliminarse sin previo aviso. + +Si no especificas un ledger, el servidor decide qué ledger usar para atender la solicitud. Por defecto, el servidor elige el ledger `current` (en progreso). En Modo de Reporte, el servidor usa el ledger validado más reciente. No proporciones más de un campo que especifique ledgers. + +**Nota:** No confíes en el comportamiento predeterminado para especificar un ledger; está sujeto a cambios. Siempre especifica una versión de ledger en la solicitud si puedes. + +El Modo de Reporte no registra datos del ledger hasta que han sido validados. Si haces una solicitud a un servidor en Modo de Reporte para el ledger `current` o `closed`, el servidor reenvía la solicitud a un servidor en Modo P2P. Si solicitas un índice o hash de ledger que no está validado, un servidor en Modo de Reporte responde con un error `lgrNotFound`. + +### Especificando Montos de Moneda + +Hay dos tipos de monedas en Xahau: XAH y tokens. Ambos tipos tienen alta precisión, aunque sus formatos son diferentes. + +Algunos campos, como el `Amount` de destino de una \[transacción Payment]\[], pueden ser de cualquier tipo. Algunos campos solo aceptan XAH específicamente, como el campo `Fee` (costo de transacción). + +XAH se especifica como una cadena que contiene un número entero de "drops" de XAH, donde 1 millón de drops equivale a 1 XAH. Los tokens se especifican como un objeto con campos para el monto decimal, el código de moneda y el emisor. Por ejemplo: + +* **XAH** - Para especificar un campo `Amount` con un valor de 13.1 XAH: + + ``` + "Amount": "13100000" + ``` +* **Token** - Para especificar un campo `Amount` con un valor de 13.1 FOO emitido por o hacia `rf1B...`: + + ``` + "Amount": { + "value": "13.1", + "currency": "FOO", + "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" + } + ``` + +Para más información, consulta Formatos de Moneda. + +### Especificando Tiempo + +El servidor `xahaud` y sus APIs representan el tiempo como un entero sin signo. Este número mide el número de segundos desde la "Época de Ripple" del 1 de enero de 2000 (00:00 UTC). Esto es similar a como funciona la [época Unix](http://en.wikipedia.org/wiki/Unix_time), excepto que la Época de Ripple es 946684800 segundos después de la Época Unix. + +No conviertas tiempos de Época de Ripple a tiempos de Época UNIX en variables de 32 bits: esto podría provocar desbordamientos de enteros. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/index.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/index.mdx new file mode 100644 index 0000000..e00830a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/index.mdx @@ -0,0 +1,31 @@ +--- +title: Datos del Ledger +--- +Cada versión del ledger en el XRP Ledger se compone de tres partes: + +* **Encabezado del Ledger**: Metadatos sobre esta versión del ledger en sí. +* **Conjunto de Transacciones**: Todas las transacciones que se ejecutaron para crear esta versión del ledger. +* **Datos de Estado**: El registro completo de objetos que representan cuentas, configuraciones y saldos a partir de esta versión del ledger. (Esto también se llama "estado de cuenta".) + +### Datos de Estado + +Los datos de estado de cada versión del ledger son un conjunto de **objetos del ledger**, a veces llamados _entradas del ledger_, que colectivamente representan todas las configuraciones, saldos y relaciones en un momento dado. Para almacenar o recuperar un objeto en los datos de estado, el protocolo usa el [**ID de Objeto del Ledger**](/docs/protocol-reference/ledger-data/ledger-object-ids) único de ese objeto. + +En el protocolo entre pares, los objetos del ledger tienen un [formato binario canónico](/docs/protocol-reference/binary-format). En las APIs de `xahaud`, los objetos del ledger se representan como objetos JSON. + +Los campos de datos de un objeto del ledger dependen del tipo de objeto; la Red Xahau admite los siguientes tipos: + +* [Encabezado del Ledger](/docs/protocol-reference/ledger-data/ledger-header) +* [Campos Comunes de Entradas del Ledger](/docs/protocol-reference/ledger-data/ledger-object-ids) +* [Tipos de Entradas del Ledger](/docs/protocol-reference/ledger-data/ledger-objects-types/) + +### Ledgers Expandidos + +Xahau admite ledgers expandidos, que permiten tamaños de ledger más grandes más allá de los límites tradicionales. Los ledgers expandidos permiten a la red manejar mayores volúmenes de transacciones y datos de estado más complejos mientras mantienen el rendimiento y la estabilidad del consenso. + +Cuando los ledgers expandidos están habilitados, el ledger puede acomodar: +- Más transacciones por ledger +- Conjuntos de datos de estado más grandes +- Mayor complejidad en las ejecuciones de Hooks + +Los ledgers expandidos se usan automáticamente cuando la red determina que son necesarios según el volumen de transacciones y el tamaño del estado. No se requiere configuración especial para que los nodos participen en ledgers expandidos. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-header.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-header.mdx new file mode 100644 index 0000000..684e54a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-header.mdx @@ -0,0 +1,31 @@ +--- +title: Encabezado del Ledger +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/ledger/ReadView.h#L71) + +Cada versión del ledger tiene un encabezado único que describe su contenido. Puedes buscar la información del encabezado de un ledger con el \[método ledger]\[]. El contenido del encabezado del ledger es el siguiente: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ----------------------- | --------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ledger_index` | String | UInt32 | El \[índice del ledger]\[Ledger Index]. Algunos métodos de API muestran esto como un entero entre comillas; otros lo muestran como un número JSON nativo. | +| `ledger_hash` | String | Hash256 | El \[SHA-512Half]\[] de esta versión del ledger. Sirve como identificador único para este ledger y todo su contenido. | +| `account_hash` | String | Hash256 | El \[SHA-512Half]\[] de la información del árbol de estado de este ledger. | +| `close_time` | Number | UInt32 | El tiempo aproximado en que se cerró esta versión del ledger, como el número de segundos desde la Época de Ripple de 2000-01-01 00:00:00. Este valor se redondea según la `close_time_resolution`. | +| `closed` | Boolean | Boolean | Si es `true`, esta versión del ledger ya no acepta nuevas transacciones. (Sin embargo, a menos que esta versión del ledger esté validada, podría ser reemplazada por una versión diferente con un conjunto diferente de transacciones.) | +| `parent_hash` | String | Hash256 | El valor `ledger_hash` de la versión del ledger anterior que es el predecesor directo de esta. Si hay diferentes versiones del índice de ledger anterior, esto indica de cuál se derivó el ledger. | +| `total_coins` | String | UInt64 | El número total de \[drops de XAH]\[] en propiedad de las cuentas en el ledger. Esto omite el XAH que ha sido destruido por tarifas de transacción. La cantidad real de XAH en circulación es menor porque algunas cuentas son "agujeros negros" cuyas claves no son conocidas por nadie. | +| `transaction_hash` | String | Hash256 | El \[SHA-512Half]\[] de las transacciones incluidas en este ledger. | +| `close_time_resolution` | Number | Uint8 | Un entero en el rango \[2,120] que indica el número máximo de segundos por los que se podría redondear el `close_time`. | +| `closeFlags` | (Omitido) | UInt8 | Un mapa de bits de indicadores relacionados con el cierre de este ledger. | + +### Índice del Ledger + +### Indicadores de Cierre + +El ledger tiene solo un indicador definido para `closeFlags`: **`sLCF_NoConsensusTime`** (valor `1`). Si este indicador está habilitado, significa que los validadores tuvieron diferentes tiempos de cierre para el ledger, pero construyeron un ledger por lo demás idéntico, por lo que declararon consenso mientras "acordaban en no estar de acuerdo" sobre el tiempo de cierre. En este caso, el valor oficial de `close_time` del ledger es 1 segundo después del del ledger padre. + +El campo `closeFlags` no está incluido en ninguna representación JSON de un ledger, pero sí en la representación binaria de un ledger, y es uno de los campos que determinan el hash del ledger. + +### Véase También + +Para los fundamentos del ledger, consulta Ledgers. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-object-ids.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-object-ids.mdx new file mode 100644 index 0000000..88ff002 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-object-ids.mdx @@ -0,0 +1,21 @@ +--- +title: IDs de Objetos del Ledger +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/Indexes.cpp) + +Cada objeto en los datos de estado de un ledger tiene un ID único. El ID se deriva haciendo hash de los contenidos importantes del objeto, junto con un [identificador de espacio de nombres](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/LedgerFormats.h#L99). El tipo de objeto del ledger determina qué identificador de espacio de nombres usar y qué contenidos incluir en el hash. Esto asegura que cada ID sea único. Para calcular el hash, `xahaud` usa SHA-512 y luego trunca el resultado a los primeros 256 bits. Este algoritmo, informalmente llamado **SHA-512Half**, proporciona una salida con seguridad comparable a SHA-256, pero se ejecuta más rápido en procesadores de 64 bits. + +En general, el ID de un objeto del ledger se devuelve como el campo `index` en JSON, al mismo nivel que el contenido del objeto. En los metadatos de transacciones, el ID del objeto del ledger en JSON es `LedgerIndex`. + +**Consejo:** El campo `index` o `LedgerIndex` de un objeto en el ledger es el ID del objeto del ledger. Esto no es lo mismo que un \[índice de ledger]\[]. + +### Indicadores + +Los indicadores son configuraciones de encendido/apagado, representadas como valores binarios que se combinan en un único número mediante operaciones OR bit a bit. Los valores de bit para los indicadores en las entradas del ledger son diferentes de los valores usados para habilitar o deshabilitar esos indicadores en una transacción. Los indicadores de estado del ledger tienen nombres que comienzan con **`lsf`**. + +Los posibles valores para el campo de indicadores varían según el tipo de entrada del ledger. Algunos tipos de entradas del ledger no tienen indicadores definidos. En estos casos, el campo `Flags` siempre tiene el valor `0`. + +### Véase También + +* Para más información sobre cómo Xahau crea y usa hashes, consulta Hashes. +* Para los fundamentos del ledger, consulta Ledgers. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot.mdx new file mode 100644 index 0000000..6a7b007 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot.mdx @@ -0,0 +1,83 @@ +--- +title: AccountRoot +--- +[\[Source\]](https://github.com/Xahau/xahaud/blob/264280edd79b7f764536e02459f33f66a59c0531/src/ripple/protocol/impl/LedgerFormats.cpp#L36-L60) + +Un tipo de entrada del ledger `AccountRoot` describe una sola cuenta, su configuración y saldo de XAH. + +### Ejemplo JSON + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "AccountTxnID": "0D5FB50FA65C9FE1538FD7E398FFFE9D1908DFA4576D8D7A020040686F93C77D", + "AccountIndex": "59", + "Balance": "148446663", + "Domain": "6D64756F31332E636F6D", + "HookStateScale": 10, + "EmailHash": "98B4375E1D753E5B91627516F6D70977", + "Flags": 8388608, + "LedgerEntryType": "AccountRoot", + "MessageKey": "0000000000000000000000070000000300", + "OwnerCount": 3, + "PreviousTxnID": "0D5FB50FA65C9FE1538FD7E398FFFE9D1908DFA4576D8D7A020040686F93C77D", + "PreviousTxnLgrSeq": 14091160, + "Sequence": 336, + "TransferRate": 1004999999, + "index": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8" +} +``` + +### Campos + +Un objeto `AccountRoot` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ---------------------- | --------- | ------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | Sí | La dirección (clásica) de identificación de esta cuenta. | +| `Sequence` | Number | UInt32 | Sí | El número de secuencia de la siguiente transacción válida para esta cuenta. | +| `Balance` | String | Amount | No | El [saldo actual de XAH en drops][drops de XAH] de la cuenta, representado como cadena. | +| `OwnerCount` | Number | UInt32 | Sí | El número de objetos que posee esta cuenta en el ledger, lo que contribuye a su reserva de propietario. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `AccountTxnID` | String | Hash256 | No | El hash identificador de la transacción enviada más recientemente por esta cuenta. Este campo debe estar habilitado para usar el campo de transacción `AccountTxnID`. Para habilitarlo, envía una transacción AccountSet con el indicador `asfAccountTxnID` habilitado. | +| `RegularKey` | String | AccountID | No | La dirección de un par de claves que puede usarse para firmar transacciones para esta cuenta en lugar de la clave maestra. Usa una \[transacción SetRegularKey]\[] para cambiar este valor. | +| `EmailHash` | String | Hash128 | No | El hash md5 de una dirección de correo electrónico. Los clientes pueden usar esto para buscar un avatar a través de servicios como [Gravatar](https://en.gravatar.com/). | +| `WalletLocator` | String | Hash256 | No | Un valor arbitrario de 256 bits que los usuarios pueden establecer. | +| `WalletSize` | Number | UInt32 | No | Sin uso. (El código admite este campo pero no hay forma de establecerlo.) | +| `MessageKey` | String | Blob | No | Una clave pública que puede usarse para enviar mensajes cifrados a esta cuenta. En JSON, usa hexadecimal. Debe tener exactamente 33 bytes, con el primer byte indicando el tipo de clave: `0x02` o `0x03` para claves secp256k1, `0xED` para claves Ed25519. | +| `TransferRate` | Number | UInt32 | No | Una tarifa de transferencia para cobrar a otros usuarios por enviar entre sí la moneda emitida por esta cuenta. | +| `Domain` | String | Blob | No | Un dominio asociado con esta cuenta. En JSON, esto es el hexadecimal de la representación ASCII del dominio. No puede tener más de 256 bytes de longitud. | +| `TickSize` | Number | UInt8 | No | Cuántos dígitos significativos usar para las tasas de cambio de Ofertas que involucran monedas emitidas por esta dirección. Los valores válidos son de `3` a `15`, inclusive. _(Añadido por la enmienda \[TickSize]\[].)_ | +| `TicketCount` | Number | UInt32 | No | Cuántos Tickets posee esta cuenta en el ledger. Se actualiza automáticamente para asegurar que la cuenta permanezca dentro del límite máximo de 250 Tickets a la vez. Este campo se omite si la cuenta tiene cero Tickets. _(Añadido por la enmienda \[TicketBatch]\[].)_ | +| `NFTokenMinter` | String | AccountID | No | Otra cuenta que puede acuñar tokens no fungibles en nombre de esta cuenta. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[])_ | +| `MintedNFTokens` | Number | UInt32 | No | Cuántos tokens no fungibles totales han sido acuñados por y en nombre de esta cuenta. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[])_ | +| `BurnedNFTokens` | Number | UInt32 | No | Cuántos de los tokens no fungibles emitidos por esta cuenta han sido quemados en total. Este número siempre es igual o menor que `MintedNFTokens`. | +| `HookStateCount` | Number | UInt32 | No | El número de estados en el Hook. | +| `HookNamespaces` | Array | Vector256 | No | Un valor único para evitar conflictos de estado entre múltiples Hooks instalados en la misma cuenta XAHL. | +| `RewardLgrFirst` | Number | UInt32 | No | El número del ledger de la última transacción ClaimReward. | +| `RewardLgrLast` | Number | UInt32 | No | El número de secuencia del ledger de la última transacción entrante o saliente de tu cuenta. | +| `RewardTime` | Number | UInt32 | No | El tiempo del ledger en que se reclamó la última recompensa. | +| `RewardAccumulator` | String | UInt64 | No | El área bajo la gráfica de saldo-tiempo de tu cuenta desde la última transacción ClaimReward. | +| `FirstNFTokenSequence` | Number | UInt32 | No | El \[Número de Secuencia]\[] de la cuenta en el momento en que acuñó su primer token no fungible. _(Añadido por la enmienda \[fixNFTokenRemint]\[].)_ | +| `ImportSequence` | Number | UInt32 | No | El número de secuencia actual de la cuenta importadora en el Ledger XAHL. | +| `GovernanceFlags` | String | Hash256 | No | | +| `GovernanceMarks` | String | Hash256 | No | | +| `AccountIndex` | String | UInt64 | No | El número de índice de creación de la cuenta. _(Añadido por la enmienda \[xahauGenesis]\[].)_ | +| `TouchCount` | String | UInt64 | No | Un contador incremental por cada vez que la entrada del ledger es "tocada". | +| `HookStateScale` | Number | UInt16 | No | Factor de escala para determinar cuándo las entradas de estado del Hook se vuelven obsoletas. Los valores válidos son `1` a `16` inclusive. _(Añadido por la enmienda \[ExtendedHookState]\[].)_ | + +### Indicadores AccountRoot + +Existen varias opciones que pueden habilitarse o deshabilitarse para una cuenta. Estas opciones pueden cambiarse con una \[transacción AccountSet]\[]. En el ledger, los indicadores se representan como valores binarios que pueden combinarse con operaciones OR bit a bit. Los valores de bit para los indicadores en el ledger son diferentes a los valores usados para habilitar o deshabilitar esos indicadores en una transacción. Los indicadores del ledger tienen nombres que comienzan con **`lsf`**. + +Los objetos AccountRoot pueden tener los siguientes valores de indicador: + +
Nombre del IndicadorValor HexValor DecimalIndicador AccountSet CorrespondienteDescripción
lsfDefaultRipple0x008000008388608asfDefaultRippleHabilita rippling en las líneas de confianza de esta dirección por defecto. Requerido para direcciones emisoras; desaconsejado para otras.
lsfDepositAuth0x0100000016777216asfDepositAuthEsta cuenta tiene DepositAuth habilitado, lo que significa que solo puede recibir fondos de transacciones que envía ella misma y de cuentas preautorizadas.
lsfDisableMaster0x001000001048576asfDisableMasterDeshabilita el uso de la clave maestra para firmar transacciones de esta cuenta.
lsfDisallowIncomingCheck0x08000000134217728asfDisallowIncomingCheckEsta cuenta bloquea Checks entrantes.
lsfDisallowIncomingNFTokenOffer0x0400000067108864asfDisallowIncomingNFTokenOfferEsta cuenta bloquea NFTokenOffers entrantes.
lsfDisallowIncomingPayChan0x10000000268435456asfDisallowIncomingPayChanEsta cuenta bloquea Canales de Pago entrantes.
lsfDisallowIncomingTrustline0x20000000536870912asfDisallowIncomingTrustlineEsta cuenta bloquea líneas de confianza entrantes.
lsfDisallowIncomingRemit0x800000002147483648asfDisallowIncomingRemitEsta cuenta bloquea transacciones remit entrantes.
lsfDisallowXRP0x00080000524288asfDisallowXRPLas aplicaciones cliente no deberían enviar XAH a esta cuenta. (Consultivo; no es aplicado por el protocolo.)
lsfGlobalFreeze0x004000004194304asfGlobalFreezeTodos los activos emitidos por esta cuenta están congelados.
lsfNoFreeze0x002000002097152asfNoFreezeEsta cuenta no puede congelar las líneas de confianza conectadas a ella. Una vez habilitado, no puede deshabilitarse.
lsfPasswordSpent0x0001000065536(Ninguno)Esta cuenta ha usado su transacción SetRegularKey gratuita.
lsfRequireAuth0x00040000262144asfRequireAuthEsta cuenta debe aprobar individualmente a otros usuarios para que esos usuarios puedan tener los tokens de esta cuenta.
lsfRequireDestTag0x00020000131072asfRequireDestRequiere que los pagos entrantes especifiquen una Etiqueta de Destino.
lsfTshCollect0x0200000033554432asfTshCollectEl TSH paga por la ejecución de su propia Cadena de Hooks.
lsfURITokenIssuer0x0400000067108864asfURITokenIssuerEsta cuenta no puede eliminarse después de haber emitido un URIToken.
+ +### Formato del ID AccountRoot + +El ID de un objeto AccountRoot es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Account (`0x0061`) +* El AccountID de la cuenta diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/amendments.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/amendments.mdx new file mode 100644 index 0000000..290491a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/amendments.mdx @@ -0,0 +1,60 @@ +--- +title: Amendments +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L138-L144) + +El tipo de objeto `Amendments` contiene una lista de Enmiendas que están actualmente activas. Cada versión del ledger contiene **como máximo un** objeto `Amendments`. + +### Ejemplo JSON + +```json +{ + "Majorities": [ + { + "Majority": { + "Amendment": "1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146", + "CloseTime": 535589001 + } + } + ], + "Amendments": [ + "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE", + "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373", + "6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC", + "740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11" + ], + "Flags": 0, + "LedgerEntryType": "Amendments", + "index": "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4" +} +``` + +### Campos + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Amendments` | Array | Vector256 | No | Arreglo de IDs de enmienda de 256 bits para todas las enmiendas actualmente habilitadas. Si se omite, no hay enmiendas habilitadas. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `Amendments`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0066`, mapeado a la cadena `Amendments`, indica que este objeto describe el estado de las enmiendas a Xahau. | +| `Majorities` | Array | STArray | No | Arreglo de objetos que describen el estado de las enmiendas que tienen apoyo de mayoría pero aún no están habilitadas. Si se omite, no hay enmiendas pendientes con apoyo de mayoría. | + +Cada miembro del campo `Majorities`, si está presente, es un objeto con un campo, `Majority`, cuyo contenido es un objeto anidado con los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ----------- | --------- | ------------------- | -------------------------------------------------------------------------------------------------- | +| `Amendment` | String | Hash256 | El ID de Enmienda de la enmienda pendiente. | +| `CloseTime` | Number | UInt32 | El campo `close_time` de la versión del ledger donde esta enmienda obtuvo una mayoría más recientemente. | + +En el proceso de enmiendas, un consenso de validadores agrega una nueva enmienda al campo `Majorities` usando una pseudo-transacción \[EnableAmendment]\[] con el indicador `tfGotMajority` cuando el 80% o más de los validadores la apoyan. Si el apoyo para una enmienda pendiente cae por debajo del 80%, una pseudo-transacción \[EnableAmendment]\[] con el indicador `tfLostMajority` elimina la enmienda del arreglo `Majorities`. Si una enmienda permanece en el campo `Majorities` durante al menos 2 semanas, una pseudo-transacción \[EnableAmendment]\[] sin indicadores la elimina de `Majorities` y la agrega permanentemente al campo `Amendments`. + +**Nota:** Técnicamente, todas las transacciones en un ledger se procesan basándose en qué enmiendas están habilitadas en la versión del ledger inmediatamente anterior. Mientras se aplican transacciones a una versión del ledger donde una enmienda se habilita, las reglas no cambian a mitad del ledger. + +### Formato del ID Amendments + +El ID del objeto `Amendments` es el hash de la clave de espacio `Amendments` (`0x0066`) únicamente. Esto significa que el ID del objeto `Amendments` en un ledger es siempre: + +``` +7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4 +``` + +(No confundas el ID del tipo de objeto del ledger `Amendments` con el ID de Enmienda de una enmienda individual.) diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/check.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/check.mdx new file mode 100644 index 0000000..417c243 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/check.mdx @@ -0,0 +1,58 @@ +--- +title: Check +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170) + +_(Añadido por la enmienda \[Checks]\[].)_ + +Un objeto `Check` describe un cheque, similar a un cheque personal en papel, que puede cobrarse por su destinatario para obtener dinero de su remitente. (El pago potencial ya fue aprobado por su remitente, pero no se mueve dinero hasta que se cobra. A diferencia de un Escrow, el dinero para un Check no se aparta, por lo que cobrar el Check podría fallar por falta de fondos.) + +### Ejemplo JSON + +```json +{ + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "Destination": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", + "DestinationNode": "0000000000000000", + "DestinationTag": 1, + "Expiration": 570113521, + "Flags": 0, + "InvoiceID": "46060241FABCF692D4D934BA2A6C4427CD4279083E38C77CBE642243E43BE291", + "LedgerEntryType": "Check", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924", + "PreviousTxnLgrSeq": 6, + "SendMax": "100000000", + "Sequence": 2, + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `Check` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | ---------------- | ------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | Account | Sí | El remitente del Check. Cobrar el Check debita el saldo de esta dirección. | +| `Destination` | String | Account | Sí | El destinatario previsto del Check. Solo esta dirección puede cobrar el Check, usando una \[transacción CheckCash]\[]. | +| `DestinationNode` | String | UInt64 | No | Una pista que indica qué página del directorio del propietario del destino enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `DestinationTag` | Number | UInt32 | No | Una etiqueta arbitraria para especificar más el destino de este Check, como un receptor alojado en la dirección de destino. | +| `Expiration` | Number | UInt32 | No | Indica el tiempo después del cual este Check se considera expirado. Consulta \[Especificando Tiempo]\[] para detalles. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `Check`. El valor es siempre `0`. | +| `InvoiceID` | String | Hash256 | No | Hash arbitrario de 256 bits proporcionado por el remitente como razón o identificador específico para este Check. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0043`, mapeado a la cadena `Check`, indica que este objeto es un objeto Check. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario del remitente enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `SendMax` | String or Object | Amount | Sí | La cantidad máxima de moneda que este Check puede debitar al remitente. Si el Check se cobra exitosamente, el destino recibe crédito en la misma moneda por hasta este monto. | +| `Sequence` | Number | UInt32 | Sí | El número de secuencia de la \[transacción CheckCreate]\[] que creó este Check. | +| `SourceTag` | Number | UInt32 | No | Una etiqueta arbitraria para especificar más la fuente de este Check, como un receptor alojado en la dirección del remitente. | + +### Formato del ID Check + +El ID de un objeto `Check` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Check (`0x0043`) +* El AccountID del remitente de la \[transacción CheckCreate]\[] que creó el objeto `Check` +* El número `Sequence` de la \[transacción CheckCreate]\[] que creó el objeto `Check`. Si la transacción CheckCreate usó un Ticket, usa el valor `TicketSequence` en su lugar. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/cron.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/cron.mdx new file mode 100644 index 0000000..051a1ed --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/cron.mdx @@ -0,0 +1,57 @@ +--- +title: Cron +--- +[\[Source\]](https://github.com/Xahau/xahaud/blob/dev/src/ripple/protocol/impl/LedgerFormats.cpp) + +_(Añadido por la enmienda [Cron][].)_ + +Un objeto `Cron` representa una ejecución programada de Hook creada por una [transacción CronSet](/docs/protocol-reference/transactions/transaction-types/cronset). El motor Cron inserta automáticamente pseudo-transacciones de tipo `Cron` en el ledger cuando las ejecuciones programadas están pendientes. + +### Ejemplo JSON + +```json +{ + "Owner": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "OwnerNode": "0000000000000000", + "StartTime": 816348759, + "RepeatCount": 3, + "DelaySeconds": 120, + "PreviousTxnID": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924", + "PreviousTxnLgrSeq": 6, + "LedgerEntryType": "Cron", + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `Cron` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Owner` | String | AccountID | Sí | La cuenta propietaria de la ejecución programada del Hook. Esta es la cuenta que se invocará cuando el cron se ejecute. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `StartTime` | Number | UInt32 | Sí | Marca de tiempo de la Época de Ripple para cuando debe ocurrir la primera ejecución. Usa `0` para ejecución inmediata. | +| `RepeatCount` | Number | UInt32 | Sí | Número de veces que el cron debe ejecutarse. Puede extenderse mediante \[transacciones CronSet]\[] posteriores. Máximo 256 por transacción, pero puede extenderse más allá de este límite. | +| `DelaySeconds` | Number | UInt32 | Sí | Intervalo de tiempo en segundos entre cada ejecución. Máximo de 31,536,000 segundos (365 días). | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0061`, mapeado a la cadena `Cron`, indica que este objeto es un objeto Cron. | + +### Formato del ID Cron + +El ID de un objeto `Cron` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Cron (`0x0076`) +* La marca de tiempo del campo `StartTime` +* El AccountID aleatorizado del campo `Owner` + +### Comportamiento de Ejecución + +Cuando un cron está listo para ejecutarse, el motor Cron inserta una pseudo-transacción de tipo `Cron` en el ledger. Esta pseudo-transacción contiene un campo `Owner` que hace referencia a la cuenta Hook de origen. El Hook programado se invocará automáticamente en los intervalos especificados sin requerir disparadores externos. + +Los desarrolladores de Hooks deben habilitar las llamadas de recolección (indicador `hsfCOLLECT`) en sus Hooks, ya que el `Owner` constituye un interesado transaccional débil (TSH) cuando se ejecuta la pseudo-transacción Cron. + +### Transacciones Relacionadas + +* [Transacción CronSet](/docs/protocol-reference/transactions/transaction-types/cronset): Crea, actualiza o elimina un objeto Cron diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth.mdx new file mode 100644 index 0000000..4f1068a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth.mdx @@ -0,0 +1,45 @@ +--- +title: Deposit Pre Auth +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L172-L178) + +Un objeto `DepositPreauth` rastrea una preautorización de una cuenta a otra. Las \[transacciones DepositPreauth]\[] crean estos objetos. + +Esto no tiene efecto en el procesamiento de transacciones a menos que la cuenta que proporcionó la preautorización requiera Autorización de Depósito. En ese caso, la cuenta que fue preautorizada puede enviar pagos y otras transacciones directamente a la cuenta que proporcionó la preautorización. Las preautorizaciones son unidireccionales y no tienen efecto en los pagos que van en la dirección opuesta. + +### Ejemplo JSON + +```json +{ + "LedgerEntryType": "DepositPreauth", + "Account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", + "Authorize": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", + "Flags": 0, + "OwnerNode": "0000000000000000", + "PreviousTxnID": "3E8964D5A86B3CD6B9ECB33310D4E073D64C865A5B866200AD2B7E29F8326702", + "PreviousTxnLgrSeq": 7, + "index": "4A255038CC3ADCC1A9C91509279B59908251728D0DAADB248FFE297D0F7E068C" +} +``` + +### Campos + +Un objeto `DepositPreauth` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | Account | Sí | La cuenta que otorgó la preautorización. (El destino de los pagos preautorizados.) | +| `Authorize` | String | Account | Sí | La cuenta que recibió la preautorización. (El remitente de los pagos preautorizados.) | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `DepositPreauth`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0070`, mapeado a la cadena `DepositPreauth`, indica que este es un objeto DepositPreauth. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario del remitente enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | + +### Formato del ID DepositPreauth + +El ID de un objeto `DepositPreauth` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio DepositPreauth (`0x0070`) +* El AccountID del propietario de este objeto (el remitente de la \[transacción DepositPreauth]\[] que creó este objeto; es decir, el que otorgó la preautorización) +* El AccountID de la cuenta preautorizada (el campo `Authorized` de la \[transacción DepositPreauth]\[] que creó este objeto; es decir, el que recibió la preautorización) diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/directory-node.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/directory-node.mdx new file mode 100644 index 0000000..a59a2d0 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/directory-node.mdx @@ -0,0 +1,96 @@ +--- +title: Directory Node +--- +[\[Source\]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L44) + +El tipo de objeto `DirectoryNode` proporciona una lista de enlaces a otros objetos en el árbol de estado del ledger. Un solo _Directorio_ conceptual toma la forma de una lista doblemente enlazada, con uno o más objetos DirectoryNode conteniendo cada uno hasta 32 IDs de otros objetos. El primer objeto se llama la raíz del directorio, y todos los demás objetos pueden agregarse o eliminarse según sea necesario. + +Hay dos tipos de Directorios: + +* Los **directorios de propietario** listan otros objetos que posee una cuenta, como objetos `RippleState` (línea de confianza) u `Offer`. +* Los **directorios de oferta** listan las ofertas disponibles en el intercambio descentralizado. Un solo directorio de oferta contiene todas las ofertas que tienen la misma tasa de cambio para el mismo token (código de moneda y emisor). + +### Ejemplo JSON + +_Directorio de Oferta_ + +```json +{ + "ExchangeRate": "4F069BA8FF484000", + "Flags": 0, + "Indexes": [ + "AD7EAE148287EF12D213A251015F86E6D4BD34B3C4A0A1ED9A17198373F908AD" + ], + "LedgerEntryType": "DirectoryNode", + "RootIndex": "1BBEF97EDE88D40CEE2ADE6FEF121166AFE80D99EBADB01A4F069BA8FF484000", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "0000000000000000000000004A50590000000000", + "TakerPaysIssuer": "5BBC0F22F61D9224A110650CFE21CC0C4BE13098", + "index": "1BBEF97EDE88D40CEE2ADE6FEF121166AFE80D99EBADB01A4F069BA8FF484000" +} +``` + +_Directorio de Propietario_ + +```json +{ + "Flags": 0, + "Indexes": [ + "AD7EAE148287EF12D213A251015F86E6D4BD34B3C4A0A1ED9A17198373F908AD", + "E83BBB58949A8303DF07172B16FB8EFBA66B9191F3836EC27A4568ED5997BAC5" + ], + "ReferenceCount": "1", + "LedgerEntryType": "DirectoryNode", + "Owner": "rpR95n1iFkTqpoy1e878f4Z1pVHVtWKMNQ", + "RootIndex": "193C591BF62482468422313F9D3274B5927CA80B4DD3707E42015DD609E39C94", + "index": "193C591BF62482468422313F9D3274B5927CA80B4DD3707E42015DD609E39C94" +} +``` + +### Campos + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Owner` | String | AccountID | No | (Solo directorios de propietario) La dirección de la cuenta que posee los objetos en este directorio. | +| `TakerGetsCurrency` | String | Hash160 | No | (Solo directorios de oferta) El código de moneda del monto `TakerGets` de las ofertas en este directorio. | +| `TakerGetsIssuer` | String | Hash160 | No | (Solo directorios de oferta) El emisor del monto `TakerGets` de las ofertas en este directorio. | +| `TakerPaysCurrency` | String | Hash160 | No | (Solo directorios de oferta) El código de moneda del monto `TakerPays` de las ofertas en este directorio. | +| `TakerPaysIssuer` | String | Hash160 | No | (Solo directorios de oferta) El emisor del monto `TakerPays` de las ofertas en este directorio. | +| `ExchangeRate` | String | UInt64 | No | (Solo directorios de oferta) **OBSOLETO**. No usar. | +| `ReferenceCount` | String | UInt64 | No | El recuento de referencias en el ledger reduce la carga de almacenamiento y las tarifas al permitir que múltiples instalaciones del mismo Hook apunten al mismo objeto en el ledger. | +| `Indexes` | Array | Vector256 | Sí | El contenido de este Directorio: un arreglo de IDs de otros objetos. | +| `IndexNext` | Number | UInt64 | No | Si este Directorio consiste en múltiples páginas, este ID enlaza al siguiente objeto en la cadena, volviendo al principio al final. | +| `IndexPrevious` | Number | UInt64 | No | Si este Directorio consiste en múltiples páginas, este ID enlaza al objeto anterior en la cadena, volviendo al final al principio. | +| `NFTokenID` | String | Hash256 | No | Sin uso | + +### Formatos de ID de Directorio + +Hay tres fórmulas diferentes para crear el ID de un DirectoryNode, dependiendo de cuál de las siguientes represente el DirectoryNode: + +* La primera página (también llamada raíz) de un Directorio de Propietario +* La primera página de un Directorio de Oferta +* Páginas posteriores de cualquier tipo + +**La primera página de un Directorio de Propietario** tiene un ID que es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio del Directorio de Propietario (`0x004F`) +* El AccountID del campo `Owner`. + +**La primera página de un Directorio de Oferta** tiene un ID especial: los 192 bits superiores definen el libro de órdenes, y los 64 bits restantes definen la tasa de cambio de las ofertas en ese directorio. (El ID es big-endian, por lo que el libro está en los bits más significativos, que van primero, y la calidad está en los bits menos significativos que van al final.) + +Específicamente: los primeros 192 bits son los primeros 192 bits del \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio del Directorio de Libros (`0x0042`) +* El código de moneda de 160 bits de `TakerPaysCurrency` +* El código de moneda de 160 bits de `TakerGetsCurrency` +* El AccountID de `TakerPaysIssuer` +* El AccountID de `TakerGetsIssuer` + +Los 64 bits inferiores del ID de un Directorio de Oferta representan el monto `TakerPays` dividido por el monto `TakerGets` de las ofertas en ese directorio como un número de 64 bits en el formato de cantidad interna de Xahau. + +**Si el DirectoryNode no es la primera página del Directorio** (independientemente de si es un Directorio de Propietario o de Oferta), entonces tiene un ID que es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio DirectoryNode (`0x0064`) +* El ID del DirectoryNode raíz +* El número de página de este objeto. (Como 0 es el DirectoryNode raíz, este valor es un entero 1 o mayor.) diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/emitted-txn.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/emitted-txn.mdx new file mode 100644 index 0000000..1215734 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/emitted-txn.mdx @@ -0,0 +1,61 @@ +--- +title: Emitted Txn +--- +_(Añadido por la enmienda \[Hooks]\[].)_ + +Un objeto `EmittedTxn` describe una transacción que ha sido emitida por un hook. El objeto contiene todos los campos de la transacción original, junto con detalles adicionales sobre la emisión. + +### Ejemplo JSON + +```json +{ + "Account": "rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv", + "Amount": "999999", + "Destination": "rfCarbonVNTuXckX6x2qTMFmFSnm6dEWGX", + "DestinationTag": 0, + "EmitDetails": { + "EmitBurden": "1", + "EmitCallback": "rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv", + "EmitGeneration": 1, + "EmitHookHash": "A9B5411F4A4368008B4736EEE47A34B0EFCBE74016B9B94CC6208FBC0BF5C0C2", + "EmitNonce": "6B2A27D6864903A479614581A79D18E8C8ADCE01E3440C6E993BE07298ADC2A4", + "EmitParentTxnID": "9763EB6B74AEF0F55F642243AD51F48490594434439002A6142E545E47318D56" + }, + "Fee": "31", + "FirstLedgerSequence": 7186113, + "Flags": 2147483648, + "LastLedgerSequence": 7186117, + "Sequence": 0, + "SigningPubKey": "000000000000000000000000000000000000000000000000000000000000000000", + "SourceTag": 0, + "TransactionType": "Payment" +} +``` + +### Campos + +Un objeto `EmittedTxn` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `EmitDetails` | Object | Object | Sí | Contiene detalles sobre la emisión. Incluye la generación, la carga, la dirección de callback, el hash del hook que emitió la transacción, el nonce de la emisión y el ID de la transacción padre. | +| `TransactionType` | String | UInt16 | Sí | El tipo de la transacción que fue emitida. | +| `Account` | String | Account | Sí | La cuenta que emitió la transacción. | +| `Fee` | String | Amount | Sí | La tarifa pagada por la transacción. | +| `Sequence` | Number | UInt32 | Sí | El número de secuencia de la transacción. | +| `SigningPubKey` | String | Blob | Sí | La clave pública que firma la transacción. | + +El objeto `EmittedTxn` también contiene todos los campos de la transacción original. + +### Campos EmitDetails + +Un objeto `EmitDetails` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `EmitGeneration` | Number | UInt32 | Sí | Este campo rastrea una cadena de transacciones emitidas que a su vez causan que se emitan otras transacciones. | +| `EmitBurden` | String | UInt64 | Sí | Este campo es una heurística para detectar forkbombs. Las tarifas se basan en la carga y aumentarán exponencialmente cuando se inicie una reacción en cadena para evitar que la red sea saturada por transacciones emitidas auto-reforzantes. | +| `EmitParentTxnID` | String | Hash256 | Sí | La Ejecución del Hook que emitió la transacción está conectada a la Transacción Originante. Por lo tanto, este campo siempre es requerido para el rastreo eficiente del comportamiento. | +| `EmitNonce` | String | Hash256 | Sí | Las Transacciones Emitidas serían idénticas con los mismos campos y por lo tanto tendrían hashes de transacción idénticos si no se usara un nonce. Sin embargo, cada nodo en la red necesita estar de acuerdo sobre el nonce, por lo que se dispone de una API Hook especial. | +| `EmitCallback` | String | AccountID | No | Este campo es usado por xahld cuando necesita iniciar un callback, para saber qué Hook y cuenta usar para el callback. Los callbacks ocurren cuando una transacción emitida es aceptada en un ledger. | +| `EmitHookHash` | String | Hash256 | Sí | El SHA512H del Hook en el momento en que fue ejecutado. | diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/escrow.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/escrow.mdx new file mode 100644 index 0000000..f58d193 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/escrow.mdx @@ -0,0 +1,67 @@ +--- +title: Escrow +--- +[\[Source\]](https://github.com/ripple/rippled/blob/c6b6d82a754fe449cc533e18659df483c10a5c98/src/ripple/protocol/impl/LedgerFormats.cpp#L90-L101) + +_(Añadido por la enmienda \[Escrow]\[].)_ + +El tipo de objeto `Escrow` representa un pago retenido de XAH o IOU en espera de ser ejecutado o cancelado. Una \[transacción EscrowCreate]\[] crea un objeto `Escrow` en el ledger. Una \[transacción EscrowFinish]\[] o \[EscrowCancel]\[] exitosa elimina el objeto. + +Si el objeto `Escrow` tiene una [_cripto-condición_](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02), el pago solo puede tener éxito si una transacción EscrowFinish proporciona el correspondiente _cumplimiento_ que satisface la condición. (El único tipo de cripto-condición admitido es [PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1).) Si el objeto `Escrow` tiene un tiempo `FinishAfter`, el pago retenido solo puede ejecutarse después de ese tiempo. + +Un objeto `Escrow` está asociado con dos direcciones: + +* El propietario, quien proporciona el XAH o IOU al crear el objeto `Escrow`. Si el pago retenido es cancelado, el XAH o IOU regresa al propietario. +* El destino, donde se paga el XAH o IOU cuando el pago retenido tiene éxito. El destino puede ser el mismo que el propietario. + +### Ejemplo JSON + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Amount": "10000", + "CancelAfter": 545440232, + "Condition": "A0258020A82A88B2DF843A54F58772E4A3861866ECDB4157645DD9AE528C1D3AEEDABAB6810120", + "Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "DestinationTag": 23480, + "FinishAfter": 545354132, + "Flags": 0, + "LedgerEntryType": "Escrow", + "OwnerNode": "0000000000000000", + "DestinationNode": "0000000000000000", + "PreviousTxnID": "C44F2EB84196B9AD820313DBEBA6316A15C9A2D35787579ED172B87A30131DA7", + "PreviousTxnLgrSeq": 28991004, + "SourceTag": 11747, + "index": "DC5F3851D8A1AB622F957761E5963BC5BD439D5C24AC6AD7AC4523F0640244AC" +} +``` + +### Campos + +Un objeto `Escrow` tiene los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | ---------------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | Sí | La dirección del propietario (remitente) de este pago retenido. Esta es la cuenta que proporcionó el monto, y lo recupera si el pago retenido es cancelado. | +| `Amount` | String or Object | Amount | Sí | El monto a entregar mediante el pago retenido. | +| `CancelAfter` | Number | UInt32 | No | El pago retenido puede cancelarse si y solo si este campo está presente _y_ el tiempo que especifica ha pasado. Específicamente, se especifica como \[segundos desde la Época de Ripple]\[] y "ha pasado" si es anterior al tiempo de cierre del último ledger validado. | +| `Condition` | String | Blob | No | Una [cripto-condición PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1), en hexadecimal. Si está presente, la \[transacción EscrowFinish]\[] debe contener un cumplimiento que satisfaga esta condición. | +| `Destination` | String | AccountID | Sí | La dirección de destino donde se paga el monto si el pago retenido tiene éxito. | +| `DestinationNode` | String | UInt64 | No | Una pista que indica qué página del directorio del propietario del destino enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `DestinationTag` | Number | UInt32 | No | Una etiqueta arbitraria para especificar más el destino de este pago retenido, como un receptor alojado en la dirección de destino. | +| `FinishAfter` | Number | UInt32 | No | El tiempo, en \[segundos desde la Época de Ripple]\[], después del cual este pago retenido puede finalizarse. Cualquier \[transacción EscrowFinish]\[] antes de este tiempo falla. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `Escrow`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0075`, mapeado a la cadena `Escrow`, indica que este objeto es un objeto `Escrow`. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `SourceTag` | Number | UInt32 | No | Una etiqueta arbitraria para especificar más la fuente de este pago retenido, como un receptor alojado en la dirección del propietario. | +| `TransferRate` | Number | UInt32 | No | | + +### Formato del ID Escrow + +El ID de un objeto `Escrow` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Escrow (`0x0075`) +* El AccountID del remitente de la \[transacción EscrowCreate]\[] que creó el objeto `Escrow` +* El número de Secuencia de la \[transacción EscrowCreate]\[] que creó el objeto `Escrow`. Si la transacción EscrowCreate usó un Ticket, usa el valor `TicketSequence` en su lugar. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/fee-settings.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/fee-settings.mdx new file mode 100644 index 0000000..ccb71cb --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/fee-settings.mdx @@ -0,0 +1,64 @@ +--- +title: Fee Settings +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L115-L120) + +El tipo de objeto `FeeSettings` contiene el costo base de transacción actual y los montos de reserva tal como los determina la votación de tarifas. Cada versión del ledger contiene **como máximo un** objeto `FeeSettings`. + +### Ejemplo JSON + +Ejemplo de objeto `FeeSettings`: + +```json +{ + "BaseFee": "000000000000000A", + "Flags": 0, + "LedgerEntryType": "FeeSettings", + "ReferenceFeeUnits": 10, + "ReserveBase": 20000000, + "ReserveIncrement": 5000000, + "XahauActivationLgrSeq": 0, + "NetworkID": 21337, + "AccountCount": 0, + "index": "4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651" +} +``` + +### Campos + +El objeto `FeeSettings` tiene los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `BaseFee` | String | UInt64 | Sí | El costo de transacción de la "transacción de referencia" en drops de XAH como hexadecimal. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `FeeSettings`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0073`, mapeado a la cadena `FeeSettings`, indica que este objeto contiene la configuración de tarifas del ledger. | +| `ReferenceFeeUnits` | Number | UInt32 | Sí | La `BaseFee` traducida en "unidades de tarifa". | +| `ReserveBase` | Number | UInt32 | Sí | La reserva base para una cuenta en Xahau, como drops de XAH. | +| `ReserveIncrement` | Number | UInt32 | Sí | La reserva incremental de propietario por poseer objetos, como drops de XAH. | +| `XahauActivationLgrSeq` | Number | UInt32 | No | El índice del ledger donde se activó la génesis de Xahau. | +| `AccountCount` | Number | UInt32 | No | El número de cuentas creadas en la red Xahau. | +| `NetworkID` | Number | UInt32 | No | El ID de la red. | + +**Advertencia:** El formato JSON para este tipo de objeto del ledger es inusual. Los campos `BaseFee`, `ReserveBase` y `ReserveIncrement` indican drops de XAH pero _**no**_ en el formato habitual para \[especificar XAH]\[Monto de Moneda]. + +Si la _\[enmienda XAHFees]\[]_ está habilitada, el objeto `FeeSettings` tiene estos campos en su lugar: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------------- | --------- | ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| `BaseFeeDrops` | String | Amount | Sí | El costo de transacción de la "transacción de referencia" en drops de XAH. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `FeeSettings`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0073`, mapeado a la cadena `FeeSettings`, indica que este objeto contiene la configuración de tarifas del ledger. | +| `ReserveBaseDrops` | String | Amount | Sí | La reserva base para una cuenta en el XAH Ledger, como drops de XAH. | +| `ReserveIncrementDrops` | String | Amount | Sí | La reserva incremental de propietario por poseer objetos, como drops de XAH. | +| `XahauActivationLgrSeq` | Number | UInt32 | No | El índice del ledger donde se activó la génesis de Xahau. | +| `AccountCount` | Number | UInt32 | No | El número de cuentas creadas en la red Xahau. | +| `NetworkID` | Number | UInt32 | No | | + +### Formato del ID FeeSettings + +El ID del objeto `FeeSettings` es el hash de la clave de espacio `FeeSettings` (`0x0065`) únicamente. Esto significa que el ID del objeto `FeeSettings` en un ledger es siempre: + +``` +4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651 +``` diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition.mdx new file mode 100644 index 0000000..d451c1f --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition.mdx @@ -0,0 +1,58 @@ +--- +title: Hook Definition +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170) + +_(Añadido por la enmienda \[Hooks]\[].)_ + +Un objeto `HookDefinition` describe un hook, que es un fragmento de código que se ejecuta en respuesta a ciertas transacciones. El hook puede modificar la transacción, emitir nuevas transacciones o realizar otras acciones. + +### Ejemplo JSON + +```json +{ + "HookHash": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0", + "HookOn": "0000000000000000000000000000000000000000000000000000000000000000", + "HookNamespace": "0000000000000000000000000000000000000000000000000000000000000000", + "HookParameters": { + "HookParameter": { + "HookParameterName": "DEADBEEF", + "HookParameterValue": "DEADBEEF", + } + }, + "HookApiVersion": 1, + "CreateCode": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924", + "HookSetTxnID": "0000000000000000", + "ReferenceCount": "6", + "Fee": "100000000", + "HookCallbackFee": "200000000", + "LedgerEntryType": "HookDefinition", + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `HookDefinition` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- | +| `HookHash` | String | Hash256 | Sí | El identificador único del hook. | +| `HookOn` | String | Hash256 | Sí | La/s transacción/es en las que se activa el hook. | +| `HookCanEmit` | String | Hash256 | No | La/s transacción/es que el hook puede emitir. | +| `HookNamespace` | String | Hash256 | Sí | El espacio de nombres del hook. | +| `HookParameters` | String | Vector | Sí | Los parámetros que acepta el hook. | +| `HookApiVersion` | Number | UInt16 | Sí | La versión de la API del hook que usa el hook. | +| `CreateCode` | String | VL | Sí | El código que se ejecuta cuando se crea el hook. | +| `HookSetTxnID` | String | Hash256 | Sí | El ID de la transacción que estableció el hook. | +| `ReferenceCount` | String | UInt64 | Sí | El número de referencias al hook. | +| `Fee` | String | Amount | Sí | La tarifa para ejecutar el hook. | +| `HookCallbackFee` | String | Amount | No | La tarifa para ejecutar la función de callback del hook. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0043`, mapeado a la cadena `HookDefinition`, indica que este objeto es un objeto HookDefinition. | + +#### Formato del ID Hook Definition + +El ID de un objeto `HookDefinition` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio HookDefinition (`0x0044`) +* El `HookHash` del hook diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-state.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-state.mdx new file mode 100644 index 0000000..d5ba8a7 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-state.mdx @@ -0,0 +1,42 @@ +--- +title: Hook State +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170) + +_(Añadido por la enmienda \[Hooks]\[].)_ + +Un objeto `HookState` describe el estado de un hook, que es un fragmento de código que se ejecuta en Xahau y puede interactuar con las transacciones. El objeto `HookState` almacena el estado del hook, que puede ser modificado por el código del hook. + +### Ejemplo JSON + +```json +{ + "OwnerNode": "0000000000000000", + "HookStateKey": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0", + "HookStateData": "46060241FABCF692D4D934BA2A6C4427CD4279083E38C77CBE642243E43BE291", + "LedgerEntryType": "HookState", + "index": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924" +} +``` + +### Campos + +Un objeto `HookState` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------- | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `HookStateKey` | String | Hash256 | Sí | La clave que identifica de manera única este estado del hook. | +| `HookStateData` | String | VL | Sí | Los datos almacenados por el hook. Pueden ser cualquier dato que el código del hook decida almacenar. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0043`, mapeado a la cadena `HookState`, indica que este objeto es un objeto HookState. | + +#### Formato del ID HookState + +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/Indexes.cpp#L193-L200) + +El ID de un objeto `HookState` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio HookState (`0x0076`) +* El AccountID de la cuenta que posee el hook +* El `HookStateKey` del objeto `HookState` +* El `HookNamespace` del hook. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook.mdx new file mode 100644 index 0000000..e626c2c --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook.mdx @@ -0,0 +1,57 @@ +--- +title: Hook +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170) + +_(Añadido por la enmienda \[Hooks]\[].)_ + +Un objeto `Hook` describe un contrato inteligente que puede activarse por una transacción para realizar operaciones predefinidas. Las operaciones son definidas por el creador del `Hook` y pueden interactuar con el ledger y las transacciones. + +### Ejemplo JSON + +```json +{ + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924", + "PreviousTxnLgrSeq": 6, + "Hooks": [ + { + "HookHash": "46060241FABCF692D4D934BA2A6C4427CD4279083E38C77CBE642243E43BE291", + "HookParameters": [] + } + ], + "LedgerEntryType": "Hook", + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `Hook` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | Account | Sí | La cuenta que creó el Hook. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El ID de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[] del ledger que contiene la transacción que modificó más recientemente este objeto. | +| `Hooks` | Array | Array | Sí | Un arreglo de objetos hook. Cada objeto tiene los siguientes campos: `HookHash`, `CreateCode`, `HookGrants`, `HookNamespace`, `HookParameters`, `HookOn`, `HookApiVersion`, `Flags`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0043`, mapeado a la cadena `Hook`, indica que este objeto es un objeto Hook. | + +### Campos del Hook + +Los siguientes campos se usan en el objeto hook: + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ---------------- | --------- | ------------ | ------------------------------ | +| `HookHash` | String | Hash256 | El hash del hook. | +| `HookParameters` | Array | Array | Los parámetros del hook. | +| `Flags` | Number | UInt32 | Indicadores adicionales para el hook. | + +#### Formato del ID Hook + +El ID de un objeto `Hook` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Hook (`0x0048`) +* El AccountID del remitente de la \[transacción SetHook]\[] que creó el objeto `Hook` diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/import-vl-sequence.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/import-vl-sequence.mdx new file mode 100644 index 0000000..8d15e9e --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/import-vl-sequence.mdx @@ -0,0 +1,36 @@ +--- +title: Import VL Sequence +--- +_(Añadido por la enmienda \[Import]\[].)_ + +El `ImportVLSequence` ayuda a rastrear y validar el orden de las operaciones durante el proceso de importación. Se usa para asegurar que ocurra la secuencia correcta de eventos y para manejar cualquier discrepancia o actualización en el dUNL en el ledger "quemador". + +### Ejemplo JSON + +```json +{ + "LedgerEntryType": "ImportVLSequence", + "Flags": 0, + "ImportSequence": 2023102101, + "PublicKey": "n9LigbVAi4pQc6pU2KJvQZV5wqJ8C3sVvZvBZUopchH8vqa6PEKy", + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `ImportVLSequence` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0049`, mapeado a la cadena `ImportVLSequence`, indica que este objeto es un objeto ImportVLSequence. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos. No se definen indicadores para el tipo de objeto `ImportVLSequence`, por lo que este valor es siempre `0`. | +| `ImportSequence` | Number | UInt32 | Sí | El número de secuencia actual de la lista dUNL en el ledger "quemador". | +| `PublicKey` | String | Blob | Sí | La `PublicKey` de la lista dUNL del ledger "quemador". | + +#### Formato del ID Import VL Sequence + +El ID de un objeto `ImportVLSequence` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Import VL Sequence (`0x0049`) +* La Clave Pública de la Lista de Validadores de Importación diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/index.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/index.mdx new file mode 100644 index 0000000..ca072b7 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/index.mdx @@ -0,0 +1,21 @@ +--- +title: Tipos de Objetos del Ledger +--- +import { Aside } from '@astrojs/starlight/components'; + +## Campos Comunes de Entradas del Ledger + +[\[Source\]](https://github.com/Xahau/xahaud/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp) + +Cada entrada en los datos de estado de un ledger tiene el mismo conjunto de campos comunes, más campos adicionales según el tipo de entrada del ledger. Los nombres de campo son sensibles a mayúsculas y minúsculas. Los campos comunes para todas las entradas del ledger son: + +| Campo | Tipo JSON | Tipo Interno | ¿Requerido? | Descripción | +| ------------------------ | --------- | ------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `index` o `LedgerIndex` | String | Hash256 | No | El ID único para esta entrada del ledger. En JSON, este campo se representa con nombres diferentes según el contexto y el método de API. (Nota: aunque se especifica como "opcional" en el código, cada entrada del ledger debería tener uno a menos que sean datos heredados de muy al principio de la historia del XRP Ledger.) | +| `LedgerEntryType` | String | UInt16 | Sí | El tipo de entrada del ledger. Los tipos válidos de entradas del ledger incluyen `AccountRoot`, `Offer`, `RippleState` y otros. | +| `Flags` | Number | UInt32 | Sí | Conjunto de indicadores de bits para esta entrada del ledger. | +| `Remarks` | Array | STArray | No | Arreglo de objetos de observación para establecer, actualizar o eliminar (ver Formato de Remarks) | + + diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ledger-hashes.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ledger-hashes.mdx new file mode 100644 index 0000000..578ab61 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ledger-hashes.mdx @@ -0,0 +1,66 @@ +--- +title: Ledger Hashes +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L104-L108) + +(No confundir con el \[tipo de dato de cadena "hash de ledger"]\[Hash], que identifica de forma única una versión del ledger. Esta sección describe el tipo de objeto del ledger `LedgerHashes`.) + +El tipo de objeto `LedgerHashes` contiene un historial de ledgers anteriores que llevaron a esta versión del ledger, en forma de sus hashes. Los objetos de este tipo del ledger se modifican automáticamente al cerrar un ledger. Los objetos `LedgerHashes` existen para hacer posible buscar el hash de un ledger anterior con solo la versión actual del ledger y como máximo una búsqueda de una versión de ledger anterior. + +Hay dos tipos de objetos `LedgerHashes`. Ambos tipos tienen los mismos campos. Cada versión del ledger contiene: + +* Exactamente un objeto `LedgerHashes` de "historial reciente" +* Un número de objetos `LedgerHashes` de "historial anterior" basado en el índice del ledger actual. Específicamente, Xahau agrega un nuevo objeto de "historial anterior" cada 65536 versiones del ledger. + +**Nota:** Como excepción, un nuevo ledger de génesis no tiene ningún objeto `LedgerHashes`, porque no tiene historial del ledger. + +Ejemplo de objeto `LedgerHashes` (reducido): + +```json +{ + "LedgerEntryType": "LedgerHashes", + "Flags": 0, + "FirstLedgerSequence": 2, + "LastLedgerSequence": 33872029, + "Hashes": [ + "D638208ADBD04CBB10DE7B645D3AB4BA31489379411A3A347151702B6401AA78", + "254D690864E418DDD9BCAC93F41B1F53B1AE693FC5FE667CE40205C322D1BE3B", + "A2B31D28905E2DEF926362822BC412B12ABF6942B73B72A32D46ED2ABB7ACCFA", + "AB4014846DF818A4B43D6B1686D0DE0644FE711577C5AB6F0B2A21CCEE280140", + "3383784E82A8BA45F4DD5EF4EE90A1B2D3B4571317DBAC37B859836ADDE644C1", + ... (hasta 256 hashes de ledger) ... + ], + "index": "B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B" +} +``` + +Un objeto `LedgerHashes` tiene los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------------- | ---------------- | ------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `FirstLedgerSequence` | Number | UInt32 | Sí | **OBSOLETO** No usar. (El objeto de "hashes recientes" del Xahau de producción tiene el valor `2` en este campo como resultado de un software `rippled` anterior. Ese valor se mantiene al actualizar el objeto de "hashes recientes". Los nuevos objetos de "historial anterior" no tienen este campo.) | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `LedgerHashes`. El valor es siempre `0`. | +| `Hashes` | Array of Strings | Vector256 | Sí | Un arreglo de hasta 256 hashes de ledger. El contenido depende del subtipo de objeto `LedgerHashes` que sea. | +| `LastLedgerSequence` | Number | UInt32 | Sí | El \[Índice del Ledger]\[] de la última entrada en el arreglo `Hashes` de este objeto. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0068`, mapeado a la cadena `LedgerHashes`, indica que este objeto es una lista de hashes de ledger. | + +### LedgerHashes de Historial Reciente + +Hay exactamente un objeto `LedgerHashes` del subtipo de "historial reciente" en cada ledger después del ledger de génesis. Este objeto contiene los hashes identificadores de las 256 versiones del ledger más recientes (o menos, si el historial del ledger tiene menos de 256 ledgers en total) en el arreglo `Hashes`. Cada vez que se cierra un nuevo ledger, parte del proceso de cierre implica actualizar el objeto de "historial reciente" con el hash de la versión del ledger anterior del que se derivó esta versión. Cuando hay más de 256 hashes, se elimina el más antiguo. + +### LedgerHashes de Historial Anterior + +Las entradas de `LedgerHashes` de "historial anterior" contienen colectivamente el hash de cada 256.ª versión del ledger (también llamadas "ledgers de bandera") en el historial completo del ledger. Cuando el hijo de un ledger de bandera se cierra, el hash del ledger de bandera se agrega al arreglo `Hashes` del objeto `LedgerHashes` de "historial anterior" más reciente. Cada 65536 ledgers, `rippled` crea un nuevo objeto `LedgerHashes`, de modo que cada objeto de "historial anterior" tiene los hashes de 256 ledgers de bandera. + +Los objetos `LedgerHashes` de "historial anterior" actúan como una [lista de salto](https://en.wikipedia.org/wiki/Skip_list) para que puedas obtener el hash de cualquier ledger de bandera histórico desde su índice. + +### Formatos del ID LedgerHashes + +Hay dos formatos para los IDs de objetos `LedgerHashes`, dependiendo de si el objeto es del subtipo de "historial reciente" o de "historial anterior". + +El objeto `LedgerHashes` de **"historial reciente"** tiene un ID que es el \[SHA-512Half]\[] de la clave de espacio `LedgerHashes` (`0x0073`). En otras palabras, el "historial reciente" siempre tiene el ID `B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B`. + +Los objetos `LedgerHashes` de **"historial anterior"** tienen un ID que es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio `LedgerHashes` (`0x0073`) +* El \[Índice del Ledger]\[] de 32 bits de un ledger de bandera en el arreglo `Hashes` del objeto, dividido por 65536. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/negative-unl.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/negative-unl.mdx new file mode 100644 index 0000000..4de1cc9 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/negative-unl.mdx @@ -0,0 +1,53 @@ +--- +title: Negative UNL +--- +_(Añadido por la enmienda \[NegativeUNL]\[].)_ + +El tipo de objeto `NegativeUNL` contiene el estado actual de la UNL Negativa, una lista de validadores de confianza que actualmente se cree que están fuera de línea. + +Cada versión del ledger contiene **como máximo un** objeto `NegativeUNL`. Si no hay validadores actualmente deshabilitados o programados para deshabilitarse, no hay ningún objeto `NegativeUNL` en el ledger. + +### Ejemplo JSON + +```json +{ + "DisabledValidators": [ + { + "DisabledValidator": { + "FirstLedgerSequence": 1609728, + "PublicKey": "ED6629D456285AE3613B285F65BBFF168D695BA3921F309949AFCD2CA7AFEC16FE" + } + } + ], + "Flags": 0, + "LedgerEntryType": "NegativeUNL", + "index": "2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244" +} +``` + +Un objeto `NegativeUNL` tiene los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------------- | --------- | ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- | +| `DisabledValidators` | Array | Array | No | Una lista de objetos `DisabledValidator` (ver abajo), cada uno representando un validador de confianza actualmente deshabilitado. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos. No se definen indicadores para el tipo de objeto NegativeUNL, por lo que este valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x004E`, mapeado a la cadena `NegativeUNL`, indica que este objeto es la UNL Negativa. | +| `ValidatorToDisable` | String | Blob | No | La clave pública de un validador de confianza que está programado para deshabilitarse en el próximo ledger de bandera. | +| `ValidatorToReEnable` | String | Blob | No | La clave pública de un validador de confianza en la UNL Negativa que está programado para volver a habilitarse en el próximo ledger de bandera. | + +### Objetos DisabledValidator + +Cada objeto `DisabledValidator` representa un validador deshabilitado. En JSON, un objeto `DisabledValidator` tiene un campo, `DisabledValidator`, que a su vez contiene otro objeto con los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ----------------------- | --------- | ------------------- | ------------------------------------------------------------------------ | +| `FirstLedgerSequence` | Number | UInt32 | El \[índice del ledger]\[] cuando el validador fue agregado a la UNL Negativa. | +| `PublicKey` | String | Blob | La clave pública maestra del validador, en hexadecimal. | + +### Formato del ID NegativeUNL + +El ID del objeto `NegativeUNL` es el hash de la clave de espacio `NegativeUNL` (`0x004E`) únicamente. Esto significa que el ID del objeto `NegativeUNL` en un ledger es siempre: + +``` +2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244 +``` diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/offer.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/offer.mdx new file mode 100644 index 0000000..011d7cc --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/offer.mdx @@ -0,0 +1,66 @@ +--- +title: Offer +--- +[\[Source\]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L57) + +La entrada del ledger `Offer` describe una Oferta para intercambiar monedas en el intercambio descentralizado de Xahau. (En finanzas, esto se conoce más tradicionalmente como una _orden_.) Una \[transacción OfferCreate]\[] solo crea una entrada `Offer` en el ledger cuando la Oferta no puede ejecutarse completamente de inmediato consumiendo otras Ofertas ya existentes en el ledger. + +Una Oferta puede quedar sin fondos a través de otras actividades en la red mientras permanece en el ledger. Al procesar transacciones, la red automáticamente elimina cualquier Oferta sin fondos que esas transacciones encuentren. + +### Ejemplo JSON + +```json +{ + "Account": "rBqb89MRQJnMPq8wTwEbtz4kvxrEDfcYvt", + "BookDirectory": "ACC27DE91DBA86FC509069EAF4BC511D73128B780F2E54BF5E07A369E2446000", + "BookNode": "0000000000000000", + "Flags": 131072, + "LedgerEntryType": "Offer", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "F0AB71E777B2DA54B86231E19B82554EF1F8211F92ECA473121C655BFC5329BF", + "PreviousTxnLgrSeq": 14524914, + "Sequence": 866, + "TakerGets": { + "currency": "XAG", + "issuer": "r9Dr5xwkeLegBeXq6ujinjSBLQzQ1zQGjH", + "value": "37" + }, + "TakerPays": "79550000000", + "index": "96F76F27D8A327FC48753167EC04A46AA0E382E6F57F32FD12274144D00F1797" +} +``` + +### Campos + +Un objeto `Offer` tiene los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | ---------------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Account` | String | AccountID | Sí | La dirección de la cuenta que posee esta Oferta. | +| `BookDirectory` | String | Hash256 | Sí | El ID del Directorio de Oferta que enlaza a esta Oferta. | +| `BookNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio de oferta enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `Expiration` | Number | UInt32 | No | Indica el tiempo después del cual esta Oferta se considera sin fondos. Consulta \[Especificando Tiempo]\[] para detalles. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para esta oferta. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x006F`, mapeado a la cadena `Offer`, indica que este objeto describe una Oferta. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `Sequence` | Number | UInt32 | Sí | El valor `Sequence` de la transacción \[OfferCreate]\[] que creó este objeto `Offer`. Se usa en combinación con `Account` para identificar esta Oferta. | +| `TakerPays` | String or Object | Amount | Sí | El monto restante y el tipo de moneda solicitados por el creador de la Oferta. | +| `TakerGets` | String or Object | Amount | Sí | El monto restante y el tipo de moneda proporcionados por el creador de la Oferta. | + +### Indicadores Offer + +Hay varias opciones que pueden habilitarse o deshabilitarse cuando una \[transacción OfferCreate]\[] crea un objeto de oferta. En el ledger, los indicadores se representan como valores binarios que pueden combinarse con operaciones OR bit a bit. Los indicadores del ledger tienen nombres que comienzan con **`lsf`**. + +Los objetos `Offer` pueden tener los siguientes valores de indicador: + +
Nombre del IndicadorValor HexValor DecimalIndicador OfferCreate CorrespondienteDescripción
lsfPassive0x0001000065536tfPassiveEl objeto fue colocado como una Oferta pasiva. Esto no tiene efecto sobre el objeto en el ledger.
lsfSell0x00020000131072tfSellEl objeto fue colocado como una Oferta de venta. Esto no tiene efecto sobre el objeto en el ledger (porque tfSell solo importa si obtienes una tasa mejor de la que pediste, lo cual no puede suceder después de que el objeto entra en el ledger).
+ +### Formato del ID Offer + +El ID de un objeto `Offer` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio Offer (`0x006F`) +* El AccountID de la cuenta que coloca la Oferta +* El número de Secuencia de la \[transacción OfferCreate]\[] que creó la Oferta. Si la transacción OfferCreate usó un Ticket, usa el valor `TicketSequence` en su lugar. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/pay-channel.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/pay-channel.mdx new file mode 100644 index 0000000..2b75673 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/pay-channel.mdx @@ -0,0 +1,89 @@ +--- +title: Pay Channel +--- +[\[Source\]](https://github.com/ripple/rippled/blob/c0a0b79d2d483b318ce1d82e526bd53df83a4a2c/src/ripple/protocol/impl/LedgerFormats.cpp#L180-L198) + +_(Añadido por la enmienda \[PayChan]\[].)_ + +El tipo de objeto `PayChannel` representa un canal de pago. Los canales de pago permiten pagos pequeños y rápidos fuera del ledger de XAH o IOU que luego pueden reconciliarse con el ledger de consenso. Un canal de pago retiene un saldo de XAH o IOU que solo puede pagarse a una dirección de destino específica hasta que el canal se cierra. Cualquier XAH o IOU no gastado se devuelve al propietario del canal (la dirección fuente que lo creó y financió) cuando el canal se cierra. + +El \[tipo de transacción PaymentChannelCreate]\[] crea un objeto `PayChannel`. Los tipos \[PaymentChannelFund]\[] y \[PaymentChannelClaim]\[] modifican objetos `PayChannel` existentes. + +Cuando un canal de pago expira, al principio permanece en el ledger, porque solo las nuevas transacciones pueden modificar el contenido del ledger. El procesamiento de transacciones cierra automáticamente un canal de pago cuando cualquier transacción accede a él después de la expiración. + +### Ejemplo JSON + +```json +{ + "Account": "rBqb89MRQJnMPq8wTwEbtz4kvxrEDfcYvt", + "Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Amount": "4325800", + "Balance": "2323423", + "PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A", + "SettleDelay": 3600, + "Expiration": 536027313, + "CancelAfter": 536891313, + "SourceTag": 0, + "DestinationTag": 1002341, + "DestinationNode": "0000000000000000", + "Flags": 0, + "LedgerEntryType": "PayChannel", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "F0AB71E777B2DA54B86231E19B82554EF1F8211F92ECA473121C655BFC5329BF", + "PreviousTxnLgrSeq": 14524914, + "index": "96F76F27D8A327FC48753167EC04A46AA0E382E6F57F32FD12274144D00F1797" +} +``` + +### Campos + +Un objeto `PayChannel` tiene los siguientes campos: + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | ---------------- | ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | Sí | La dirección fuente que posee este canal de pago. Proviene de la dirección emisora de la transacción que creó el canal. | +| `Amount` | String or Object | Amount | Sí | Monto total asignado a este canal. Incluye montos ya pagados a la dirección de destino. Inicialmente establecido por la transacción que creó el canal y puede aumentarse con transacciones PaymentChannelFund. | +| `Balance` | String or Object | Amount | Sí | Monto total ya pagado por el canal. La diferencia entre este valor y el campo `Amount` es cuánto todavía puede pagarse a la dirección de destino con transacciones PaymentChannelClaim. Si el canal se cierra, la diferencia restante regresa a la dirección fuente. | +| `CancelAfter` | Number | UInt32 | No | El tiempo de expiración inmutable para este canal de pago, en \[segundos desde la Época de Ripple]\[]. Este canal expira si este valor está presente y es menor que el campo `close_time` del ledger anterior. Esto lo establece opcionalmente la transacción que creó el canal y no puede cambiarse. | +| `Destination` | String | AccountID | Sí | La dirección de destino para este canal de pago. Mientras el canal está abierto, esta dirección es la única que puede recibir el monto del canal. | +| `DestinationTag` | Number | UInt32 | No | Una etiqueta arbitraria para especificar más el destino de este canal de pago. | +| `DestinationNode` | String | UInt64 | No | Una pista que indica qué página del directorio del propietario del destino enlaza a este objeto. | +| `Expiration` | Number | UInt32 | No | El tiempo de expiración mutable para este canal de pago, en \[segundos desde la Época de Ripple]\[]. El canal expira si este valor está presente y es menor que el campo `close_time` del ledger anterior. Consulta Establecer Expiración del Canal para más detalles. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `PayChannel`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0078`, mapeado a la cadena `PayChannel`, indica que este objeto es un objeto de canal de pago. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario de la dirección fuente enlaza a este objeto. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `PublicKey` | String | Blob | Sí | Clave pública, en hexadecimal, del par de claves que puede usarse para firmar reclamos contra este canal. Puede ser cualquier clave pública secp256k1 o Ed25519 válida. La establece la transacción que creó el canal y debe coincidir con la clave pública usada en los reclamos contra el canal. | +| `SettleDelay` | Number | UInt32 | Sí | Número de segundos que la dirección fuente debe esperar para cerrar el canal si aún tiene algún monto. Los valores más pequeños significan que la dirección de destino tiene menos tiempo para canjear cualquier reclamo pendiente después de que la dirección fuente solicite cerrar el canal. | +| `SourceTag` | Number | UInt32 | No | Una etiqueta arbitraria para especificar más la fuente de este canal de pago. | +| `TransferRate` | Number | UInt32 | No | | + +### Establecer Expiración del Canal + +El campo `Expiration` de un canal de pago es el tiempo de expiración mutable, en contraste con el tiempo de expiración inmutable representado por el campo `CancelAfter`. La expiración de un canal siempre se considera relativa al campo `close_time` del ledger anterior. + +#### Dirección Fuente + +La dirección fuente puede establecer la `Expiration` directamente con el tipo de transacción PaymentChannelFund. El nuevo valor no debe ser anterior al valor `Expiration` actual (si se ha establecido uno), o al tiempo de cierre del ledger anterior más el `SettleDelay` del canal, el que sea más temprano. + +La dirección fuente también puede establecer la `Expiration` con el indicador `tfClose` del tipo de transacción PaymentChannelClaim. Si el indicador está habilitado, el ledger establece automáticamente la `Expiration` al valor actual de `Expiration` (si se ha establecido uno) o al tiempo de cierre del ledger anterior más el `SettleDelay` del canal, el que sea más temprano. + +La dirección fuente puede eliminar la `Expiration` con el indicador `tfRenew` del tipo de transacción PaymentChannelClaim. + +#### Dirección de Destino + +La dirección de destino no puede establecer el campo `Expiration`. Sin embargo, la dirección de destino puede usar el indicador `tfClose` de PaymentChannelClaim para cerrar un canal inmediatamente. + +#### Otras Direcciones + +Si cualquier otra dirección intenta establecer un campo `Expiration`, la transacción falla con el código de error `tecNO_PERMISSION`. Sin embargo, si el canal ya expiró, la transacción causa que el canal se cierre y resulta en `tesSUCCESS`. + +### Formato del ID PayChannel + +El ID de un objeto `PayChannel` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio PayChannel (`0x0078`) +* El AccountID de la cuenta fuente +* El AccountID de la cuenta de destino +* El número de Secuencia de la \[transacción PaymentChannelCreate]\[] que creó el canal. Si la transacción PaymentChannelCreate usó un Ticket, usa el valor `TicketSequence` en su lugar. diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx new file mode 100644 index 0000000..415092f --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx @@ -0,0 +1,114 @@ +--- +title: Ripple State +--- +[\[Source\]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L70) + +El tipo de objeto `RippleState` conecta dos cuentas en una sola moneda. Conceptualmente, un objeto `RippleState` representa dos líneas de confianza entre las cuentas, una desde cada lado. Cada cuenta puede cambiar la configuración de su lado del objeto `RippleState`, pero el saldo es un único valor compartido. Una línea de confianza que está completamente en su estado predeterminado se considera igual a una línea de confianza que no existe, por lo que `rippled` elimina objetos `RippleState` cuando sus propiedades son completamente predeterminadas. + +### Cuenta Alta vs. Cuenta Baja + +Solo puede haber un objeto `RippleState` por moneda para cualquier par dado de cuentas. Como ninguna cuenta tiene privilegio en Xahau, un objeto `RippleState` ordena las direcciones de cuenta numéricamente para asegurar una forma canónica. Cualquier dirección que sea numéricamente menor al decodificarse se considera la "cuenta baja" y la otra es la "cuenta alta". El saldo neto de la línea de confianza se almacena desde la perspectiva de la cuenta baja. + +El "emisor" del saldo en una línea de confianza depende de si el saldo es positivo o negativo. Si un objeto `RippleState` muestra un saldo positivo, la cuenta alta es el emisor. Si el saldo es negativo, la cuenta baja es el emisor. + +### Ejemplo JSON + +```json +{ + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-10" + }, + "Flags": 393216, + "HighLimit": { + "currency": "USD", + "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "value": "110" + }, + "HighNode": "0000000000000000", + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "value": "0" + }, + "LowNode": "0000000000000000", + "PreviousTxnID": "E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879", + "PreviousTxnLgrSeq": 14090896, + "LockCount": 1, + "LockedBalance": { + "currency": "USD", + "issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "value": "10" + }, + "index": "9CA88CDEDFF9252B3DE183CE35B038F57282BC9503CDFA1923EF9A95DF0D6F7B" +} +``` + +### Campos + +Un objeto `RippleState` tiene los siguientes campos: + +| Nombre | Tipo JSON | Tipo Interno | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Balance` | Object | Amount | Sí | El saldo de la línea de confianza, desde la perspectiva de la cuenta baja. Un saldo negativo indica que la cuenta alta tiene tokens emitidos por la cuenta baja. El emisor siempre se establece en el valor neutro ACCOUNT_ONE. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de opciones booleanas habilitadas para este objeto. | +| `HighLimit` | Object | Amount | Sí | El límite que la cuenta alta ha establecido en la línea de confianza. El `issuer` es la dirección de la cuenta alta que estableció este límite. | +| `HighNode` | String | UInt64 | Sí | (Omitido en algunos ledgers históricos) Una pista que indica qué página del directorio del propietario de la cuenta alta enlaza a este objeto. | +| `HighQualityIn` | Number | UInt32 | No | La calidad entrante establecida por la cuenta alta, como un entero en la razón implícita `HighQualityIn`:1,000,000,000. Como caso especial, el valor 0 equivale a 1 mil millones, o valor nominal. | +| `HighQualityOut` | Number | UInt32 | No | La calidad saliente establecida por la cuenta alta, como un entero en la razón implícita `HighQualityOut`:1,000,000,000. Como caso especial, el valor 0 equivale a 1 mil millones, o valor nominal. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0072`, mapeado a la cadena `RippleState`, indica que este objeto es un objeto RippleState. | +| `LowLimit` | Object | Amount | Sí | El límite que la cuenta baja ha establecido en la línea de confianza. El `issuer` es la dirección de la cuenta baja que estableció este límite. | +| `LowNode` | String | UInt64 | Sí | (Omitido en algunos ledgers históricos) Una pista que indica qué página del directorio del propietario de la cuenta baja enlaza a este objeto. | +| `LowQualityIn` | Number | UInt32 | No | La calidad entrante establecida por la cuenta baja, como un entero en la razón implícita `LowQualityIn`:1,000,000,000. | +| `LowQualityOut` | Number | UInt32 | No | La calidad saliente establecida por la cuenta baja, como un entero en la razón implícita `LowQualityOut`:1,000,000,000. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `LockCount` | Number | UInt32 | No | El número total de saldos bloqueados en un objeto de ledger RippleState. | +| `LockedBalance` | Object | Amount | No | El monto actual de tokens bloqueados para una línea de confianza específica. | + +### Indicadores RippleState + +Hay varias opciones que pueden habilitarse o deshabilitarse para una línea de confianza. Estas opciones pueden cambiarse con una \[transacción TrustSet]\[]. Los indicadores del ledger tienen nombres que comienzan con **`lsf`**. + +Los objetos RippleState pueden tener los siguientes valores de indicador: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Indicador TrustSet Correspondiente | Descripción | +| -------------------- | ------------ | ------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------- | +| `lsfLowReserve` | `0x00010000` | 65536 | (Ninguno) | Este objeto RippleState contribuye a la reserva del propietario de la cuenta baja. | +| `lsfHighReserve` | `0x00020000` | 131072 | (Ninguno) | Este objeto RippleState contribuye a la reserva del propietario de la cuenta alta. | +| `lsfLowAuth` | `0x00040000` | 262144 | `tfSetAuth` | La cuenta baja ha autorizado a la cuenta alta a tener tokens emitidos por la cuenta baja. | +| `lsfHighAuth` | `0x00080000` | 524288 | `tfSetAuth` | La cuenta alta ha autorizado a la cuenta baja a tener tokens emitidos por la cuenta alta. | +| `lsfLowNoRipple` | `0x00100000` | 1048576 | `tfSetNoRipple` | La cuenta baja ha deshabilitado el rippling desde esta línea de confianza. | +| `lsfHighNoRipple` | `0x00200000` | 2097152 | `tfSetNoRipple` | La cuenta alta ha deshabilitado el rippling desde esta línea de confianza. | +| `lsfLowFreeze` | `0x00400000` | 4194304 | `tfSetFreeze` | La cuenta baja ha congelado la línea de confianza, impidiendo que la cuenta alta transfiera el activo. | +| `lsfHighFreeze` | `0x00800000` | 8388608 | `tfSetFreeze` | La cuenta alta ha congelado la línea de confianza, impidiendo que la cuenta baja transfiera el activo. | +| `lsfLowDeepFreeze` | `0x02000000` | 33554432 | `tfSetDeepFreeze` | La cuenta baja ha congelado profundamente la línea de confianza, impidiendo que la cuenta alta envíe y reciba el activo. _(Requiere la enmienda \[DeepFreeze]\[])_ | +| `lsfHighDeepFreeze` | `0x04000000` | 67108864 | `tfSetDeepFreeze` | La cuenta alta ha congelado profundamente la línea de confianza, impidiendo que la cuenta baja envíe y reciba el activo. _(Requiere la enmienda \[DeepFreeze]\[])_ | + +### Contribución a la Reserva del Propietario + +Si una cuenta modifica una línea de confianza para ponerla en un estado no predeterminado, esa línea de confianza cuenta hacia la reserva del propietario de la cuenta. En un objeto RippleState, los indicadores `lsfLowReserve` y `lsfHighReserve` indican qué cuenta(s) son responsables de la reserva del propietario. + +Los valores que cuentan hacia el estado no predeterminado de una línea de confianza son los siguientes: + +| La cuenta alta es responsable si... | La cuenta baja es responsable si... | +| ------------------------------------------------------------- | ------------------------------------------------------------- | +| `Balance` es negativo (la cuenta alta tiene la moneda) | `Balance` es positivo (la cuenta baja tiene la moneda) | +| `HighLimit` no es `0` | `LowLimit` no es `0` | +| `LowQualityIn` no es `0` y no es `1000000000` | `HighQualityIn` no es `0` y no es `1000000000` | +| `LowQualityOut` no es `0` y no es `1000000000` | `HighQualityOut` no es `0` y no es `1000000000` | +| El indicador `lsfHighNoRipple` no está en su estado predeterminado | El indicador `lsfLowNoRipple` no está en su estado predeterminado | +| El indicador `lsfHighFreeze` está habilitado | El indicador `lsfLowFreeze` está habilitado | + +Los indicadores **`lsfLowAuth`** y **`lsfHighAuth`** no cuentan contra el estado predeterminado, porque no pueden deshabilitarse. + +### Formato del ID RippleState + +El ID de un objeto RippleState es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio RippleState (`0x0072`) +* El AccountID de la cuenta baja +* El AccountID de la cuenta alta +* El código de moneda de 160 bits de la(s) línea(s) de confianza diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list.mdx new file mode 100644 index 0000000..f6506f5 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list.mdx @@ -0,0 +1,94 @@ +--- +title: Signers List +--- +[\[Source\]](https://github.com/ripple/rippled/blob/6d2e3da30696bd10e3bb11a5ff6d45d2c4dae90f/src/ripple/protocol/impl/LedgerFormats.cpp#L127) + +_(Añadido por la enmienda \[MultiSign]\[].)_ + +El tipo de objeto `SignerList` representa una lista de partes que, como grupo, están autorizadas para firmar una transacción en lugar de una cuenta individual. Puedes crear, reemplazar o eliminar una lista de firmantes usando una \[transacción SignerListSet]\[]. + +### Ejemplo JSON + +```json +{ + "Flags": 0, + "LedgerEntryType": "SignerList", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "5904C0DC72C58A83AEFED2FFC5386356AA83FCA6A88C89D00646E51E687CDBE4", + "PreviousTxnLgrSeq": 16061435, + "SignerEntries": [ + { + "SignerEntry": { + "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "SignerWeight": 2 + } + }, + { + "SignerEntry": { + "Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n", + "SignerWeight": 1 + } + }, + { + "SignerEntry": { + "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v", + "SignerWeight": 1 + } + } + ], + "SignerListID": 0, + "SignerQuorum": 3, + "index": "A9C28A28B85CD533217F5C0A0C7767666B093FA58A0F2D80026FCC4CD932DDC7" +} +``` + +### Campos + +Un objeto `SignerList` tiene los siguientes campos: + +| Nombre | Tipo JSON | Tipo Interno | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para esta lista de firmantes. Para más información, consulta Indicadores SignerList. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0053`, mapeado a la cadena `SignerList`, indica que este objeto es un objeto SignerList. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `SignerEntries` | Array | Array | Sí | Un arreglo de objetos Signer Entry que representan las partes que forman parte de esta lista de firmantes. | +| `SignerListID` | Number | UInt32 | Sí | Un ID para esta lista de firmantes. Actualmente siempre establecido en `0`. Si una enmienda futura permite múltiples listas de firmantes para una cuenta, esto puede cambiar. | +| `SignerQuorum` | Number | UInt32 | Sí | Un número objetivo para los pesos de los firmantes. Para producir una firma válida para el propietario de esta SignerList, los firmantes deben proporcionar firmas válidas cuyos pesos sumen este valor o más. | + +Los `SignerEntries` pueden ser cualquier combinación de direcciones financiadas y no financiadas que usen claves secp256k1 o ed25519. + +#### Objeto Signer Entry + +Cada miembro del campo `SignerEntries` es un objeto que describe ese firmante en la lista. Un Signer Entry tiene los siguientes campos: + +| Nombre | Tipo JSON | Tipo Interno | Descripción | +| --------------- | --------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | Una dirección de Xahau cuya firma contribuye a la multi-firma. No necesita ser una dirección financiada en el ledger. | +| `SignerWeight` | Number | UInt16 | El peso de una firma de este firmante. Una multi-firma solo es válida si la suma de pesos de las firmas proporcionadas alcanza o supera el valor `SignerQuorum` de la lista de firmantes. | +| `WalletLocator` | String | Hash256 | _(Opcional)_ Datos hexadecimales arbitrarios. Pueden usarse para identificar al firmante u otros propósitos relacionados. _(Añadido por la enmienda \[ExpandedSignerList]\[].)_ | + +### Indicadores SignerList + +_(Añadido por la enmienda \[MultiSignReserve]\[].)_ + +Los objetos SignerList pueden tener el siguiente valor de indicador: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| --------------------- | ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `lsfOneOwnerCount` | `0x00010000` | 65536 | Si este indicador está habilitado, esta SignerList cuenta como un elemento para los propósitos de la reserva del propietario. De lo contrario, esta lista cuenta como N+2 elementos, donde N es el número de firmantes que contiene. Este indicador se habilita automáticamente si agregas o actualizas una lista de firmantes después de que la enmienda \[MultiSignReserve]\[] esté habilitada. | + +### Listas de Firmantes y Reservas + +Una lista de firmantes contribuye al requisito de reserva de su propietario. + +La enmienda \[MultiSignReserve]\[] (habilitada el 2019-04-17) hizo que cada lista de firmantes cuente como un objeto, independientemente de cuántos miembros tenga. Como resultado, la reserva del propietario asociada con una nueva lista de firmantes es de 2 XAH. + +### Formato del ID SignerList + +El ID de un objeto de lista de firmantes es el SHA-512Half de los siguientes valores, concatenados en orden: + +* La clave de espacio RippleState (`0x0053`) +* El AccountID del propietario de la lista de firmantes +* El `SignerListID` (actualmente siempre `0`) diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ticket.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ticket.mdx new file mode 100644 index 0000000..183edaa --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ticket.mdx @@ -0,0 +1,44 @@ +--- +title: Ticket +--- +[\[Source\]](https://github.com/ripple/rippled/blob/76a6956138c4ecd156c5c408f136ed3d6ab7d0c1/src/ripple/protocol/impl/LedgerFormats.cpp#L155-L164) + +_(Añadido por la enmienda \[TicketBatch]\[].)_ + +El tipo de objeto `Ticket` representa un Ticket, que rastrea un \[número de secuencia]\[Número de Secuencia] de cuenta que se ha reservado para uso futuro. Puedes crear nuevos tickets con una \[transacción TicketCreate]\[]. + +### Ejemplo JSON + +```json +{ + "Account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", + "Flags": 0, + "LedgerEntryType": "Ticket", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "F19AD4577212D3BEACA0F75FE1BA1644F2E854D46E8D62E9C95D18E9708CBFB1", + "PreviousTxnLgrSeq": 4, + "TicketSequence": 3 +} +``` + +### Campos + +Un objeto `Ticket` tiene los siguientes campos: + +| Nombre | Tipo JSON | Tipo Interno | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | Sí | La cuenta que posee este Ticket. | +| `Flags` | Number | UInt32 | Sí | Un mapa de bits de indicadores booleanos habilitados para este objeto. Actualmente, el protocolo no define indicadores para objetos `Ticket`. El valor es siempre `0`. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0054`, mapeado a la cadena `Ticket`, indica que este objeto es un objeto Ticket. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El \[índice del ledger]\[Ledger Index] que contiene la transacción que modificó más recientemente este objeto. | +| `TicketSequence` | Number | UInt32 | Sí | El \[Número de Secuencia]\[] que este Ticket reserva. | + +### Formato del ID Ticket + +El ID de un objeto Ticket es el SHA-512Half de los siguientes valores, concatenados en orden: + +* La clave de espacio Ticket (`0x0054`) +* El AccountID del propietario del Ticket +* El número `TicketSequence` del Ticket diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/unl-report.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/unl-report.mdx new file mode 100644 index 0000000..3fc7815 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/unl-report.mdx @@ -0,0 +1,63 @@ +--- +title: UNL Report +--- +_(Añadido por la enmienda \[Hooks]\[].)_ + +Un objeto `UNLReport` describe un reporte de la Lista de Nodos Únicos (UNL), que es una lista de nodos validadores en los que la red confía para validar transacciones. + +### Ejemplo JSON + +```json +{ + "LedgerEntryType": "UNLReport", + "PreviousTxnID": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924", + "PreviousTxnLgrSeq": 6, + "ImportVLKeys": [ + { + "PublicKey": "n9LigbVAi4pQc6pU2KJvQZV5wqJ8C3sVvZvBZUopchH8vqa6PEKy", + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo" + } + ], + "ActiveValidators": [ + { + "PublicKey": "n9LigbVAi4pQc6pU2KJvQZV5wqJ8C3sVvZvBZUopchH8vqa6PEKy", + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo" + } + ], + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `UNLReport` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | --------- | ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0073`, mapeado a la cadena `UNLReport`, indica que este objeto es un objeto UNLReport. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El índice del ledger que contiene la transacción que modificó más recientemente este objeto. | +| `ImportVLKeys` | Array | Array | No | Un arreglo de objetos, cada uno representando una clave de validador que ha sido importada. Cada objeto tiene un campo `PublicKey` y un campo `Account` opcional. | +| `ActiveValidators` | Array | Array | No | Un arreglo de objetos, cada uno representando un validador activo. Cada objeto tiene un campo `PublicKey` y un campo `Account` opcional. | + +### Campos ImportVLKey + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------------- | +| `PublicKey` | String | VL | Sí | La clave pública del validador importado. | +| `Account` | String | Account | No | La cuenta asociada con la clave del validador importado. Este campo es opcional. | + +### Campos ActiveValidator + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------- | +| `PublicKey` | String | VL | Sí | La clave pública del validador activo. | +| `Account` | String | Account | No | La cuenta asociada con el validador activo. Este campo es opcional. | + +### Formato del ID UNLReport + +El ID del objeto `UNLReport` es el hash de la clave de espacio `UNLReport` (`0x0052`) únicamente. Esto significa que el ID del objeto `UNLReport` en un ledger es siempre: + +``` +61E32E7A24A238F1C619D5F9DDCC41A94B33B66C0163F7EFCC8A19C9FD6F28DC +``` diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/uritoken.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/uritoken.mdx new file mode 100644 index 0000000..f6d8e1f --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/uritoken.mdx @@ -0,0 +1,59 @@ +--- +title: URIToken +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170) + +_(Añadido por la enmienda \[URI Token]\[].)_ + +Un objeto `URIToken` describe un token URI, que puede usarse para representar un identificador de recurso único en el ledger. + +### Ejemplo JSON + +```json +{ + "Owner": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "OwnerNode": "0000000000000000", + "Issuer": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", + "URI": "DEADBEEF", + "Digest": "46060241FABCF692D4D934BA2A6C4427CD4279083E38C77CBE642243E43BE291", + "Amount": "100000000", + "Destination": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "PreviousTxnID": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F674930521295BC082494B62924", + "PreviousTxnLgrSeq": 6, + "LedgerEntryType": "URIToken", + "index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0" +} +``` + +### Campos + +Un objeto `URIToken` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ------------------- | ---------------- | ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------- | +| `Owner` | String | Account | Sí | El propietario del URI Token. | +| `OwnerNode` | String | UInt64 | Sí | Una pista que indica qué página del directorio del propietario enlaza a este objeto, en caso de que el directorio consista de múltiples páginas. | +| `Issuer` | String | Account | Sí | El emisor del URI Token. | +| `URI` | String | VL | Sí | El URI representado por este token. | +| `Digest` | String | Hash256 | No | Hash arbitrario de 256 bits proporcionado por el propietario como identificador específico para este URI Token. | +| `Amount` | String or Object | Amount | No | El monto del URI Token. | +| `Destination` | String | Account | No | El destinatario previsto del URI Token. | +| `PreviousTxnID` | String | Hash256 | Sí | El hash identificador de la transacción que modificó más recientemente este objeto. | +| `PreviousTxnLgrSeq` | Number | UInt32 | Sí | El índice del ledger que contiene la transacción que modificó más recientemente este objeto. | +| `LedgerEntryType` | String | UInt16 | Sí | El valor `0x0073`, mapeado a la cadena `URIToken`, indica que este objeto es un objeto URI Token. | + +### Indicadores URIToken + +Los objetos `URIToken` pueden tener los siguientes valores de indicador: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Indicador URITokenMint Correspondiente | Descripción | +| -------------------- | ------------ | ------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `lsfBurnable` | `0x00000001` | 1 | `tfBurnable` | Permite al emisor (o a una entidad autorizada por el emisor) destruir el `URIToken` acuñado. (El propietario del `URIToken` _siempre_ puede hacerlo.) | + +### Formato del ID URIToken + +El ID de un objeto `URIToken` es el \[SHA-512Half]\[] de los siguientes valores, concatenados en orden: + +* La clave de espacio URI Token (`0x0055`) +* El AccountID del emisor del URI Token +* El URI representado por el URI Token diff --git a/src/content/docs/es/docs/protocol-reference/transactions/index.mdx b/src/content/docs/es/docs/protocol-reference/transactions/index.mdx new file mode 100644 index 0000000..b24ca50 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/index.mdx @@ -0,0 +1,6 @@ +--- +title: Transacciones +--- +## Referencia de Transacciones + +Una _Transacción_ es la única forma de causar cambios en Xahau. Los resultados de las transacciones son definitivos solo si están firmadas, enviadas y aceptadas en una versión del ledger validada siguiendo el proceso de consenso. Algunas reglas del ledger también generan _pseudo-transacciones_, que no están firmadas ni enviadas, pero aún deben ser aceptadas por consenso. Las transacciones que fallan también se incluyen en los ledgers porque modifican los saldos de XAH para pagar el \[costo de transacción]\[] anti-spam. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/cron.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/cron.mdx new file mode 100644 index 0000000..24e1fa7 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/cron.mdx @@ -0,0 +1,60 @@ +--- +title: Cron +description: >- + La pseudo-transacción Cron es insertada automáticamente por el motor Cron + cuando está programada la ejecución de un Hook. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/Cron.cpp)] + +_(Añadido por la [enmienda Cron][].)_ + +La pseudo-transacción `Cron` es insertada automáticamente en el ledger por el motor Cron cuando está programada la ejecución de un Hook. Esta pseudo-transacción desencadena la ejecución del Hook en la cuenta especificada en el campo `Owner`. + +### Ejemplo + +```json +{ + "TransactionType": "Cron", + "Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp", + "Fee": "0", + "LedgerSequence": 21225473, + "Sequence": 0, + "SigningPubKey": "", + "TxnSignature": "", + "Owner": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm" +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------------- | --------- | ------------------- | ----------- | +| `Owner` | String | AccountID | La cuenta propietaria de la ejecución del Hook programada. Esta es la cuenta que será invocada cuando el cron se ejecute. | +| `LedgerSequence`| Number | UInt32 | El \[índice de ledger]\[] donde aparece esta pseudo-transacción. Esto distingue la pseudo-transacción de otras ocurrencias del mismo cambio. | + +### Campos Comunes + +Como pseudo-transacción, `Cron` utiliza los valores estándar de pseudo-transacción para los campos comunes: + +| Campo | Valor | +| --------------- | ----- | +| `Account` | `rrrrrrrrrrrrrrrrrrrrrhoLvTp` (`ACCOUNT_ZERO`) | +| `Fee` | `0` | +| `Sequence` | `0` | +| `SigningPubKey` | `""` (cadena vacía) | +| `TxnSignature` | `""` (cadena vacía) | + +### Comportamiento de Ejecución + +Cuando un [objeto ledger Cron](/docs/protocol-reference/ledger-data/ledger-objects-types/cron) está listo para ejecutarse (basándose en sus campos `StartTime`, `DelaySeconds` y `RepeatCount`), el motor Cron inserta automáticamente una pseudo-transacción `Cron` en el ledger. + +La pseudo-transacción contiene un campo `Owner` que referencia la cuenta con el Hook programado. El Hook en esa cuenta será invocado automáticamente, y la cuenta es tratada como un **TSH (transactional stakeholder) débil** durante la ejecución. + +**Importante:** Los desarrolladores de Hooks deben habilitar las collect calls (indicador `hsfCOLLECT`) en sus Hooks, ya que el `Owner` constituye un TSH débil cuando se ejecuta la pseudo-transacción Cron. La cuenta también debe tener habilitado el indicador `asfTshCollect`. + +### Documentación Relacionada + +* [Transacción CronSet](/docs/protocol-reference/transactions/transaction-types/cronset): Crea, actualiza o elimina ejecuciones de Hooks programadas +* [Objeto ledger Cron](/docs/protocol-reference/ledger-data/ledger-objects-types/cron): El objeto ledger que representa una ejecución de Hook programada +* [Débil y Fuerte](/docs/hooks/concepts/weak-and-strong): Entendiendo los TSH transaccionales +* [Collect Call Hooks](/docs/hooks/concepts/collect-call): Cómo se ejecutan los Hooks de TSH débiles diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/emitfailure.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/emitfailure.mdx new file mode 100644 index 0000000..caccf77 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/emitfailure.mdx @@ -0,0 +1,4 @@ +--- +title: EmitFailure +--- +TBD diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/enableamendment.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/enableamendment.mdx new file mode 100644 index 0000000..8d6405d --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/enableamendment.mdx @@ -0,0 +1,38 @@ +--- +title: EnableAmendment +--- +Una pseudo-transacción `EnableAmendment` marca un cambio en el estado de una enmienda propuesta cuando: + +* Obtiene aprobación de supermayoría de los validadores. +* Pierde la aprobación de supermayoría. +* Se habilita en el protocolo de Xahau. + +### Ejemplo JSON + +```json +{ + "Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp", + "Amendment": "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE", + "Fee": "0", + "LedgerSequence": 21225473, + "Sequence": 0, + "SigningPubKey": "", + "TransactionType": "EnableAmendment" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | --------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Amendment` | String | Hash256 | Un identificador único para la enmienda. No está destinado a ser un nombre legible por humanos. Consulta Enmiendas para una lista de enmiendas conocidas. | +| `LedgerSequence` | Number | UInt32 | El \[índice del ledger]\[] donde aparece esta pseudo-transacción. Esto distingue la pseudo-transacción de otras ocurrencias del mismo cambio. | + +### Indicadores EnableAmendment + +El valor de `Flags` de la pseudo-transacción EnableAmendment indica el estado de la enmienda en el momento del ledger que incluye la pseudo-transacción. + +Un valor de `Flags` de `0` (sin indicadores) o un campo `Flags` omitido indica que la enmienda ha sido habilitada y aplica a todos los ledgers posteriores. Otros valores de `Flags` son los siguientes: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | -------------------------------------------------------------------------------------------------------------- | +| `tfGotMajority` | `0x00010000` | 65536 | El soporte para esta enmienda aumentó a al menos el 80% de los validadores de confianza comenzando con esta versión del ledger. | +| `tfLostMajority` | `0x00020000` | 131072 | El soporte para esta enmienda disminuyó a menos del 80% de los validadores de confianza comenzando con esta versión del ledger. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/index.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/index.mdx new file mode 100644 index 0000000..02984ad --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/index.mdx @@ -0,0 +1,26 @@ +--- +title: Tipos de Pseudo-Transacciones +--- +Las pseudo-transacciones nunca son enviadas por usuarios ni propagadas a través de la red. En cambio, un servidor puede optar por inyectar pseudo-transacciones en un ledger propuesto directamente según reglas de protocolo específicas. Si suficientes servidores proponen exactamente la misma pseudo-transacción, el proceso de consenso la aprueba y la pseudo-transacción se incluye en los datos de transacción de ese ledger. + +### Valores Especiales para Campos Comunes + +Algunos de los \[campos comunes]\[] requeridos para transacciones normales no tienen sentido para pseudo-transacciones. Las pseudo-transacciones usan los siguientes valores especiales para estos campos comunes: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Valor | +| --------------- | --------- | ------------------- | ------------------- | +| `Account` | String | AccountID | ACCOUNT_ZERO | +| `Fee` | String | Amount | `0` | +| `Sequence` | Number | UInt32 | `0` | +| `SigningPubKey` | String | Blob | `""` (Cadena vacía) | +| `TxnSignature` | String | Blob | `""` (Cadena vacía) | + +Las pseudo-transacciones usan los siguientes campos comunes de forma normal: + +* `TransactionType` +* `Flags` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ----------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `TransactionType` | String | UInt16 | _(Requerido)_ El tipo de transacción. | +| `Flags` | Number | UInt32 | _(Opcional)_ Un conjunto de indicadores de bits para esta transacción. El significado de los indicadores específicos varía según el tipo de transacción. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/setfee.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/setfee.mdx new file mode 100644 index 0000000..fbd182d --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/setfee.mdx @@ -0,0 +1,42 @@ +--- +title: SetFee +--- +Una pseudo-transacción `SetFee` marca un cambio en el costo de transacción o los requisitos de reserva como resultado de la Votación de Tarifas. + +**Nota:** No puedes enviar una pseudo-transacción, pero puedes encontrar una al procesar ledgers. + +### Ejemplo JSON + +```json +{ + "Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp", + "BaseFee": "000000000000000A", + "Fee": "0", + "ReferenceFeeUnits": 10, + "ReserveBase": 20000000, + "ReserveIncrement": 5000000, + "Sequence": 0, + "SigningPubKey": "", + "TransactionType": "SetFee", + "date": 439578860, + "hash": "1C15FEA3E1D50F96B6598607FC773FF1F6E0125F30160144BE0C5CBC52F5151B", + "ledger_index": 3721729, +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------------- | ---------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `BaseFee` | String | UInt64 | El cargo, en drops de XAH, para la transacción de referencia, como hexadecimal. (Este es el costo de transacción antes de escalar por carga.) | +| `ReferenceFeeUnits` | Unsigned Integer | UInt32 | El costo, en unidades de tarifa, de la transacción de referencia | +| `ReserveBase` | Unsigned Integer | UInt32 | La reserva base, en drops | +| `ReserveIncrement` | Unsigned Integer | UInt32 | La reserva incremental, en drops | +| `LedgerSequence` | Number | UInt32 | _(Omitido para algunas pseudo-transacciones `SetFee` históricas)_ El índice de la versión del ledger donde aparece esta pseudo-transacción. Esto distingue la pseudo-transacción de otras ocurrencias del mismo cambio. | + +Si la _\[enmienda XAHFees]\[]_ está habilitada, las pseudo-transacciones `SetFee` usan estos campos en su lugar: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ----------------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `BaseFeeDrops` | String | Amount | El cargo, en drops de XAH, para la transacción de referencia. (Este es el costo de transacción antes de escalar por carga.) | +| `ReserveBaseDrops` | String | Amount | La reserva base, en drops | +| `ReserveIncrementDrops` | String | Amount | La reserva incremental, en drops | +| `LedgerSequence` | Number | UInt32 | _(Omitido para algunas pseudo-transacciones `SetFee` históricas)_ El índice de la versión del ledger donde aparece esta pseudo-transacción. Esto distingue la pseudo-transacción de otras ocurrencias del mismo cambio. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlmodify.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlmodify.mdx new file mode 100644 index 0000000..c535a71 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlmodify.mdx @@ -0,0 +1,30 @@ +--- +title: UNLModify +--- +_(Añadido por la enmienda \[NegativeUNL]\[].)_ + +Una pseudo-transacción `UNLModify` marca un cambio en la UNL Negativa, indicando que un validador de confianza se ha desconectado o ha vuelto a estar en línea. + +**Nota:** No puedes enviar una pseudo-transacción, pero puedes encontrar una al procesar ledgers. + +### Ejemplo JSON + +```json +{ + "Account": "", + "Fee": "0", + "LedgerSequence": 1600000, + "Sequence": 0, + "SigningPubKey": "", + "TransactionType": "UNLModify", + "UNLModifyDisabling": 1, + "UNLModifyValidator": "ED6629D456285AE3613B285F65BBFF168D695BA3921F309949AFCD2CA7AFEC16FE", +} +``` + +| Nombre | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| -------------------- | --------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `TransactionType` | String | UInt16 | El valor `0x0066`, mapeado a la cadena `UNLModify`, indica que este objeto es una pseudo-transacción `UNLModify`. | +| `LedgerSequence` | Number | UInt32 | El \[índice del ledger]\[] donde aparece esta pseudo-transacción. Esto distingue la pseudo-transacción de otras ocurrencias del mismo cambio. | +| `UNLModifyDisabling` | Number | UInt8 | Si es `1`, este cambio representa agregar un validador a la UNL Negativa. Si es `0`, este cambio representa eliminar un validador de la UNL Negativa. (No se permiten otros valores.) | +| `UNLModifyValidator` | String | Blob | El validador a agregar o eliminar, identificado por su clave pública maestra. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlreport.mdx b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlreport.mdx new file mode 100644 index 0000000..e2994aa --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/pseudo-transaction-types/unlreport.mdx @@ -0,0 +1,4 @@ +--- +title: UNLReport +--- +TBD diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-common-fields.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-common-fields.mdx new file mode 100644 index 0000000..c0c5f5a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-common-fields.mdx @@ -0,0 +1,181 @@ +--- +title: Campos Comunes de Transacción +--- + +Cada transacción tiene el mismo conjunto de campos comunes, más campos adicionales según el tipo de transacción. Los nombres de campo distinguen entre mayúsculas y minúsculas. Los campos comunes para todas las transacciones son: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| -------------------- | ---------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Account` | String | AccountID | _(Requerido)_ La dirección única de la cuenta que inició la transacción. | +| `TransactionType` | String | UInt16 | _(Requerido)_ El tipo de transacción. Los tipos válidos incluyen: `Payment`, `OfferCreate`, `TrustSet`, y muchos otros. | +| `Fee` | String | Amount | _(Requerido; auto-rellenable)_ Cantidad entera de XAH, en drops, que será destruida como costo por distribuir esta transacción a la red. Algunos tipos de transacción tienen requisitos mínimos diferentes. Consulta \[Transaction Cost]\[] para más detalles. | +| `Sequence` | Number | UInt32 | _(Requerido; auto-rellenable)_ El número de secuencia de la cuenta que envía la transacción. Una transacción solo es válida si el número `Sequence` es exactamente 1 mayor que la transacción anterior de la misma cuenta. El caso especial `0` significa que la transacción usa un Ticket en su lugar _(Añadido por la enmienda \[TicketBatch]\[].)_. | +| `AccountTxnID` | String | Hash256 | _(Opcional)_ Valor hash que identifica otra transacción. Si se proporciona, esta transacción solo es válida si la transacción enviada anteriormente por la cuenta remitente coincide con el hash proporcionado. | +| `Flags` | Number | UInt32 | _(Opcional)_ Conjunto de indicadores de bits para esta transacción. | +| `LastLedgerSequence` | Number | UInt32 | _(Opcional; muy recomendado)_ El índice de ledger más alto en el que puede aparecer esta transacción. Especificar este campo establece un límite superior estricto sobre cuánto tiempo puede esperar la transacción para ser validada o rechazada. Consulta Reliable Transaction Submission para más detalles. | +| `Memos` | Array of Objects | Array | _(Opcional)_ Información arbitraria adicional utilizada para identificar esta transacción. | +| `NetworkID` | Number | UInt32 | _(Específico de red)_ El ID de red de la cadena para la que está destinada esta transacción. **DEBE OMITIRSE** para Mainnet y algunas redes de prueba. **REQUERIDO** en cadenas cuyo ID de red es 1025 o superior. | +| `Signers` | Array | Array | _(Opcional)_ Array de objetos que representan una multi-firma que autoriza esta transacción. | +| `SourceTag` | Number | UInt32 | _(Opcional)_ Entero arbitrario usado para identificar el motivo de este pago, o un remitente en nombre del cual se realiza esta transacción. Convencionalmente, un reembolso debe especificar el `SourceTag` del pago inicial como el `DestinationTag` del pago de reembolso. | +| `SigningPubKey` | String | Blob | _(Añadido automáticamente al firmar)_ Representación hexadecimal de la clave pública que corresponde a la clave privada usada para firmar esta transacción. Si es una cadena vacía, indica que una multi-firma está presente en el campo `Signers`. | +| `TicketSequence` | Number | UInt32 | _(Opcional)_ El número de secuencia del ticket a usar en lugar de un número `Sequence`. Si se proporciona, `Sequence` debe ser `0`. No puede usarse con `AccountTxnID`. | +| `TxnSignature` | String | Blob | _(Añadido automáticamente al firmar)_ La firma que verifica que esta transacción se originó de la cuenta que dice ser. | +| `EmitDetails` | Object | Object | Contiene detalles sobre la emisión. Esto incluye la generación de la emisión, la carga de la emisión, la dirección de callback, el hash del hook que emitió la transacción, el nonce de la emisión y el ID de la transacción padre. | +| `HookParameters` | Array | Array | Los parámetros del hook de la transacción. | + +\[Eliminado en: rippled 0.28.0]\[]: El campo `PreviousTxnID` de las transacciones fue reemplazado por el campo `AccountTxnID`. Este campo String / Hash256 está presente en algunas transacciones históricas. Esto no está relacionado con el campo también llamado `PreviousTxnID` en algunos objetos de ledger. + +### AccountTxnID + +El campo `AccountTxnID` te permite encadenar tus transacciones, de modo que una transacción actual no es válida a menos que la transacción anterior enviada desde la misma cuenta tenga un \[hash de transacción]\[identifying hash] específico. + +A diferencia del campo `PreviousTxnID`, que rastrea la última transacción que _modificó_ una cuenta (independientemente del remitente), el `AccountTxnID` rastrea la última transacción _enviada por_ una cuenta. Para usar `AccountTxnID`, primero debes habilitar el indicador `asfAccountTxnID`, para que el ledger lleve un registro del ID de la transacción anterior de la cuenta. (En cambio, `PreviousTxnID` siempre se rastrea.) + +Una situación en la que esto es útil es si tienes un sistema primario para enviar transacciones y un sistema de respaldo pasivo. Si el sistema de respaldo pasivo se desconecta del primario, pero el primario no está completamente inactivo, y ambos comienzan a operar al mismo tiempo, podrías tener problemas graves como algunas transacciones enviándose dos veces y otras sin enviarse. Encadenar tus transacciones con `AccountTxnID` asegura que, incluso si ambos sistemas están activos, solo uno de ellos puede enviar transacciones válidas a la vez. + +El campo `AccountTxnID` no puede usarse en transacciones que utilizan Tickets. Las transacciones que usan `AccountTxnID` no pueden colocarse en la cola de transacciones. + +### Campos Auto-rellenables + +Algunos campos pueden rellenarse automáticamente antes de que se firme una transacción, ya sea por un servidor `xahaud` o por una biblioteca cliente. El auto-relleno de valores requiere una conexión activa a Xahau para obtener el estado más reciente, por lo que no puede hacerse sin conexión. Los detalles pueden variar según la biblioteca, pero el auto-relleno siempre proporciona valores adecuados para al menos los siguientes campos: + +* `Fee` - Rellena automáticamente el \[Transaction Cost]\[] basándose en la red. + + **Nota:** Cuando se usa el \[comando sign]\[] de `xahaud`, puedes limitar el valor máximo posible auto-rellenado usando los parámetros `fee_mult_max` y `fee_mult_div`.) +* `Sequence` - Usa automáticamente el siguiente número de secuencia para la cuenta que envía la transacción. + +Para un sistema en producción, recomendamos _no_ dejar estos campos para que los rellene el servidor. Por ejemplo, si los costos de transacción aumentan mucho debido a un pico temporal en la carga de la red, puede que prefieras esperar a que disminuya el costo antes de enviar algunas transacciones, en lugar de pagar el costo temporalmente alto. + +El campo `Paths` del tipo de \[transacción Payment]\[] también puede rellenarse automáticamente. + +### Campo Flags + +El campo `Flags` puede contener varias opciones que afectan cómo debe comportarse una transacción. Las opciones se representan como valores binarios que pueden combinarse con operaciones OR a nivel de bits para establecer múltiples indicadores a la vez. + +Para verificar si una transacción tiene un indicador determinado habilitado, usa el operador AND a nivel de bits sobre el valor del indicador y el campo `Flags`. Un resultado de cero indica que el indicador está deshabilitado, y un resultado igual al valor del indicador indica que está habilitado. (Si obtienes otro resultado, algo salió mal.) + +La mayoría de los indicadores solo tienen significado para un tipo de transacción específico. El mismo valor de bits puede reutilizarse para indicadores en diferentes tipos de transacciones, por lo que es importante prestar atención al campo `TransactionType` al establecer y leer indicadores. + +Los bits que no están definidos como indicadores DEBEN ser 0. (La enmienda \[fix1543]\[] aplica esta regla en algunos tipos de transacción. La mayoría de los tipos de transacción aplican esta regla por defecto.) + +#### Indicadores Globales + +El único indicador que aplica globalmente a todas las transacciones es el siguiente: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| --------------------- | ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `tfFullyCanonicalSig` | `0x80000000` | 2147483648 | **OBSOLETO** Sin efecto. (Si la enmienda \[RequireFullyCanonicalSig]\[] no está habilitada, este indicador aplica una firma completamente canónica.) | + +Cuando se usa el \[método sign]\[] (o el \[método submit]\[] en modo "sign-and-submit"), `xahaud` añade un campo `Flags` con `tfFullyCanonicalSig` habilitado a menos que el campo `Flags` ya esté presente. El indicador `tfFullyCanonicalSig` no se habilita automáticamente si `Flags` se especifica explícitamente. El indicador tampoco se habilita automáticamente cuando se usa el \[método sign_for]\[] para añadir una firma a una transacción multi-firmada. + +**Nota:** El indicador `tfFullyCanonicalSig` se usó desde 2014 hasta 2020 para proteger contra la maleabilidad de transacciones mientras se mantenía la compatibilidad con software de firma legado. La enmienda \[RequireFullyCanonicalSig]\[] eliminó la compatibilidad con dicho software legado e hizo que las protecciones sean el comportamiento predeterminado para todas las transacciones. Si estás usando una red paralela que no tiene RequireFullyCanonicalSig habilitada, deberías siempre habilitar el indicador `tfFullyCanonicalSig` para protegerte contra la maleabilidad de transacciones. + +#### Rangos de Indicadores + +El campo `Flags` de una transacción puede contener indicadores que aplican en diferentes niveles o contextos. Los indicadores para cada contexto están limitados a los siguientes rangos: + +| Nombre del Rango | Máscara de Bits | Descripción | +| ---------------- | -------------- | ---------------------------------------------------------------------------------------------- | +| Universal Flags | `0xff000000` | Indicadores que aplican igualmente a todos los tipos de transacción. | +| Type-based Flags | `0x00ff0000` | Indicadores con diferentes significados dependiendo del tipo de transacción que los use. | +| Reserved Flags | `0x0000ffff` | Indicadores que actualmente no están definidos. Una transacción solo es válida si estos indicadores están deshabilitados. | + +**Nota:** El tipo de \[transacción AccountSet]\[] tiene sus propios indicadores no-bitwise, que sirven un propósito similar a los indicadores de tipo. Los objetos de ledger también tienen un campo `Flags` con diferentes definiciones de indicadores de bits. + +### Campo Memos + +El campo `Memos` incluye datos de mensajería arbitrarios con la transacción. Se presenta como un array de objetos. Cada objeto tiene solo un campo, `Memo`, que a su vez contiene otro objeto con _uno o más_ de los siguientes campos: + +| Campo | Tipo | \[Tipo Interno]\[] | Descripción | +| ------------ | ------ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `MemoData` | String | Blob | Valor hexadecimal arbitrario que convencionalmente contiene el contenido del memo. | +| `MemoFormat` | String | Blob | Valor hexadecimal que representa caracteres permitidos en URLs. Convencionalmente contiene información sobre cómo está codificado el memo, por ejemplo como un [tipo MIME](http://www.iana.org/assignments/media-types/media-types.xhtml). | +| `MemoType` | String | Blob | Valor hexadecimal que representa caracteres permitidos en URLs. Convencionalmente, una relación única (según [RFC 5988](http://tools.ietf.org/html/rfc5988#section-4)) que define el formato de este memo. | + +Los campos `MemoType` y `MemoFormat` solo deben consistir de los siguientes caracteres: `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=%` + +El campo `Memos` está limitado a no más de 1 KB de tamaño (cuando se serializa en formato binario). + +**Costo de Transacción:** Las transacciones con un campo `Memos` incurren en un costo adicional basado en el tamaño de los memos. El costo aumenta proporcionalmente con el tamaño total de todos los memos en la transacción. + +Ejemplo de una transacción con un campo Memos: + +```json +{ + "TransactionType": "Payment", + "Account": "rMmTCjGFRWPz8S2zAUUoNVSQHxtRQD4eCx", + "Destination": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Memos": [ + { + "Memo": { + "MemoType": "687474703a2f2f6578616d706c652e636f6d2f6d656d6f2f67656e65726963", + "MemoData": "72656e74" + } + } + ], + "Amount": "1" +} +``` + +### Campo NetworkID + +\[Nuevo en: rippled 1.11.0]\[] + +El campo `NetworkID` es una protección contra ataques de repetición de transacciones "entre cadenas", que evita que la misma transacción sea copiada y ejecutada en una red paralela para la que no estaba destinada. Por compatibilidad con las cadenas existentes, el campo `NetworkID` debe omitirse en cualquier red con un Network ID de 1024 o menos, pero debe incluirse en cualquier red con un Network ID de 1025 o mayor. La siguiente tabla muestra el estado y los valores para varias redes conocidas: + +| Red | ID | Campo `NetworkID` | +| ------------------------------- | ----- | -------------------------------------------------------- | +| Mainnet | 0 | No permitido | +| Testnet | 1 | No permitido | +| Devnet | 2 | No permitido | +| AMM Devnet | 25 | No permitido | +| Sidechains Devnet Locking Chain | 2551 | No permitido, pero será requerido después de una actualización | +| Sidechains Devnet Issuing Chain | 2552 | No permitido, pero será requerido después de una actualización | +| Xahau Testnet | 21338 | Requerido | +| Xahau Mainnet | 21337 | Requerido | + +Los ataques de repetición de transacciones son teóricamente posibles, pero requieren condiciones específicas en la segunda red. Todo lo siguiente debe ser verdadero: + +* El remitente de la transacción tiene una cuenta financiada en la segunda red. +* El número `Sequence` del remitente en la segunda red coincide con el `Sequence` de la transacción, o la transacción usa un Ticket disponible en la segunda red. +* O la transacción no tiene un campo `LastLedgerSequence`, o especifica un valor mayor que el índice de ledger actual en el segundo ledger. + * Mainnet generalmente tiene un índice de ledger más alto que las redes de prueba o cadenas laterales, por lo que es más fácil repetir transacciones de Mainnet en una cadena lateral o red de prueba que al revés, cuando las transacciones usan `LastLedgerSequence` según lo previsto. +* O ambas redes tienen IDs de 1024 o menos, ambas redes usan el mismo ID, o la segunda red no requiere el campo `NetworkID`. + +### Campo Signers + +El campo `Signers` contiene una multi-firma, que tiene firmas de hasta 8 pares de claves, que juntos deben autorizar la transacción. La lista `Signers` es un array de objetos, cada uno con un campo, `Signer`. El campo `Signer` tiene los siguientes campos anidados: + +| Campo | Tipo | \[Tipo Interno]\[] | Descripción | +| --------------- | ------ | ------------------- | ----------------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección asociada con esta firma, tal como aparece en la lista de firmantes. | +| `TxnSignature` | String | Blob | Una firma para esta transacción, verificable usando el `SigningPubKey`. | +| `SigningPubKey` | String | Blob | La clave pública usada para crear esta firma. | + +El `SigningPubKey` debe ser una clave que esté asociada con la dirección `Account`. Si la `Account` referenciada es una cuenta financiada en el ledger, entonces el `SigningPubKey` puede ser la Clave Regular actual de esa cuenta si se ha establecido una. También podría ser la Clave Maestra de esa cuenta, a menos que el indicador `lsfDisableMaster` esté habilitado. Si la dirección `Account` referenciada no es una cuenta financiada en el ledger, entonces el `SigningPubKey` debe ser la clave maestra asociada con esa dirección. + +Dado que la verificación de firmas es una tarea computacionalmente intensiva, las transacciones multi-firmadas cuestan XAH adicional para retransmitirse a la red. Cada firma incluida en la multi-firma aumenta el \[costo de transacción]\[] requerido para la transacción. Por ejemplo, si el costo mínimo actual de transacción para retransmitir una transacción a la red es `10000` drops, entonces una transacción multi-firmada con 3 entradas en el array `Signers` necesitaría un valor `Fee` de al menos `40000` drops para retransmitirse. + +### Campos EmitDetails + +Un objeto `EmitDetails` tiene los siguientes campos: + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| ----------------- | --------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `EmitGeneration` | Number | UInt32 | Sí | Este campo lleva un registro de una cadena de transacciones emitidas que a su vez causan que se emitan otras transacciones. | +| `EmitBurden` | String | UInt64 | Sí | Este campo es una heurística para detectar forkbombs. Las tarifas se basan en la carga y aumentarán exponencialmente cuando se inicie una reacción en cadena para evitar que la red sea inundada por transacciones emitidas que se auto-refuerzan. | +| `EmitParentTxnID` | String | Hash256 | Sí | La Ejecución del Hook que emitió la transacción está conectada a la Transacción de Origen. Por lo tanto, este campo siempre es requerido para el rastreo eficiente del comportamiento. | +| `EmitNonce` | String | Hash256 | Sí | Las transacciones emitidas serían idénticas con los mismos campos y por lo tanto tendrían hashes de transacción idénticos si no se usara un nonce. Sin embargo, cada nodo de la red necesita acordar el nonce, por lo que se dispone de una API especial de Hook para producir un nonce determinístico. | +| `EmitCallback` | String | AccountID | No | Este campo es usado por xahld cuando necesita iniciar un callback, para saber qué Hook y cuenta iniciar el callback. Los callbacks ocurren cuando una transacción emitida es aceptada en un ledger. | +| `EmitHookHash` | String | Hash256 | Sí | El SHA512H del Hook en el momento en que fue ejecutado. | + +### Parámetros de Hook + +El campo `HookParameters` es un array de objetos que especifican los parámetros del hook. Cada objeto de parámetro tiene los siguientes campos: + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ------- | --------- | ------------- | ---------------------------- | +| `Name` | String | Blob | El nombre del parámetro. | +| `Value` | String | Blob | El valor del parámetro. | + +**Costo de Transacción:** Las transacciones con un campo `HookParameters` incurren en un costo adicional basado en el tamaño de los parámetros del hook. El costo aumenta proporcionalmente con el tamaño total de todos los parámetros en la transacción. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-metadata.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-metadata.mdx new file mode 100644 index 0000000..9303cc4 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-metadata.mdx @@ -0,0 +1,556 @@ +--- +title: Metadatos de Transacción +--- +Los metadatos de transacción son una sección de datos que se añade a una transacción después de ser procesada. Cualquier transacción que se incluye en un ledger tiene metadatos, independientemente de si fue exitosa. Los metadatos de transacción describen en detalle el resultado de la transacción. + +:::caution +Los cambios descritos en los metadatos de transacción solo son definitivos si la transacción está en una versión de ledger validada. +::: + +
+ +Ejemplo de Metadatos + +El siguiente objeto JSON muestra los metadatos para [un pago complejo entre monedas](https://xrpcharts.ripple.com/#/transactions/8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B): + +```json +{ + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "r9ZoLsJHzMMJLpvsViWQ4Jgx17N8cz1997", + "Balance": "77349986", + "Flags": 0, + "OwnerCount": 2, + "Sequence": 9 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "1E7E658C2D3DF91EFAE5A12573284AD6F526B8F64DD12F013C6F889EF45BEA97", + "PreviousFields": { + "OwnerCount": 3 + }, + "PreviousTxnID": "55C11248ACEFC2EFD59755BF88867783AC18EA078517108F942069C2FBE4CF5C", + "PreviousTxnLgrSeq": 35707468 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "2298.927882138068" + }, + "Flags": 1114112, + "HighLimit": { + "currency": "USD", + "issuer": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", + "value": "0" + }, + "HighNode": "000000000000006B", + "LowLimit": { + "currency": "USD", + "issuer": "rpvvAvaZ7TXHkNLM8UJwCTU6yBU2jDTJ1P", + "value": "1000000000" + }, + "LowNode": "0000000000000007" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "220DDA7164F3F41F3C5223FA3125D4CD368EBB4FB954B5FBFFB6D1EA6DACDD5E", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "2297.927882138068" + } + }, + "PreviousTxnID": "1DB2F9C67C3F42F7B8AB02BA2264254A78A201EC8A9974A1CACEFD51545B1263", + "PreviousTxnLgrSeq": 43081739 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "33403.80553244443" + }, + "Flags": 1114112, + "HighLimit": { + "currency": "USD", + "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", + "value": "0" + }, + "HighNode": "0000000000001A40", + "LowLimit": { + "currency": "USD", + "issuer": "rd5Sx93pCMgfxwBuofjen2csoFYmY8VrT", + "value": "1000000000" + }, + "LowNode": "0000000000000000" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "38569918AF54B520463CFDDD00EB5ADD8768039BD94E61A5E25C387EA4FDC9A3", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "33402.80752845242" + } + }, + "PreviousTxnID": "38A0E82ADC2DA6C6D59929B73E9812CD1E1384E452FD23D0717EA0037E2FC9E3", + "PreviousTxnLgrSeq": 43251694 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rBndiPPKs9k5rjBb7HsEiqXKrz8AfUnqWq", + "BookDirectory": "4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5B09B13AC59DBA5E", + "BookNode": "0000000000000000", + "Flags": 0, + "OwnerNode": "0000000000000000", + "Sequence": 407556, + "TakerGets": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "75.1379833998197" + }, + "TakerPays": "204986996" + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "557BDD35E40EAFFE0AC98108A0F4AC4BB812A168CFD5B4E35475F42A60ABD9C8", + "PreviousFields": { + "TakerGets": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "76.1399833998197" + }, + "TakerPays": "207720593" + }, + "PreviousTxnID": "961C575073788979815F103D065CEE449D2EA6EFE8FC8C33C26EC08586925D90", + "PreviousTxnLgrSeq": 43251680 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "r9KG7Du7aFmABzMvDnwuvPaEoMu4Eurwok", + "Balance": "8080207629", + "Flags": 0, + "OwnerCount": 6, + "Sequence": 1578765 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "5A667CB5FBAB4143EDEFBD6EDDD4B6D19C905209C8EE16486D5D7CD6CB083E78", + "PreviousFields": { + "Balance": "8080152531", + "Sequence": 1578764 + }, + "PreviousTxnID": "E3CDFD288620871455634DC1E56439136AACA1DDBCE987BE12F97486AB477375", + "PreviousTxnLgrSeq": 43251694 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "r9ZoLsJHzMMJLpvsViWQ4Jgx17N8cz1997", + "BookDirectory": "A6D5D1C1CC92D56FDDFD4434FB10BD31F63EB991DA3C756653071AFD498D0000", + "BookNode": "0000000000000000", + "Flags": 0, + "OwnerNode": "0000000000000000", + "PreviousTxnID": "DB028A461E98B0398CAD65F2871B381A6D0B9A21662CA5B033438D83C518C0F2", + "PreviousTxnLgrSeq": 35686129, + "Sequence": 7, + "TakerGets": { + "currency": "EUR", + "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", + "value": "2.5" + }, + "TakerPays": { + "currency": "ETH", + "issuer": "rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h", + "value": "0.05" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "6AA7E5121FEB456F0A899E3D6F25D62ABB408BB67B91C9270E13714401ED72B5" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rd5Sx93pCMgfxwBuofjen2csoFYmY8VrT", + "Balance": "8251028196", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 274 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "6F830A1B38F827CD4BEC946A40F1E2DF726FC22AFC3918FD621567AF17F49F3A", + "PreviousFields": { + "Balance": "8253816902" + }, + "PreviousTxnID": "38A0E82ADC2DA6C6D59929B73E9812CD1E1384E452FD23D0717EA0037E2FC9E3", + "PreviousTxnLgrSeq": 43251694 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rd5Sx93pCMgfxwBuofjen2csoFYmY8VrT", + "BookDirectory": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0CB6D74F25A336", + "BookNode": "0000000000000000", + "Flags": 0, + "OwnerNode": "0000000000000000", + "Sequence": 273, + "TakerGets": "8246341599", + "TakerPays": { + "currency": "USD", + "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", + "value": "2951.147613535471" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "7FD1EAAE17B7D68AE640FFC56CECC3999B4F938EFFF6EA6887B6CC8BD9DBDC63", + "PreviousFields": { + "TakerGets": "8249130305", + "TakerPays": { + "currency": "USD", + "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", + "value": "2952.145617527486" + } + }, + "PreviousTxnID": "38A0E82ADC2DA6C6D59929B73E9812CD1E1384E452FD23D0717EA0037E2FC9E3", + "PreviousTxnLgrSeq": 43251694 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-11.68225001668339" + }, + "Flags": 131072, + "HighLimit": { + "currency": "USD", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "value": "5000" + }, + "HighNode": "0000000000000000", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "000000000000004A" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "826CF5BFD28F3934B518D0BDF3231259CBD3FD0946E3C3CA0C97D2C75D2D1A09", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-10.68225001668339" + } + }, + "PreviousTxnID": "28B271F7C27C1A267F32FFCD8B1795C5D3B1DC761AD705E3A480139AA8B61B09", + "PreviousTxnLgrSeq": 43237130 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rBndiPPKs9k5rjBb7HsEiqXKrz8AfUnqWq", + "Balance": "8276201534", + "Flags": 0, + "OwnerCount": 5, + "Sequence": 407558 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "880C6FB7B9C0083211F950E4449AD45895C0EC1114B5112CE1320AC7275E3237", + "PreviousFields": { + "Balance": "8273467937" + }, + "PreviousTxnID": "CB4B54942F11510A47D2731C3260429093F24016B366CBF15D8EC4B705372F02", + "PreviousTxnLgrSeq": 43251683 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-6557.745685633666" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rBndiPPKs9k5rjBb7HsEiqXKrz8AfUnqWq", + "value": "1000000000" + }, + "HighNode": "0000000000000000", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "0000000000000512" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "8A9FEE5192E334195314B5C162BC78F7452ADB14E06839D48943BAE05EE1967F", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-6558.747685633666" + } + }, + "PreviousTxnID": "961C575073788979815F103D065CEE449D2EA6EFE8FC8C33C26EC08586925D90", + "PreviousTxnLgrSeq": 43251680 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "GCB", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "9990651675.348776" + }, + "Flags": 3211264, + "HighLimit": { + "currency": "GCB", + "issuer": "rHaans8PtgwbacHvXAL3u6TG28gTAtCwr8", + "value": "0" + }, + "HighNode": "0000000000000000", + "LowLimit": { + "currency": "GCB", + "issuer": "r9KG7Du7aFmABzMvDnwuvPaEoMu4Eurwok", + "value": "10000000000" + }, + "LowNode": "0000000000000000" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "A2B41EE7818A5756B6A2276BDBB3CE0ED3A3B350787FD6B76E5EA1354A8F20D2", + "PreviousFields": { + "Balance": { + "currency": "GCB", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "9990651678.137482" + } + }, + "PreviousTxnID": "961C575073788979815F103D065CEE449D2EA6EFE8FC8C33C26EC08586925D90", + "PreviousTxnLgrSeq": 43251680 + } + }, + { + "DeletedNode": { + "FinalFields": { + "ExchangeRate": "53071AFD498D0000", + "Flags": 0, + "RootIndex": "A6D5D1C1CC92D56FDDFD4434FB10BD31F63EB991DA3C756653071AFD498D0000", + "TakerGetsCurrency": "0000000000000000000000004555520000000000", + "TakerGetsIssuer": "2ADB0B3959D60A6E6991F729E1918B7163925230", + "TakerPaysCurrency": "0000000000000000000000004554480000000000", + "TakerPaysIssuer": "06CC4A6D023E68AA3499C6DE3E9F2DC52B8BA254" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "A6D5D1C1CC92D56FDDFD4434FB10BD31F63EB991DA3C756653071AFD498D0000" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "r9ZoLsJHzMMJLpvsViWQ4Jgx17N8cz1997", + "RootIndex": "A83C1B192A27582EDB320EBD7A3FE58D7042CE04B67A2B3D87FDD63D871E12D7" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "A83C1B192A27582EDB320EBD7A3FE58D7042CE04B67A2B3D87FDD63D871E12D7" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "0" + }, + "Flags": 65536, + "HighLimit": { + "currency": "USD", + "issuer": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", + "value": "0" + }, + "HighNode": "0000000000000002", + "LowLimit": { + "currency": "USD", + "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "value": "1" + }, + "LowNode": "0000000000000000" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "C493ABA2619D0FC6355BA862BC8312DF8266FBE76AFBA9636E857F7EAC874A99", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "1" + } + }, + "PreviousTxnID": "28B271F7C27C1A267F32FFCD8B1795C5D3B1DC761AD705E3A480139AA8B61B09", + "PreviousTxnLgrSeq": 43237130 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "r9KG7Du7aFmABzMvDnwuvPaEoMu4Eurwok", + "BookDirectory": "E6E8A9842EA2ED1FD5D0599343692CE1EBF977AEA751B7DC5B038D7EA4C68000", + "BookNode": "0000000000000000", + "Flags": 65536, + "OwnerNode": "0000000000000000", + "Sequence": 39018, + "TakerGets": { + "currency": "GCB", + "issuer": "rHaans8PtgwbacHvXAL3u6TG28gTAtCwr8", + "value": "9990651675.348776" + }, + "TakerPays": "9990651675348776" + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "C939B9B2C5803DD6D89B792E72470F79CBE9F9E999691789E0B68C3808BDDD8E", + "PreviousFields": { + "TakerGets": { + "currency": "GCB", + "issuer": "rHaans8PtgwbacHvXAL3u6TG28gTAtCwr8", + "value": "9990651678.137482" + }, + "TakerPays": "9990651678137482" + }, + "PreviousTxnID": "961C575073788979815F103D065CEE449D2EA6EFE8FC8C33C26EC08586925D90", + "PreviousTxnLgrSeq": 43251680 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "2963.413395452545" + }, + "Flags": 65536, + "HighLimit": { + "currency": "USD", + "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", + "value": "0" + }, + "HighNode": "0000000000001A97", + "LowLimit": { + "currency": "USD", + "issuer": "rpvvAvaZ7TXHkNLM8UJwCTU6yBU2jDTJ1P", + "value": "0" + }, + "LowNode": "0000000000000007" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "E4D1FBD5CB72A1D3EE38C21F3BCB13E454FCB469CD01C1366E0008A031E6A7FC", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "2964.413395452545" + } + }, + "PreviousTxnID": "1DB2F9C67C3F42F7B8AB02BA2264254A78A201EC8A9974A1CACEFD51545B1263", + "PreviousTxnLgrSeq": 43081739 + } + } + ], + "DeliveredAmount": { + "currency": "GCB", + "issuer": "rHaans8PtgwbacHvXAL3u6TG28gTAtCwr8", + "value": "2.788706" + }, + "TransactionIndex": 38, + "TransactionResult": "tesSUCCESS", + "delivered_amount": { + "currency": "GCB", + "issuer": "rHaans8PtgwbacHvXAL3u6TG28gTAtCwr8", + "value": "2.788706" + } +} +``` + + + +
+ +### AffectedNodes + +El array `AffectedNodes` contiene una lista completa de los objetos en el ledger que esta transacción modificó de alguna manera. Cada entrada en este array es un objeto con un campo de nivel superior que indica qué tipo es: + +* `CreatedNode` indica que la transacción creó un nuevo objeto en el ledger. +* `DeletedNode` indica que la transacción eliminó un objeto del ledger. +* `ModifiedNode` indica que la transacción modificó un objeto existente en el ledger. + +El valor de cada uno de estos campos es un objeto JSON que describe los cambios realizados al objeto de ledger. + +#### Campos CreatedNode + +Un objeto `CreatedNode` contiene los siguientes campos: + +| Campo | Valor | Descripción | +| ----------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `LedgerEntryType` | String | El tipo de objeto de ledger que fue creado. | +| `LedgerIndex` | String - \[Hash]\[] | El ID de este objeto de ledger en el árbol de estado del ledger. **Nota:** Este **no es lo mismo** que un índice de ledger, aunque el nombre del campo es muy similar. | +| `NewFields` | Object | Los campos de contenido del objeto de ledger recién creado. Los campos presentes dependen del tipo de objeto de ledger que fue creado. | + +#### Campos DeletedNode + +Un objeto `DeletedNode` contiene los siguientes campos: + +| Campo | Valor | Descripción | +| ----------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `LedgerEntryType` | String | El tipo de objeto de ledger que fue eliminado. | +| `LedgerIndex` | String - \[Hash]\[] | El ID de este objeto de ledger en el árbol de estado del ledger. **Nota:** Este **no es lo mismo** que un índice de ledger, aunque el nombre del campo es muy similar. | +| `FinalFields` | Object | Los campos de contenido del objeto de ledger inmediatamente antes de ser eliminado. Los campos presentes dependen del tipo de objeto de ledger que fue creado. | + +#### Campos ModifiedNode + +Un objeto `ModifiedNode` contiene los siguientes campos: + +| Campo | Valor | Descripción | +| ------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `LedgerEntryType` | String | El tipo de objeto de ledger que fue eliminado. | +| `LedgerIndex` | String - \[Hash]\[] | El ID de este objeto de ledger en el árbol de estado del ledger. **Nota:** Este **no es lo mismo** que un índice de ledger, aunque el nombre del campo es muy similar. | +| `FinalFields` | Object | Los campos de contenido del objeto de ledger después de aplicar cualquier cambio de esta transacción. Los campos presentes dependen del tipo de objeto de ledger que fue creado. Omite los campos `PreviousTxnID` y `PreviousTxnLgrSeq`, aunque la mayoría de los tipos de objetos de ledger los tienen. | +| `PreviousFields` | Object | Los valores anteriores de todos los campos del objeto que fueron cambiados como resultado de esta transacción. Si la transacción _solo añadió_ campos al objeto, este campo es un objeto vacío. | +| `PreviousTxnID` | String - \[Hash]\[] | _(Puede omitirse)_ El \[hash identificador]\[] de la transacción anterior que modificó este objeto de ledger. Omitido para tipos de objetos de ledger que no tienen un campo `PreviousTxnID`. | +| `PreviousTxnLgrSeq` | Number - \[Ledger Index]\[] | _(Puede omitirse)_ El \[Ledger Index]\[] de la versión del ledger que contiene la transacción anterior que modificó este objeto de ledger. Omitido para tipos de objetos de ledger que no tienen un campo `PreviousTxnLgrSeq`. | + +**Nota:** Si el objeto de ledger modificado tiene campos `PreviousTxnID` y `PreviousTxnLgrSeq`, la transacción siempre los actualiza con el hash identificador propio de la transacción y el índice de la versión del ledger que incluyó la transacción, pero el nuevo valor de estos campos no aparece en `FinalFields` del objeto `ModifiedNode`, y sus valores anteriores se listan en el nivel superior del objeto `ModifiedNode` en lugar del objeto anidado `PreviousFields`. + +### delivered_amount + +El `Amount` de una \[transacción Payment]\[] indica la cantidad a entregar al `Destination`, por lo que si la transacción fue exitosa, el destinatario recibió esa cantidad — **excepto si la transacción fue un pago parcial**. (En ese caso, cualquier cantidad positiva hasta `Amount` podría haber llegado.) En lugar de decidir si confiar o no en el campo `Amount`, debes usar el campo `delivered_amount` de los metadatos para ver cuánto llegó realmente a su destino. + +El servidor `rippled` proporciona un campo `delivered_amount` en los metadatos de transacción JSON para todas las transacciones Payment exitosas. Este campo tiene el formato de una cantidad de moneda normal. Sin embargo, el monto entregado no está disponible para transacciones que cumplen ambos criterios siguientes: + +* Es un pago parcial + +Si la transacción es un pago parcial, entonces `delivered_amount` contiene el valor de cadena `unavailable` en lugar de una cantidad real. Si esto ocurre, solo puedes determinar el monto real entregado leyendo los `AffectedNodes` en los metadatos de la transacción. + +**Nota:** El campo `delivered_amount` se genera a petición para la solicitud, y no se incluye en el formato binario para los metadatos de transacción, ni se usa al calcular el hash de los metadatos de transacción. + +Ver también: Pagos Parciales diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/index.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/index.mdx new file mode 100644 index 0000000..f5aa0a6 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/index.mdx @@ -0,0 +1,45 @@ +--- +title: Resultados de Transacciones +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/TER.h) + +El servidor `rippled` resume los resultados de las transacciones con códigos de resultado, que aparecen en campos como `engine_result` y `meta.TransactionResult`. Estos códigos se agrupan en varias categorías con diferentes prefijos: + +| Categoría | Prefijo | Descripción | +| --------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Solo costo reclamado | `tec` | La transacción no logró su propósito previsto, pero el costo de la transacción fue destruido. Este resultado solo es definitivo en un ledger validado. | +| Fallo | `tef` | La transacción no puede aplicarse al ledger actual (en progreso) del servidor ni a ninguno posterior. Es posible que ya haya sido aplicada, o que las condiciones del ledger la hagan imposible en el futuro. | +| Error local | `tel` | El servidor `rippled` tuvo un error por condiciones locales, como alta carga. Podría obtener una respuesta diferente si reenvía a un servidor diferente o en un momento diferente. | +| Transacción malformada| `tem` | La transacción no era válida, debido a sintaxis incorrecta, opciones en conflicto, una firma incorrecta, u otra razón. | +| Reintento | `ter` | La transacción no pudo aplicarse, pero podría aplicarse con éxito en un ledger futuro. | +| Éxito | `tes` | (No es un error) La transacción fue exitosa. Este resultado solo es definitivo en un ledger validado. | + +El servidor `rippled` reintenta automáticamente las transacciones fallidas. Es importante no asumir que una transacción ha fallado completamente basándose en un resultado provisional de fallo. Una transacción puede tener éxito más tarde a menos que su éxito o fallo sea definitivo. + +**Advertencia:** Los códigos de resultado provisionales de las transacciones pueden diferir de su resultado final. Las transacciones que provisionalmente tuvieron éxito pueden eventualmente fallar, y las que provisionalmente fallaron pueden eventualmente tener éxito. Las transacciones que provisionalmente fallaron también pueden eventualmente fallar con un código diferente. Consulte la finalidad de los resultados para saber cuándo el resultado de una transacción es definitivo. + +La distinción entre un error local (`tel`) y una transacción malformada (`tem`) es una cuestión de reglas a nivel de protocolo. Por ejemplo, el protocolo no establece un límite en el número máximo de rutas que pueden incluirse en una transacción. Sin embargo, un servidor puede definir un límite finito de rutas que puede procesar. Si dos servidores diferentes están configurados de manera diferente, uno de ellos puede devolver un error `tel` para una transacción con muchas rutas, mientras que el otro servidor podría procesarla con éxito. Si suficientes servidores pueden procesar la transacción de manera que sobreviva al consenso, entonces puede incluirse en un ledger validado. + +Por el contrario, un error `tem` implica que ningún servidor puede aplicar la transacción, independientemente de la configuración. La transacción viola las reglas del protocolo, es inaceptablemente ambigua, o es completamente incoherente. La única forma en que una transacción malformada podría volverse válida es mediante cambios en el protocolo; por ejemplo, si se adopta una nueva funcionalidad, las transacciones que la usen podrían considerarse malformadas por servidores con software anterior a esa funcionalidad. + +### Respuesta Inmediata + +La respuesta del [método submit][] contiene un resultado provisional del servidor `rippled` indicando qué ocurrió durante el procesamiento local de la transacción. + +La respuesta de `submit` contiene los siguientes campos: + +| Campo | Valor | Descripción | +| ----------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `engine_result` | String | Un código que indica el resultado de la transacción, como `tecPATH_DRY`. | +| `engine_result_code` | Signed Integer | Un número que corresponde al `engine_result`. Los valores exactos están sujetos a cambios sin previo aviso. | +| `engine_result_message` | String | Un mensaje legible por humanos que explica qué ocurrió. Este mensaje está destinado a desarrolladores para diagnosticar problemas, y está sujeto a cambios. | + +Si no ocurrió ningún error al enviar y aplicar la transacción localmente, la respuesta se ve así: + +```js + "engine_result": "tesSUCCESS", + "engine_result_code": 0, + "engine_result_message": "The transaction was applied. Only final in a validated ledger." +``` + +**Nota:** Un resultado exitoso en esta etapa no indica que la transacción haya tenido éxito completamente; solo que fue aplicada con éxito a la versión provisional del ledger mantenida por el servidor local. Los resultados fallidos en esta etapa también son provisionales y pueden cambiar. Consulte Finalidad de los Resultados para más detalles. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tec-codes.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tec-codes.mdx new file mode 100644 index 0000000..fe21a27 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tec-codes.mdx @@ -0,0 +1,59 @@ +--- +title: Códigos TEC +--- +Estos códigos indican que la transacción falló, pero fue aplicada a un ledger para cobrar el costo de la transacción. Tienen valores numéricos en el rango de 100 a 199. Se recomienda usar el código de texto, no el valor numérico. + +Las transacciones con códigos `tec` destruyen el XAH pagado como costo de transacción y consumen un número de secuencia. En su mayor parte, las transacciones no realizan ninguna otra acción, pero hay algunas excepciones. Por ejemplo, una transacción que resulta en `tecOVERSIZE` aún limpia algunas ofertas sin fondos. Siempre consulte los metadatos de la transacción para ver exactamente qué hizo. + +**Precaución:** Una transacción que provisionalmente falló con un código `tec` puede aún tener éxito o fallar con un código diferente después de ser reaplicada. El resultado es definitivo cuando aparece en una versión de ledger validada. Para más información, consulte Finalidad de Resultados y Envío Confiable de Transacciones. + +| Código | Valor | Explicación | +| ---------------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tecCANT_ACCEPT_OWN_NFTOKEN_OFFER` | 157 | La transacción intentó aceptar una oferta realizada por la misma cuenta para comprar o vender un token no fungible. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecCLAIM` | 100 | Fallo no especificado, con costo de transacción destruido. | +| `tecCRYPTOCONDITION_ERROR` | 146 | Esta transacción \[EscrowCreate]\[] o \[EscrowFinish]\[] contenía una crypto-condición malformada o no coincidente. | +| `tecDIR_FULL` | 121 | La transacción intentó agregar un objeto (como una línea de confianza, Check, Escrow, o Canal de Pago) al directorio de propietarios de una cuenta, pero esa cuenta no puede poseer más objetos en el ledger. | +| `tecDUPLICATE` | 149 | La transacción intentó crear un objeto (como una autorización \[DepositPreauth]\[]) que ya existe. | +| `tecDST_TAG_NEEDED` | 143 | La \[transacción Payment]\[] omitió una etiqueta de destino, pero la cuenta de destino tiene el indicador `lsfRequireDestTag` habilitado. \[Nuevo en: rippled 0.28.0]\[] | +| `tecEXPIRED` | 148 | La transacción intentó crear un objeto (como una Oferta o un Check) cuyo tiempo de expiración ya pasó. | +| `tecFAILED_PROCESSING` | 105 | Ocurrió un error no especificado al procesar la transacción. | +| `tecFROZEN` | 137 | La \[transacción OfferCreate]\[] falló porque uno o ambos activos involucrados están sujetos a un congelamiento global. | +| `tecHAS_OBLIGATIONS` | 151 | La \[transacción AccountDelete]\[] falló porque la cuenta a eliminar posee objetos que no pueden ser eliminados. Consulte Eliminación de Cuentas para más detalles. | +| `tecINSUF_RESERVE_LINE` | 122 | La transacción falló porque la cuenta emisora no tiene suficiente XAH para crear una nueva línea de confianza. (Ver: Reservas) Este error ocurre cuando la contraparte ya tiene una línea de confianza en estado no predeterminado hacia la cuenta emisora para la misma moneda. (Ver `tecNO_LINE_INSUF_RESERVE` para el otro caso.) | +| `tecINSUF_RESERVE_OFFER` | 123 | La transacción falló porque la cuenta emisora no tiene suficiente XAH para crear una nueva Oferta. (Ver: Reservas) | +| `tecINSUFF_FEE` | 136 | La transacción falló porque la cuenta emisora no tiene suficiente XAH para pagar el costo de transacción especificado. (En este caso, el procesamiento destruye todo el XAH del emisor aunque sea menor que el costo especificado.) Este resultado solo ocurre si el saldo de la cuenta disminuye _después_ de que la transacción ha sido distribuida suficientemente a la red. De lo contrario, la transacción falla con `terINSUF_FEE_B` antes de ser distribuida. | +| `tecINSUFFICIENT_FUNDS` | 158 | Una de las cuentas involucradas no tiene suficiente cantidad de un activo necesario. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecINSUFFICIENT_PAYMENT` | 161 | La cantidad especificada no es suficiente para pagar todas las tarifas involucradas en la transacción. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecINSUFFICIENT_RESERVE` | 141 | La transacción aumentaría el requisito de reserva por encima del saldo de la cuenta emisora. \[SignerListSet]\[], \[PaymentChannelCreate]\[], \[PaymentChannelFund]\[] y \[EscrowCreate]\[] pueden devolver este código de error. Consulte Listas de Firmantes y Reservas para más información. | +| `tecINTERNAL` | 144 | Error interno no especificado, con costo de transacción aplicado. Este código de error normalmente no debería devolverse. Si puede reproducir este error, por favor [informe un problema](https://github.com/ripple/rippled/issues). | +| `tecINVARIANT_FAILED` | 147 | Una verificación de invariante falló al intentar ejecutar esta transacción. Añadido por la enmienda \[EnforceInvariants]\[]. Si puede reproducir este error, por favor [informe un problema](https://github.com/ripple/rippled/issues). | +| `tecKILLED` | 150 | La \[transacción OfferCreate]\[] especificó el indicador `tfFillOrKill` y no pudo completarse, por lo que fue cancelada. _(Añadido por la enmienda \[fix1578]\[].)_ | +| `tecMAX_SEQUENCE_REACHED` | 153 | Un campo de número de secuencia ya está en su máximo. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecNEED_MASTER_KEY` | 142 | Esta transacción intentó causar cambios que requieren la clave maestra, como deshabilitar la clave maestra o renunciar a la capacidad de congelar saldos. \[Nuevo en: rippled 0.28.0]\[] | +| `tecNFTOKEN_BUY_SELL_MISMATCH` | 155 | La \[transacción NFTokenAcceptOffer]\[] intentó coincidir ofertas de compra y venta incompatibles de un token no fungible. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecNFTOKEN_OFFER_TYPE_MISMATCH` | 156 | Una o más de las ofertas especificadas en la transacción no era del tipo correcto. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecNO_ALTERNATIVE_KEY` | 130 | La transacción intentó eliminar el único método disponible para autorizar transacciones. Esto podría ser una transacción \[SetRegularKey]\[] para eliminar la clave regular, una transacción \[SignerListSet]\[] para eliminar una SignerList, o una transacción \[AccountSet]\[] para deshabilitar la clave maestra. | +| `tecNO_AUTH` | 134 | La transacción falló porque necesita agregar un saldo en una línea de confianza a una cuenta con el indicador `lsfRequireAuth` habilitado, y esa línea de confianza no ha sido autorizada. Si la línea de confianza no existe en absoluto, ocurre `tecNO_LINE` en su lugar. | +| `tecNO_DST` | 124 | La cuenta en el extremo receptor de la transacción no existe. Incluye tipos de transacción Payment y TrustSet. | +| `tecNO_DST_INSUF_NATIVE` | 125 | La cuenta en el extremo receptor de la transacción no existe, y la transacción no envía suficiente XAH para crearla. | +| `tecNO_ENTRY` | 140 | La transacción intentó modificar un objeto del ledger, pero el objeto especificado no existe. Puede haber sido eliminado por una transacción anterior o la transacción puede tener un valor incorrecto en un campo ID. | +| `tecNO_ISSUER` | 133 | La cuenta especificada en el campo `issuer` de un monto de moneda no existe. | +| `tecNO_LINE` | 135 | El campo `TakerPays` de la \[transacción OfferCreate]\[] especifica un activo cuyo emisor tiene `lsfRequireAuth` habilitado, y la cuenta que hace la oferta no tiene una línea de confianza para ese activo. | +| `tecNO_LINE_INSUF_RESERVE` | 126 | La transacción falló porque la cuenta emisora no tiene suficiente XAH para crear una nueva línea de confianza. La contraparte no tiene una línea de confianza hacia esta cuenta para la misma moneda. | +| `tecNO_LINE_REDUNDANT` | 127 | La transacción falló porque intentó establecer una línea de confianza en su estado predeterminado, pero la línea de confianza no existía. | +| `tecNO_PERMISSION` | 139 | El emisor no tiene permiso para realizar esta operación. | +| `tecNO_REGULAR_KEY` | 131 | La \[transacción AccountSet]\[] intentó deshabilitar la clave maestra, pero la cuenta no tiene otra forma de autorizar transacciones. | +| `tecNO_SUITABLE_NFTOKEN_PAGE` | 154 | La transacción intentó acuñar o adquirir un token no fungible pero la cuenta receptora no tiene una página de directorio que pueda contenerlo. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecNO_TARGET` | 138 | La transacción hizo referencia a un objeto Escrow o PayChannel que no existe. | +| `tecOBJECT_NOT_FOUND` | 160 | Uno de los objetos especificados por esta transacción no existía en el ledger. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tecOVERSIZE` | 145 | Esta transacción no pudo procesarse porque el servidor creó una cantidad excesivamente grande de metadatos al intentar aplicarla. \[Nuevo en: rippled 0.29.0-hf1]\[] | +| `tecOWNERS` | 132 | La transacción no puede tener éxito porque el emisor ya posee objetos en el ledger. Por ejemplo, una cuenta no puede habilitar el indicador `lsfRequireAuth` si tiene líneas de confianza u ofertas disponibles. | +| `tecPATH_DRY` | 128 | La transacción falló porque las rutas proporcionadas no tenían suficiente liquidez para enviar nada en absoluto. | +| `tecPATH_PARTIAL` | 101 | La transacción falló porque las rutas proporcionadas no tenían suficiente liquidez para enviar el monto completo. | +| `tecTOO_SOON` | 152 | La \[transacción AccountDelete]\[] falló porque la cuenta a eliminar tenía un número de `Sequence` demasiado alto. | +| `tecUNFUNDED` | 129 | La transacción falló porque la cuenta no tiene suficiente XAH para pagar el monto en la transacción _y_ satisfacer la reserva adicional necesaria. | +| `tecUNFUNDED_ADD` | 102 | **OBSOLETO.** | +| `tecUNFUNDED_PAYMENT` | 104 | La transacción falló porque la cuenta emisora está intentando enviar más XAH del que tiene, sin contar la reserva. | +| `tecUNFUNDED_OFFER` | 103 | La \[transacción OfferCreate]\[] falló porque la cuenta que crea la oferta no tiene ninguna moneda `TakerGets`. | +| `tecREQUIRES_FLAG` | 169 | La transacción \[SetHook]\[] falló debido a una combinación incorrecta de Flag y Field. | +| `tecPRECISION_LOSS` | 170 | La transacción falló porque el resultado terminaría con pérdida significativa de precisión. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tef-codes.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tef-codes.mdx new file mode 100644 index 0000000..c7a8575 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tef-codes.mdx @@ -0,0 +1,32 @@ +--- +title: Códigos TEF +--- +Estos códigos indican que la transacción falló y no fue incluida en un ledger, pero la transacción podría haber tenido éxito en algún ledger teórico. Típicamente esto significa que la transacción ya no puede tener éxito en ningún ledger futuro. Tienen valores numéricos en el rango de -199 a -100. El código exacto para cualquier error dado está sujeto a cambios, así que no confíe en él. + +**Precaución:** Las transacciones con códigos `tef` no se aplican a los ledgers y no pueden causar ningún cambio en el estado de Xahau. Sin embargo, una transacción que provisionalmente falló puede aún tener éxito o fallar con un código diferente después de ser reaplicada. Para más información, consulte Finalidad de Resultados y Envío Confiable de Transacciones. + +| Código | Explicación | +| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tefALREADY` | La misma transacción exacta ya ha sido aplicada. | +| `tefBAD_ADD_AUTH` | **OBSOLETO.** | +| `tefBAD_AUTH` | La clave usada para firmar esta cuenta no está autorizada para modificarla. (Podría estar autorizada si la cuenta tuviera la misma clave configurada como Clave Regular.) | +| `tefBAD_AUTH_MASTER` | La firma única proporcionada para autorizar esta transacción no coincide con la clave maestra, pero no hay clave regular asociada con esta dirección. | +| `tefBAD_LEDGER` | Al procesar la transacción, el ledger se encontró en un estado inesperado. Si puede reproducir este error, por favor [informe un problema](https://github.com/ripple/rippled/issues). | +| `tefBAD_QUORUM` | La transacción tenía múltiples firmas, pero el peso total de todas las firmas incluidas no alcanzó el quórum. | +| `tefBAD_SIGNATURE` | La transacción tenía múltiples firmas, pero contenía una firma para una dirección que no forma parte de una SignerList asociada con la cuenta emisora. | +| `tefCREATED` | **OBSOLETO.** | +| `tefEXCEPTION` | Al procesar la transacción, el servidor entró en un estado inesperado. Esto puede ser causado por entradas inesperadas. Si puede reproducir este error, por favor [informe un problema](https://github.com/ripple/rippled/issues). | +| `tefFAILURE` | Fallo no especificado al aplicar la transacción. | +| `tefINTERNAL` | Al intentar aplicar la transacción, el servidor entró en un estado inesperado. Si puede reproducir este error, por favor [informe un problema](https://github.com/ripple/rippled/issues). | +| `tefINVARIANT_FAILED` | Una verificación de invariante falló al intentar reclamar el costo de la transacción. Añadido por la enmienda \[EnforceInvariants]\[]. Si puede reproducir este error, por favor [informe un problema](https://github.com/ripple/rippled/issues). | +| `tefMASTER_DISABLED` | La transacción fue firmada con la clave maestra de la cuenta, pero la cuenta tiene el campo `lsfDisableMaster` activado. | +| `tefMAX_LEDGER` | La transacción incluyó un parámetro `LastLedgerSequence`, pero el número de secuencia del ledger actual ya es mayor que el valor especificado. | +| `tefNFTOKEN_IS_NOT_TRANSFERABLE` | La transacción intentó enviar un token no fungible a otra cuenta, pero el `NFToken` tiene el indicador `lsfTransferable` deshabilitado y la transferencia no sería hacia o desde el emisor. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `tefNO_AUTH_REQUIRED` | La \[transacción TrustSet]\[] intentó marcar una línea de confianza como autorizada, pero el indicador `lsfRequireAuth` no está habilitado para la cuenta correspondiente, por lo que la autorización no es necesaria. | +| `tefNO_TICKET` | La transacción intentó usar un Ticket, pero el número `TicketSequence` especificado no existe en el ledger, y no puede crearse en el futuro porque es anterior al número de secuencia actual del emisor. | +| `tefNOT_MULTI_SIGNING` | La transacción tenía múltiples firmas, pero la cuenta emisora no tiene ninguna SignerList definida. | +| `tefPAST_SEQ` | El número de secuencia de la transacción es menor que el número de secuencia actual de la cuenta que envía la transacción. | +| `tefTOO_BIG` | La transacción afectaría demasiados objetos en el ledger. Por ejemplo, era una \[transacción AccountDelete]\[] pero la cuenta a eliminar posee más de 1000 objetos en el ledger. | +| `tefWRONG_PRIOR` | La transacción contenía un campo `AccountTxnID` (o el campo obsoleto `PreviousTxnID`), pero la transacción especificada allí no coincide con la transacción anterior de la cuenta. | +| `tefPAST_IMPORT_SEQ` | La transacción falló porque el número de secuencia de importación ya ha sido utilizado. | +| `tefPAST_IMPORT_VL_SEQ` | La transacción falló porque el número de secuencia de la lista de validadores de importación ya ha sido utilizado. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tel-codes.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tel-codes.mdx new file mode 100644 index 0000000..ea92017 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tel-codes.mdx @@ -0,0 +1,28 @@ +--- +title: Códigos TEL +--- +Estos códigos indican un error en el servidor local que procesa la transacción; es posible que otro servidor con una configuración o nivel de carga diferente pueda procesar la transacción con éxito. Tienen valores numéricos en el rango de -399 a -300. El código exacto para cualquier error dado está sujeto a cambios, así que no confíe en él. + +**Precaución:** Las transacciones con códigos `tel` no se aplican a los ledgers y no pueden causar ningún cambio en el estado de Xahau. Sin embargo, estas transacciones pueden ser almacenadas en caché y reintentadas automáticamente más tarde. Las transacciones que provisionalmente fallaron pueden aún tener éxito o fallar con un código diferente después de ser reaplicadas. Para más información, consulte Finalidad de Resultados y Envío Confiable de Transacciones. + +| Código | Explicación | +| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `telBAD_DOMAIN` | La transacción especificó un valor de dominio (por ejemplo, el campo `Domain` de una \[transacción AccountSet]\[]) que no puede usarse, probablemente porque es demasiado largo para almacenarse en el ledger. | +| `telBAD_PATH_COUNT` | La transacción contiene demasiadas rutas para que el servidor local pueda procesarlas. | +| `telBAD_PUBLIC_KEY` | La transacción especificó un valor de clave pública (por ejemplo, como el campo `MessageKey` de una \[transacción AccountSet]\[]) que no puede usarse, probablemente porque no tiene la longitud correcta. | +| `telCAN_NOT_QUEUE` | La transacción no cumplió con el costo del ledger abierto, pero este servidor no encoló la transacción porque no cumplió con las restricciones de encolado. Por ejemplo, una transacción devuelve este código cuando el emisor ya tiene 10 transacciones en la cola. Puede intentarlo de nuevo más tarde o firmar y enviar una transacción de reemplazo con un costo de transacción mayor en el campo `Fee`. | +| `telCAN_NOT_QUEUE_BALANCE` | La transacción no cumplió con el costo del ledger abierto y tampoco fue añadida a la cola de transacciones porque la suma de los posibles costos XAH de las transacciones ya encoladas es mayor que el saldo esperado de la cuenta. Puede intentarlo más tarde, o intentar enviar a un servidor diferente. \[Nuevo en: rippled 0.70.2]\[] | +| `telCAN_NOT_QUEUE_BLOCKS` | La transacción no cumplió con el costo del ledger abierto y tampoco fue añadida a la cola de transacciones. Esta transacción no podía reemplazar una existente en la cola porque bloquearía transacciones ya encoladas del mismo emisor al cambiar métodos de autorización. Puede intentarlo más tarde, o intentar enviar a un servidor diferente. \[Nuevo en: rippled 0.70.2]\[] | +| `telCAN_NOT_QUEUE_BLOCKED` | La transacción no cumplió con el costo del ledger abierto y tampoco fue añadida a la cola de transacciones porque una transacción encolada antes del mismo emisor la bloquea. Puede intentarlo más tarde, o intentar enviar a un servidor diferente. \[Nuevo en: rippled 0.70.2]\[] | +| `telCAN_NOT_QUEUE_FEE` | La transacción no cumplió con el costo del ledger abierto y tampoco fue añadida a la cola de transacciones. Este código ocurre cuando una transacción con el mismo emisor y número de secuencia ya existe en la cola y la nueva no paga un costo de transacción suficientemente mayor para reemplazar la existente. Para reemplazar una transacción en la cola, la nueva debe tener un valor `Fee` al menos 25% mayor. Puede incrementar el `Fee` e intentarlo de nuevo, enviar esto con un `Sequence` mayor para que no reemplace una transacción existente, o intentar enviar a otro servidor. \[Nuevo en: rippled 0.70.2]\[] | +| `telCAN_NOT_QUEUE_FULL` | La transacción no cumplió con el costo del ledger abierto y el servidor no encoló esta transacción porque la cola de transacciones de este servidor está llena. Puede incrementar el `Fee` e intentarlo de nuevo, intentarlo más tarde, o intentar enviar a un servidor diferente. \[Nuevo en: rippled 0.70.2]\[] | +| `telFAILED_PROCESSING` | Ocurrió un error no especificado al procesar la transacción. | +| `telINSUF_FEE_P` | El `Fee` de la transacción no es suficientemente alto para cumplir con el requisito de costo de transacción actual del servidor, que se deriva de su nivel de carga y los requisitos a nivel de red. Si el servidor individual está muy ocupado para procesar su transacción ahora, puede almacenarla en caché y reintentarla automáticamente más tarde. | +| `telLOCAL_ERROR` | Error local no especificado. | +| `telNO_DST_PARTIAL` | La transacción es un pago XAH que financiaría una nueva cuenta, pero el indicador `tfPartialPayment` estaba habilitado. Esto no está permitido. | +| `telWRONG_NETWORK` | La transacción especifica el valor `NetworkID` incorrecto para la red actual. Especifique el valor `NetworkID` correcto para la red deseada, o envíe la transacción a un servidor conectado a la red correcta. | +| `telREQUIRES_NETWORK_ID` | La transacción no especifica un campo `NetworkID`, pero la red actual requiere uno. Si la transacción era para una red que requiere `NetworkID`, agregue el campo e intente de nuevo. | +| `telNETWORK_ID_MAKES_TX_NON_CANONICAL` | La transacción especificó un campo `NetworkID`, pero la red actual requiere que el `NetworkID` no se envíe. | +| `telNON_LOCAL_EMITTED_TXN` | La transacción emitida no puede aplicarse porque no fue generada localmente. | +| `telIMPORT_VL_KEY_NOT_RECOGNISED` | La transacción fue firmada en una red diferente o fue enviada a la red incorrecta. Para transacciones `Import`, las validaciones deben coincidir con las claves vl de la red receptora. | +| `telCAN_NOT_QUEUE_IMPORT` | La transacción `Import` no pudo aplicarse directamente y no puede encolarse. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tem-codes.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tem-codes.mdx new file mode 100644 index 0000000..e660f8e --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tem-codes.mdx @@ -0,0 +1,46 @@ +--- +title: Códigos TEM +--- +Estos códigos indican que la transacción estaba malformada y no puede tener éxito según el protocolo Xahau. Tienen valores numéricos en el rango de -299 a -200. El código exacto para cualquier error dado está sujeto a cambios, así que no confíe en él. + +**Consejo:** Las transacciones con códigos `tem` no se aplican a los ledgers y no pueden causar ningún cambio en el estado de Xahau. Un resultado `tem` es definitivo a menos que cambien las reglas para una transacción válida. (Por ejemplo, usar funcionalidad de una Enmienda antes de que esté habilitada resulta en `temDISABLED`; tal transacción podría tener éxito más tarde si la enmienda se habilita.) + +| Código | Explicación | +| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `temBAD_AMOUNT` | Un monto especificado por la transacción (por ejemplo, el `Amount` de destino o los valores `SendMax` de un \[Payment]\[]) era inválido, posiblemente porque era un número negativo. | +| `temBAD_AUTH_MASTER` | La clave usada para firmar esta transacción no coincide con la clave maestra de la cuenta que la envía, y la cuenta no tiene configurada una Clave Regular. | +| `temBAD_CURRENCY` | La transacción especificó incorrectamente un campo de moneda. Consulte \[Especificando Montos de Moneda]\[Currency Amount] para el formato correcto. | +| `temBAD_EXPIRATION` | La transacción especificó incorrectamente un valor de expiración, por ejemplo como parte de una \[transacción OfferCreate]\[]. Alternativamente, la transacción no especificó un valor de expiración requerido, por ejemplo como parte de una \[transacción EscrowCreate]\[]. | +| `temBAD_FEE` | La transacción especificó incorrectamente su valor `Fee`, por ejemplo listando una moneda que no es XAH o alguna cantidad negativa de XAH. | +| `temBAD_ISSUER` | La transacción especificó incorrectamente el campo `issuer` de alguna moneda incluida en la solicitud. | +| `temBAD_LIMIT` | La \[transacción TrustSet]\[] especificó incorrectamente el valor `LimitAmount` de una línea de confianza. | +| `temBAD_NFTOKEN_TRANSFER_FEE` | La \[transacción NFTokenMint]\[] especificó incorrectamente el campo `TransferFee`. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `temBAD_OFFER` | La \[transacción OfferCreate]\[] especifica una oferta inválida, como ofrecer intercambiar XAH por sí mismo, o ofrecer una cantidad negativa. | +| `temBAD_PATH` | La \[transacción Payment]\[] especifica una o más Rutas incorrectamente, por ejemplo incluyendo un emisor para XAH, o especificando una cuenta de manera diferente. | +| `temBAD_PATH_LOOP` | Una de las Rutas en la \[transacción Payment]\[] fue marcada como un bucle, por lo que no puede procesarse en un tiempo acotado. | +| `temBAD_SEND_NATIVE_LIMIT` | La \[transacción Payment]\[] usó el indicador `tfLimitQuality` en un pago directo de XAH a XAH, aunque los pagos XAH a XAH no involucran conversiones. | +| `temBAD_SEND_NATIVE_MAX` | La \[transacción Payment]\[] incluyó un campo `SendMax` en un pago directo de XAH a XAH, aunque enviar XAH nunca debería requerir `SendMax`. | +| `temBAD_SEND_NATIVE_NO_DIRECT` | La \[transacción Payment]\[] usó el indicador `tfNoDirectRipple` para un pago directo de XAH a XAH, aunque los pagos XAH a XAH siempre son directos. | +| `temBAD_SEND_NATIVE_PARTIAL` | La \[transacción Payment]\[] usó el indicador `tfPartialPayment` para un pago directo de XAH a XAH, aunque los pagos XAH a XAH siempre deberían entregar el monto completo. | +| `temBAD_SEND_NATIVE_PATHS` | La \[transacción Payment]\[] incluyó `Paths` al enviar XAH, aunque los pagos XAH a XAH siempre deberían ser directos. | +| `temBAD_SEQUENCE` | La transacción hace referencia a un número de secuencia que es mayor que su propio número `Sequence`, por ejemplo intentando cancelar una oferta que tendría que colocarse después de la transacción que la cancela. | +| `temBAD_SIGNATURE` | La firma para autorizar esta transacción falta o tiene un formato incorrecto. (Consulte `tecNO_PERMISSION` para el caso donde la firma está correctamente formada pero no está autorizada para esta cuenta.) | +| `temBAD_SRC_ACCOUNT` | La `Account` en nombre de la cual se envía esta transacción (la "cuenta fuente") no es una dirección de cuenta con formato correcto. | +| `temBAD_TRANSFER_RATE` | El campo `TransferRate` de una transacción AccountSet no tiene el formato correcto o está fuera del rango aceptable. | +| `temCANNOT_PREAUTH_SELF` | El emisor de la \[transacción DepositPreauth]\[] también fue especificado como la cuenta a preautorizar. No puede preautorizarse a sí mismo. | +| `temDST_IS_SRC` | La transacción especificó incorrectamente una dirección de destino como la `Account` que envía la transacción. | +| `temDST_NEEDED` | La transacción omitió incorrectamente un destino. | +| `temINVALID` | La transacción es inválida de alguna otra manera. | +| `temINVALID_COUNT` | La transacción incluye un campo `TicketCount`, pero el número de Tickets especificado es inválido. | +| `temINVALID_FLAG` | La transacción incluye un Flag que no existe, o incluye una combinación contradictoria de indicadores. | +| `temMALFORMED` | Problema no especificado con el formato de la transacción. | +| `temREDUNDANT` | La transacción no haría nada; por ejemplo, está enviando un pago directamente a la cuenta emisora, o creando una oferta para comprar y vender la misma moneda del mismo emisor. | +| `temREDUNDANT_SEND_MAX` | \[Eliminado en: rippled 0.28.0]\[] | +| `temRIPPLE_EMPTY` | La \[transacción Payment]\[] incluye un campo `Paths` vacío, pero las rutas son necesarias para completar este pago. | +| `temBAD_WEIGHT` | La \[transacción SignerListSet]\[] incluye un `SignerWeight` que es inválido, por ejemplo un valor cero o negativo. | +| `temBAD_SIGNER` | La \[transacción SignerListSet]\[] incluye un firmante que es inválido. Por ejemplo, puede haber entradas duplicadas, o el propietario de la SignerList puede ser también miembro. | +| `temBAD_QUORUM` | La \[transacción SignerListSet]\[] tiene un valor `SignerQuorum` inválido. El valor no es mayor que cero, o es mayor que la suma de todos los firmantes en la lista. | +| `temUNCERTAIN` | Solo se usa internamente. Este código nunca debería devolverse. | +| `temUNKNOWN` | Solo se usa internamente. Este código nunca debería devolverse. | +| `temDISABLED` | La transacción requiere lógica que está deshabilitada. Típicamente esto significa que está intentando usar una enmienda que no está habilitada para el ledger actual. | +| `temHOOK_DATA_TOO_LARGE` | El campo `CreateCode` de la transacción contiene más de 256 bytes. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/ter-codes.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/ter-codes.mdx new file mode 100644 index 0000000..a22c532 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/ter-codes.mdx @@ -0,0 +1,22 @@ +--- +title: Códigos TER +--- +Estos códigos indican que la transacción falló, pero podría aplicarse con éxito en el futuro, generalmente si alguna otra transacción hipotética se aplica primero. Tienen valores numéricos en el rango de -99 a -1. El código exacto para cualquier error dado está sujeto a cambios, así que no confíe en él. + +**Precaución:** Las transacciones con códigos `ter` no se aplican al ledger actual y no pueden causar ningún cambio en el estado de Xahau. Sin embargo, una transacción que provisionalmente falló puede aún tener éxito o fallar con un código diferente después de ser reaplicada automáticamente. Para más información, consulte Finalidad de Resultados y Envío Confiable de Transacciones. + +| Código | Explicación | +| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `terFUNDS_SPENT` | **OBSOLETO.** | +| `terINSUF_FEE_B` | La cuenta que envía la transacción no tiene suficiente XAH para pagar el `Fee` especificado en la transacción. | +| `terLAST` | Solo se usa internamente. Este código nunca debería devolverse. | +| `terNO_ACCOUNT` | La dirección que envía la transacción no está financiada en el ledger (todavía). | +| `terNO_AUTH` | La transacción involucraría agregar moneda emitida por una cuenta con `lsfRequireAuth` habilitado a una línea de confianza que no está autorizada. Por ejemplo, colocó una oferta para comprar una moneda que no está autorizado a tener. | +| `terNO_LINE` | Solo se usa internamente. Este código nunca debería devolverse. | +| `terNO_RIPPLE` | Solo se usa internamente. Este código nunca debería devolverse. | +| `terOWNERS` | La transacción requiere que la cuenta emisora tenga un "conteo de propietarios" distinto de cero, por lo que la transacción no puede tener éxito. Por ejemplo, una cuenta no puede habilitar el indicador `lsfRequireAuth` si tiene líneas de confianza u ofertas disponibles. | +| `terPRE_SEQ` | El número `Sequence` de la transacción actual es mayor que el número de secuencia actual de la cuenta que envía la transacción. | +| `terPRE_TICKET` | La transacción intentó usar un Ticket, pero el número `TicketSequence` especificado no existe en el ledger. Sin embargo, el Ticket podría aún ser creado por otra transacción. | +| `terRETRY` | Error reintentable no especificado. | +| `terQUEUED` | La transacción cumplió con el costo de transacción escalado por carga pero no cumplió con el requisito del ledger abierto, por lo que la transacción ha sido encolada para un ledger futuro. | +| `terNO_HOOK` | La transacción intentó usar un `HookHash` que no existe en el ledger. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tes-codes.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tes-codes.mdx new file mode 100644 index 0000000..ebed849 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-results/tes-codes.mdx @@ -0,0 +1,11 @@ +--- +title: Códigos TES +--- +Los códigos `tesSUCCESS` y `tesPARTIAL` son los únicos códigos que indican que una transacción fue exitosa. Esto no siempre significa que logró lo que esperaba. (Por ejemplo, un \[OfferCancel]\[] puede "tener éxito" incluso si no hay ninguna oferta que cancelar.) + +El código `tesPARTIAL` indica que una transacción tuvo éxito parcialmente. Específicamente, se usa en escenarios donde una operación, como eliminar registros de estado de hook, supera un cierto límite (por ejemplo, 512 o 1024 registros). En tales casos, la transacción elimina hasta el límite y luego requiere que envíe transacciones adicionales con nuevos números de secuencia para continuar el proceso de eliminación hasta que se eliminen todos los registros. Esto asegura que las operaciones grandes se dividan en partes manejables. + +| Código | Explicación | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tesSUCCESS` | La transacción fue aplicada y reenviada a otros servidores. Si esto aparece en un ledger validado, entonces el éxito de la transacción es definitivo. | +| `tesPARTIAL` | La transacción tuvo éxito parcialmente y requiere transacciones adicionales para completar operaciones grandes, como eliminar más de un límite establecido de registros. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountdelete.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountdelete.mdx new file mode 100644 index 0000000..5410f15 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountdelete.mdx @@ -0,0 +1,60 @@ +--- +title: AccountDelete +description: >- + Una transacción AccountDelete elimina una cuenta y cualquier objeto que posea en + Xahau, si es posible, enviando el XAH restante de la cuenta a una cuenta de + destino especificada. +sidebar: + badge: + text: Disabled + variant: danger +--- +import { Aside } from '@astrojs/starlight/components'; + +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/DeleteAccount.cpp)] + +_Añadido por la enmienda DeletableAccounts_ + + + +### Ejemplo + +```json +{ + "TransactionType": "AccountDelete", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Destination": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", + "DestinationTag": 13, + "Fee": "2000000", + "Sequence": 2470665, + "Flags": 2147483648 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | ---------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Destination` | String - \[Address]\[] | AccountID | La dirección de una cuenta que recibirá cualquier XAH restante después de eliminar la cuenta emisora. Debe ser una cuenta financiada en el ledger y no puede ser la cuenta emisora. | +| `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta de destino arbitraria que identifica un destinatario alojado u otra información para el receptor del XAH sobrante de la cuenta eliminada. | + +### Costo de Transacción Especial + +Como elemento disuasorio adicional contra el spam del ledger, la transacción AccountDelete requiere un costo de transacción mucho mayor de lo habitual: en lugar del mínimo estándar de 0.00001 XAH, AccountDelete debe destruir al menos el monto de la reserva del propietario, actualmente 2 XRP. Esto desalienta la creación excesiva de nuevas cuentas porque el requisito de reserva no puede recuperarse completamente al eliminar la cuenta. + +El costo de transacción siempre aplica cuando una transacción se incluye en un ledger validado, incluso si la transacción no logra eliminar la cuenta. (Consulte Casos de Error.) Para reducir en gran medida las posibilidades de pagar el alto costo si la cuenta no puede eliminarse, envíe la transacción con `fail_hard` habilitado. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones AccountDelete pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `temDISABLED` | Ocurre si la enmienda DeletableAccounts no está habilitada. | +| `temDST_IS_SRC` | Ocurre si el `Destination` coincide con el emisor de la transacción (campo `Account`). | +| `tecDST_TAG_NEEDED` | Ocurre si la cuenta `Destination` requiere una etiqueta de destino, pero no se proporcionó el campo `DestinationTag`. | +| `tecNO_DST` | Ocurre si la cuenta `Destination` no es una cuenta financiada en el ledger. | +| `tecNO_PERMISSION` | Ocurre si la cuenta `Destination` requiere autorización de depósito y el emisor no está preautorizado. | +| `tecTOO_SOON` | Ocurre si el número `Sequence` del emisor es demasiado alto. El número `Sequence` de la transacción más 256 debe ser menor que el \[Índice de Ledger]\[] actual. Esto previene la repetición de transacciones antiguas si esta cuenta se reactiva después de ser eliminada. | +| `tecHAS_OBLIGATIONS` | Ocurre si la cuenta a eliminar está conectada a objetos que no pueden eliminarse en el ledger. (Esto incluye objetos creados por otras cuentas, como escrows y NFTs acuñados, [incluso si son de otra cuenta](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/DeleteAccount.cpp#L197).) | +| `tefTOO_BIG` | Ocurre si la cuenta emisora está vinculada a más de 1000 objetos en el ledger. La transacción podría tener éxito al reintentarla si algunos de esos objetos se eliminaran por separado primero. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountset.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountset.mdx new file mode 100644 index 0000000..8ac02b0 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/accountset.mdx @@ -0,0 +1,105 @@ +--- +title: AccountSet +description: Una transacción AccountSet modifica las propiedades de una cuenta en Xahau. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/SetAccount.cpp)] + +### Ejemplo + +```json +{ + "TransactionType": "AccountSet", + "Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Fee": "12", + "Sequence": 5, + "Domain": "6578616D706C652E636F6D", + "SetFlag": 5, + "MessageKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB", + "HookStateScale": 10 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | --------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ClearFlag` | Number | UInt32 | _(Opcional)_ Identificador único de un indicador a deshabilitar para esta cuenta. | +| `Domain` | String | Blob | _(Opcional)_ El dominio que posee esta cuenta, como una cadena hexadecimal que representa el ASCII del dominio en minúsculas. [No puede tener más de 256 bytes de longitud.](https://github.com/Xahau/xahaud/blob/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) | +| `EmailHash` | String | Hash128 | _(Opcional)_ Un valor arbitrario de 128 bits. Convencionalmente, los clientes lo tratan como el hash md5 de una dirección de correo electrónico para mostrar una imagen [Gravatar](http://en.gravatar.com/site/implement/hash/). | +| `MessageKey` | String | Blob | _(Opcional)_ Clave pública para enviar mensajes cifrados a esta cuenta. Para establecer la clave, debe tener exactamente 33 bytes, con el primer byte indicando el tipo de clave: `0x02` o `0x03` para claves secp256k1, `0xED` para claves Ed25519. Para eliminar la clave, use un valor vacío. | +| `NFTokenMinter` | String | Blob | _(Opcional)_ Otra cuenta que puede acuñar NFTokens en su nombre. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `SetFlag` | Number | UInt32 | _(Opcional)_ Indicador entero a habilitar para esta cuenta. | +| `TransferRate` | Number | UInt32 | _(Opcional)_ La tarifa a cobrar cuando los usuarios transfieren tokens de esta cuenta, representada como milmillonésimas de una unidad. No puede ser mayor que `2000000000` ni menor que `1000000000`, excepto el caso especial `0` que significa sin tarifa. | +| `TickSize` | Number | UInt8 | _(Opcional)_ Tamaño de tick a usar para ofertas que involucren una moneda emitida por esta dirección. Los tipos de cambio de esas ofertas se redondean a este número de dígitos significativos. Los valores válidos son de `3` a `15` inclusive, o `0` para deshabilitar. _(Añadido por la enmienda \[TickSize]\[])_ | +| `WalletLocator` | String | Hash256 | _(Opcional)_ Un valor arbitrario de 256 bits. Si se especifica, el valor se almacena como parte de la cuenta pero no tiene significado ni requisitos inherentes. | +| `WalletSize` | Number | UInt32 | _(Opcional)_ No se usa. Este campo es válido en las transacciones AccountSet pero no hace nada. | +| `HookStateScale` | Number | UInt16 | _(Opcional)_ Factor de escala para determinar cuándo las entradas de estado de Hook quedan obsoletas. Los valores válidos son de `1` a `16` inclusive. _(Añadido por la enmienda [ExtendedHookState][].)_ | + +Si ninguna de estas opciones se proporciona, entonces la transacción AccountSet no tiene ningún efecto (aparte de destruir el costo de la transacción). Consulte Cancelar u Omitir una Transacción para más detalles. + +### Dominio + +El campo `Domain` se representa como la cadena hexadecimal del ASCII en minúsculas del dominio. Por ejemplo, el dominio _example.com_ se representaría como `"6578616D706C652E636F6D"`. + +Para eliminar el campo `Domain` de una cuenta, envíe un AccountSet con el Domain establecido como una cadena vacía. + +Puede poner cualquier dominio en el campo `Domain` de su cuenta. Para demostrar que una cuenta y un dominio pertenecen a la misma persona o empresa, necesita un "enlace bidireccional": + +* Las cuentas que posee deben tener un dominio que posee en el campo `Domain`. +* En ese dominio, aloje un archivo [xahau.toml](/docs/infrastructure/identity) que liste las cuentas que posee, y opcionalmente otra información sobre cómo usa Xahau. + +### Indicadores AccountSet + +Hay varias opciones que pueden habilitarse o deshabilitarse para una cuenta. Las opciones de cuenta se representan mediante diferentes tipos de indicadores según la situación: + +* El tipo de transacción `AccountSet` tiene varios "Indicadores AccountSet" (con prefijo **`asf`**) que pueden habilitar una opción cuando se pasan como parámetro `SetFlag`, o deshabilitar una opción cuando se pasan como parámetro `ClearFlag`. Puede habilitar hasta un indicador `asf` por transacción, y deshabilitar hasta un indicador `asf` por transacción. +* El tipo de transacción `AccountSet` tiene varios indicadores de transacción (con prefijo **`tf`**) que pueden usarse para habilitar o deshabilitar opciones específicas de cuenta cuando se pasan en el parámetro `Flags`. Puede habilitar y deshabilitar una combinación de configuraciones en una transacción usando múltiples indicadores `tf`, pero no todas las configuraciones tienen indicadores `tf`. +* El tipo de objeto ledger `AccountRoot` tiene varios indicadores de estado de ledger (con prefijo **`lsf`**) que representan el estado de opciones particulares de cuenta dentro de un ledger particular. + +Para habilitar o deshabilitar Indicadores de Cuenta, use los parámetros `SetFlag` y `ClearFlag` de una transacción AccountSet. Los indicadores AccountSet tienen nombres que comienzan con **`asf`**. + +Todos los indicadores están deshabilitados por defecto. + +Los indicadores AccountSet disponibles son: + +| Nombre del Indicador | Valor Decimal | Indicador de Ledger Correspondiente | Descripción | +| --------------------------------- | ------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `asfAccountTxnID` | 5 | (Ninguno) | Rastrear el ID de la transacción más reciente de esta cuenta. Requerido para `AccountTxnID` | +| `asfAllowTrustLineClawback` | 17 | `lsfAllowTrustLineClawback` | Permite a una cuenta recuperar tokens que ha emitido. Este indicador solo puede habilitarse si el directorio de propietarios de la cuenta está vacío. Una vez establecido, no puede deshacerse. | +| `asfAuthorizedNFTokenMinter` | 10 | (Ninguno) | Habilitar para permitir que otra cuenta acuñe tokens no fungibles (NFTokens) en nombre de esta cuenta. _(Añadido por la enmienda \[NonFungibleTokensV1_1]\[].)_ | +| `asfDefaultRipple` | 8 | `lsfDefaultRipple` | Habilitar el rippling en las líneas de confianza de esta cuenta por defecto. | +| `asfDepositAuth` | 9 | `lsfDepositAuth` | Habilitar Autorización de Depósito en esta cuenta. _(Añadido por la enmienda \[DepositAuth]\[].)_ | +| `asfDisableMaster` | 4 | `lsfDisableMaster` | Deshabilitar el uso del par de claves maestro. Solo puede habilitarse si la cuenta ha configurado otra forma de firmar transacciones, como una Clave Regular o una Lista de Firmantes. | +| `asfDisallowIncomingCheck` | 13 | `lsfDisallowIncomingCheck` | Bloquear Checks entrantes. _Añadido por la enmienda \[DisallowIncoming]\[]._ | +| `asfDisallowIncomingNFTokenOffer` | 12 | `lsfDisallowIncomingNFTokenOffer` | Bloquear NFTokenOffers entrantes. _Añadido por la enmienda \[DisallowIncoming]\[]._ | +| `asfDisallowIncomingPayChan` | 14 | `lsfDisallowIncomingPayChan` | Bloquear Canales de Pago entrantes. _Añadido por la enmienda \[DisallowIncoming]\[]._ | +| `asfDisallowIncomingTrustline` | 15 | `lsfDisallowIncomingTrustline` | Bloquear líneas de confianza entrantes. _Añadido por la enmienda \[DisallowIncoming]\[]._ | +| `asfDisallowIncomingRemit` | 16 | `lsfDisallowIncomingRemit` | Bloquear transacciones Remit entrantes. _Añadido por la enmienda \[Remit]\[]._ | +| `asfDisallowXRP` | 3 | `lsfDisallowXRP` | No se debe enviar XAH a esta cuenta. (Consultivo; no forzado por el protocolo Xahau.) | +| `asfGlobalFreeze` | 7 | `lsfGlobalFreeze` | Congelar todos los activos emitidos por esta cuenta. | +| `asfNoFreeze` | 6 | `lsfNoFreeze` | Renunciar permanentemente a la capacidad de congelar líneas de confianza individuales o deshabilitar el Congelamiento Global. Este indicador nunca puede deshabilitarse una vez habilitado. | +| `asfRequireAuth` | 2 | `lsfRequireAuth` | Requerir autorización para que los usuarios tengan saldos emitidos por esta dirección. Solo puede habilitarse si la dirección no tiene líneas de confianza conectadas. | +| `asfRequireDest` | 1 | `lsfRequireDestTag` | Requerir una etiqueta de destino para enviar transacciones a esta cuenta. | +| `asfTshCollect` | 11 | `lsfTshCollect` | El TSH paga la ejecución de su propia Cadena de Hooks. _Añadido por la enmienda \[Hooks]\[]._ | + +Para habilitar los indicadores `asfDisableMaster` o `asfNoFreeze`, debe autorizar la transacción firmándola con el par de claves maestro. No puede usar un par de claves regular o una firma múltiple. Puede deshabilitar `asfDisableMaster` (es decir, volver a habilitar el par de claves maestro) usando un par de claves regular o firma múltiple. + +Los siguientes indicadores de Transacción (indicadores `tf`), específicos del tipo de transacción AccountSet, sirven el mismo propósito. Debido al espacio limitado, algunas configuraciones no tienen indicadores `tf` asociados, y no se están añadiendo nuevos indicadores `tf` al tipo de transacción `AccountSet`. Puede usar una combinación de indicadores `tf` y `asf` para habilitar múltiples configuraciones con una sola transacción. + +
Nombre del IndicadorValor HexValor DecimalReemplazado por Indicador AccountSet
tfRequireDestTag0x0001000065536asfRequireDest (SetFlag)
tfOptionalDestTag0x00020000131072asfRequireDest (ClearFlag)
tfRequireAuth0x00040000262144asfRequireAuth (SetFlag)
tfOptionalAuth0x00080000524288asfRequireAuth (ClearFlag)
tfDisallowXRP0x001000001048576asfDisallowXRP (SetFlag)
tfAllowXRP0x002000002097152asfDisallowXRP (ClearFlag)
+ +**Precaución:** Los valores numéricos de los indicadores `tf` y `asf` en las transacciones no coinciden con los valores que establecen en las cuentas "en reposo" en el ledger. Para leer los indicadores de una cuenta en el ledger, consulte los indicadores `AccountRoot`. + +### Bloqueo de Transacciones Entrantes + +Las transacciones entrantes con propósitos poco claros pueden ser un inconveniente para las instituciones financieras, que tendrían que reconocer cuando un cliente cometió un error, y luego potencialmente reembolsar cuentas o ajustar saldos. Los indicadores `asfRequireDest` y `asfDisallowXRP` están destinados a proteger a los usuarios de enviar fondos accidentalmente de una manera que no sea clara sobre la razón por la que se enviaron. + +Por ejemplo, una etiqueta de destino se usa típicamente para identificar qué saldo alojado debe acreditarse cuando una institución financiera recibe un pago. Si se omite la etiqueta de destino, puede no estar claro qué cuenta debe acreditarse, creando la necesidad de reembolsos, entre otros problemas. Al usar la etiqueta `asfRequireDest`, puede asegurarse de que cada pago entrante tenga una etiqueta de destino, lo que hace más difícil que otros le envíen un pago ambiguo por accidente. + +Si desea bloquear _todos_ los pagos entrantes, puede habilitar la Autorización de Depósito. Esto evita que cualquier transacción le envíe dinero, incluso XAH, a menos que su cuenta esté por debajo del requisito de reserva. + +### TransferRate + +El campo `TransferRate` especifica una tarifa a cobrar cada vez que las contrapartes transfieren la moneda que usted emite. + +En las APIs HTTP y WebSocket, la tarifa de transferencia se representa como un entero, la cantidad que debe enviarse para que lleguen 1,000,000,000 unidades. Por ejemplo, una tarifa de transferencia del 20% se representa como el valor `1200000000`. El valor no puede ser menor que 1,000,000,000. (Menos que eso indicaría regalar dinero por enviar transacciones, lo cual es explotable.) Puede especificar `0` como atajo para `1000000000`, lo que significa sin tarifa. + +Consulte Tarifas de Transferencia para más información. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcancel.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcancel.mdx new file mode 100644 index 0000000..4c97a7c --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcancel.mdx @@ -0,0 +1,29 @@ +--- +title: CheckCancel +description: >- + Cancela un Check no canjeado, eliminándolo del ledger sin enviar dinero. + La fuente o el destino del check pueden cancelarlo en cualquier momento. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[Checks]\[].)_ + +### Ejemplo + +```json +{ + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "TransactionType": "CheckCancel", + "CheckID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0", + "Fee": "12" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------- | --------- | ------------------- | ---------------------------------------------------------------------------------- | +| `CheckID` | String | Hash256 | El ID del objeto ledger Check a cancelar, como una cadena hexadecimal de 64 caracteres. | + +### Casos de Error + +* Si el objeto identificado por el `CheckID` no existe o no es un Check, la transacción falla con el resultado `tecNO_ENTRY`. +* Si el Check no ha expirado y el emisor de la transacción CheckCancel no es la fuente ni el destino del Check, la transacción falla con el resultado `tecNO_PERMISSION`. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx new file mode 100644 index 0000000..661a1c7 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx @@ -0,0 +1,38 @@ +--- +title: CheckCash +description: >- + Intenta canjear un objeto Check en el ledger para recibir hasta el monto + autorizado por la transacción CheckCreate correspondiente. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[Checks]\[].)_ + +### Ejemplo + +```json +{ + "Account": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", + "TransactionType": "CheckCash", + "Amount": "100000000", + "CheckID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334", + "Fee": "12" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `CheckID` | String | Hash256 | El ID del objeto ledger Check a canjear, como una cadena hexadecimal de 64 caracteres. | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ Canjear el Check por exactamente esta cantidad, si es posible. La moneda debe coincidir con la del `SendMax` de la transacción CheckCreate correspondiente. Debe proporcionar este campo o `DeliverMin`. | +| `DeliverMin` | \[Monto de Moneda]\[] | Amount | _(Opcional)_ Canjear el Check por al menos esta cantidad y por todo lo posible. La moneda debe coincidir con la del `SendMax` de la transacción CheckCreate correspondiente. Debe proporcionar este campo o `Amount`. | + +La transacción _**debe**_ incluir `Amount` o `DeliverMin`, pero no ambos. + +### Casos de Error + +* Si el emisor de la transacción CheckCash no es el `Destination` del check, la transacción falla con el código de resultado `tecNO_PERMISSION`. +* Si el Check identificado por el campo `CheckID` no existe, la transacción falla con el resultado `tecNO_ENTRY`. +* Si el Check identificado por el campo `CheckID` ya ha expirado, la transacción falla con el resultado `tecEXPIRED`. +* Si el destino del Check tiene habilitado el indicador `RequireDest` pero el Check, tal como fue creado, no tiene una etiqueta de destino, la transacción falla con el código de resultado `tecDST_TAG_NEEDED`. +* Si la transacción especifica tanto `Amount` como `DeliverMin`, u omite ambos, la transacción falla con el resultado `temMALFORMED`. +* Si el `Amount` o `DeliverMin` no coincide con la moneda (y emisor, si no es XAH) del Check, la transacción falla con el resultado `temBAD_CURRENCY`. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx new file mode 100644 index 0000000..766320e --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx @@ -0,0 +1,44 @@ +--- +title: CheckCreate +description: >- + Crea un objeto Check en el ledger, que es un pago diferido que puede ser + canjeado por su destino previsto. El emisor de esta transacción es el + emisor del Check. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[Checks]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "CheckCreate", + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "Destination": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", + "SendMax": "100000000", + "Expiration": 570113521, + "InvoiceID": "6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B", + "DestinationTag": 1, + "Fee": "12" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Destination` | String | AccountID | La dirección única de la cuenta que puede canjear el Check. | +| `SendMax` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto máximo de moneda fuente que el Check puede debitar al emisor, incluyendo tarifas de transferencia en monedas que no son XAH. El Check solo puede acreditar al destino con la misma moneda (del mismo emisor, para monedas que no son XAH). Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. | +| `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria que identifica la razón del Check, o un destinatario alojado al que pagar. | +| `Expiration` | Number | UInt32 | _(Opcional)_ Tiempo después del cual el Check ya no es válido, en \[segundos desde la Época Ripple]\[]. | +| `InvoiceID` | String | Hash256 | _(Opcional)_ Hash arbitrario de 256 bits que representa una razón o identificador específico para este Check. | + +### Casos de Error + +* Si la cuenta `Destination` está bloqueando Checks entrantes, la transacción falla con el código de resultado `tecNO_PERMISSION`. +* Si el `Destination` es el emisor de la transacción, la transacción falla con el código de resultado `temREDUNDANT`. +* Si la cuenta `Destination` no existe en el ledger, la transacción falla con el código de resultado `tecNO_DST`. +* Si la cuenta `Destination` tiene habilitado el indicador `RequireDest` pero la transacción no incluye un campo `DestinationTag`, la transacción falla con el código de resultado `tecDST_TAG_NEEDED`. +* Si `SendMax` especifica un token que está congelado, la transacción falla con el resultado `tecFROZEN`. +* Si la `Expiration` de la transacción ya pasó, la transacción falla con el resultado `tecEXPIRED`. +* Si el emisor no tiene suficiente XAH para cumplir con la reserva del propietario después de agregar el Check, la transacción falla con el resultado `tecINSUFFICIENT_RESERVE`. +* Si el emisor o el destino del Check no pueden poseer más objetos en el ledger, la transacción falla con el resultado `tecDIR_FULL`. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/claimreward.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/claimreward.mdx new file mode 100644 index 0000000..ee312b6 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/claimreward.mdx @@ -0,0 +1,63 @@ +--- +title: ClaimReward +description: >- + Una transacción ClaimReward permite a una cuenta reclamar las recompensas + acumuladas. Las recompensas pueden ser reclamadas por el propietario de la + cuenta o por un emisor especificado. La cuenta también puede optar por + no recibir recompensas. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/ClaimReward.cpp)] + +_(Añadido por la enmienda \[BalanceRewards]\[].)_ + +### Opt-in + Reclamación + +```json +{ + "TransactionType": "ClaimReward", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh" +} +``` + +### Opt-out + +```json +{ + "TransactionType": "ClaimReward", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Flags": 1 +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------- | --------- | ------------------- | -------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta que está reclamando la recompensa. | +| `Flags` | Number | UInt32 | _(Opcional)_ Puede tener el indicador 1 activado para optar por no recibir recompensas. | +| `Issuer` | String | AccountID | _(Opcional)_ La cuenta génesis. | + +### Indicadores ClaimReward + +Las transacciones del tipo ClaimReward admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tfOptOut` | `0x00000001` | 1 | El indicador `isOptOut` en el código ClaimReward se usa para optar una cuenta por no recibir recompensas eliminando los campos relacionados con recompensas del objeto de cuenta en el ledger si el campo `sfFlags` de la transacción se establece en 1. | + +### Costo de Transacción Especial + +La transacción ClaimReward tiene un costo de transacción estándar, que es el costo mínimo de transacción requerido para todas las transacciones. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones ClaimReward pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ----------------- | ------------------------------------------------------------------------------------------------------- | +| `temDISABLED` | Ocurre si la función no está habilitada. | +| `temINVALID_FLAG` | Ocurre si el indicador se establece en un valor distinto de 1. | +| `temMALFORMED` | Ocurre si el emisor es el mismo que la cuenta fuente o si el indicador y el emisor no están correctamente establecidos. | +| `tecNO_ISSUER` | Ocurre si el emisor no existe. | +| `terNO_ACCOUNT` | Ocurre si la cuenta emisora no existe. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/clawback.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/clawback.mdx new file mode 100644 index 0000000..160693a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/clawback.mdx @@ -0,0 +1,51 @@ +--- +title: Clawback +description: >- + Revocar tokens que fueron emitidos previamente por su cuenta. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/Clawback.cpp)] + +_(Añadido por la enmienda \[Clawback]\[].)_ + +Revocar tokens que fueron emitidos previamente por su cuenta. La función **Clawback** está deshabilitada por defecto. Para usarla, primero debe enviar una transacción **AccountSet** que habilite *Allow Trust Line Clawback*. Si su cuenta ya ha emitido tokens, no puede habilitar Clawback después. Solo puede activar *Allow Trust Line Clawback* si el directorio de propietarios de su cuenta está completamente vacío — es decir, antes de crear líneas de confianza, ofertas, escrows, canales de pago, checks o listas de firmantes. Una vez habilitado, Clawback se convierte en una capacidad permanente de su cuenta y no puede deshacerse. + +--- + +## Ejemplo + +```json +{ + "TransactionType": "Clawback", + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Amount": { + "currency": "USD", + "issuer": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", + "value": "123.45" + } +} +```` + +--- + +### Campos + +Una transacción **Clawback** incluye: + +| Campo | Tipo JSON | Descripción | +| -------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Amount` | *Monto de Moneda* | La cantidad a revocar, así como la contraparte de quien se toma. El `value` no debe ser cero. Si es mayor que el saldo del titular, se revoca el saldo completo. En el subcampo `issuer`, especifique la dirección del titular (no la del emisor). | + +En Xahau, un IOU/token no-XAH en una línea de confianza siempre tiene un emisor, pero las líneas de confianza son bidireccionales y bajo ciertas configuraciones ambos lados pueden actuar como emisores. En esta transacción, la dirección del emisor va en el campo `Account`, mientras que la dirección del titular va en el subcampo `issuer` de `Amount`. + +--- + +## Casos de Error + +Además de los errores de transacción estándar, Clawback puede fallar con: + +| Código de Error | Descripción | +| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `temDISABLED` | La enmienda **Clawback** no está habilitada en Xahau. | +| `temBAD_AMOUNT` | El saldo del titular es cero. (No es un error si el monto especificado excede el saldo del titular; en ese caso, se revoca todo el saldo disponible). También ocurre si la contraparte en `Amount` es la misma cuenta que envía la transacción. | +| `tecNO_LINE` | No existe línea de confianza con la contraparte especificada, o la línea de confianza tiene un saldo de cero. | +| `tecNO_PERMISSION` | Ocurre si intenta habilitar `lsfAllowTrustLineClawback` cuando `lsfNoFreeze` ya está habilitado, o viceversa. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/cronset.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/cronset.mdx new file mode 100644 index 0000000..be96f32 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/cronset.mdx @@ -0,0 +1,100 @@ +--- +title: CronSet +description: >- + Una transacción CronSet permite a los Hooks programar auto-invocaciones + recurrentes a intervalos regulares, similar a los cronjobs de Linux. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/CronSet.cpp)] + +_(Añadido por la enmienda CronSet.)_ + +### Ejemplo + +```json +{ + "TransactionType": "CronSet", + "Account": "rYourAccountAddress", + "StartTime": 816348759, + "RepeatCount": 3, + "DelaySeconds": 120 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| -------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Account` | String | AccountID | La cuenta Hook que inicia el cron. Esta es la cuenta que será invocada cuando el cron se ejecute. | +| `StartTime` | Number | UInt32 | _(Opcional)_ Marca de tiempo Ripple Epoch cuando debe ocurrir la primera ejecución. Use `0` para ejecución inmediata. Si se omite al eliminar un cron, la transacción elimina el cron. | +| `RepeatCount` | Number | UInt32 | _(Opcional)_ Número de veces que el cron debe ejecutarse (máximo 256 por transacción). Puede extenderse mediante transacciones CronSet posteriores. Omitir al eliminar un cron. | +| `DelaySeconds` | Number | UInt32 | _(Opcional)_ Intervalo de tiempo en segundos entre cada ejecución. Omitir al eliminar un cron. | + +### Cómo Funciona CronSet + +Las transacciones CronSet permiten la ejecución automatizada y programada de Hooks en la blockchain Xahau a intervalos regulares, eliminando la necesidad de servicios externos o activadores manuales. + +El flujo de trabajo involucra cuatro pasos clave: + +1. Instalar un Hook con el indicador `hsfCOLLECT` habilitado +2. Habilitar Transaction Signature Hook Collection `asfTshCollect` en su cuenta (SetFlag: 11) +3. Crear una transacción CronSet con parámetros de programación +4. Dejar que Xahau maneje la ejecución automática + +### Mecanismo de Ejecución + +Cuando un cron está listo para ejecutarse, el motor Cron inserta una pseudo-transacción de tipo `Cron` en el ledger, que contiene un campo `Owner` que referencia la cuenta Hook de origen. Los desarrolladores de Hooks deben habilitar las collect calls, ya que el Owner constituye un TSH débil. + +El Hook programado será invocado automáticamente en los intervalos especificados sin requerir activadores externos. + +### Formato de Tiempo + +Xahau usa el tiempo de Época Ripple (segundos desde el 1 de enero de 2000), no el tiempo Unix. Para convertir desde JavaScript Date: + +```javascript +const rippleEpochTime = Math.floor(Date.now() / 1000) - 946684800; +``` + +### Eliminación de un Cron + +Para eliminar un Cron existente, omita `StartTime`, `RepeatCount` y `DelaySeconds` mientras establece `Flags: 1` (tfCronUnset): + +```json +{ + "TransactionType": "CronSet", + "Account": "rYourAccountAddress", + "Flags": 1 +} +``` + +### Extensión del Conteo de Repeticiones + +Al alcanzar un umbral mínimo, una transacción CronSet posterior puede extender el conteo de repeticiones más allá del límite inicial de 256 ejecuciones enviando una nueva transacción CronSet con un `RepeatCount` actualizado. + +### Indicadores CronSet + +Las transacciones del tipo CronSet admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | -------------------------------------------------------------------------------- | +| `tfCronUnset` | `0x00000001` | 1 | Elimina un Cron existente. Todos los campos de programación deben omitirse cuando esto está establecido. | + +### Limitaciones y Restricciones + +- CronSet actualmente no puede delegarse a otra cuenta +- Los Hooks deben auto-emitir transacciones CronSet u operar bajo acuerdos de gestión conjunta +- `RepeatCount`: Debe ser mayor que 0 y no puede exceder 256 por transacción (extensible mediante transacciones posteriores) +- `DelaySeconds`: Máximo de 31,536,000 segundos (365 días) +- `StartTime`: Debe ser tiempo actual o futuro; no puede exceder 365 días en el futuro +- No se puede combinar el indicador `tfCronUnset` con los campos `DelaySeconds`, `RepeatCount` o `StartTime` +- Al crear un cron, `DelaySeconds` y `RepeatCount` deben existir ambos o ninguno + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones CronSet pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------ | -------------------------------------------------------------------------------------------------- | +| `temDISABLED` | Ocurre si la función Cron no está habilitada. | +| `temINVALID_FLAG` | Ocurre si se establecen indicadores inválidos en la transacción. | +| `temMALFORMED` | Ocurre si la transacción está malformada con combinaciones de campos inválidas. | +| `tecEXPIRED` | Ocurre si `StartTime` está en el pasado o más de 365 días en el futuro. | +| `tefINTERNAL` | Ocurre si falta la entrada de ledger de la cuenta. | +| `tefBAD_LEDGER` | Ocurre si el objeto Cron falta, apunta a una entrada que no es cron, o falla la eliminación del directorio del propietario. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/depositpreauth.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/depositpreauth.mdx new file mode 100644 index 0000000..777bab5 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/depositpreauth.mdx @@ -0,0 +1,45 @@ +--- +title: DepositPreauth +description: >- + Una transacción DepositPreauth otorga pre-aprobación a otra cuenta para + entregar pagos al emisor de esta transacción. +--- +import { Aside } from '@astrojs/starlight/components'; + + + +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_Añadido por la enmienda \[DepositPreauth]\[]._ + +### Ejemplo + +```json +{ + "TransactionType" : "DepositPreauth", + "Account" : "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", + "Authorize" : "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", + "Fee" : "10", + "Flags" : 2147483648, + "Sequence" : 2 +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------- | --------- | ------------------- | -------------------------------------------------------------------------------- | +| `Authorize` | String | AccountID | _(Opcional)_ Dirección Xahau del emisor a preautorizar. | +| `Unauthorize` | String | AccountID | _(Opcional)_ Dirección Xahau de un emisor cuya preautorización debe revocarse. | + +Debe proporcionar _`Authorize`_ o _`Unauthorize`_, pero no ambos. + +### Casos de Error + +* Una cuenta no puede preautorizarse (ni desautorizarse) a sí misma. Intentarlo falla con el resultado `temCANNOT_PREAUTH_SELF`. +* Intentar preautorizar una cuenta que ya está preautorizada falla con el resultado `tecDUPLICATE`. +* Intentar desautorizar una cuenta que no está preautorizada falla con el resultado `tecNO_ENTRY`. +* Intentar preautorizar una dirección que no está financiada en el ledger falla con el resultado `tecNO_TARGET`. +* Agregar autorización añade un objeto DepositPreauth al ledger, lo que cuenta hacia el requisito de reserva del propietario. Si el emisor de la transacción no tiene suficiente XAH para pagar la reserva aumentada, la transacción falla con el resultado `tecINSUFFICIENT_RESERVE`. Si el emisor de la cuenta ya está en el número máximo de objetos poseídos, la transacción falla con el resultado `tecDIR_FULL`. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcancel.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcancel.mdx new file mode 100644 index 0000000..b6736de --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcancel.mdx @@ -0,0 +1,42 @@ +--- +title: EscrowCancel +description: Devuelve XAH o IOU en escrow al emisor. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_Añadido por la enmienda \[Escrow]\[]._ + +### Cancelar Usando OfferSequence + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "EscrowCancel", + "Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "OfferSequence": 7, +} +``` + +### Cancelar Usando EscrowID + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "EscrowCancel", + "Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "EscrowID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0", +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `Owner` | String | AccountID | Dirección de la cuenta fuente que financió el pago en escrow. | +| `OfferSequence` | Number | UInt32 | _(Opcional)_ Secuencia de transacción (o número de Ticket) de la \[transacción EscrowCreate]\[] que creó el escrow a cancelar. | +| `EscrowID` | String | Hash256 | _(Opcional)_ El ID del objeto ledger Escrow a cancelar, como una cadena hexadecimal de 64 caracteres. | + +Cualquier cuenta puede enviar una transacción EscrowCancel. + +* Si la \[transacción EscrowCreate]\[] correspondiente no especificó un tiempo `CancelAfter`, la transacción EscrowCancel falla. +* De lo contrario, la transacción EscrowCancel falla si el tiempo `CancelAfter` es posterior al tiempo de cierre del ledger cerrado más recientemente. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx new file mode 100644 index 0000000..91742c5 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx @@ -0,0 +1,42 @@ +--- +title: EscrowCreate +description: Retiene XAH o IOU hasta que el proceso de escrow finalice o sea cancelado. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_Añadido por la enmienda \[Escrow]\[]._ + +### Ejemplo + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "EscrowCreate", + "Amount" : { + "currency" : "USD", + "value" : "1", + "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" + }, + "Destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "CancelAfter": 533257958, + "FinishAfter": 533171558, + "Condition": "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100", + "DestinationTag": 23480, + "SourceTag": 11747 +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto a deducir del saldo del emisor y poner en escrow. Una vez en escrow, el Amount puede ir a la dirección `Destination` (después del tiempo `FinishAfter`) o ser devuelto al emisor (después del tiempo `CancelAfter`). | +| `Destination` | String | AccountID | Dirección para recibir el Amount en escrow. | +| `CancelAfter` | Number | UInt32 | _(Opcional)_ El tiempo, en \[segundos desde la Época Ripple]\[], cuando este escrow expira. Este valor es inmutable; los fondos solo pueden devolverse al emisor después de este tiempo. | +| `FinishAfter` | Number | UInt32 | _(Opcional)_ El tiempo, en \[segundos desde la Época Ripple]\[], cuando el Amount en escrow puede liberarse al destinatario. Este valor es inmutable; los fondos no pueden moverse hasta que se alcance este tiempo. | +| `Condition` | String | Blob | _(Opcional)_ Valor hex que representa una [crypto-condición PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1). Los fondos solo pueden entregarse al destinatario si esta condición se cumple. | +| `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria para especificar más el destino de este pago en escrow, como un destinatario alojado en la dirección de destino. | + +Se debe especificar `CancelAfter` o `FinishAfter`. Si ambos se incluyen, el tiempo `FinishAfter` debe ser anterior al tiempo `CancelAfter`. + +Con la enmienda \[fix1571]\[] habilitada, debe proporcionar `FinishAfter`, `Condition`, o ambos. \[Nuevo en: rippled 1.0.0]\[] diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowfinish.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowfinish.mdx new file mode 100644 index 0000000..ff4c8ea --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowfinish.mdx @@ -0,0 +1,51 @@ +--- +title: EscrowFinish +description: Entrega XAH o IOU de un pago retenido al destinatario. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_Añadido por la enmienda \[Escrow]\[]._ + +### Finalizar con OfferSequence + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "EscrowFinish", + "Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "OfferSequence": 7, + "Condition": "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100", + "Fulfillment": "A0028000" +} +``` + +### Finalizar con EscrowID + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "EscrowFinish", + "Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "EscrowID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0", + "Condition": "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100", + "Fulfillment": "A0028000" +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------------- | --------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Owner` | String | AccountID | Dirección de la cuenta fuente que financió el pago retenido. | +| `OfferSequence` | Number | UInt32 | _(Opcional)_ Secuencia de transacción de la \[transacción EscrowCreate]\[] que creó el pago retenido a finalizar. | +| `Condition` | String | Blob | _(Opcional)_ Valor hex que coincide con la [crypto-condición PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1) del pago retenido previamente proporcionada. | +| `Fulfillment` | String | Blob | _(Opcional)_ Valor hex del [cumplimiento de la crypto-condición PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1.4) que coincide con la `Condition` del pago retenido. | +| `EscrowID` | String | Hash256 | _(Opcional)_ El ID del objeto ledger Escrow a finalizar, como una cadena hexadecimal de 64 caracteres. | + +Cualquier cuenta puede enviar una transacción EscrowFinish. + +* Si el pago retenido tiene un tiempo `FinishAfter`, no puede ejecutarse antes de ese tiempo. Específicamente, si la \[transacción EscrowCreate]\[] correspondiente especificó un tiempo `FinishAfter` posterior al tiempo de cierre del ledger cerrado más recientemente, la transacción EscrowFinish falla. +* Si el pago retenido tiene una `Condition`, no puede ejecutarse a menos que proporcione un `Fulfillment` coincidente para la condición. +* No puede ejecutar un pago retenido después de que haya expirado. Específicamente, si la \[transacción EscrowCreate]\[] correspondiente especificó un tiempo `CancelAfter` anterior al tiempo de cierre del ledger cerrado más recientemente, la transacción EscrowFinish falla. + +**Nota:** El costo mínimo de transacción para enviar una transacción EscrowFinish aumenta si contiene un cumplimiento. Si la transacción no tiene cumplimiento, el costo es el estándar de 10 drops. Si contiene un cumplimiento, el costo es 330 \[drops de XAH]\[] más 10 drops adicionales por cada 16 bytes de tamaño de la pre-imagen. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn.mdx new file mode 100644 index 0000000..207c66f --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn.mdx @@ -0,0 +1,57 @@ +--- +title: GenesisMint - (Txn Emitida) +description: >- + La transacción GenesisMint se usa para acuñar nuevos XAH y distribuirlos + a múltiples cuentas. Esta transacción solo puede ser usada por la cuenta génesis. +--- +\[[Source](https://github.com/ripple/rippled/blob/develop/src/ripple/app/tx/impl/GenesisMint.cpp)] + +_Añadido por la enmienda \[XahauGenesis]\[] y la enmienda \[Hooks]\[]_ + +### Ejemplo + +```json +{ + "TransactionType": "GenesisMint", + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "GenesisMints": [ + { + "GenesisMint": { + "Destination": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", + "Amount": "1000000000" + }, + } + ] +} +``` + +### Campos + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| -------------- | --------- | ------------ | -------------------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta génesis que acuñará y distribuirá XAH. | +| `GenesisMints` | Array | Array | Un array de objetos que representan los destinos y montos del XAH acuñado. | + +### Objeto GenesisMint + +La transacción GenesisMint incluye un array de objetos llamado `GenesisMints`. Cada objeto representa una cuenta de destino y la cantidad de XAH a acuñar y distribuir a esa cuenta. + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ----------------- | --------- | ------------ | -------------------------------------------------------------------------- | +| `Destination` | String | AccountID | La dirección de la cuenta que recibirá el XAH acuñado. | +| `Amount` | String | Amount | La cantidad de XAH a acuñar y distribuir a la cuenta de destino. | +| `GovernanceFlags` | String | Hash256 | _(Opcional)_ Los indicadores de gobernanza asociados con la cuenta de destino. | +| `GovernanceMarks` | String | Hash256 | _(Opcional)_ Las marcas de gobernanza asociadas con la cuenta de destino. | + +### Costo de Transacción Especial + +La transacción GenesisMint tiene un costo de transacción estándar, que es el costo mínimo requerido para todas las transacciones. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, la transacción GenesisMint puede resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| --------------- | ------------------------------------------------------------------------------------------ | +| `temDISABLED` | Ocurre si las enmiendas "Hooks" o "XahauGenesis" no están habilitadas. | +| `temMALFORMED` | Ocurre si la transacción está malformada, como campos requeridos faltantes o valores inválidos. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/import.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/import.mdx new file mode 100644 index 0000000..7fb1475 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/import.mdx @@ -0,0 +1,64 @@ +--- +title: Import +description: >- + Import es una nueva transacción que acepta un XPOP de la cadena principal XRPL + (network_id=0) o Testnet (network_id=1) y proporciona sincronización de cuentas. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[Import]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "Import", + "Sequence": 0, + "Fee": "0", + "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", + "Blob" : "DEADBEEF" +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------- | --------- | ------------------- | ------------------------------------------------------------ | +| `Blob` | String | Blob | Valor hex que representa un XPOP | +| `Issuer` | String | AccountID | (Opcional) Dirección que puede usarse dentro del Hook. | +| `Destination` | String | AccountID | (Opcional) Dirección que puede usarse dentro del Hook. | + +### Casos de Error + +* Si la cuenta no está activada, el `Sequence` debe ser 0 y el `Fee` también debe ser 0 +* Si la cuenta está activada, el `Sequence` y el `Fee` se calculan usando el método estándar. +* Si el campo `Issuer` está presente, el `Fee` debe calcularse usando el método estándar. + +### Notas + +_Se recomienda que si usa una `SignerList` o `RegularKey` para firmar sus transacciones, vincule sus cuentas **PRIMERO** antes de intentar hacer B2M de XAH_. + +* Si la transacción interna (xpop) es `AccountSet`, los indicadores existentes de la mainnet se transferirán a la nueva red. +* Si la transacción interna (xpop) es `SetRegularKey` con el campo `RegularKey` omitido o vacío, y no existe una lista de firmantes para la cuenta, entonces el indicador `lsfDisableMaster` se establecerá en la cuenta. +* Si la transacción interna (xpop) es `SetRegularKey`, el indicador `lsfPasswordSpent` se establecerá en la cuenta. +* TicketSequence no está disponible en `Import` + +### Importación para el Emisor + +Para los emisores, hay pasos adicionales a seguir antes de que los titulares de sus activos puedan importar transacciones. + +En primer lugar, los emisores deben instalar un hook. Hay dos opciones: `B2MNFToken` o `B2MPayment`. + +#### B2MNFToken + +Una transacción `NFTokenBurn` en mainnet resultará en una transacción `URITokenMint` en la red. + +> c hook: https://example.com + +#### B2MPayment + +Una transacción `Payment` en mainnet al Emisor resultará en una transacción `Payment` del Emisor en la red. + +> c hook: https://example.com + +_Tenga en cuenta que el proceso de importación para el emisor involucra tipos de transacciones específicas y requiere una configuración cuidadosa. Siempre asegúrese de que los hooks estén correctamente configurados y que las transacciones sean válidas para las operaciones previstas._ diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/index.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/index.mdx new file mode 100644 index 0000000..2e5d7b6 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/index.mdx @@ -0,0 +1,12 @@ +--- +title: Tipos de Transacciones +--- +## Tipos de Transacciones + +El tipo de una transacción (campo `TransactionType`) es la información más fundamental sobre una transacción. Indica qué tipo de operación se supone que debe realizar la transacción. + +Todas las transacciones tienen ciertos campos en común: + +* Campos Comunes + +Cada tipo de transacción tiene campos adicionales relevantes para el tipo de acción que causa. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/invoke.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/invoke.mdx new file mode 100644 index 0000000..d43c1d6 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/invoke.mdx @@ -0,0 +1,40 @@ +--- +title: Invoke +description: >- + Una transacción Invoke se usa para llamar a un hook, que es un fragmento de + código que se ejecuta en respuesta a ciertas operaciones del ledger. +--- +\[[Source](https://github.com/ripple/rippled/blob/develop/src/ripple/app/tx/impl/Invoke.cpp)] + +_(Añadido por la enmienda [Hooks][].)_ + +### Ejemplo + +```json +{ + "TransactionType": "Invoke", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Blob": "697066733A2F2F4445414442454546", + "Destination": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | ¿Requerido? | Descripción | +| --------------- | --------- | ------------------- | ----------- | -------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | Sí | La dirección de la cuenta que está invocando el hook. | +| `Blob` | String | Blob | No | Un blob de datos que se pasa al hook. (máximo 128k bytes) | +| `Destination` | String | AccountID | No | La dirección de la cuenta que es el objetivo del hook. | + +### Costo de Transacción Especial + +La transacción Invoke tiene un costo de transacción estándar, más un costo adicional basado en el tamaño del campo Blob. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones Invoke pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| --------------- | ------------------------------------------------------------------------ | +| `temDISABLED` | Ocurre si la enmienda Hooks no está habilitada. | +| `temMALFORMED` | Ocurre si el campo Blob es mayor que 128k bytes. | +| `terNO_ACCOUNT` | Ocurre si la cuenta emisora o la cuenta de destino no existe. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercancel.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercancel.mdx new file mode 100644 index 0000000..6803780 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercancel.mdx @@ -0,0 +1,44 @@ +--- +title: OfferCancel +description: Una transacción OfferCancel elimina un objeto Offer de Xahau. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +### Cancelar con OfferSequence + +```json +{ + "TransactionType": "OfferCancel", + "Account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 7108629, + "OfferSequence": 6, + "Sequence": 7 +} +``` + +### Cancelar con OfferID + +```json +{ + "TransactionType": "OfferCancel", + "Account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 7108629, + "OfferID": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0", + "Sequence": 7 +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------------- | --------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OfferSequence` | Number | UInt32 | _(Opcional)_ El número de secuencia (o número de Ticket) de una transacción OfferCreate anterior. Si se especifica, cancela cualquier objeto offer en el ledger que fue creado por esa transacción. No se considera un error si la oferta especificada no existe. | +| `OfferID` | String | Hash256 | _(Opcional)_ El ID del objeto ledger Offer a cancelar, como una cadena hexadecimal de 64 caracteres. | + +_Consejo:_ Para eliminar una oferta antigua y reemplazarla con una nueva, puede usar una \[transacción OfferCreate]\[] con un parámetro `OfferSequence`, en lugar de usar OfferCancel y otro OfferCreate. + +El método OfferCancel devuelve `tesSUCCESS` incluso si no encontró una oferta con el número de secuencia coincidente. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx new file mode 100644 index 0000000..52a8eef --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx @@ -0,0 +1,68 @@ +--- +title: OfferCreate +description: >- + Una transacción OfferCreate coloca una Oferta en el + intercambio descentralizado. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +### Ejemplo + +```json +{ + "TransactionType": "OfferCreate", + "Account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 7108682, + "Sequence": 8, + "TakerGets": "6000000", + "TakerPays": { + "currency": "GKO", + "issuer": "ruazs5h1qEsqpke88pcqnaseXdm6od2xc", + "value": "2" + } +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- | +| `Expiration` | Number | UInt32 | _(Opcional)_ Tiempo después del cual la Oferta ya no está activa, en \[segundos desde la Época Ripple]\[]. | +| `OfferSequence` | Number | UInt32 | _(Opcional)_ Una Oferta a eliminar primero, especificada de la misma manera que \[OfferCancel]\[]. | +| `OfferID` | String | Hash256 | _(Opcional)_ El ID del objeto ledger Offer a cancelar, como una cadena hexadecimal de 64 caracteres. | +| `TakerGets` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad y tipo de moneda que se vende. | +| `TakerPays` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad y tipo de moneda que se compra. | + +### Indicadores OfferCreate + +Las transacciones del tipo OfferCreate admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tfPassive` | `0x00010000` | 65536 | Si está habilitado, la Oferta no consume Ofertas que coincidan exactamente con ella, y en cambio se convierte en un objeto Offer en el ledger. Aún consume Ofertas que la cruzan. | +| `tfImmediateOrCancel`| `0x00020000` | 131072 | Tratar la Oferta como una [orden Immediate or Cancel](http://en.wikipedia.org/wiki/Immediate_or_cancel). La Oferta nunca crea un \[objeto Offer]\[] en el ledger: solo negocia lo que puede consumiendo Ofertas existentes en el momento del procesamiento. Si no hay Ofertas coincidentes, se ejecuta "con éxito" sin negociar nada. En este caso, la transacción sigue usando el código de resultado `tesSUCCESS`. | +| `tfFillOrKill` | `0x00040000` | 262144 | Tratar la oferta como una [orden Fill or Kill](http://en.wikipedia.org/wiki/Fill_or_kill). La Oferta nunca crea un \[objeto Offer]\[] en el ledger, y se cancela si no puede completarse totalmente en el momento de la ejecución. Por defecto, esto significa que el propietario debe recibir el monto completo de `TakerPays`; si el indicador `tfSell` está habilitado, el propietario debe poder gastar el monto completo de `TakerGets` en su lugar. | +| `tfSell` | `0x00080000` | 524288 | Intercambiar el monto completo de `TakerGets`, incluso si significa obtener más que el monto de `TakerPays` a cambio. | + +### Casos de Error + +| Código de Error | Descripción | +| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `temINVALID_FLAG` | Ocurre si la transacción especifica tanto `tfImmediateOrCancel` como `tfFillOrKill`. | +| `tecEXPIRED` | Ocurre si la transacción especifica un tiempo `Expiration` que ya pasó. | +| `tecKILLED` | Ocurre si la transacción especifica `tfFillOrKill` y el monto completo no puede completarse. | +| `temBAD_EXPIRATION` | Ocurre si la transacción contiene un campo `Expiration` que no tiene formato válido. | +| `temBAD_SEQUENCE` | Ocurre si la transacción contiene un `OfferSequence` que no tiene formato válido, o es mayor que el propio número `Sequence` de la transacción. | +| `temBAD_OFFER` | Ocurre si la Oferta intenta intercambiar XAH por XAH, o intenta intercambiar una cantidad inválida o negativa de un token. | +| `temREDUNDANT` | Ocurre si la transacción especifica un token para el mismo token (mismo emisor y código de moneda). | +| `temBAD_CURRENCY` | Ocurre si la transacción especifica un token con el código de moneda "XAH". | +| `temBAD_ISSUER` | Ocurre si la transacción especifica un token con un valor `issuer` inválido. | +| `tecNO_ISSUER` | Ocurre si la transacción especifica un token cuyo valor `issuer` no es una cuenta financiada en el ledger. | +| `tecFROZEN` | Ocurre si la transacción involucra un token en una línea de confianza congelada (incluyendo congelamientos locales y globales). | +| `tecUNFUNDED_OFFER` | Ocurre si el propietario no tiene una cantidad positiva de la moneda `TakerGets`. | +| `tecNO_LINE` | Ocurre si la transacción involucra un token cuyo emisor usa Líneas de Confianza Autorizadas y la línea de confianza necesaria no existe. | +| `tecNO_AUTH` | Ocurre si la transacción involucra un token cuyo emisor usa Líneas de Confianza Autorizadas y la línea de confianza que recibiría los tokens existe pero no ha sido autorizada. | +| `tecINSUF_RESERVE_OFFER` | Ocurre si el propietario no tiene suficiente XAH para cumplir con el requisito de reserva de añadir un nuevo objeto Offer al ledger, y la transacción no convirtió ninguna moneda. | +| `tecDIR_FULL` | Ocurre si el propietario posee demasiados elementos en el ledger, o el libro de órdenes ya contiene demasiadas Ofertas al mismo tipo de cambio. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx new file mode 100644 index 0000000..9341e1f --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx @@ -0,0 +1,69 @@ +--- +title: Payment +description: >- + Una transacción Payment representa una transferencia de valor de una cuenta + a otra. +--- +[\[Source\]](https://github.com/ripple/rippled/blob/5425a90f160711e46b2c1f1c93d68e5941e4bfb6/src/ripple/app/transactors/Payment.cpp) + +### Ejemplo + +```json +{ + "TransactionType" : "Payment", + "Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Destination" : "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "Amount" : { + "currency" : "USD", + "value" : "1", + "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" + }, + "Fee": "12", + "Flags": 2147483648, + "Sequence": 2, +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda a entregar. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Si el indicador `tfPartialPayment` está activado, entrega _hasta_ este monto en su lugar. | +| `Destination` | String | AccountID | La dirección única de la cuenta que recibe el pago. | +| `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria que identifica la razón del pago al destino, o un destinatario alojado al que pagar. | +| `InvoiceID` | String | Hash256 | _(Opcional)_ Hash arbitrario de 256 bits que representa una razón o identificador específico para este pago. | +| `Paths` | Array de arrays de rutas | PathSet | (Opcional, auto-rellenable) Array de rutas de pago a usar para esta transacción. Debe omitirse para transacciones XAH a XAH. | +| `SendMax` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ Monto máximo de moneda fuente que puede costar esta transacción, incluyendo tarifas de transferencia, tipos de cambio y [deslizamiento](http://en.wikipedia.org/wiki/Slippage_\(finance\)). No incluye el XAH destruido como costo de envío. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Debe proporcionarse para pagos entre diferentes monedas. Debe omitirse para pagos XAH a XAH. | +| `DeliverMin` | \[Monto de Moneda]\[] | Amount | _(Opcional)_ Monto mínimo de moneda de destino que debe entregar esta transacción. Solo válido para pagos parciales. Para montos que no son XAH, los nombres de campos están en minúsculas. | + +### Tipos de Pagos + +El tipo de transacción Payment es una herramienta de propósito general que puede representar varios tipos diferentes de acciones abstractas: + +| Tipo de pago | `Amount` | `SendMax` | `Paths` | ¿`Address` = `Destination`? | Descripción | +| ---------------------------- | ------------------------------- | ------------------------------- | ---------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| Pago directo XAH a XAH | String (XAH) | Omitido | Omitido | No | Transfiere XAH directamente de una cuenta a otra. Siempre entrega el monto exacto. | +| Creación o canje de tokens | Object | Object (opcional) | Opcional | No | Aumenta o disminuye la cantidad de una moneda o activo que no es XAH rastreado en Xahau. | +| Pago entre diferentes monedas| Object (non-XAH) / String (XAH) | Object (non-XAH) / String (XAH) | Generalmente requerido | No | Envía tokens de un titular a otro. Puede tomar rutas más largas a través de varios intermediarios. | +| Pago parcial | Object (non-XAH) / String (XAH) | Object (non-XAH) / String (XAH) | Generalmente requerido | No | Envía _hasta_ una cantidad específica de cualquier moneda. Usa el indicador `tfPartialPayment`. | +| Conversión de moneda | Object (non-XAH) / String (XAH) | Object (non-XAH) / String (XAH) | Requerido | Sí | Consume ofertas en el intercambio descentralizado para convertir una moneda a otra. También llamado _pago circular_. | + +### Indicadores Payment + +Las transacciones del tipo Payment admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `tfNoDirectRipple` | `0x00010000` | 65536 | No usar la ruta predeterminada; solo usar las rutas incluidas en el campo `Paths`. Esto está destinado a forzar que la transacción aproveche oportunidades de arbitraje. | +| `tfPartialPayment` | `0x00020000` | 131072 | Si el `Amount` especificado no puede enviarse sin gastar más de `SendMax`, reducir el monto recibido en lugar de fallar. Consulte Pagos Parciales para más detalles. | +| `tfLimitQuality` | `0x00040000` | 262144 | Solo tomar rutas donde todas las conversiones tengan una relación entrada:salida igual o mejor que la relación de `Amount`:`SendMax`. Consulte Límite de Calidad para más detalles. | + +### Pagos Parciales + +Un pago parcial permite que un pago tenga éxito reduciendo el monto recibido. Los pagos parciales son útiles para devolver pagos sin incurrir en costos adicionales. Sin embargo, los pagos parciales también pueden usarse para explotar integraciones que ingenuamente asumen que el campo `Amount` de una transacción exitosa siempre describe el monto exacto entregado. + +Un pago parcial es cualquier \[transacción Payment]\[] con el indicador `tfPartialPayment` habilitado. Un pago parcial puede ser exitoso si entrega cualquier cantidad positiva mayor o igual a su campo `DeliverMin` sin enviar más que el valor `SendMax`. + +El campo `delivered_amount` de los metadatos de un pago indica la cantidad de moneda realmente recibida por la cuenta de destino. + +### Creación de Cuentas + +El tipo de transacción Payment puede crear nuevas cuentas en Xahau enviando suficiente XAH a una dirección sin financiar. Otras transacciones a direcciones sin financiar siempre fallan. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx new file mode 100644 index 0000000..f62731a --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx @@ -0,0 +1,57 @@ +--- +title: PaymentChannelClaim +description: >- + Reclama Amount de un canal de pago, ajusta la expiración del canal de pago, + o ambos. +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp) + +_Añadido por la enmienda \[PayChan]\[]._ + +La **dirección fuente** de un canal puede: + +* Enviar Amount del canal al destino _con o sin_ un Claim firmado. +* Establecer que el canal expire tan pronto como haya pasado el `SettleDelay` del canal. +* Limpiar un tiempo de `Expiration` pendiente. +* Cerrar un canal inmediatamente, con o sin procesar un claim primero. La dirección fuente no puede cerrar el canal inmediatamente si el canal tiene Amount restante. + +La **dirección de destino** de un canal puede: + +* Recibir Amount del canal usando un Claim firmado. +* Cerrar el canal inmediatamente después de procesar un Claim, devolviendo cualquier Amount no reclamado a la fuente del canal. + +**Cualquier dirección** que envíe esta transacción puede: + +* Causar que un canal se cierre si su tiempo de `Expiration` o `CancelAfter` es anterior al tiempo de cierre del ledger anterior. Cualquier transacción PaymentChannelClaim válidamente formada tiene este efecto independientemente del contenido de la transacción. + +### Ejemplo + +```json +{ + "Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198", + "Amount" : { + "currency" : "USD", + "value" : "1", + "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" + }, + "Signature": "30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B", + "PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Channel` | String | Hash256 | El ID único del canal, como una cadena hexadecimal de 64 caracteres. | +| `Balance` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ Monto total entregado por este canal después de procesar este claim. Requerido para entregar Amount. Debe ser mayor que el monto total entregado por el canal hasta ahora, pero no mayor que el `Amount` del claim firmado. | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ El monto autorizado por la `Signature`. Esto debe coincidir con el monto en el mensaje firmado. Este es el monto acumulativo de Amount que puede dispensarse por el canal, incluyendo XAH previamente canjeado. | +| `Signature` | String | Blob | _(Opcional)_ La firma de este claim, en hexadecimal. El mensaje firmado contiene el ID del canal y el monto del claim. Requerido a menos que el emisor de la transacción sea la dirección fuente del canal. | +| `PublicKey` | String | Blob | _(Opcional)_ La clave pública usada para la firma, en hexadecimal. Debe coincidir con el `PublicKey` almacenado en el ledger para el canal. Requerido a menos que el emisor de la transacción sea la dirección fuente del canal y el campo `Signature` sea omitido. | + +### Indicadores PaymentChannelClaim + +Las transacciones del tipo PaymentChannelClaim admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tfRenew` | `0x00010000` | 65536 | Limpiar el tiempo de `Expiration` del canal. (`Expiration` es diferente del tiempo inmutable `CancelAfter` del canal.) Solo la dirección fuente del canal de pago puede usar este indicador. | +| `tfClose` | `0x00020000` | 131072 | Solicitar el cierre del canal. Solo las direcciones fuente y destino del canal pueden usar este indicador. Este indicador cierra el canal inmediatamente si no tiene más Amount asignado después de procesar el claim actual, o si la dirección de destino lo usa. Si la dirección fuente usa este indicador cuando el canal aún tiene Amount, programa el cierre del canal después de que hayan pasado los segundos `SettleDelay`. Si la dirección de destino usa este indicador cuando el canal aún tiene Amount, cualquier Amount que quede después de procesar el claim se devuelve a la dirección fuente. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx new file mode 100644 index 0000000..c420aba --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx @@ -0,0 +1,40 @@ +--- +title: PaymentChannelCreate +description: >- + Crea un canal de pago y lo financia con un Amount. La dirección que envía + esta transacción se convierte en la "dirección fuente" del canal de pago. +--- +[\[Source\]](https://github.com/Xahau/xahaud/blob/master/src/ripple/app/tx/impl/PayChan.cpp) + +_Añadido por la enmienda \[PayChan]\[]._ + +### Ejemplo + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "PaymentChannelCreate", + "Amount" : { + "currency" : "USD", + "value" : "1", + "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" + }, + "Destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "SettleDelay": 86400, + "PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A", + "CancelAfter": 533171558, + "DestinationTag": 23480, + "SourceTag": 11747 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto a deducir del saldo del emisor y reservar en este canal. Mientras el canal esté abierto, el Amount solo puede ir a la dirección `Destination`. Cuando el canal se cierra, cualquier Amount no reclamado se devuelve al saldo de la dirección fuente. | +| `Destination` | String | AccountID | Dirección para recibir claims contra este canal. También conocida como la "dirección de destino" del canal. No puede ser la misma que el emisor (`Account`). | +| `SettleDelay` | Number | UInt32 | Tiempo que la dirección fuente debe esperar antes de cerrar el canal si tiene Amount no reclamado. | +| `PublicKey` | String | Blob | La clave pública de 33 bytes del par de claves que la fuente usará para firmar claims contra este canal, en hexadecimal. Puede ser cualquier clave pública secp256k1 o Ed25519. | +| `CancelAfter` | Number | UInt32 | _(Opcional)_ El tiempo, en \[segundos desde la Época Ripple]\[], cuando este canal expira. Cualquier transacción que modificaría el canal después de este tiempo lo cierra sin afectarlo de otra manera. Este valor es inmutable; el canal puede cerrarse antes pero no puede permanecer abierto después de este tiempo. | +| `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria para especificar más el destino de este canal de pago, como un destinatario alojado en la dirección de destino. | + +Si la cuenta `Destination` está bloqueando canales de pago entrantes, la transacción falla con el código de resultado `tecNO_PERMISSION`. _(Requiere la enmienda \[DisallowIncoming]\[] :not_enabled:)_ diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx new file mode 100644 index 0000000..c2a961f --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx @@ -0,0 +1,46 @@ +--- +title: PaymentChannelFund +description: >- + Agrega Amount adicional a un canal de pago abierto, y opcionalmente actualiza + el tiempo de expiración del canal. Solo la dirección fuente del canal puede + usar esta transacción. +--- +[\[Source\]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp) + +_Añadido por la enmienda \[PayChan]\[]._ + +### Ejemplo + +```json +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "PaymentChannelFund", + "Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198", + "Amount" : { + "currency" : "USD", + "value" : "1", + "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" + }, + "Expiration": 543171558 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Channel` | String | Hash256 | El ID único del canal a financiar, como una cadena hexadecimal de 64 caracteres. | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto a agregar al canal. Debe ser una cantidad positiva. | +| `Expiration` | Number | UInt32 | _(Opcional)_ Nuevo tiempo de `Expiration` a establecer para el canal, en \[segundos desde la Época Ripple]\[]. Debe ser posterior tanto al tiempo actual más el `SettleDelay` del canal, como a la `Expiration` existente del canal. Después del tiempo de `Expiration`, cualquier transacción que acceda al canal cierra el canal sin realizar su acción normal. Cualquier Amount no gastado se devuelve a la dirección fuente cuando el canal se cierra. (`Expiration` es independiente del tiempo inmutable `CancelAfter` del canal.) | + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones PaymentChannelFund pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tecINSUFFICIENT_RESERVE` | La cuenta emisora tiene menos XAH que el requisito de reserva. | +| `tecNO_DST` | La cuenta de destino del canal ha sido eliminada. Esto solo es posible si el canal de pago fue creado antes de que la enmienda fixPayChanRecipientOwnerDir se habilitara (el 2020-05-01). | +| `tecNO_ENTRY` | El Canal de Pago identificado por el campo `Channel` no existe. | +| `tecNO_PERMISSION` | El emisor de la transacción no es la dirección fuente del canal. | +| `tecUNFUNDED` | La cuenta emisora no tiene suficiente Amount para financiar el canal con el monto solicitado y aun así cumplir con el requisito de reserva. | +| `temBAD_AMOUNT` | El campo `Amount` de la transacción es inválido. El monto no puede ser cero o negativo. | +| `temBAD_EXPIRATION` | El campo `Expiration` es inválido. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx new file mode 100644 index 0000000..ff4ce05 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx @@ -0,0 +1,119 @@ +--- +title: Remit +description: >- + La transacción Remit permite al usuario enviar múltiples tipos de pago, + acuñar un URIToken, transferir una lista de URITokens y activar una cuenta. +--- +import { Aside } from '@astrojs/starlight/components'; + + + +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/Remit.cpp)] + +_(Añadido por la enmienda \[Remit]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "Remit", + "Account": "rGvbdrdCxG2tk9ZU2673XmsjRdHCDQEpt7", + "Amounts": [ + { + "AmountEntry": { + "Amount": "1000000" + } + }, { + "AmountEntry": { + "Amount": { + "currency": "USD", + "issuer": "rExKpRKXNz25UAjbckCRtQsJFcSfjL9Er3", + "value": "1" + } + } + } + ], + "Destination": "rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn", + "URITokenIDs": [ + "714F206C865D334721B2F3388BEAF33AA91BC1D78C71941D10A2A653C873EDD3" + ], + "MintURIToken": { + "Digest": "6F11A4DF4EE794E2800BB361173D454BFBECB3D7506C4F4CB0EC5AE98BE43747", + "Flags": 1, + "URI": "697066733A2F2F" + } +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ---------------- | --------- | ------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta que activará la cuenta, enviará el pago y/o acuñará/transferirá los URIToken/s. | +| `Destination` | String | AccountID | La dirección única de la cuenta que recibe el pago y/o los URIToken/s. | +| `DestinationTag` | Number | UInt32 | _(Opcional)_ Un DestinationTag para depósitos a una cuenta de custodia compartida. | +| `MintURIToken` | Object | STObject | _(Opcional)_ Un STObject `MintURIToken` que contiene los detalles del URIToken a acuñar en el `Destination`. | +| `URITokenIDs` | Array | STArray | _(Opcional)_ Un array de URITokenIDs (hash de 256 bits) a transferir al `Destination`. _Límite 32._ | +| `Amounts` | Array | STArray | _(Opcional)_ Un array de STObjects `AmountEntry` que la cuenta quiere enviar al `Destination`. _Límite 32._ | +| `Inform` | String | AccountID | _(Opcional)_ Una dirección única de una cuenta que puede tener un hook instalado y ser informada cuando ocurre un remit. | +| `Blob` | String | Blob | _(Opcional)_ Valor hex arbitrario que puede añadirse a la transacción para uso en Hooks. | +| `InvoiceID` | String | Hash256 | _(Opcional)_ Hash arbitrario de 256 bits que representa una razón o identificador específico para este remit. | + +### Campos de AmountEntry + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------- | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda que la cuenta quiere enviar al `Destination`. | + +### Campos de MintURIToken + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| -------- | --------- | ------------------- | ----------------------------------------------------------- | +| `URI` | String | String | El URI asociado con el URIToken acuñado. (máximo 256 bytes) | +| `Digest` | String | Hash256 | _(Opcional)_ El digest del URIToken. | +| `Flags` | Number | UInt32 | _(Opcional)_ Indicadores en la transacción de acuñación | + +### Indicadores MintURIToken + +El STObject `MintURIToken` admite los valores en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | ----------------------------------------------------------------------------------------------- | +| `tfBurnable` | `0x00000001` | 1 | Permite al emisor destruir el `URIToken` acuñado. (El propietario del `URIToken` _siempre_ puede hacerlo.) | + +### Costo de Transacción Especial + +La transacción Remit tiene un costo de transacción estándar, que es la tarifa mínima requerida para cualquier transacción en Xahau. + +Además de la tarifa mínima requerida, la transacción Remit también deducirá las tarifas por lo siguiente: + +| Acción | Tarifa | +| -------------------- | ----------------------------- | +| `Activación de Cuenta` | Requisito de Reserva Estándar | +| `Crear Línea de Confianza` | Requisito de Reserva Estándar | +| `Acuñación de URIToken` | Requisito de Reserva Estándar | +| `Transferencia de URIToken` | Requisito de Reserva Estándar | + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones Remit pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `temINVALID_FLAG` | Ocurre si algún indicador es específico de `tfFullyCanonicalSig` | +| `temREDUNDANT` | Ocurre si la Cuenta es la misma que el Destino | +| `temMALFORMED (Inform & Blob)` | Ocurre cuando: sfInform es igual a la fuente o destino. El Blob tiene más de 128kib. | +| `temMALFORMED (AmountEntry)` | Ocurre cuando: el conteo de AmountEntry supera `32`. AmountEntry esperado. La moneda nativa aparece más de una vez. La moneda emitida aparece más de una vez. | +| `temMALFORMED (MintURIToken)` | Ocurre cuando: sfMintURIToken contiene campo inválido. URI no proporcionado. URI demasiado largo/corto. UTF8 inválido dentro de MintURIToken. | +| `temMALFORMED (URITokenIDs)` | Ocurre cuando: URITokenIDs demasiado corto/largo. URITokenID duplicado. | +| `temBAD_AMOUNT` | Ocurre cuando un Amount en el AmountEntry es inválido. | +| `terNO_ACCOUNT` | Ocurre cuando la cuenta fuente no existe. | +| `tecNO_TARGET` | Ocurre cuando el campo `sfInform` está presente pero la cuenta no existe. | +| `tecNO_PERMISSION` | Ocurre cuando `disallowIncomingRemit` está habilitado en el `Destination` | +| `tecNO_PERMISSION` | Ocurre cuando el `Destination` tiene `DepositAuthorization` habilitado. | +| `tecDST_TAG_NEEDED` | Ocurre si la cuenta de destino requiere una etiqueta de destino, pero la transacción no incluye una. | +| `tecDUPLICATE` | Ocurre cuando el URI de `MintURIToken` de ese emisor ya existe. | +| `tecDIR_FULL` | Ocurre cuando el directorio de la cuenta fuente o destino está lleno. | +| `tecNO_ENTRY` | Ocurre cuando el URIToken no existe. | +| `tecNO_PERMISSION` | Ocurre cuando el URIToken no es de propiedad de la cuenta fuente. | +| `tecUNFUNDED_PAYMENT` | Ocurre cuando la cuenta fuente no tiene los fondos requeridos para ejecutar la transacción. (XAH o Monedas Emitidas) | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/sethook.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/sethook.mdx new file mode 100644 index 0000000..cfe6868 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/sethook.mdx @@ -0,0 +1,291 @@ +--- +title: SetHook +description: >- + La transacción SetHook permite a los usuarios instalar, actualizar, eliminar + o realizar otras operaciones en hooks en Xahau. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/SetHook.cpp)] + +_(Añadido por la enmienda \[Hooks]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "SetHook", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Flags": 0, + "Hooks": [ + { + "Hook": { + "HookHash": "610F33B8EBF7EC795F822A454FB852156AEFE50BE0CB8326338A81CD74801864", + "CreateCode": "697066733A2F2F4445414442454546697066733A2F2F44454144424545467878", + "HookGrants": [], + "HookNamespace": "0000000000000000000000000000000000000000000000000000000000000000", + "HookParameters": [], + "HookOn": "0000000000000000000000000000000000000000000000000000000000000000", + "HookApiVersion": 0, + "Flags": 0 + } + } + ] +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------- | --------- | ------------------- | -------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta que poseerá el hook. | +| `Hooks` | Array | Array | El array de hooks a establecer. | + +### Costo de Transacción Especial + +La transacción SetHook tiene un costo de transacción estándar, que es el costo mínimo de transacción requerido para todas las transacciones. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones SetHook pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| --------------- | ---------------------------------------------------------------------------- | +| `tecDUPLICATE` | Ocurre si ya existe un hook con el mismo hash. | +| `tecDIR_FULL` | Ocurre si el directorio del propietario está lleno y no puede acomodar el nuevo hook. | +| `terNO_ACCOUNT` | Ocurre si la cuenta emisora no existe. | +| `terNO_HOOK` | Ocurre si no existe ningún hook con el hash especificado. | +| `temDISABLED` | Ocurre si la Enmienda Hooks no está habilitada. | +| `temMALFORMED` | Ocurre si la transacción está malformada. | + +### Operaciones SetHook + +Hay seis operaciones posibles: Sin Operación, Crear, Actualizar, Eliminar, Instalar y Eliminar Espacio de Nombres + +Cada operación se especifica por la inclusión u omisión de ciertos campos del Objeto HookSet. Esencialmente, las operaciones HookSet son un tipo de **diff** entre los valores _predeterminados_, _existentes_ y los campos recién especificados de un Hook específico. + +### Sin Operación + +**Ocurre cuando**: + +* El Objeto HookSet está vacío + +**Comportamiento**: + +* No se realiza ningún cambio. + +**Ejemplo**: + +```json +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: {} + } + ] +} +``` + +### Operación Crear + +**Ocurre cuando** _todas_ las condiciones siguientes se cumplen: + +* El Hook Correspondiente no existe _o_ se especifica `FLAG_OVERRIDE`. +* El campo `CreateCode` está especificado y no está en blanco y contiene el bytecode WebAssembly válido para un Hook válido. +* No existe ninguna instancia del mismo bytecode WebAssembly en el XRPL. (Si existe y todos los demás requisitos se cumplen, se interpreta como una Operación Instalar.) + +**Comportamiento**: + +* Se crea un objeto `HookDefinition` con conteo de referencias en el XRPL. +* Se crea un array `Hooks` en la cuenta ejecutante, si no existe ya. +* Se crea un objeto `Hook` en la posición del Hook Correspondiente si no existe ya. +* El objeto `Hook` apunta a la `HookDefinition`. + +**Ejemplo**: + +```json +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: { + CreateCode: fs.readFileSync('accept.wasm').toString('hex').toUpperCase(), + HookOn: '0000000000000000', + HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), + HookApiVersion: 0 + } + } + ] +} +``` + +### Operación Instalar + +**Ocurre cuando** _todas_ las condiciones siguientes se cumplen: + +* El Hook Correspondiente no existe _o_ se especifica `FLAG_OVERRIDE`. +* El campo `HookHash` está especificado y no está en blanco y contiene el hash de un Hook que ya existe como `HookDefinition` en el ledger _o_ el campo `CreateCode` contiene bytecode WebAssembly válido para un hook que ya existe en el ledger como `HookDefinition`. + +**Ejemplo**: + +```json +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: { + HookHash: "A5663784D04ED1B4408C6B97193464D27C9C3334AAF8BBB4FA5EB8E557FC4A2C", + HookOn: '0000000000000000', + HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), + } + } + ] +} +``` + +### Operación Actualizar + +**Ocurre cuando** _todas_ las condiciones siguientes se cumplen: + +* El Hook Correspondiente existe. +* `HookHash` está ausente. +* `CreateCode` está ausente. +* Uno o más de `HookNamespace`, `HookParameters` o `HookGrants` está presente. + +**Ejemplo**: + +```json +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: { + HookNamespace: addr.codec.sha256('new_accept').toString('hex').toUpperCase(), + } + } + ] +} +``` + +### Operación Eliminar + +**Ocurre cuando** _todas_ las condiciones siguientes se cumplen: + +* El Hook Correspondiente existe. +* Se especifica `hsfOVERRIDE`. +* Opcionalmente `hsfNSDELETE` también está especificado. +* `HookHash` está ausente. +* `CreateCode` está presente pero vacío. + +**Ejemplo**: + +```json +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: { + CreateCode: "", + Flags: 1, + } + } + ] +} +``` + +### Restablecimiento de Espacio de Nombres + +**Ocurre cuando** _todas_ las condiciones siguientes se cumplen: + +* `flags` está presente y `hsfNSDELETE` está activado. +* `HookNamespace` está especificado. +* `CreateCode` está ausente. +* `HookHash` está ausente. + +**Ejemplo**: + +```json +{ + Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc", + TransactionType: "SetHook", + Fee: "2000000", + Hooks: + [ + { + Hook: { + HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(), + Flags: 3, + } + } + ] +} +``` + +### Campos del Hook + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ---------------- | --------- | ------------ | ------------------------------------------------- | +| `HookHash` | String | Hash256 | El hash del hook. | +| `CreateCode` | String | Blob | El código WebAssembly del hook. | +| `HookGrants` | Array | Array | Las concesiones asociadas con el hook. | +| `HookNamespace` | String | Hash256 | El espacio de nombres del hook. | +| `HookParameters` | Array | Array | Los parámetros del hook. | +| `HookOn` | String | Hash256 | Las transacciones en las que se activa el hook. | +| `HookCanEmit` | String | Hash256 | Las transacciones que el hook puede emitir. | +| `HookApiVersion` | Number | UInt16 | La versión de API del hook. | +| `Flags` | Number | UInt32 | Indicadores adicionales para el hook. | + +### Indicadores + +| Nombre del Indicador | Descripción | +| -------------------- | ------------------------------------------------------------------------ | +| `hsfOVERRIDE` | Permite que el hook sea eliminado aunque esté referenciado por otros objetos. | +| `hsfNSDELETE` | Elimina un espacio de nombres completo de hooks. | +| `hsfCOLLECT` | Recopila los objetos asociados del hook. | + +### Concesiones del Hook + +El campo `HookGrants` es un array de objetos que especifican las concesiones asociadas con el hook: + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ----------- | --------- | ------------ | -------------------------------------------------- | +| `HookHash` | String | Hash256 | El hook al que aplicar la concesión. | +| `Authorize` | String | AccountID | La dirección de la cuenta a la que se concede acceso. | +| `Flags` | Number | Uint32 | Indicadores | + +### Parámetros del Hook + +El campo `HookParameters` es un array de objetos que especifican los parámetros del hook: + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| -------------------- | --------- | ------------ | --------------------------- | +| `HookParameterName` | String | Blob | El nombre del parámetro. | +| `HookParameterValue` | String | Blob | El valor del parámetro. | + +### Ejecuciones del Hook + +Cuando los Hooks se ejecutan, dejan información sobre el estado de esa ejecución. Esto aparece en los metadatos de la Transacción Originadora como un bloque `sfHookExecutions`: + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ---------------------- | --------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `HookAccount` | String | AccountID | La cuenta en la que se ejecutó el Hook. | +| `HookEmitCount` | Number | UInt16 | El número total de Transacciones Emitidas producidas por el Hook. | +| `HookExecutionIndex` | Number | UInt16 | El SHA512H del Hook en el momento en que fue ejecutado. | +| `HookHash` | String | Hash256 | El valor del parámetro. | +| `HookInstructionCount` | String | UInt64 | El número total de instrucciones WebAssembly que se ejecutaron cuando se ejecutó el Hook. | +| `HookResult` | Number | UInt8 | Los Hooks pueden terminar de tres maneras: `accept`, `rollback` y `error`. ¡Esto _no_ es lo mismo que sfHookReturnCode! | +| `HookReturnCode` | String | UInt64 | El entero devuelto como tercer parámetro de `accept` o `rollback`. | +| `HookReturnString` | String | Blob | La cadena devuelta en los dos primeros parámetros de `accept` o `rollback`, si la hay. | +| `HookStateChangeCount` | Number | UInt16 | El número de cambios de Estado de Hook que el Hook realizó durante la ejecución. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setregularkey.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setregularkey.mdx new file mode 100644 index 0000000..1104646 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setregularkey.mdx @@ -0,0 +1,33 @@ +--- +title: SetRegularKey +description: >- + Una transacción SetRegularKey asigna, cambia o elimina el par de claves + regular asociado con una cuenta. +--- +[\[Source\]](https://github.com/ripple/rippled/blob/4239880acb5e559446d2067f00dabb31cf102a23/src/ripple/app/transactors/SetRegularKey.cpp) + +Puede proteger su cuenta asignándole un par de claves regular y usándolo en lugar del par de claves maestro para firmar transacciones siempre que sea posible. Si su par de claves regular está comprometido, pero su par de claves maestro no lo está, puede usar una transacción `SetRegularKey` para recuperar el control de su cuenta. + +### Ejemplo SetRegularKey JSON + +```json +{ + "Flags": 0, + "TransactionType": "SetRegularKey", + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Fee": "12", + "RegularKey": "rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD" +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------ | --------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `RegularKey` | String | AccountID | _(Opcional)_ Una \[Dirección]\[] codificada en base-58 que indica el par de claves regular a asignar a la cuenta. Si se omite, elimina cualquier par de claves regular existente de la cuenta. No debe coincidir con el par de claves maestro de la dirección. | + +### Véase También + +Para más información sobre pares de claves regulares y maestras, consulte Claves Criptográficas. + +Para un tutorial sobre cómo asignar un par de claves regular a una cuenta, consulte Trabajar con un Par de Claves Regular. + +Para mayor seguridad, puede usar firma múltiple, pero la firma múltiple requiere XAH adicional para el \[costo de transacción]\[] y la reserva. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setremarks.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setremarks.mdx new file mode 100644 index 0000000..9e171dd --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/setremarks.mdx @@ -0,0 +1,91 @@ +--- +title: SetRemarks +description: >- + La transacción SetRemarks permite a las cuentas adjuntar, actualizar o eliminar + observaciones arbitrarias (pares clave-valor) en objetos ledger admitidos. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/SetRemarks.cpp)] + +_(Añadido por la enmienda \[Remarks]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "SetRemarks", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Flags": 0, + "ObjectID": "AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899", + "Remarks": [ + { + "Remark": { + "RemarkName": "CAFE", + "RemarkValue": "DEADBEEF", + "Flags": 0 + } + } + ] +} +``` + +| Campo | Tipo JSON | Tipo Interno | Descripción | +| ---------- | --------- | ------------ | ---------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta que envía la transacción (debe ser el propietario/emisor del objeto) | +| `ObjectID` | String | Hash256 | El ID del objeto ledger al que se adjuntan las observaciones (consulte Objetos Admitidos) | +| `Remarks` | Array | Array | Array de objetos de observación a establecer, actualizar o eliminar (consulte Formato de Observaciones) | + +### Indicadores SetRemarks + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | ----------------------------------------------------------------------- | +| `tfImmutable` | `0x00000001` | 1 | Marca la observación como inmutable (no se puede cambiar o eliminar) | + +### Formato de Observaciones + +Cada entrada en el array `Remarks` es un objeto con un único campo `Remark`, que a su vez es un objeto con los siguientes campos: + +| Campo | Tipo JSON | Tipo Interno | Requerido | Descripción | +| ------------- | --------- | ------------ | --------- | ------------------------------------------------------------------------ | +| `RemarkName` | String | Blob | Sí | El nombre/clave de la observación (1–256 bytes, debe ser único por objeto) | +| `RemarkValue` | String | Blob | No | El valor de la observación (1–256 bytes). Omitir para eliminar la observación. | +| `Flags` | Number | UInt32 | No | Establecer en `1` (`tfImmutable`) para hacer la observación inmutable. El valor predeterminado es `0`. | + +### Objetos Admitidos y Permisos + +Las observaciones pueden adjuntarse a los siguientes tipos de objetos ledger. **Solo la parte especificada (propietario o emisor) puede crear, actualizar o eliminar observaciones en cada objeto:** + +| Tipo de Objeto Ledger | ¿Quién puede establecer observaciones? | Notas | +| --------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------- | +| **AccountRoot** | Propietario | La propia cuenta (la dirección en el objeto) | +| **Offer** | Propietario | La cuenta que creó la oferta | +| **Escrow** | Propietario | La cuenta que creó el escrow | +| **Ticket** | Propietario | La cuenta que creó el ticket | +| **PayChannel** | Propietario | La cuenta que creó el canal de pago | +| **Check** | Propietario | La cuenta que creó el check | +| **DepositPreauth** | Propietario | La cuenta que creó la preautorización de depósito | +| **URI Token** | Emisor | La cuenta que emitió el token URI (campo `sfIssuer`) | +| **Trustline (RippleState)** | Emisor | Solo el lado emisor de la línea de confianza (la cuenta que emitió el IOU) puede establecer observaciones. | + +### Límites + +* **Máximo 32 observaciones** por objeto. +* Cada `RemarkName` y `RemarkValue` debe tener entre 1 y 256 bytes. +* Cada `RemarkName` debe ser único por objeto. +* Una vez que una observación está marcada como inmutable (`Flags: 1`), no puede cambiarse ni eliminarse. + +### Costo de Transacción Especial + +El costo base de la transacción se incrementa en **1 drop por byte** de todos los campos `RemarkName` y `RemarkValue` en la transacción. + +### Casos de Error + +| Código de Error | Descripción | +| ---------------------- | -------------------------------------------------------------------------------------------- | +| `temDISABLED` | La enmienda Remarks no está habilitada. | +| `temINVALID_FLAG` | Indicadores inválidos en la transacción. | +| `temMALFORMED` | La transacción está malformada (por ejemplo, demasiadas observaciones, nombres duplicados, tamaños de campo inválidos). | +| `terNO_ACCOUNT` | La cuenta emisora no existe. | +| `tecNO_TARGET` | El objeto objetivo no existe. | +| `tecNO_PERMISSION` | El emisor no es el propietario/emisor del objeto. | +| `tecIMMUTABLE` | Se intentó modificar o eliminar una observación inmutable. | +| `tecTOO_MANY_REMARKS` | El número de observaciones en el objeto superaría el límite de 32. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/signerlistset.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/signerlistset.mdx new file mode 100644 index 0000000..ef0f5d9 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/signerlistset.mdx @@ -0,0 +1,52 @@ +--- +title: SignerListSet +description: >- + La transacción SignerListSet crea, reemplaza o elimina una lista de firmantes + que puede usarse para firmar múltiplemente una transacción. +--- +[\[Source\]](https://github.com/Xahau/xahaud/blob/master/src/ripple/app/tx/impl/SetSignerList.cpp) + +### Ejemplo + +```json +{ + "Flags": 0, + "TransactionType": "SignerListSet", + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Fee": "12", + "SignerQuorum": 3, + "SignerEntries": [ + { + "SignerEntry": { + "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "SignerWeight": 2 + } + }, + { + "SignerEntry": { + "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v", + "SignerWeight": 1 + } + }, + { + "SignerEntry": { + "Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n", + "SignerWeight": 1 + } + } + ] +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| --------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `SignerQuorum` | Number | UInt32 | Un número objetivo para los pesos de los firmantes. Una firma múltiple de esta lista es válida solo si la suma de pesos de las firmas proporcionadas es mayor o igual a este valor. Para eliminar una lista de firmantes, use el valor `0`. | +| `SignerEntries` | Array | Array | _(Omitir al eliminar)_ Array de objetos `SignerEntry`, indicando las direcciones y pesos de los firmantes en esta lista. Esta lista de firmantes debe tener al menos 1 miembro y no más de 32 miembros. Ninguna dirección puede aparecer más de una vez en la lista, ni la `Account` que envía la transacción puede aparecer en la lista. _(Actualizado por la enmienda \[ExpandedSignerList]\[].)_ | + +Una transacción SignerListSet exitosa reemplaza el objeto `SignerList` de la cuenta en el ledger, o agrega uno si no existía antes. Una cuenta no puede tener más de una lista de firmantes. Para eliminar una lista de firmantes, debe establecer `SignerQuorum` en `0` _y_ omitir el campo `SignerEntries`. De lo contrario, la transacción falla con el error `temMALFORMED`. Una transacción para eliminar una lista de firmantes se considera exitosa incluso si no había ninguna lista que eliminar. + +No puede crear una lista de firmantes de tal manera que el `SignerQuorum` nunca pueda alcanzarse. El `SignerQuorum` debe ser mayor que 0 pero menor o igual que la suma de los valores `SignerWeight` en la lista. De lo contrario, la transacción falla con el error `temMALFORMED`. + +Puede crear, actualizar o eliminar una lista de firmantes usando la clave maestra, la clave regular o la lista de firmantes actual, si esos métodos de firma de transacciones están disponibles. + +No puede eliminar el último método de firma de transacciones de una cuenta. Si la clave maestra de una cuenta está deshabilitada (la cuenta tiene el indicador `lsfDisableMaster` habilitado) y la cuenta no tiene una Clave Regular configurada, entonces no puede eliminar la lista de firmantes de la cuenta. En cambio, la transacción falla con el error `tecNO_ALTERNATIVE_KEY`. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/ticketcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/ticketcreate.mdx new file mode 100644 index 0000000..7d8b399 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/ticketcreate.mdx @@ -0,0 +1,38 @@ +--- +title: TicketCreate +description: >- + Una transacción TicketCreate reserva uno o más números de secuencia como Tickets. +--- +[\[Source\]](https://github.com/ripple/rippled/blob/develop/src/ripple/app/tx/impl/CreateTicket.cpp) + +_(Añadido por la enmienda \[TicketBatch]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "TicketCreate", + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Fee": "10", + "Sequence": 381, + "TicketCount": 10 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `TicketCount` | Number | UInt32 | Cuántos Tickets crear. Debe ser un número positivo y no puede hacer que la cuenta posea más de 250 Tickets después de ejecutar esta transacción. | + +Si la transacción no puede crear _todos_ los Tickets solicitados (ya sea por el límite de 250 Tickets o la reserva del propietario), falla y no crea ningún Ticket. Para ver cuántos Tickets posee actualmente una cuenta, use el \[método account_info]\[] y verifique el campo `account_data.TicketCount`. + +**Consejo:** Esta transacción incrementa el \[número de secuencia]\[Sequence Number] de la cuenta emisora en 1 _más_ el número de tickets creados (`TicketCount`). Esta es la única transacción que incrementa el número de secuencia de una cuenta en más de 1. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones TicketCreate pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `temINVALID_COUNT` | El campo `TicketCount` es inválido. Debe ser un entero entre 1 y 250. | +| `tecDIR_FULL` | Esta transacción haría que la cuenta posea más del límite de 250 Tickets a la vez, o más que el número máximo de objetos del ledger en general. | +| `tecINSUFFICIENT_RESERVE` | La cuenta emisora no tiene suficiente XAH para cumplir con la reserva del propietario de todos los Tickets solicitados. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/trustset.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/trustset.mdx new file mode 100644 index 0000000..7fed2f8 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/trustset.mdx @@ -0,0 +1,63 @@ +--- +title: TrustSet +description: Crear o modificar una línea de confianza que vincula dos cuentas. +--- +[\[Source\]](https://github.com/Xahau/xahaud/blob/master/src/ripple/app/tx/impl/SetTrust.cpp) + +### Ejemplo + +```json +{ + "TransactionType": "TrustSet", + "Account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "Fee": "12", + "Flags": 262144, + "LastLedgerSequence": 8007750, + "LimitAmount": { + "currency": "USD", + "issuer": "rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc", + "value": "100" + }, + "Sequence": 12 +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------------------ | --------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `LimitAmount` | Object | Amount | Objeto que define la línea de confianza a crear o modificar, en el formato de un \[Monto de Moneda]\[]. | +| `LimitAmount`.`currency` | String | (Amount.currency) | La moneda a la que aplica esta línea de confianza, como un [Código de Moneda ISO 4217](https://www.xe.com/iso4217.php) de tres letras o un valor hex de 160 bits. "XAH" es inválido. | +| `LimitAmount`.`value` | String | (Amount.value) | Representación decimal entre comillas del límite a establecer en esta línea de confianza. | +| `LimitAmount`.`issuer` | String | (Amount.issuer) | La dirección de la cuenta a la que extender confianza. | +| `QualityIn` | Number | UInt32 | _(Opcional)_ Valorar los saldos entrantes en esta línea de confianza a la razón de este número por 1,000,000,000 unidades. Un valor de `0` es abreviatura para tratar los saldos a valor nominal. | +| `QualityOut` | Number | UInt32 | _(Opcional)_ Valorar los saldos salientes en esta línea de confianza a la razón de este número por 1,000,000,000 unidades. Un valor de `0` es abreviatura para tratar los saldos a valor nominal. | + +Si la cuenta especificada en `LimitAmount.issuer` está bloqueando líneas de confianza entrantes, la transacción falla con el código de resultado `tecNO_PERMISSION`. _(Requiere la enmienda \[DisallowIncoming]\[] :not_enabled:)_ + +### Indicadores TrustSet + +Las transacciones del tipo TrustSet admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| --------------------- | ------------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tfSetfAuth` | `0x00010000` | 65536 | Autorizar a la otra parte a tener moneda emitida por esta cuenta. (Sin efecto a menos que se use el indicador AccountSet `asfRequireAuth`.) No puede desactivarse. | +| `tfSetNoRipple` | `0x00020000` | 131072 | Habilitar el indicador No Ripple, que bloquea el rippling entre dos líneas de confianza de la misma moneda si este indicador está habilitado en ambas. | +| `tfClearNoRipple` | `0x00040000` | 262144 | Deshabilitar el indicador No Ripple, permitiendo el rippling en esta línea de confianza. | +| `tfSetFreeze` | `0x00100000` | 1048576 | Congelar la línea de confianza. | +| `tfClearFreeze` | `0x00200000` | 2097152 | Descongelar la línea de confianza. | +| `tfSetDeepFreeze` | `0x00400000` | 4194304 | Congelamiento profundo de la línea de confianza. _(Requiere la enmienda \[DeepFreeze]\[])_ | +| `tfClearDeepFreeze` | `0x00800000` | 8388608 | Eliminar el congelamiento profundo de la línea de confianza. _(Requiere la enmienda \[DeepFreeze]\[])_ | + +Si una transacción intenta habilitar No Ripple pero no puede, falla con el código de resultado `tecNO_PERMISSION`. + +### Reglas de Congelamiento Profundo + +Con la enmienda \[DeepFreeze]\[] habilitada, se aplican las siguientes reglas a las operaciones de congelamiento profundo: + +Una transacción TrustSet que intente establecer `tfSetDeepFreeze` tiene éxito si y solo si una de las siguientes condiciones es verdadera: + +* El titular ya está congelado, indicado por `lsfLowFreeze`/`lsfHighFreeze` en la línea de confianza. +* `tfSetFreeze` también está establecido en la misma transacción TrustSet. + +Si la línea de confianza está profundamente congelada por el emisor (indicado por `lsfLowDeepFreeze`/`lsfHighDeepFreeze`), la transacción TrustSet falla si el emisor establece el indicador `tfClearFreeze` sin también establecer el indicador `tfClearDeepFreeze`. + +Consulte [Cuenta Alta vs. Baja](/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state#high-vs-low-account) para información sobre cómo se determinan las cuentas baja y alta. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenburn.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenburn.mdx new file mode 100644 index 0000000..6bff603 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenburn.mdx @@ -0,0 +1,38 @@ +--- +title: URITokenBurn +description: >- + La transacción URITokenBurn se usa para quemar un URIToken en Xahau. Quemar + un URIToken lo elimina permanentemente de la circulación. +--- +[\[Source\]](https://github.com/ripple/rippled/blob/develop/src/ripple/app/tx/impl/URIToken.cpp) + +_(Añadido por la enmienda \[URIToken]\[].)_ + +La transacción URITokenBurn se usa para quemar un URIToken en Xahau. Quemar un URIToken lo elimina permanentemente de la circulación. + +### Ejemplo + +```json +{ + "TransactionType": "URITokenBurn", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "URITokenID": "C1AE6DDDEEC05CF2978C0BAD6FE27362498DGS691DC749DCDD3B95992978C0BA", +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------ | --------- | ------------------- | --------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta propietaria del URIToken a quemar. | +| `URITokenID` | String | Hash256 | El ID del URIToken a quemar. | + +### Costo de Transacción Especial + +La transacción URITokenBurn no tiene requisitos especiales de costo de transacción. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones URITokenBurn pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------ | ----------------------------------------------------------------- | +| `tecNO_PERMISSION` | Ocurre si la cuenta no tiene permiso para quemar el token. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx new file mode 100644 index 0000000..a5dc403 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx @@ -0,0 +1,47 @@ +--- +title: URITokenBuy +description: >- + La transacción URITokenBuy permite a un usuario comprar un URIToken del emisor. + Esta transacción transfiere la propiedad de un URIToken del emisor al comprador. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[URIToken]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "URITokenBuy", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "URITokenID": "C1AE6DDDEEC05CF2978C0BAD6FE27362498DGS691DC749DCDD3B95992978C0BA", + "Amount": { + "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "currency": "USD", + "value": "100", + }, +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta del comprador. | +| `URITokenID` | String | Hash256 | El identificador único del URIToken a comprar. | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda a pagar por el URIToken. | + +### Costo de Transacción Especial + +La transacción URITokenBuy tiene un costo de transacción estándar, que es la tarifa mínima requerida para cualquier transacción en Xahau. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones URITokenBuy pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `tecCANT_ACCEPT_OWN_NFTOKEN_OFFER` | Ocurre si el propietario del token es quien reclama la oferta. | +| `tecDST_TAG_NEEDED` | Ocurre si la cuenta de destino requiere una etiqueta de destino, pero la transacción no incluye una. | +| `tecNO_PERMISSION` | Ocurre si el vendedor no tiene el token listado para la venta o el `Destination` del token no es la cuenta que compra el token. | +| `temBAD_CURRENCY` | Ocurre cuando la moneda de compra no coincide con la moneda de la oferta. | +| `tecINSUFFICIENT_PAYMENT` | Ocurre cuando el monto de compra es menor que el monto de la oferta. | +| `tecINSUFFICIENT_FUNDS` | Ocurre cuando el comprador no tiene fondos suficientes incluyendo el `Fee` para comprar el token. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencancelselloffer.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencancelselloffer.mdx new file mode 100644 index 0000000..00191be --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencancelselloffer.mdx @@ -0,0 +1,34 @@ +--- +title: URITokenCancelSellOffer +description: >- + Una transacción URITokenCancelSellOffer cancela una oferta de venta de un + URIToken en Xahau. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[URIToken]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "URITokenCancelSellOffer", + "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "URITokenID": "C1AE6DDDEEC05CF2978C0BAD6FE27362498DGS691DC749DCDD3B95992978C0BA", +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------ | --------- | ------------------- | -------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta propietaria de la oferta de venta a cancelar. | +| `URITokenID` | String | Hash256 | El ID del URIToken cuya oferta de venta se cancela. | + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones URITokenCancelSellOffer pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------ | ----------------------------------------------------------------------- | +| `tecNO_PERMISSION` | Ocurre cuando la cuenta que ejecuta la transacción no es el propietario del token. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx new file mode 100644 index 0000000..cb74bba --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx @@ -0,0 +1,47 @@ +--- +title: URITokenCreateSellOffer +description: >- + Una transacción URITokenCreateSellOffer permite a un usuario crear una oferta + de venta para un URIToken en el intercambio descentralizado de Xahau. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[URIToken]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "URITokenCreateSellOffer", + "Account": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", + "URITokenID": "C1AE6DDDEEC05CF2978C0BAD6FE27362498DGS691DC749DCDD3B95992978C0BA", + "Destination": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", + "Amount": { + "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "currency": "USD", + "value": "100", + }, +} +``` + +### Campos + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta que crea la oferta de venta. | +| `URITokenID` | String | Hash256 | El ID del URIToken que se vende. | +| `Destination` | String | AccountID | _(Opcional)_ La dirección de la cuenta que recibirá la oferta de venta. | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda que la cuenta quiere recibir a cambio del URIToken. | + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones URITokenCreateSellOffer pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ------------------------ | -------------------------------------------------------------------------------- | +| `tecNO_TARGET` | Ocurre si la cuenta objetivo no existe. | +| `tecNO_PERMISSION` | Ocurre si la cuenta no tiene permiso para crear una oferta de venta. | +| `tecINSUF_RESERVE_LINE` | Ocurre si la cuenta no tiene una reserva suficiente para crear una oferta de venta. | +| `tecINSUF_RESERVE_OFFER` | Ocurre si la cuenta no tiene una reserva suficiente para crear una oferta de venta. | +| `tecUNFUNDED_OFFER` | Ocurre si la cuenta no tiene saldo suficiente para crear una oferta de venta. | +| `tecOFFER_INVALID` | Ocurre si la oferta de venta es inválida. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx new file mode 100644 index 0000000..e62d387 --- /dev/null +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx @@ -0,0 +1,59 @@ +--- +title: URITokenMint +description: >- + Una transacción URIToken Mint acuña un nuevo URIToken y asigna la propiedad + a la cuenta especificada. El URIToken representa un activo digital único + que puede usarse en diversas aplicaciones. +--- +\[[Source](https://github.com/Xahau/xahaud/blob/dev/src/ripple/app/tx/impl/URIToken.cpp)] + +_(Añadido por la enmienda \[URIToken]\[].)_ + +### Ejemplo + +```json +{ + "TransactionType": "URITokenMint", + "Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm", + "Flags": 1, + "URI": "697066733A2F2F4445414442454546", + "Digest": "697066733A2F2F4445414442454546697066733A2F2F44454144424545467878", + "Destination": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", + "Amount": { + "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "currency": "USD", + "value": "100", + }, +} +``` + +| Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | +| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------- | +| `Account` | String | AccountID | La dirección de la cuenta que poseerá el URIToken acuñado. | +| `URI` | String | String | El URI asociado con el URIToken acuñado. (máximo 256 bytes) | +| `Digest` | String | Hash256 | _(Opcional)_ El digest del URIToken. | +| `Destination` | String | AccountID | _(Opcional)_ La dirección de la cuenta que puede comprar el URIToken acuñado. | +| `Amount` | [Monto de Moneda](/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ La cantidad de moneda que la cuenta quiere recibir a cambio del URIToken. | + +### Indicadores URITokenMint + +Las transacciones del tipo URITokenMint admiten valores adicionales en el campo `Flags`, de la siguiente manera: + +| Nombre del Indicador | Valor Hex | Valor Decimal | Descripción | +| -------------------- | ------------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `tfBurnable` | `0x00000001` | 1 | Permite al emisor (o a una entidad autorizada por el emisor) destruir el `URIToken` acuñado. (El propietario del `URIToken` _siempre_ puede hacerlo.) | + +### Costo de Transacción Especial + +La transacción URIToken Mint tiene un costo de transacción estándar, que es el costo mínimo requerido para todas las transacciones. + +### Casos de Error + +Además de los errores que pueden ocurrir para todas las transacciones, las transacciones URIToken Mint pueden resultar en los siguientes códigos de resultado: + +| Código de Error | Descripción | +| ----------------- | -------------------------------------------------------------------------------- | +| `tecDUPLICATE` | Ocurre si ya existe un URIToken con el mismo URI del mismo emisor. | +| `tecDIR_FULL` | Ocurre si el directorio del propietario está lleno y no puede acomodar el nuevo URIToken. | +| `temINVALID_FLAG` | Ocurre cuando el usuario especificó un `Flag` incorrecto. | +| `terNO_ACCOUNT` | Ocurre si la cuenta emisora no existe. | diff --git a/src/content/docs/es/docs/resources/media-kit.mdx b/src/content/docs/es/docs/resources/media-kit.mdx new file mode 100644 index 0000000..142a9d4 --- /dev/null +++ b/src/content/docs/es/docs/resources/media-kit.mdx @@ -0,0 +1,5 @@ +--- +title: Kit de medios +--- + +Los logotipos y las guías de marca están disponibles en https://github.com/Xahau/Graphics \ No newline at end of file diff --git a/src/content/docs/es/docs/resources/whitepaper.mdx b/src/content/docs/es/docs/resources/whitepaper.mdx new file mode 100644 index 0000000..bc5ae9a --- /dev/null +++ b/src/content/docs/es/docs/resources/whitepaper.mdx @@ -0,0 +1,153 @@ +--- +title: Whitepaper +--- +import { Aside } from '@astrojs/starlight/components'; + + + + + + +## 1. Resumen + +1. El Xahau Ledger (Xahau) es la sidechain de contratos inteligentes para el ecosistema XRPL. Es un fork del código abierto rippled del XRP Ledger (XRPL), que incorpora todas las características útiles e innovadoras del XRPL, incluida su sostenibilidad medioambiental, pero modifica y mejora el código para soportar contratos inteligentes. +2. Las características principales de Xahau son: + * **Núcleo XRPL:** Xahau conserva las funcionalidades clave que han hecho del XRPL una de las redes más duraderas y populares, incluyendo el **Protocolo de Consenso del XRP Ledger**, el **DEX**, y la lógica de protección contra spam mediante tarifas quemadas, pero sustituye los **NFTs XLS-20** por los más simples **URITokens**. + * **Hooks para contratos inteligentes:** La gran novedad de Xahau son los Hooks, una implementación de contratos inteligentes en rippled. Son pequeños fragmentos de código instalados en cuentas que imponen reglas a las transacciones antes de ser finalizadas. + * **Token nativo y mejor tokenómica:** Xahau está asegurado por su token nativo XAH y diseñado para recompensar validadores y soportar contratos inteligentes. + * **Juego de gobernanza Genesis Hook:** La cuenta Genesis está controlada por un Hook que regula la emisión de XAH y se gobierna mediante un sistema de dos niveles con hasta 20 validadores independientes. +3. Estas características crean una nueva red dentro del ecosistema XRPL con contratos inteligentes rápidos, baratos y seguros. +4. El desarrollo ha sido impulsado por la Xahau Launch Alliance sin ICO. +5. Xahau se lanza totalmente funcional y descentralizado con más de 10 validadores independientes. + +## 2. Xahau – Construido desde el ADN del XRPL + +1. Xahaud es un fork de rippled que mantiene las características clave del XRPL desde 2012. + +### Protocolo de Consenso del XRP Ledger + +2. Xahau utiliza el Protocolo de Consenso del XRPL (también llamado Proof of Association). +3. Funciona así: + * **Propuesta:** cada validador propone un conjunto de transacciones. + * **Acuerdo:** los validadores comparan y convergen en un conjunto común. + * **Finalización:** cuando ≥80% coincide, se finaliza. + * **Cierre:** se genera un nuevo ledger cada 3-5 segundos. +4. Cada validador define una UNL (lista de confianza). +5. Entidades como la XRPL Foundation publican listas recomendadas. +6. Ventajas: escalabilidad, bajo consumo energético y resistencia a censura. + +### El DEX + +7. Xahau mantiene un DEX descentralizado basado en libro de órdenes. +8. Funciona mediante: + * creación de órdenes + * emparejamiento automático + * trading entre monedas + * pathfinding + * ejecución automática + * descentralización total + * bajas comisiones +9. Permite trading eficiente y seguro sin intermediarios. + +### Tarifas quemadas + +10. Xahau quema tarifas para evitar spam. +11. En contratos inteligentes estas tarifas pueden ser mayores y variables. + +### URITokens en lugar de XLS-20 + +12. Xahau usa URITokens en vez de XLS-20. +13. Son objetos únicos con dirección fija. +14. Ventajas: + * ligeros y eficientes + * interoperables e inmutables + * mejor experiencia de usuario +15. Son una solución flexible y eficiente para NFTs. + +## 3. Hooks – Contratos inteligentes para XRPL + +1. Hooks son pequeños programas que se ejecutan antes de finalizar transacciones. +2. Se implementan como sidechain. + +### Beneficios + +3. Ventajas: + * simplicidad y eficiencia + * integración nativa + * bajas comisiones + * seguridad + * compatibilidad + * descentralización de cuentas + +### Casos de uso + +4. Ejemplos: + * listas blancas + * listas negras + * escrow avanzado + * registros automáticos + * tesorerías autónomas + +5. Xahau ofrece acceso temprano a contratos inteligentes eficientes. + +## 4. XAH – Token nativo y tokenómica + +1. Características: + * token: XAH + * unidad mínima: 1 drop + * función: pagar servicios + * suministro inicial: 600M + * sin límite máximo + +### Distribución inicial + +2. Distribución: + * validadores + * GateHub + * XRPL Labs + * XRPL Foundation + +### Ajuste mensual de saldo + +3. Permite recuperar tokens quemados: + * ~0.34% mensual + * requiere actividad + * incentiva uso + +### Recompensas a validadores + +4. Validadores reciben recompensas mensuales según actividad. + +## 5. Juego de Gobernanza + +1. Xahau usa consenso social como XRPL. +2. Pero añade gobernanza del Genesis Hook. +3. Funciona así: + * 20 asientos + * L1 y L2 + * votaciones ≥80% + * recompensas por participación +4. Permite hasta 400 cuentas participando. + +## 6. Xahau Launch Alliance + +Incluye: +* XRPL Labs +* GateHub +* Titanium OU +* Evernode Labs +* Digital Governing OU + +## 7. Lanzamiento descentralizado + +1. Sin control central. +2. Sin ICO. +3. Sin promesas ni roadmap centralizado. +4. Sistema gobernado por incentivos. +5. Software funcional desde el inicio. \ No newline at end of file diff --git a/src/content/docs/es/docs/support/help-us.mdx b/src/content/docs/es/docs/support/help-us.mdx new file mode 100644 index 0000000..08713a5 --- /dev/null +++ b/src/content/docs/es/docs/support/help-us.mdx @@ -0,0 +1,11 @@ +--- +title: Ayúdanos +--- + +La documentación de Xahau es de código abierto y está abierta a contribuciones [en GitHub](https://github.com/Xahau/xahau-web). + +Se esperan muchos vacíos y detalles no cubiertos en la documentación, por lo que invitamos a **todo el mundo** a colaborar para llevarla al nivel adecuado. + +Si ves algo que falta, por favor [crea un issue](https://github.com/Xahau/xahau-web/issues) en el repositorio o simplemente crea un pull request a la rama principal con los cambios sugeridos o la documentación actualizada. + +Si te gustaría contribuir pero no sabes por dónde empezar, puedes consultar el [tablero de proyectos de GitHub](https://github.com/orgs/Xahau/projects/2/views/1), donde los issues están organizados. Si no estás familiarizado con GitHub, el [Discord de la comunidad](https://discord.com/invite/UzU58haAn4) es un buen lugar para recibir ayuda y participar. \ No newline at end of file diff --git a/src/content/docs/es/docs/what-is-different.mdx b/src/content/docs/es/docs/what-is-different.mdx new file mode 100644 index 0000000..5b0613d --- /dev/null +++ b/src/content/docs/es/docs/what-is-different.mdx @@ -0,0 +1,81 @@ +--- +title: 'XRPL/Xahau: ¿Qué es diferente?' +description: Una lista de las diferencias más notables entre el XRP Ledger y Xahau. +--- +import { Aside, LinkCard } from '@astrojs/starlight/components'; + +#### Escrow de Tokens IOU y PayChannels + +Xahau introduce el Escrow de Tokens IOU y los PayChannels como características únicas, mejorando la flexibilidad y la seguridad de las transacciones. Facilitan el mantenimiento temporal de tokens IOU bajo condiciones predefinidas (escrow) y el establecimiento de canales de pago para transacciones eficientes fuera del ledger. + + + +#### URITokens, NO NFTokens + +En lugar de usar NFTokens como el XRPL, Xahau emplea URITokens. Los URITokens son una forma de activos digitales no fungibles con identificadores únicos y metadatos, ofreciendo un enfoque novedoso para la representación de activos en la blockchain. + + + +#### Repositorio diferente + +Xahau y XRPL operan desde repositorios diferentes, lo que significa que son protocolos separados con sus propias trayectorias de desarrollo y documentación. Esta distinción implica que Xahau puede ofrecer características únicas y optimizaciones no presentes en XRPL. + +[https://github.com/Xahau/xahaud](https://github.com/Xahau/xahaud) + +#### Proceso de compilación diferente (WASM y LLVM) + +El proceso de compilación de Xahau incorpora WebAssembly (WASM) y la Low-Level Virtual Machine (LLVM), que no se describe en el proceso de compilación de XRPL. Xahau utiliza estas tecnologías para mejorar las capacidades de contratos inteligentes y para mejorar el rendimiento y la compatibilidad multiplataforma de su código. + + + +#### Tiempo de enmienda diferente (5 días) + +El proceso de enmienda en Xahau tiene un plazo de 5 días, diferente al de XRPL. Las enmiendas son cambios en el protocolo, y el período de 5 días se refiere al tiempo que tienen los validadores para alcanzar un consenso e implementar estos cambios. + + + +#### Secuencia de inicio diferente + +Xahau emplea una secuencia de inicio diferente para las cuentas que XRPL. La secuencia inicial en la cuenta es el tiempo en epoch de ripple cuando la cuenta fue creada/importada en Xahau. + +#### Import / Burn 2 Mint + +Importar desde XRPL a Xahau otorga a los usuarios 2 tokens XAH, lo que indica un mecanismo de incentivo para fomentar la migración de activos o el puente desde XRPL hacia Xahau, potencialmente para mejorar la adopción y la liquidez de la red. + + + +#### Balance Rewards (Recompensas por usar XAH) + +Xahau ofrece recompensas de saldo por utilizar XAH, una característica ausente en XRPL. Se trata de un sistema de recompensas por mantener o usar el token nativo de Xahau, XAH, para promover el compromiso y la estabilidad de la red. + + + +#### Hooks + +Los Hooks en Xahau, que no están presentes en XRPL, son scripts programables o funciones similares a contratos inteligentes que pueden adjuntarse a las cuentas. Añaden una capa de programabilidad y automatización a las operaciones de la red. + + + +#### Estructura de Gobernanza + +La estructura de gobernanza de Xahau difiere de la de XRPL. Xahau tiene su propio enfoque para la toma de decisiones, los sistemas de propuestas o los roles de los validadores, lo que puede influir en la evolución de la red. + + + +#### Requisitos de Nodo + +Ejecutar un nodo Xahau tiene requisitos diferentes a los de un nodo XRPL. Estas diferencias se relacionan con las especificaciones técnicas necesarias para soportar las características únicas y las demandas de la red de Xahau. + + + +#### Token Nativo + +El token nativo de Xahau es XAH, distinto del XRP de XRPL. Como moneda principal dentro de la red Xahau, XAH sirve como el principal medio de intercambio y reserva de valor, siendo central para el marco económico de la red. + + + +#### Versionado (Usa Fechas) + +Xahau emplea un sistema de versionado basado en fechas, a diferencia del enfoque de versionado de XRPL. Este método puede proporcionar una forma más intuitiva de rastrear las actualizaciones e historial de desarrollo de la red. + + diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 6d47b8f..a5a256f 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -3,6 +3,8 @@ import Footer from '../components/Footer.astro' import Header from '../components/Header.jsx' + const _firstSeg = Astro.url.pathname.split('/')[1] + const _lang = ['es', 'ja'].includes(_firstSeg) ? _firstSeg : 'en' const _canonicalURL = new URL(Astro.url.pathname, Astro.site) const _socialImageURL = new URL('/xahau-logo.png', Astro.site) const _title = Astro.props.frontmatter?.title @@ -12,7 +14,7 @@ ? Astro.props.frontmatter?.description : 'Xahau is a blockchain for the real world. It is a smart blockchain with account-based programmability. It is cheap and fast by design. It is built for the real world.' --- - + diff --git a/src/layouts/IndexLayout.astro b/src/layouts/IndexLayout.astro index 02a6e7c..274047a 100644 --- a/src/layouts/IndexLayout.astro +++ b/src/layouts/IndexLayout.astro @@ -4,6 +4,97 @@ import BaseLayout from '../layouts/BaseLayout.astro' const _frontmatter = Astro.props.frontmatter + + const LOCALES = ['es', 'ja'] + const firstSegment = Astro.url.pathname.split('/')[1] + const locale = LOCALES.includes(firstSegment) ? firstSegment : 'en' + const p = locale !== 'en' ? `/${locale}` : '' + + const translations = { + en: { + hero_title: 'The Smarter Blockchain with Account-Based Programmability', + hero_subtitle: 'Not just smart contracts – smart accounts. Cheap and fast by design. Built for the real world.', + hero_learn: 'Learn the basics', + hero_docs: 'View docs', + network_title: 'The Xahau Network', + network_subtitle: 'Why is Xahau the right blockchain for your business?', + feat1_title: '1. Smart Contract Hooks', + feat1_desc: 'Xahau supports lightweight smart contracts directly on accounts, enabling automatic logic for approvals, rejections, or custom behavior without requiring users to call a contract.', + feat2_title: '2. Low Fees with Fee Burning', + feat2_desc: 'Xahau offers predictable, low transaction costs. A portion of each fee is burned, reducing spam and aligning incentives with long-term network health.', + feat3_title: '3. Enterprise-Ready Governance', + feat3_desc: 'With structured governance and validator coordination, Xahau provides a stable environment for regulated and enterprise use, including supply chain, payments, and compliance applications.', + feat4_title: '4. Fast, Green, and Scalable', + feat4_desc: 'With an efficient consensus protocol, Xahau processes transactions quickly without mining—ideal for businesses needing performance and sustainability.', + feat5_title: '5. Token and Asset Control by Design', + feat5_desc: "Businesses can issue assets or tokens with fine-grained control over how they're used or transferred, enforcing rules automatically at the ledger level.", + feat_more: 'Discover more features', + stats_title: 'Network statistics', + stats_subtitle: 'Xahau in numbers', + stats_accounts: 'Accounts', + stats_hooks: 'Hooks installed', + stats_nodes: 'Nodes', + stats_txs: 'Transactions/24h', + stats_ledgers: 'Ledgers closed', + stats_node_cta: 'Want to run a node?', + }, + es: { + hero_title: 'La Blockchain Inteligente con Programabilidad Basada en Cuentas', + hero_subtitle: 'No solo contratos inteligentes – cuentas inteligentes. Barato y rápido por diseño. Construido para el mundo real.', + hero_learn: 'Aprende los conceptos básicos', + hero_docs: 'Ver documentación', + network_title: 'La Red Xahau', + network_subtitle: '¿Por qué Xahau es la blockchain adecuada para tu negocio?', + feat1_title: '1. Smart Contract Hooks', + feat1_desc: 'Xahau soporta contratos inteligentes ligeros directamente en cuentas, permitiendo lógica automática para aprobaciones, rechazos o comportamiento personalizado sin que los usuarios necesiten llamar a un contrato.', + feat2_title: '2. Bajas Comisiones con Quema de Fees', + feat2_desc: 'Xahau ofrece costes de transacción predecibles y bajos. Una parte de cada comisión se quema, reduciendo el spam y alineando los incentivos con la salud a largo plazo de la red.', + feat3_title: '3. Gobernanza para Empresas', + feat3_desc: 'Con gobernanza estructurada y coordinación de validadores, Xahau proporciona un entorno estable para uso regulado y empresarial, incluyendo cadena de suministro, pagos y cumplimiento normativo.', + feat4_title: '4. Rápido, Verde y Escalable', + feat4_desc: 'Con un eficiente protocolo de consenso, Xahau procesa transacciones rápidamente sin minería, ideal para negocios que necesitan rendimiento y sostenibilidad.', + feat5_title: '5. Control de Tokens y Activos por Diseño', + feat5_desc: 'Las empresas pueden emitir activos o tokens con control granular sobre cómo se usan o transfieren, aplicando reglas automáticamente a nivel de ledger.', + feat_more: 'Descubre más características', + stats_title: 'Estadísticas de la red', + stats_subtitle: 'Xahau en números', + stats_accounts: 'Cuentas', + stats_hooks: 'Hooks instalados', + stats_nodes: 'Nodos', + stats_txs: 'Transacciones/24h', + stats_ledgers: 'Ledgers cerrados', + stats_node_cta: '¿Quieres ejecutar un nodo?', + }, + ja: { + hero_title: 'アカウントベースのプログラマビリティを持つスマートなブロックチェーン', + hero_subtitle: 'スマートコントラクトだけでなく、スマートアカウント。設計上、安価で高速。現実世界のために構築。', + hero_learn: '基礎を学ぶ', + hero_docs: 'ドキュメントを見る', + network_title: 'Xahauネットワーク', + network_subtitle: 'なぜXahauがあなたのビジネスに最適なブロックチェーンなのか?', + feat1_title: '1. スマートコントラクトHooks', + feat1_desc: 'Xahauはアカウント上に直接軽量なスマートコントラクトをサポートし、ユーザーがコントラクトを呼び出すことなく、承認、拒否、またはカスタム動作のための自動ロジックを可能にします。', + feat2_title: '2. 手数料燃焼による低手数料', + feat2_desc: 'Xahauは予測可能な低い取引コストを提供します。各手数料の一部は燃焼され、スパムを減らし、長期的なネットワークの健全性にインセンティブを合わせます。', + feat3_title: '3. エンタープライズ対応ガバナンス', + feat3_desc: '構造化されたガバナンスとバリデーターの調整により、Xahauはサプライチェーン、決済、コンプライアンスアプリケーションを含む規制およびエンタープライズ用途に安定した環境を提供します。', + feat4_title: '4. 高速、グリーン、スケーラブル', + feat4_desc: '効率的なコンセンサスプロトコルにより、Xahauはマイニングなしで高速に取引を処理します。パフォーマンスと持続可能性を必要とするビジネスに最適です。', + feat5_title: '5. 設計によるトークンと資産の制御', + feat5_desc: '企業はトークンや資産をどのように使用または転送されるかについての詳細な制御で発行でき、ルールをレジャーレベルで自動的に適用できます。', + feat_more: 'さらに多くの機能を発見する', + stats_title: 'ネットワーク統計', + stats_subtitle: '数字で見るXahau', + stats_accounts: 'アカウント', + stats_hooks: 'インストール済みHooks', + stats_nodes: 'ノード', + stats_txs: '取引/24時間', + stats_ledgers: '閉鎖済みレジャー', + stats_node_cta: 'ノードを運営したいですか?', + }, + } + + const i = translations[locale] ---
- The Smarter Blockchain with Account-Based Programmability + {i.hero_title}

- Not just smart contracts – smart accounts. Cheap and fast by design. - Built for the real world. + {i.hero_subtitle}

@@ -51,66 +141,36 @@

- The Xahau Network + {i.network_title}

- Why is Xahau the right blockchain for your business? + {i.network_subtitle}

-

- 1. Smart Contract Hooks -

-

- Xahau supports lightweight smart contracts directly on accounts, - enabling automatic logic for approvals, rejections, or custom - behavior without requiring users to call a contract. -

+

{i.feat1_title}

+

{i.feat1_desc}

-

- 2. Low Fees with Fee Burning -

-

- Xahau offers predictable, low transaction costs. A portion of each - fee is burned, reducing spam and aligning incentives with long-term - network health. -

+

{i.feat2_title}

+

{i.feat2_desc}

-

- 3. Enterprise-Ready Governance -

-

- With structured governance and validator coordination, Xahau - provides a stable environment for regulated and enterprise use, - including supply chain, payments, and compliance applications. -

+

{i.feat3_title}

+

{i.feat3_desc}

-

- 4. Fast, Green, and Scalable -

-

- With an efficient consensus protocol, Xahau processes transactions - quickly without mining—ideal for businesses needing performance and - sustainability. -

+

{i.feat4_title}

+

{i.feat4_desc}

-

- 5. Token and Asset Control by Design -

-

- Businesses can issue assets or tokens with fine-grained control over - how they’re used or transferred, enforcing rules automatically at - the ledger level. -

+

{i.feat5_title}

+

{i.feat5_desc}

Discover more features{i.feat_more}
@@ -118,46 +178,36 @@

- Network statistics + {i.stats_title}

- Xahau in numbers + {i.stats_subtitle}

-
-

Accounts

+
+

{i.stats_accounts}

130K+

-
-

Hooks installed

+
+

{i.stats_hooks}

5K+

-
-

Nodes

+
+

{i.stats_nodes}

300+

-
-

Transactions/24h

+
+

{i.stats_txs}

1.5M+

-
-

Ledgers closed

+
+

{i.stats_ledgers}

16M+

Want to run a node?{i.stats_node_cta}
diff --git a/src/pages/es/about.mdx b/src/pages/es/about.mdx new file mode 100644 index 0000000..a2da4b6 --- /dev/null +++ b/src/pages/es/about.mdx @@ -0,0 +1,49 @@ +--- +title: Sobre Xahau +description: ¿Qué es Xahau? El resumen breve +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +
+ +
+
+ +Xahau es una blockchain L1 con una composición única de características y un enfoque innovador sobre la programabilidad blockchain, también conocida como contratos inteligentes. + +La tecnología, probada a largo plazo, liquida transacciones en aproximadamente 4 segundos a costes muy bajos, por fracciones de un centavo de USD. Es escalable, actualmente con hasta 10.000 transacciones por ledger, y es una blockchain inherentemente verde y respetuosa con el medio ambiente. + +Xahau ofrece características nativas para emitir y negociar monedas en el exchange descentralizado integrado, tokens no fungibles nativos, y oportunidades infinitas para DeFi con lógica personalizada a través de los contratos inteligentes de Xahau, conocidos como Hooks. + +Los Hooks residen en cuentas, lo que supone un enfoque innovador sobre cómo se puede usar la lógica personalizada para actuar sobre eventos de cuentas, como recibir transacciones. Los Hooks se desarrollan actualmente en C, pero el soporte para JavaScript ya está desarrollado y en pruebas, con otros lenguajes de programación en perspectiva. Esto pone el mundo de los contratos inteligentes al alcance de millones de desarrolladores, sin una curva de aprendizaje empinada. + + +### ¿Cuál es la tecnología detrás de Xahau? +Xahau es tecnología probada, ya que es una iteración evolucionada del código del XRPL, mejorada con contratos inteligentes, programabilidad basada en cuentas (Hooks), e igual soporte para monedas emitidas en características nativas como garantías y canales de pago. + +Xahau, como el XRPL, utiliza un mecanismo de Consenso Federado como método de validación de transacciones. Las transacciones se confirman mediante un protocolo de consenso, en el que servidores independientes designados llamados validadores alcanzan un acuerdo sobre el orden y el resultado de las transacciones. Todos los servidores de la red procesan cada transacción según las mismas reglas, y cualquier transacción que siga el protocolo se confirma de inmediato. Todas las transacciones son públicas y transparentes, y cualquiera puede operar un validador. + +Xahau introduce un juego de gobernanza para garantizar un enfoque centrado en la comunidad en la toma de decisiones de la red. Para jugar, los miembros de las mesas emiten votos. Los temas discutidos en este sistema de 2 capas de mesas incluyen asientos, hooks y temas de recompensas. + + +## XAH, la moneda nativa de Xahau +La moneda nativa de Xahau se llama XAH y es una moneda inflacionaria. Cada cuenta puede participar en el ajuste de saldo interactuando con un Hook en la cuenta génesis, acumulando mensualmente el 4% del saldo de la cuenta. + +XAH se utiliza para prevenir el spam de red, añadiendo un coste de transacción. Las transacciones normales cuestan fracciones de un XAH, mientras que el precio de transacción aumenta al interactuar con Hooks. XAH también se requiere como saldo bloqueado, o reserva, para poseer una cuenta, poseer objetos o almacenar datos para el consumo de contratos inteligentes. + +Debido a los Hooks, la tasa de quema de XAH es mayor en comparación con la del XRPL. Para los proyectos que dependen de Hooks para lógica personalizada, se recomienda que mantengan un saldo de XAH que pueda generar un ajuste de saldo mensual para pagar las comisiones. + + +## ¿Cuáles han sido los eventos clave para Xahau? +Xahau fue lanzado el 30 de octubre de 2023 por la Xahau Launch Alliance, una alianza interina formada por desarrolladores, organizaciones y proveedores de infraestructura de XRPL de largo plazo, no relacionados con Ripple: XRPL Labs, GateHub Limited, Titanium OU, Evernode Labs Ltd y Digital Governing OU. + +En el primer año, Xahau recibió muchas actualizaciones, como una nueva característica nativa, Remit, en marzo de 2024, mejoras de rendimiento, nodos solo en memoria y soporte para hooks en JavaScript. + +En el primer año, se lanzó el primer servicio de remesas transfronterizas en colaboración entre The Inclusive Financial Technologies Foundation (InFTF) y el Cooperative Bank of Oromia (COOP), uno de los bancos más grandes de Etiopía con más de 13 millones de titulares de cuentas. La solución de remesas entrantes ayuda a la diáspora africana, muchos de los cuales trabajan como trabajadores de cuello azul en todo Oriente Medio, EE.UU. y Europa, a enviar dinero a sus amigos y familiares en Etiopía. Con el servicio, inicialmente lanzado para remesas entrantes usando EUR, cualquiera puede comprar EUR digital, enviarlo a través de blockchain por poco o ningún costo, y liquidarlo en la cuenta bancaria de un familiar o amigo en la moneda local, ETB, en segundos. + +InFTF también firmó un Memorando de Entendimiento con la Unión Africana para avanzar en el trabajo del Fondo de Paz de la UA a través del despliegue de tecnologías financieras innovadoras de vanguardia. Esta colaboración abrirá nuevas vías para las contribuciones, haciendo más fácil y accesible para individuos y organizaciones apoyar iniciativas de paz en África a través del desarrollo de una plataforma de donación fluida que permita contribuciones en múltiples monedas. + +
diff --git a/src/pages/es/connect.mdx b/src/pages/es/connect.mdx new file mode 100644 index 0000000..88bc893 --- /dev/null +++ b/src/pages/es/connect.mdx @@ -0,0 +1,140 @@ +--- +title: Xahau Connect +description: Eventos profesionales de blockchain para debates serios e innovación +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +## Próximos Eventos + +### Curso de Programación Blockchain Non-EVM + +
+
+ 📅 Fecha y hora: Viernes, 27 de febrero de 2026 a las 4:00 PM (16:00) CET +
+
+ 📍 Ubicación: MIL (Madrid Innovation Lab)
+ Calle Bravo Murillo 37-39
+ Madrid, España
+ Ver en Google Maps +
+
+ 🎟️ Registro: Regístrate para asistir en persona usando este [formulario](https://luma.com/hiy3lsdq) +
+
+ +Únete a nosotros para un curso introductorio gratuito sobre programación blockchain en Xahau, diseñado para ayudarte a dar tus primeros pasos en este tipo de tecnología. Este curso presencial de 4 horas se centra en aprender conceptos y herramientas fundamentales a través de ejercicios prácticos. Tanto si eres un desarrollador curioso sobre alternativas Non-EVM, un emprendedor, o alguien sin experiencia previa en blockchain, este curso cubrirá temas desde arquitectura básica y creación de wallets hasta contratos inteligentes en entornos Non-EVM. Idioma: Español e Inglés. + + +
+ +## Eventos Pasados + +### Custodia Institucional de Criptoactivos y Tokenización del Oro + +
+
+ 📅 Fecha y hora: Miércoles, 11 de febrero de 2026 a las 06:30 PM (18:30) CET +
+
+ 📍 Ubicación: MIL (Madrid Innovation Lab)
+ Calle Bravo Murillo 37-39
+ Madrid, España
+ Ver en Google Maps +
+
+ 🎤 Ponentes destacados: +
+
José Ángel Fernández – CEO, Prosegur Crypto
+
+
+
+ 📺 Sesión grabada: Ver online en Madrid Innovation Lab YouTube +
+
+ +Una sesión presencial de Xahau Connect con José Ángel Fernández, CEO de Prosegur Crypto. Esta charla exploró el camino de Prosegur hacia el ecosistema blockchain a través de Prosegur Crypto, cubriendo la custodia institucional de criptoactivos, cómo funcionan estos sistemas desde una perspectiva tecnológica y de seguridad, y los servicios ofrecidos a clientes institucionales. La sesión también abordó la oferta de tokenización del oro de Prosegur Crypto, discutiendo tanto la implementación técnica como el modelo de negocio detrás de la tokenización del oro físico y sus casos de uso reales. + +### Blockchain y Regulación: Europa bajo Escrutinio Legal + +
+
+ 📅 Fecha y hora: Jueves, 4 de diciembre de 2025 a las 6:30 PM (18:30) CET +
+
+ 📍 Ubicación: MIL (Madrid Innovation Lab)
+ Calle Bravo Murillo 37-39
+ Madrid, España
+ Ver en Google Maps +
+
+ 🎤 Ponentes destacados: +
+
Horacio Gómez Rey – Head of Legal Spain, N26
+
Pedro Méndez de Vigo – AVP Legal Europe, Crypto.com
+
+
+
+ 📺 Sesión grabada: Ver online en Madrid Innovation Lab YouTube +
+
+ +Debate en profundidad sobre la regulación blockchain en Europa, con destacados expertos legales de las principales empresas fintech y crypto. Esta sesión exploró el panorama regulatorio en evolución, los desafíos de cumplimiento y el futuro de la blockchain bajo el escrutinio legal europeo. +
+ +## Sobre Xahau Connect + +**Xahau Connect** es una serie de eventos profesionales de blockchain creados por [**INFTF**](https://www.inftf.org) (Inclusive Financial Technology Foundation) para fomentar debates serios y agnósticos sobre la tecnología blockchain y sus aplicaciones en el mundo real. + +Los eventos reúnen a expertos, constructores profesionales, investigadores e innovadores de diversos ecosistemas blockchain para compartir conocimiento, explorar desafíos y colaborar en el avance de la tecnología más allá del hype y la especulación. + +## Nuestra Misión + +En Xahau Connect, nos centramos en: + +
+
Debate Técnico Serio: Conversaciones en profundidad sobre arquitectura blockchain, negocio, oportunidades, regulación, innovación y más temas.
+
Agnosticismo Blockchain: Dando la bienvenida a perspectivas de todos los ecosistemas y tecnologías blockchain.
+
Networking Profesional: Conectando constructores, expertos, desarrolladores, investigadores y líderes de la industria.
+
Aplicaciones del Mundo Real: Enfocándonos en implementaciones prácticas y casos de uso que impulsan la adopción.
+
Intercambio de Conocimiento: Aprendiendo de expertos en diferentes dominios blockchain e industrias.
+
+ +## Quién Debe Asistir + +Los eventos de Xahau Connect están diseñados para: + +
+
Desarrolladores y Constructores Blockchain que trabajan en protocolos, contratos inteligentes, dApps e infraestructura.
+
Arquitectos Técnicos que diseñan soluciones e integraciones blockchain.
+
Investigadores y Académicos que exploran la teoría blockchain, criptografía y sistemas distribuidos.
+
Líderes Empresariales que evalúan blockchain para aplicaciones de negocio.
+
Contribuidores del Ecosistema que construyen herramientas, documentación y recursos comunitarios.
+
Profesionales de la Industria que aplican blockchain en finanzas, cadena de suministro, identidad y otros sectores. Si te tomas en serio la tecnología y su potencial, Xahau Connect es para ti.
+
+
+ +## Ponentes, Patrocinadores y Contacto + +### Cómo Participar + +
+
Propuestas de Ponencias y Consultas de Patrocinio: connect@xahau.org
+
+ +Agradecemos a nuestros socios que apoyan la misión de Xahau Connect de fomentar el discurso profesional sobre blockchain. Los detalles de socios y ponentes se anunciarán a medida que confirmemos la participación para próximos eventos. + + +### Suscríbete para Recibir Actualizaciones + +Para recibir notificaciones sobre próximos eventos de Xahau Connect: + +
+
• Sigue a @XahauNetwork e INFTF en X
+
• Envíanos un email a connect@xahau.org
+
+
+
diff --git a/src/pages/es/contest.mdx b/src/pages/es/contest.mdx new file mode 100644 index 0000000..7e8e64e --- /dev/null +++ b/src/pages/es/contest.mdx @@ -0,0 +1,210 @@ +--- +title: Xahau Dev Contest +description: Ecosystem Rising - Construye servicios de usuario powered by Xahau +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +## Introducción + +¡Bienvenido al **Xahau Dev Contest: Ecosystem Rising**! +Este concurso invita a innovadores a construir **servicios de usuario powered by Xahau** y competir por premios mientras fortalecen el ecosistema Xahau. + +## Premios + +* **3 premios principales en XAH** para los proyectos ganadores. + * **🥇 1er Premio** Valor de 4000 USD en XAH. + * **🥈 2º Premio** Valor de 2000 USD en XAH. + * **🥉 3er Premio** Valor de 1000 USD en XAH. + +## Cronograma + +* **Fecha límite de envío:** 1 de febrero de 2026. +* **Panel de jueces:** 5 miembros de la comunidad Xahau y XRPL (ver más abajo). + + +## Panel de Jueces + +El concurso será evaluado por **cinco miembros de la comunidad**: + +* • [**tequ**](https://x.com/_tequ_) – Desarrollador Blockchain de Xahau +* • [**Robert Kiuru**](https://x.com/robertkiuru) – COO, *XRPL Labs* +* • **[gadget78](https://x.com/gadget78)** – Desarrollador de Evernode +* • [**Andrei Rosseti**](https://x.com/andreirosseti) – Arquitecto de Xahau DocProof | CTO, *EleveCRM* +* • [**Vet**](https://x.com/Vet_X0) – Contribuidor de la comunidad XRPL + +## Tema: Servicios en Xahau + +Los participantes deben construir **servicios basados en web que interactúen con Xahau (Mainnet)** y estén diseñados para el **usuario final**, ya sean usuarios casuales, usuarios avanzados, sector público o sector privado. + +Ejemplos **(sin limitarse a)**: + +
+
+ • Herramientas para usuarios cotidianos: +
+
◦ Paneles de finanzas personales
+
◦ Gestores de wallets
+
◦ Apps comunitarias
+
+
+
+ • Servicios empresariales: +
+
◦ Portales de pago
+
◦ Plataformas de fidelización
+
◦ Herramientas de atención al cliente
+
+
+
+ • Plataformas públicas: +
+
◦ Marketplaces de NFT
+
◦ Sistemas de votación
+
◦ Hubs de donaciones
+
◦ Apps culturales
+
◦ Utilidades para el bien social
+
+
+
+
+ +## Reglas de Participación + +
+
• Puedes enviar tantos proyectos como quieras.
+
• Cada proyecto puede ser enviado por un individuo o un grupo de participantes.
+
• Distintos proyectos del mismo participante o participantes pueden optar a diferentes premios.
+
• Los proyectos deben ejecutarse en la Mainnet de Xahau.
+
+
• Cada proyecto debe ser accesible online, para que tanto los jueces como el público puedan usarlo o verlo.
+
◦ Esto evita que los jueces tengan que instalar o configurar proyectos localmente, y reduce el riesgo de errores inesperados o que se requiera asistencia del participante.
+
+
+
• Cada envío debe incluir documentación básica para ayudar a otros a entender el proyecto.
+
◦ Opcionalmente, también puedes incluir material multimedia (vídeos, diapositivas, demos, etc.) para explicar mejor tu trabajo.
+
+
• Se pueden usar herramientas de IA tanto para el desarrollo como para la documentación.
+
• Si tu proyecto usa Hooks, el código del Hook debe ser de código abierto, para que pueda ser auditado por seguridad y servir como recurso de aprendizaje para la comunidad. Debes adjuntar su código C en tu envío junto con el hash del hook. Consulta la sección "Formato de Envío".
+
• Los proyectos que claramente ofrezcan servicios financieros regulados o que tengan como objetivo actividades ilegales no son elegibles.
+
• Para ser evaluado por los jueces, debes incluir tu envío con un PR como se indica en la sección "Formato de Envío".
+
• Una vez creado el PR de tu envío, publica un tweet en X sobre tu proyecto, etiquetando a @XahauNetwork, para anunciar que has participado en el Xahau Dev Contest.
+
+
+ +## Criterios de Evaluación + +Al revisar los envíos, los jueces valorarán especialmente: + +
+
Originalidad y creatividad de la idea.
+
Ausencia de competidores existentes que ofrezcan el mismo servicio en Xahau Mainnet antes del concurso.
+
Impacto y utilidad para los usuarios finales (individuos, empresas o sector público).
+
Calidad de ejecución (estabilidad, documentación, experiencia de usuario).
+
Uso de Hooks (Smart Contracts en Xahau).
+
+
+ +## Formato de Envío + +Cada proyecto debe incluir una carpeta y al menos un **archivo de envío** dentro del directorio de envíos de **[este repositorio](https://github.com/xahau/xahau-2nd-dev-contest)**. +El archivo y el directorio deben nombrarse con tu nombre de usuario de GitHub seguido del nombre del proyecto, separados por un guión bajo, y usando la extensión .md para el archivo. + +Ejemplo: submissions/NombreGitHub_NombreProyecto/NombreGitHub_NombreProyecto.md + +El archivo debe contener los siguientes campos: + +
+
Título del Proyecto
+
Descripción Breve
+
Participantes (nombres o apodos)
+
Redes Sociales de los Participantes
+
Email de Contacto
+
Enlace al Proyecto Online
+
Dirección Xahau para recibir el premio en caso de ganar
+
Enlace a la Documentación
+
Código de Hooks en C y hash correspondiente (en caso de que tu proyecto use uno o más, para confirmar que es seguro, debes añadir archivos .c en tu carpeta de envío)
+
Cuenta Hooks del proyecto (para confirmar que estás usando los hooks previamente proporcionados para este proyecto)
+
Enlace al Repositorio del Proyecto (opcional)
+
Otros Enlaces (opcional, p.ej., vídeo demo, presentación, diapositivas)
+
+ +Un directorio y archivo de plantilla están disponibles en la carpeta del repositorio, que los participantes pueden usar para rellenar los detalles de su proyecto. +
+ +## Soporte y Comunidad + +Si tienes preguntas o necesitas orientación: + +* Únete al **[Discord de Xahau Builders](https://discord.gg/ds7nb93mYj)**. +* O envíanos un email a **[contests@xahau.org](mailto:contests@xahau.org)**. + +Intentaremos responder lo antes posible. Tus preguntas también pueden añadirse a las FAQ de este README para que otros puedan beneficiarse de las respuestas. + +## Propiedad + +* Todos los proyectos enviados siguen siendo **propiedad de sus creadores originales**. + +## Enlaces Útiles + +Aquí tienes algunos recursos útiles para los desarrolladores de Xahau: + +* [Documentación de Xahau](https://docs.xahau.network) +* [Documentación de Xahau Hooks](https://xahau.network/docs/hooks/) +* [Repositorios GitHub de Xahau](https://github.com/Xahau) +* [Sitio web de Xaman](https://xaman.app) +* [Faucet de Xahau Testnet](https://xahau-test.net/) +* [Discord de Xahau](https://discord.gg/ds7nb93mYj) + +## Resumen: Qué Necesitas Hacer + +
+
• Inspírate. Sé creativo y motivado para construir algo que fortalezca el ecosistema Xahau.
+
• Construye tu proyecto. Desarrolla tu servicio web usando Xahau Mainnet.
+
• Envía tu trabajo, Crea un PR (Pull Request) siguiendo las instrucciones de la sección "Formato de Envío".
+
• Anuncia tu participación. Publica un tweet en X sobre tu proyecto, etiquetando a @XahauNetwork, y comparte que te has unido al Xahau Dev Contest.
+
+
+ +## FAQ + +**P: ¿Puedo enviar más de un proyecto?** +- R: ¡Sí! Puedes enviar tantos como quieras, individualmente o como parte de un grupo. + +**P: ¿Los proyectos tienen que ser de código abierto?** +- R: No, pero deben incluir al menos documentación básica para que los jueces puedan entender cómo funcionan. Si tu proyecto incluye Hooks, debes adjuntar su código C en tu envío junto con el hash del hook. Consulta la sección "Formato de Envío". + +**P: ¿Puedo usar IA para ayudarme a construir o documentar mi proyecto?** +- R: Sí, el uso de IA está completamente permitido. + +**P: ¿Qué tipo de servicios esperáis?** +- R: Cualquier servicio que proporcione **valor a los usuarios finales**, ya sean individuos, empresas o el sector público. Desde marketplaces de NFT y paneles financieros hasta sistemas de votación, apps de pago, hubs de donaciones, o cualquier servicio público/privado innovador. + +**P: ¿Hay alguna ventaja en usar Hooks?** +- R: Sí, los proyectos que implementen creativamente **Hooks (contratos inteligentes en Xahau)** recibirán un reconocimiento especial. + +**P: ¿Qué pasa con mi proyecto después del concurso?** +- R: Conservas la propiedad total. + +**P: ¿Dónde puedo hacer preguntas?** +- R: En el **[Discord de la Comunidad Xahau](https://discord.gg/ds7nb93mYj)** o enviando un email a **[contests@xahau.org](mailto:contests@xahau.org)**. + + +## Aviso Legal Final + +Al participar, aceptas lo siguiente: + +
+
• Los participantes deben cumplir los criterios de elegibilidad y respetar todas las reglas. No está permitido enviar proyectos que ya hayan sido publicados antes del concurso.
+
• Los proyectos siguen siendo propiedad de sus creadores, pero los organizadores se reservan el derecho de mostrar, compartir o destacar los envíos con el crédito apropiado.
+
• Los organizadores se reservan el derecho de descalificar envíos que violen las reglas o comprometan la integridad del concurso. Todas las decisiones del jurado son definitivas y no están sujetas a apelación.
+
• Los organizadores no son responsables de daños, gastos o pérdidas durante la participación. Los organizadores también se reservan el derecho de modificar los requisitos del concurso en cualquier momento si fuera necesario.
+
• Reconoces que pueden aplicarse sanciones y ciertas restricciones jurisdiccionales. La elegibilidad para recibir recompensas puede requerir el cumplimiento de las leyes aplicables, incluida la verificación KYC (Know Your Customer).
+
• Todos los impuestos, tasas u otras obligaciones financieras relacionadas con las recompensas son responsabilidad exclusiva de los participantes.
+
• Si tienes alguna duda o incertidumbre sobre elegibilidad, requisitos u obligaciones fiscales, contáctanos a través de los canales de comunicación proporcionados antes de enviar tu participación.
+
Ahora es tu turno: **¡Construye, envía y muestra tu innovación con la blockchain Xahau!**
+
+
+
diff --git a/src/pages/es/ecosystem.mdx b/src/pages/es/ecosystem.mdx new file mode 100644 index 0000000..6928d6e --- /dev/null +++ b/src/pages/es/ecosystem.mdx @@ -0,0 +1,68 @@ +--- +layout: ../../layouts/PageLayout.astro +title: Ecosistema +description: Xahau alrededor del mundo +--- + +import EcosystemButton from '../../components/EcosystemButton.astro'; +import gatehub from'../../assets/ecosystem-logos/gatehub.png' +import bitrue from'../../assets/ecosystem-logos/bitrue.png' +import bithomp from'../../assets/ecosystem-logos/bithomp.png' +import xahscan from'../../assets/ecosystem-logos/xahscan.png' +import xahau_services from '../../assets/ecosystem-logos/xahau-services.png' +import xrplwin from'../../assets/ecosystem-logos/xrplwin.png' +import xaman from'../../assets/ecosystem-logos/xaman.png' +import dcent from'../../assets/ecosystem-logos/dcent.png' +import bitmart from'../../assets/ecosystem-logos/bitmart.png' +import coinex from'../../assets/ecosystem-logos/coinex.png' + + +## Carteras + +
+ + + + +
+ +## Exchanges + +
+ + + + +
+ +## Exploradores y utilidades + +
+ + + + +
+ +## Proyectos + +
+ + + + + + + + + + + + + + + + + + +
diff --git a/src/pages/es/features.mdx b/src/pages/es/features.mdx new file mode 100644 index 0000000..838ab90 --- /dev/null +++ b/src/pages/es/features.mdx @@ -0,0 +1,89 @@ +--- +title: Características +description: Tecnología probada con un enfoque innovador +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +## Hooks: Lógica de Contrato Inteligente a Nivel de Cuenta + +Xahau introduce los **Hooks**, una forma única de lógica de contrato inteligente on-ledger que se ejecuta directamente a **nivel de cuenta**. A diferencia de los contratos inteligentes en la mayoría de blockchains, que requieren interactuar con direcciones de contratos externas, los Hooks son programas ligeros incrustados dentro de las propias cuentas de usuario. Estos Hooks pueden inspeccionar, modificar o rechazar automáticamente cualquier transacción que involucre esa cuenta, sin necesidad de llamadas a funciones explícitas. + +Dado que los Hooks se ejecutan inline y dentro del consenso, ofrecen programabilidad en tiempo real con una sobrecarga mínima. Esto permite casos de uso potentes como rechazar transferencias de tokens no autorizadas, desencadenar acciones en depósitos, o implementar lógica de cumplimiento normativo, todo sin ralentizar la red. Los Hooks representan un nuevo paradigma de seguridad y programabilidad, haciendo de las cuentas participantes activos en la lógica de transacciones. + +## Control de Tokens y Activos por Diseño + +Xahau otorga a los emisores y usuarios un **control granular sobre tokens y líneas de confianza**. Características como `TrustSet`, `Clawback`, `Freeze` y `Deposit Authorization` permiten una personalización completa de cómo se pueden usar o recibir los tokens. Los activos pueden ser incluidos en listas blancas, bloqueados o quemados, todo ello aplicado a nivel de protocolo. + +Esto hace a Xahau especialmente adecuado para instrumentos financieros regulados, stablecoins, programas de fidelización o cadenas de suministro empresariales: cualquier escenario donde el cumplimiento normativo, la seguridad y la precisión sean críticos. + + +## Juego de Gobernanza: Coordinación Descentralizada con Propósito + +Xahau cuenta con un novedoso sistema de gobernanza respaldado por el **Juego de Gobernanza**, un mecanismo transparente y on-ledger para proponer, revisar y votar enmiendas. Los operadores de validadores (Gobernadores) participan directamente en la configuración del protocolo, compitiendo también en un sistema de recompensas estructurado basado en la responsabilidad y el compromiso. + +Este sistema garantiza que las actualizaciones del protocolo y las decisiones de política sean abiertas y participativas, no dictadas por una entidad centralizada. Combina los beneficios de la coordinación empresarial estructurada con la transparencia y resiliencia del consenso descentralizado. Al gamificar la gobernanza de forma segura y alineada con los incentivos, Xahau establece un nuevo estándar para la coordinación on-chain. + +## Recompensas de Saldo: Rendimiento Pasivo Sin Staking + +Xahau ofrece un sistema de **Recompensas de Saldo** que permite a las cuentas acumular valor pasivamente simplemente manteniendo activos. Estas recompensas se calculan en función del saldo de la cuenta y se distribuyen mediante un mecanismo aplicado por consenso, sin necesidad de staking, delegación ni contratos de terceros. + +El mecanismo está impulsado por lógica a nivel de protocolo y Hooks on-chain, garantizando que las recompensas sean automáticas, justas y sostenibles. A diferencia del yield farming o los sistemas de staking en otras blockchains, el modelo de recompensas de Xahau no requiere que los usuarios bloqueen activos ni persigan complejas estrategias DeFi: funciona de forma nativa, con transparencia y sencillez. + + +## Escrow: Transferencias Condicionales para Cualquier Activo + +Xahau soporta **escrow on-ledger** tanto de tokens nativos como **emitidos**, permitiendo transferencias condicionales seguras para una amplia gama de casos de uso empresariales y financieros. Los fondos o tokens se pueden bloquear con lógica de liberación basada en tiempo o condiciones, aplicada por la propia red. + +Ya sea que estés construyendo un sistema de pago por hitos, liquidación de marketplace, o distribución de tokens de confianza, los escrows de Xahau ofrecen una herramienta simple pero potente, sin necesidad de contratos inteligentes externos. El soporte nativo tanto para activos fungibles como no fungibles en escrow hace de esta una característica excepcionalmente versátil. + +## Remit: Transferencias Nativas entre Cuentas + +La función **Remit** permite transacciones simplificadas y multi-operación entre cuentas, ideal para flujos de pago complejos o de alto volumen. En lugar de enviar múltiples instrucciones separadas, una sola transacción Remit puede distribuir valor a múltiples destinatarios o desencadenar múltiples cambios de saldo de forma atómica. + +Esto mejora la eficiencia y la fiabilidad, especialmente para procesadores de pago, marketplaces o aplicaciones que necesitan realizar operaciones agrupadas. Al estar integrado en el protocolo, Remit garantiza un rendimiento predecible, baja latencia y una sólida trazabilidad. + + +## Bajas Comisiones con Quema de Fees + +Xahau mantiene **comisiones de transacción consistentemente bajas**, con un modelo integrado de **quema de fees** que reduce el spam y premia la salud a largo plazo de la red. Cada transacción paga una comisión mínima en XAH, y una parte de esa comisión se destruye permanentemente, creando un efecto deflacionario con el tiempo. + +Este enfoque desalienta el abuso de la red a la vez que preserva la accesibilidad, especialmente para aplicaciones de alto rendimiento o sensibles al coste. A diferencia de los modelos inflacionarios o las comisiones de tipo subasta, Xahau proporciona previsibilidad y alineación económica para todos los usuarios. + +## Rápido, Verde y Escalable + +Construida sobre una versión refinada del protocolo de consenso del XRPL, Xahau ofrece **finalidad rápida**, bajo consumo de energía y escalabilidad fiable. Las transacciones se confirman en segundos, sin minería y con requisitos mínimos de hardware. El resultado es una red que puede servir casos de uso financieros y empresariales del mundo real sin comprometer el medio ambiente ni la experiencia del usuario. + +La arquitectura de Xahau es ideal para sistemas de pago globales, plataformas de activos tokenizados o aplicaciones de alto volumen donde el rendimiento y la sostenibilidad son innegociables. + + +## URITokens: NFTs Nativos en Xahau + +Los **URITokens** representan el enfoque de Xahau hacia los tokens no fungibles (NFTs), implementados como una parte nativa del ledger en lugar de mediante contratos inteligentes separados. Un URIToken es un objeto on-ledger de primera clase, identificado de forma única por la cuenta emisora y un Identificador de Recurso Uniforme (URI) que típicamente apunta a los metadatos o contenido del token. Solo puede existir un URIToken con un URI dado por cuenta, garantizando la verdadera unicidad de cada activo digital. + +Este estándar NFT integrado significa que los creadores pueden acuñar, intercambiar o quemar NFTs con transacciones simples (por ejemplo, URITokenMint, URITokenBuy, URITokenBurn) sin desplegar código personalizado. El emisor de un URIToken puede incluso permitir que sea destruido (quemado) al establecer un flag, dando flexibilidad en cómo se gestionan los NFTs. Al integrar los NFTs a nivel de protocolo, Xahau hace que la emisión y gestión de coleccionables digitales o credenciales sea más eficiente y segura. + +## Ofertas: Exchange Descentralizado (DEX) Integrado + +Xahau incluye un sistema de **Ofertas** nativo, que impulsa un exchange descentralizado integrado en el ledger. Los usuarios pueden crear entradas de **Oferta** para comprar o vender activos (como tokens o monedas emitidas) directamente en la red, y estas ofertas son emparejadas automáticamente por el libro de órdenes del protocolo. + +Esta función, heredada del DEX del XRPL, permite un entorno de trading dinámico y receptivo donde el intercambio de valor ocurre de igual a igual sin exchanges intermediarios. La capacidad de colocar y cancelar órdenes de trading se proporciona mediante transacciones dedicadas (OfferCreate y OfferCancel). A diferencia de muchas blockchains que requieren contratos inteligentes o plataformas externas para el trading, el DEX de Xahau es una característica de primera clase del ledger. Este exchange on-ledger ofrece liquidación rápida y bajas comisiones, haciendo que el trading de activos sea fluido para usuarios y aplicaciones. + + +## Cheques: Sistema de Pago Diferido + +Xahau soporta **Cheques**, un sistema de pago diferido similar a escribir cheques digitales en la blockchain. Una parte puede emitir un Cheque (promesa de pago) que el destinatario previsto puede cobrar en un momento posterior o cancelar si es necesario. Esta función permite transacciones seguras y flexibles: por ejemplo, una empresa puede emitir un pago que el receptor reclamará cuando se cumplan ciertas condiciones. + +El ledger tiene transacciones dedicadas para crear un cheque, cobrarlo o cancelarlo. Pocas plataformas tienen este tipo de instrumento de pago diferido nativo; el sistema de cheques de Xahau proporciona una capa adicional de control de pagos, todo ello aplicado por las reglas de la red sin necesidad de contratos inteligentes personalizados. + +## Pagos: Transferencias Multi-Activo y Canales + +La funcionalidad de **Pagos** en Xahau está diseñada para facilitar la transferencia rápida y flexible de valor a través de la red. De forma única, Xahau (como el XRPL) soporta *pagos multi-activo* a través de un sistema de líneas de confianza y monedas emitidas. Usando una transacción `TrustSet`, dos partes pueden establecer una línea de confianza para transaccionar en un activo personalizado o IOU, habilitando el soporte integrado para múltiples monedas o tokens sin necesidad de contratos inteligentes. + +Esto significa que las empresas pueden emitir stablecoins o tokens en Xahau y los usuarios pueden enviarlos o intercambiarlos de forma nativa. La suite de Pagos también incluye características avanzadas como **Preautorización de Depósito**, que permite a una cuenta incluir en una lista blanca quién puede enviarle fondos, añadiendo seguridad contra transacciones no deseadas. + +Además, Xahau soporta **canales de pago** para escalabilidad. Los canales de pago permiten a dos partes realizar transacciones rápidas y de alto volumen fuera del ledger y luego liquidar el resultado neto en la blockchain. Con transacciones como PaymentChannelCreate, Fund y Claim, Xahau permite micropagos o pagos en streaming que están asegurados por el ledger pero no lo congestionan. + + diff --git a/src/pages/es/index.mdx b/src/pages/es/index.mdx new file mode 100644 index 0000000..88bca13 --- /dev/null +++ b/src/pages/es/index.mdx @@ -0,0 +1,3 @@ +--- +layout: ../../layouts/IndexLayout.astro +--- diff --git a/src/pages/es/roadmap.mdx b/src/pages/es/roadmap.mdx new file mode 100644 index 0000000..bf3cebd --- /dev/null +++ b/src/pages/es/roadmap.mdx @@ -0,0 +1,69 @@ +--- +title: Hoja de ruta +description: Este año, la Red Xahau tiene previsto recibir potentes actualizaciones en escalabilidad, accesibilidad, seguridad e innovación +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; +import roadmap from '../../assets/roadmap_2025.jpeg' +import { Image } from 'astro:assets'; + + + + +Hoja de ruta de Xahau 2025 + +# H1 2025 + +## 1. Proyecto "L10K" + +Mejorar la eficiencia de la tecnología central para aumentar la capacidad de transacciones a 10.000 transacciones por ledger, mejorando la eficiencia y la seguridad. + +¡Un hito en el rendimiento para el ecosistema Xahau! + +## 2. Mejorar la Monitorización UDP y RPC + +Las funciones de monitorización sin conexión y RPC para los operadores de nodos optimizan el rendimiento y la escalabilidad en toda la red. + +Permite una monitorización pasiva y eficiente de entornos de uno o varios nodos, reduciendo significativamente la sobrecarga. + +## 3. Nuevas Características Finalizadas (Remarks, Touch, Blackhole, DataMonitor) + +Completar el desarrollo e integración de estas características de vanguardia, mejorando la interacción con Xahau tanto para desarrolladores como para usuarios finales a través de productos construidos por desarrolladores. + +## 4. Soporte Completo de Ledger Hardware Wallet para Xahau + +Garantizar transacciones seguras y simplificadas de Xahau con compatibilidad con Ledger Hardware Wallet, abriendo la accesibilidad a Xahau a nivel mundial. + +## 5. Acceso a Exchanges y Plataformas On/Off-Ramp + +Se prevé que Xahau sea más accesible a través de exchanges y plataformas on/off-ramp, apoyando una mayor participación e integración dentro del ecosistema. + +## 6. Soporte para LedgerLive + +Integración de Xahau con Ledger Live, permitiendo un acceso y gestión sencillos mediante el popular producto Ledger Live. + +## 7. Marco Universal de Explicación de Hooks Integrable + +Permitir que cualquier wallet integre fácilmente una explicación clara de la influencia de los Hooks en las transacciones (web, móvil, escritorio) con imágenes claras e integradas para transacciones HookSet, garantizando una adopción más sencilla. + +# H2 2025 + +## 8. Implementación de JavaScript Hooks + +Pendiente de aprobación de auditoría, llevar los Hooks basados en JavaScript y sus herramientas a decenas de millones de desarrolladores de todo el mundo para desarrollar con Xahau lógica avanzada on-chain y capacidades de transacciones programables. + +## 9. Auditorías Completas y Controles de Seguridad + +Completar las auditorías de todas las principales características de 2025 para demostrar la seguridad y estabilidad de la red, proporcionando una garantía verificable al mundo a medida que nos adentramos en 2026. + +## 10. Mejora de la Experiencia de Usuario + +Guiados por los comentarios recibidos, el ecosistema Xahau tiene previsto garantizar una integración y usabilidad fluidas en todas las wallets y aplicaciones. + +## 11. Implementación de Batch + +Habilitar verificaciones eficientes de múltiples transacciones, garantizando que todas o ninguna de las transacciones ocurran, a la vez que se permite a los proveedores de servicios incorporar operaciones específicas del flujo de trabajo de forma fluida en el flujo de transacciones. + +**2025 es el año en que Xahau se vuelve más fácil de acceder, usar, aprovechar y construir, mientras escala de forma más inteligente, rápida y sólida.** + + diff --git a/src/pages/ja/about.mdx b/src/pages/ja/about.mdx new file mode 100644 index 0000000..61c1b0f --- /dev/null +++ b/src/pages/ja/about.mdx @@ -0,0 +1,49 @@ +--- +title: Xahauについて +description: Xahauとは?簡単な説明 +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +
+ +
+
+ +XahauはユニークなL1ブロックチェーンであり、スマートコントラクトとも呼ばれるブロックチェーンプログラマビリティへの革新的なアプローチを持っています。 + +長年にわたって実証された技術は、約4秒で取引を決済し、1 USDセント未満の非常に低いコストで行います。現在、レジャーあたり最大10,000取引でスケーラブルであり、本質的にグリーンで環境に優しいブロックチェーンです。 + +Xahauは、内蔵の分散型取引所での通貨の発行と取引、ネイティブの非代替トークン、そしてHooksとして知られるXahauスマートコントラクトによるカスタムロジックでのDeFiの無限の機会のためのネイティブ機能を提供します。 + +Hooksはアカウントに存在し、取引の受信などのアカウントベースのイベントに対してカスタムロジックを使用する新しいアプローチを提供します。HooksはC言語で開発されていますが、JavaScriptのサポートはすでに開発されテスト中であり、他のプログラミング言語も視野に入っています。これにより、急な学習曲線なしに、何百万人もの開発者にスマートコントラクトの世界が利用可能になります。 + + +### Xahauの背後にある技術は何ですか? +Xahauは実証済みの技術であり、スマートコントラクト、アカウントベースのプログラマビリティ(Hooks)、そしてエスクローやペイメントチャンネルなどのネイティブ機能での発行通貨への等しいサポートで強化されたXRPレジャーコードの進化した反復です。 + +Xahauは、XRPLと同様に、取引を検証する方法として連合コンセンサスメカニズムを使用します。取引は、バリデーターと呼ばれる指定された独立したサーバーが取引の順序と結果について合意するコンセンサスプロトコルを通じて確認されます。ネットワーク内のすべてのサーバーは同じルールに従って各取引を処理し、プロトコルに従う取引はすぐに確認されます。すべての取引は公開かつ透明であり、誰でもバリデーターを運営できます。 + +Xahauはネットワークの意思決定に対するコミュニティ中心のアプローチを確保するためにガバナンスゲームを導入しています。ゲームをプレイするために、テーブルのメンバーは投票を行います。この2層テーブルシステムで議論されるトピックには、席、Hooks、報酬のトピックが含まれます。 + + +## XAH:Xahauのネイティブ通貨 +Xahauのネイティブ通貨はXAHと呼ばれ、インフレ通貨です。すべてのアカウントは、ジェネシスアカウントのHookと対話することで残高調整に参加でき、月々のアカウント残高の4%を積み立てます。 + +XAHは取引コストを追加することでネットワークスパムを防ぐために使用されます。通常の取引はXAHの何分の一かのコストがかかりますが、Hooksと対話する場合は取引価格が上昇します。XAHはまた、アカウントを所有したり、オブジェクトを所有したり、スマートコントラクト消費のためのデータを保存するために、ロックされた残高または準備金として必要です。 + +Hooksのため、XAHの燃焼率はXRPLと比較して高くなっています。カスタムロジックのためにHooksに依存するプロジェクトは、手数料を支払うための月次残高調整を生成できるXAHの残高を維持することをお勧めします。 + + +## Xahauにとって重要なイベントは何でしたか? +Xahauは、非RippleのXRPL開発者、組織、インフラプロバイダーによって形成された暫定的な同盟であるXahau Launch Allianceによって2023年10月30日にローンチされました:XRPL Labs、GateHub Limited、Titanium OU、Evernode Labs Ltd、Digital Governing OU。 + +最初の1年で、Xahauは2024年3月の新しいネイティブ機能Remit、パフォーマンスの改善、メモリのみのノード、JavaScriptフックサポートなど、多くの更新を受けました。 + +最初の1年で、The Inclusive Financial Technologies Foundation(InFTF)とエチオピア最大の銀行の一つで1,300万以上のアカウント保有者を持つCooperative Bank of Oromia(COOP)の協力により、最初の国際送金サービスが開始されました。着信送金ソリューションは、中東、米国、欧州全域でブルーカラー労働者として働くアフリカン・ディアスポラの多くが、エチオピアの友人や家族にお金を送るのを助けます。このサービスは当初EURを使用した着信送金のために開始され、誰でもデジタルEURを購入し、ほぼゼロのコストでブロックチェーン経由で送信し、数秒以内に現地通貨ETBで家族や友人の銀行口座に決済できます。 + +InFTFはまた、最先端の革新的な金融技術の展開を通じてAU平和基金の活動を進めるためにアフリカ連合と覚書を締結しました。この協力は、複数の通貨での寄付を可能にするシームレスな寄付プラットフォームの開発を通じて、個人や組織がアフリカの平和イニシアチブを支援することをより簡単でアクセスしやすくする新しい経路を開きます。 + +
diff --git a/src/pages/ja/connect.mdx b/src/pages/ja/connect.mdx new file mode 100644 index 0000000..b2be38c --- /dev/null +++ b/src/pages/ja/connect.mdx @@ -0,0 +1,132 @@ +--- +title: Xahau Connect +description: 真剣な議論とイノベーションのためのプロフェッショナルなブロックチェーンイベント +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +## 今後のイベント + +### 非EVMブロックチェーンプログラミングコース + +
+
+ 📅 日時: 2026年2月27日(金)午後4時(16:00)CET +
+
+ 📍 場所: MIL(Madrid Innovation Lab)
+ Calle Bravo Murillo 37-39
+ スペイン、マドリード
+ Google マップで見る +
+
+ 🎟️ 登録: このフォームを使用して対面参加登録 +
+
+ +Xahauブロックチェーンプログラミングの無料入門コースにご参加ください。このコースは、このタイプの技術で最初の一歩を踏み出すのを助けるために設計されています。この4時間の対面コースは、実践的な演習を通じて基本的な概念とツールを学ぶことに焦点を当てています。言語:スペイン語・英語。 + + +
+ +## 過去のイベント + +### 暗号資産の機関保管とゴールドトークナイゼーション + +
+
+ 📅 日時: 2026年2月11日(水)午後6時30分(18:30)CET +
+
+ 📍 場所: MIL(Madrid Innovation Lab)
+ Calle Bravo Murillo 37-39
+ スペイン、マドリード +
+
+ 🎤 注目スピーカー: +
+
José Ángel Fernández – CEO、Prosegur Crypto
+
+
+
+ 📺 録画セッション: Madrid Innovation Lab YouTubeでオンライン視聴 +
+
+ +Prosegur CryptoのCEO、**José Ángel Fernández**を迎えた**Xahau Connect**の対面セッション。このトークでは、Prosegur Cryptoを通じたProsegurのブロックチェーンエコシステムへの旅、暗号資産の機関保管、これらのシステムが技術的・セキュリティの観点からどのように機能するか、そして機関クライアントへのサービスについて探りました。 + +### ブロックチェーンと規制:法的審査下のヨーロッパ + +
+
+ 📅 日時: 2025年12月4日(木)午後6時30分(18:30)CET +
+
+ 📍 場所: MIL(Madrid Innovation Lab)
+ Calle Bravo Murillo 37-39
+ スペイン、マドリード +
+
+ 🎤 注目スピーカー: +
+
Horacio Gómez Rey – Head of Legal Spain、N26
+
Pedro Méndez de Vigo – AVP Legal Europe、Crypto.com
+
+
+
+ 📺 録画セッション: Madrid Innovation Lab YouTubeでオンライン視聴 +
+
+ +主要なフィンテックおよび暗号企業の著名な法律専門家を迎えたヨーロッパのブロックチェーン規制に関する詳細な議論。このセッションでは、進化する規制の状況、コンプライアンスの課題、ヨーロッパの法的審査の下でのブロックチェーンの未来を探りました。 +
+ +## Xahau Connectについて + +**Xahau Connect**は、ブロックチェーン技術とその現実世界のアプリケーションについての真剣で不可知論的な議論を育むために[**INFTF**](https://www.inftf.org)(Inclusive Financial Technology Foundation)によって作られたプロフェッショナルなブロックチェーンイベントシリーズです。 + +## 私たちのミッション + +Xahau Connectでは以下に焦点を当てています: + +
+
真剣な技術的議論: ブロックチェーンアーキテクチャ、ビジネス、機会、規制、イノベーションなどについての深い会話。
+
ブロックチェーン非依存主義: すべてのブロックチェーンエコシステムと技術からの視点を歓迎。
+
プロフェッショナルネットワーキング: ビルダー、専門家、開発者、研究者、業界リーダーをつなぐ。
+
現実世界のアプリケーション: 採用を促進する実践的な実装とユースケースに焦点を当てる。
+
知識共有: 異なるブロックチェーンドメインと業界の専門家から学ぶ。
+
+ +## 参加すべき人 + +Xahau Connectのイベントは以下の方々のために設計されています: + +
+
• プロトコル、スマートコントラクト、dApps、インフラに取り組むブロックチェーン開発者とビルダー
+
• ブロックチェーンソリューションと統合を設計するテクニカルアーキテクト
+
• ブロックチェーン理論、暗号学、分散システムを探求する研究者と学者
+
• ビジネスアプリケーションのためのブロックチェーンを評価するエンタープライズリーダー
+
• ツール、ドキュメント、コミュニティリソースを構築するエコシステムコントリビューター
+
+
+ +## スピーカー、スポンサー、お問い合わせ + +### 参加方法 + +
+
講演提案とスポンサー問い合わせ: connect@xahau.org
+
+ +### 更新情報を受け取る + +今後のXahau Connectイベントの通知を受け取るには: + +
+
• XでフォローXで@XahauNetworkINFTFをフォロー
+
connect@xahau.orgにメール
+
+
+
diff --git a/src/pages/ja/contest.mdx b/src/pages/ja/contest.mdx new file mode 100644 index 0000000..80abff6 --- /dev/null +++ b/src/pages/ja/contest.mdx @@ -0,0 +1,165 @@ +--- +title: Xahau Dev Contest +description: Ecosystem Rising - Xahauを活用したユーザー向けサービスを構築 +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +## はじめに + +**Xahau Dev Contest: Ecosystem Rising**へようこそ! +このコンテストは、**Xahauを活用したユーザー向けサービス**を構築するイノベーターを招待し、賞品を競いながらXahauエコシステムを強化するものです。 + +## 賞品 + +* **XAHの主要賞3つ**(受賞プロジェクト向け) + * **🥇 1位** XAH建て4,000 USD相当 + * **🥈 2位** XAH建て2,000 USD相当 + * **🥉 3位** XAH建て1,000 USD相当 + +## スケジュール + +* **提出締切:** 2026年2月1日 +* **審査パネル:** XahauおよびXRPLコミュニティの5名のメンバー(下記参照) + + +## 審査パネル + +コンテストは**5名のコミュニティメンバー**によって評価されます: + +* • [**tequ**](https://x.com/_tequ_) – Xahauブロックチェーン開発者 +* • [**Robert Kiuru**](https://x.com/robertkiuru) – COO、*XRPL Labs* +* • **[gadget78](https://x.com/gadget78)** – Evrenodeデベロッパー +* • [**Andrei Rosseti**](https://x.com/andreirosseti) – Xahau DocProofアーキテクト | CTO、*EleveCRM* +* • [**Vet**](https://x.com/Vet_X0) – XRPLコミュニティコントリビューター + +## テーマ:Xahau上のサービス + +参加者は**Xahau(メインネット)と対話するWebベースのサービス**を構築し、**エンドユーザー**(一般ユーザー、パワーユーザー、公共部門、民間部門)向けに設計する必要があります。 + +例(これらに限りません): + +
+
+ • 日常ユーザーツール: +
+
◦ 個人財務ダッシュボード
+
◦ ウォレットマネージャー
+
◦ コミュニティアプリ
+
+
+
+ • ビジネスサービス: +
+
◦ 決済ポータル
+
◦ ロイヤルティプラットフォーム
+
◦ 顧客サービスツール
+
+
+
+ • 公共プラットフォーム: +
+
◦ NFTマーケットプレイス
+
◦ 投票システム
+
◦ 寄付ハブ
+
◦ 文化アプリ
+
◦ 社会的善のためのユーティリティ
+
+
+
+
+ +## 参加ルール + +
+
好きなだけ多くのプロジェクトを提出できます。
+
• 各プロジェクトは個人またはグループの参加者が提出できます。
+
• プロジェクトはXahauメインネットで動作する必要があります。
+
• 各プロジェクトはオンラインでアクセス可能である必要があります。
+
• 各提出には他の人がプロジェクトを理解するための基本的なドキュメントを含める必要があります。
+
AIツールは開発とドキュメントの両方に使用できます。
+
• プロジェクトがHooksを使用する場合、Hookコードはオープンソースである必要があります。
+
+
+ +## 評価基準 + +提出物をレビューする際、審査員は特に以下を重視します: + +
+
• アイデアの独自性と創造性
+
• コンテスト前にXahauメインネットで同じサービスを提供する既存の競合他社の不在
+
• エンドユーザーへの影響と有用性
+
実行の品質(安定性、ドキュメント、ユーザーエクスペリエンス)
+
Hooksの使用(Xahauのスマートコントラクト)
+
+
+ +## 提出フォーマット + +各プロジェクトは**[このリポジトリ](https://github.com/xahau/xahau-2nd-dev-contest)**のsubmissionsディレクトリ内にフォルダと少なくとも1つの**提出ファイル**を含める必要があります。 + +例:submissions/GitHubName_ProjectName/GitHubName_ProjectName.md + +ファイルには以下のフィールドを含める必要があります: + +
+
プロジェクトタイトル
+
簡単な説明
+
参加者(名前またはニックネーム)
+
参加者のソーシャルメディア
+
連絡先メール
+
オンラインプロジェクトへのリンク
+
賞品受け取り用のXahauアドレス
+
ドキュメントへのリンク
+
CのHooksコードと対応するハッシュ(プロジェクトがHooksを使用する場合)
+
プロジェクトのHooksアカウント
+
プロジェクトのリポジトリへのリンク(任意)
+
その他のリンク(任意)
+
+
+ +## サポートとコミュニティ + +質問や指導が必要な場合: + +* **[Xahau Builders Discord](https://discord.gg/ds7nb93mYj)**に参加してください。 +* または**[contests@xahau.org](mailto:contests@xahau.org)**にメールしてください。 + +## 所有権 + +* 提出されたすべてのプロジェクトは**元の作成者の財産**のままです。 + +## 便利なリンク + +* [Xahauドキュメント](https://docs.xahau.network) +* [Xahau Hooksドキュメント](https://xahau.network/docs/hooks/) +* [XahauのGitHubリポジトリ](https://github.com/Xahau) +* [Xaman Webサイト](https://xaman.app) +* [Xahau Testnetフォーセット](https://xahau-test.net/) +* [Xahau Discord](https://discord.gg/ds7nb93mYj) + + +## FAQ + +**Q: 複数のプロジェクトを提出できますか?** +- A: はい!個人でもグループの一部としても、好きなだけ提出できます。 + +**Q: プロジェクトはオープンソースである必要がありますか?** +- A: いいえ、ただし審査員がどのように機能するかを理解できるように、少なくとも基本的なドキュメントを含める必要があります。 + +**Q: AIを使用してプロジェクトを構築または文書化できますか?** +- A: はい、AIの使用は完全に許可されています。 + +**Q: どのようなサービスを期待していますか?** +- A: 個人、企業、または公共部門のいずれかの**エンドユーザーに価値を提供する**あらゆるサービス。 + +**Q: Hooksを使用することに利点はありますか?** +- A: はい、**Hooks(Xahauのスマートコントラクト)**を創造的に実装したプロジェクトは特別な評価を受けます。 + +**Q: どこで質問できますか?** +- A: **[XahauコミュニティDiscord](https://discord.gg/ds7nb93mYj)**または**[contests@xahau.org](mailto:contests@xahau.org)**にメールしてください。 + +
diff --git a/src/pages/ja/ecosystem.mdx b/src/pages/ja/ecosystem.mdx new file mode 100644 index 0000000..fd1c884 --- /dev/null +++ b/src/pages/ja/ecosystem.mdx @@ -0,0 +1,68 @@ +--- +layout: ../../layouts/PageLayout.astro +title: エコシステム +description: 世界中のXahau +--- + +import EcosystemButton from '../../components/EcosystemButton.astro'; +import gatehub from'../../assets/ecosystem-logos/gatehub.png' +import bitrue from'../../assets/ecosystem-logos/bitrue.png' +import bithomp from'../../assets/ecosystem-logos/bithomp.png' +import xahscan from'../../assets/ecosystem-logos/xahscan.png' +import xahau_services from '../../assets/ecosystem-logos/xahau-services.png' +import xrplwin from'../../assets/ecosystem-logos/xrplwin.png' +import xaman from'../../assets/ecosystem-logos/xaman.png' +import dcent from'../../assets/ecosystem-logos/dcent.png' +import bitmart from'../../assets/ecosystem-logos/bitmart.png' +import coinex from'../../assets/ecosystem-logos/coinex.png' + + +## ウォレット + +
+ + + + +
+ +## 取引所 + +
+ + + + +
+ +## エクスプローラーとユーティリティ + +
+ + + + +
+ +## プロジェクト + +
+ + + + + + + + + + + + + + + + + + +
diff --git a/src/pages/ja/features.mdx b/src/pages/ja/features.mdx new file mode 100644 index 0000000..15706b0 --- /dev/null +++ b/src/pages/ja/features.mdx @@ -0,0 +1,75 @@ +--- +title: 機能 +description: 実証された技術と革新的なアプローチ +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; + + + +## Hooks:アカウントレベルのスマートコントラクトロジック + +Xahauは**Hooks**を導入しています。これは、**アカウントレベル**で直接動作するユニークな形式のオンレジャースマートコントラクトロジックです。外部のコントラクトアドレスとの対話を必要とする他のブロックチェーンのスマートコントラクトとは異なり、Hooksはユーザーアカウント自体に組み込まれた軽量なプログラムです。これらのHooksは、明示的な関数呼び出しなしに、そのアカウントに関わるあらゆる取引を自動的に検査、変更、または拒否することができます。 + +Hooksはインラインかつコンセンサス内で実行されるため、最小限のオーバーヘッドでリアルタイムのプログラマビリティを提供します。これにより、不正なトークン転送の拒否、入金時のアクションのトリガー、コンプライアンスロジックの実装などの強力なユースケースが可能になります。Hooksは新しいセキュリティとプログラマビリティのパラダイムを表し、アカウントをトランザクションロジックのアクティブな参加者にします。 + +## 設計によるトークンと資産の制御 + +Xahauは発行者とユーザーにトークンとトラストラインに対する詳細な**制御**を与えます。`TrustSet`、`Clawback`、`Freeze`、`Deposit Authorization`などの機能により、トークンの使用方法や受け取り方を完全にカスタマイズできます。資産はホワイトリスト化、ブロック、または燃焼させることができ、すべてプロトコルレベルで適用されます。 + +これにより、Xahauは規制された金融商品、ステーブルコイン、ロイヤルティプログラム、エンタープライズサプライチェーンなど、コンプライアンス、安全性、精度が重要なシナリオに特に適しています。 + + +## ガバナンスゲーム:目的を持った分散型調整 + +Xahauは**ガバナンスゲーム**に裏付けられた新しいガバナンスシステムを特徴としています。これは、修正案を提案、審査、投票するための透明でオンレジャーのメカニズムです。バリデーターオペレーター(ガバナー)は、説明責任とエンゲージメントに基づく構造化された報酬システムで競いながら、プロトコルの形成に直接参加します。 + +このシステムにより、プロトコルのアップグレードとポリシー決定が、中央集権的なエンティティによって指示されるのではなく、オープンで参加型になることが保証されます。構造化されたエンタープライズ調整の利点と、分散型コンセンサスの透明性と回復力を組み合わせています。 + +## 残高報酬:ステーキングなしのパッシブ収益 + +Xahauは**残高報酬**システムを提供しており、アカウントが資産を保有するだけで価値を受動的に積み立てることができます。これらの報酬はアカウント残高に基づいて計算され、ステーキング、委任、サードパーティのコントラクトを必要とせず、コンセンサスによって適用されるメカニズムを通じて分配されます。 + +このメカニズムはプロトコルレベルのロジックとオンチェーンHooksによって支えられており、報酬が自動的、公正、持続可能であることを保証します。 + + +## エスクロー:あらゆる資産の条件付き転送 + +Xahauはネイティブおよび**発行済みトークン**の**オンレジャーエスクロー**をサポートし、幅広いビジネスおよび金融ユースケースのための安全な条件付き転送を可能にします。資金またはトークンは、ネットワーク自体によって適用される時間ベースまたは条件ベースのリリースロジックでロックできます。 + +## Remit:ネイティブのクロスアカウント転送 + +**Remit**機能により、アカウント間での合理化されたマルチオペレーション取引が可能になり、複雑または大量の支払いフローに最適です。複数の個別の命令を送信する代わりに、単一のRemit取引が複数の受取人に価値を配布したり、複数の残高変更をアトミックにトリガーしたりできます。 + + +## 手数料燃焼による低手数料 + +Xahauは一貫して**低い取引手数料**を維持し、スパムを減らしてネットワークの長期的な健全性を報酬する組み込みの**手数料燃焼**モデルを持っています。各取引はXAHで最小限の手数料を支払い、その手数料の一部は永久に破壊されます。 + +## 高速、グリーン、スケーラブル + +XRPLのコンセンサスプロトコルの洗練されたバージョンの上に構築されたXahauは、**高速なファイナリティ**、低エネルギー使用量、信頼性の高いスケーラビリティを提供します。取引は数秒で確認され、マイニングなし、最小限のハードウェア要件で行われます。 + + +## URITokens:XahauのネイティブNFT + +**URITokens**は、別のスマートコントラクトを介してではなく、レジャーのネイティブな部分として実装されたXahauの非代替トークン(NFT)へのアプローチを表しています。URITokenは、発行アカウントとトークンのメタデータやコンテンツを通常指すUniform Resource Identifier(URI)によって一意に識別される、ファーストクラスのオンレジャーオブジェクトです。 + +この組み込みNFT標準により、クリエイターはカスタムコードをデプロイすることなく、シンプルな取引(例:URITokenMint、URITokenBuy、URITokenBurn)でNFTをミント、取引、または燃焼させることができます。 + +## オファー:内蔵の分散型取引所(DEX) + +Xahauはネイティブの**オファー**システムを含み、レジャー上の内蔵分散型取引所を動かしています。ユーザーはネットワーク上で直接資産(トークンや発行通貨など)を売買するための**オファー**エントリを作成でき、これらのオファーはプロトコルのオーダーブックによって自動的にマッチングされます。 + + +## チェック:繰延決済システム + +Xahauはブロックチェーン上でデジタル小切手を書くような繰延決済システムである**チェック**をサポートしています。一方が後で現金化するか、必要に応じてキャンセルできるチェック(支払いの約束)を発行できます。 + +## 支払い:マルチアセット転送とチャンネル + +Xahauの**支払い**機能は、ネットワーク全体での価値の高速かつ柔軟な転送を容易にするように設計されています。Xahauはトラストラインと発行通貨のシステムを通じて*マルチアセット支払い*をサポートし、スマートコントラクトを必要とせずに複数の通貨やトークンの組み込みサポートを可能にします。 + +Xahauはまた、スケーラビリティのための**ペイメントチャンネル**をサポートしています。ペイメントチャンネルにより、2者がオフレジャーで高速・大量の取引を行い、その後正味の結果をブロックチェーン上で決済することができます。 + + diff --git a/src/pages/ja/index.mdx b/src/pages/ja/index.mdx new file mode 100644 index 0000000..88bca13 --- /dev/null +++ b/src/pages/ja/index.mdx @@ -0,0 +1,3 @@ +--- +layout: ../../layouts/IndexLayout.astro +--- diff --git a/src/pages/ja/roadmap.mdx b/src/pages/ja/roadmap.mdx new file mode 100644 index 0000000..bf1ff87 --- /dev/null +++ b/src/pages/ja/roadmap.mdx @@ -0,0 +1,69 @@ +--- +title: ロードマップ +description: 今年、Xahauネットワークはスケーラビリティ、アクセシビリティ、セキュリティ、イノベーションにわたる強力なアップデートを予定しています +--- +import PageLayout from '../../layouts/PageLayout.astro'; +import PageSection from '../../components/PageSection.astro'; +import roadmap from '../../assets/roadmap_2025.jpeg' +import { Image } from 'astro:assets'; + + + + +Xahau 2025 ロードマップ + +# H1 2025 + +## 1. プロジェクト「L10K」 + +コア技術の効率を改善し、レジャーあたりの取引容量を10,000トランザクションに増加させ、効率性とセキュリティを向上させます。 + +Xahauエコシステムにとってパフォーマンスのマイルストーン! + +## 2. UDPモニタリングとRPCの改善 + +ノードオペレーター向けのコネクションレスモニタリングとRPC機能により、ネットワーク全体のパフォーマンスとスケーラビリティを最適化します。 + +単一または複数ノード環境の効率的なパッシブモニタリングを可能にし、オーバーヘッドを大幅に削減します。 + +## 3. 新機能の最終化(Remarks、Touch、Blackhole、DataMonitor) + +これらの最先端機能の開発と統合を完成させ、開発者および開発者が構築した製品を通じてエンドユーザーのXahauとの対話を改善します。 + +## 4. XahauのLedgerハードウェアウォレット完全サポート + +Ledgerハードウェアウォレットとの互換性によりXahauの安全で合理的な取引を確保し、世界中でXahauへのアクセシビリティを開きます。 + +## 5. 取引所とOn/Off-Rampアクセス + +Xahauは取引所とOn/Off-Rampプラットフォームを通じてよりアクセスしやすくなり、エコシステム内でのより広範な参加と統合をサポートすることを目指しています。 + +## 6. LedgerLiveサポート + +Ledger LiveとのXahau統合により、人気のLedger Live製品を使用した簡単なアクセスと管理を可能にします。 + +## 7. ユニバーサル埋め込み可能なHook説明フレーム + +HookSet取引の明確な統合されたビジュアルで、Hooksがトランザクションに与える影響の明確な説明を任意のウォレット(ウェブ、モバイル、デスクトップ)に簡単に統合できるようにし、より容易な採用を確保します。 + +# H2 2025 + +## 8. JavaScriptフック実装 + +監査承認待ちで、JavaScriptベースのHooksとツールを世界中の何千万もの開発者にもたらし、高度なオンチェーンロジックとプログラマブルなトランザクション機能のためにXahauを使用した開発を可能にします。 + +## 9. 包括的な監査とセキュリティチェック + +2025年のすべての主要機能の監査を完了し、ネットワークのセキュリティと安定性を示し、2026年に向けて世界に検証可能な保証を提供します。 + +## 10. ユーザーエクスペリエンスの改善 + +フィードバックに導かれ、Xahauエコシステムはすべてのウォレットとアプリケーションにわたるシームレスな統合と使いやすさを確保します。 + +## 11. バッチ実装 + +効率的なマルチトランザクション検証を可能にし、すべてまたは何も取引が発生しないことを確保しながら、サービスプロバイダーがワークフロー固有の操作をトランザクションフローにシームレスに組み込むことを可能にします。 + +**2025年は、Xahauがよりスマートに、より速く、より強くスケールしながら、アクセス、使用、活用、構築がより容易になる年です。** + + From 8c77c26aa4f5bc3a56a97733e0350f70654de362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Fri, 3 Apr 2026 11:35:41 +0200 Subject: [PATCH 02/24] Menu language fix --- src/components/Footer.astro | 16 ++++++++-------- src/components/Header.jsx | 12 ++++++------ src/layouts/IndexLayout.astro | 8 ++++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/Footer.astro b/src/components/Footer.astro index b6e0922..4d05b26 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -62,19 +62,19 @@ {t.features} {t.ecosystem} {t.roadmap} - {t.break} + {t.break} {t.fraud} - {t.media} + {t.media} {t.privacy}

{t.connect}

diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 9b26bbd..e451669 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -85,12 +85,12 @@ export default function Header(props) { ] const docs = [ - { name: t.getstarted, href: '/docs' }, - { name: t.protocol, href: '/docs/protocol-reference/transactions' }, - { name: 'Hooks', href: '/docs/hooks' }, - { name: 'Data APIs', href: '/docs/data-apis' }, - { name: t.infra, href: '/docs/infrastructure/system-requirements' }, - { name: 'Whitepaper', href: '/docs/resources/whitepaper' }, + { name: t.getstarted, href: `${p}/docs` }, + { name: t.protocol, href: `${p}/docs/protocol-reference/transactions` }, + { name: 'Hooks', href: `${p}/docs/hooks` }, + { name: 'Data APIs', href: `${p}/docs/data-apis` }, + { name: t.infra, href: `${p}/docs/infrastructure/system-requirements` }, + { name: 'Whitepaper', href: `${p}/docs/resources/whitepaper` }, ] const explorers = [ diff --git a/src/layouts/IndexLayout.astro b/src/layouts/IndexLayout.astro index 274047a..1b115c1 100644 --- a/src/layouts/IndexLayout.astro +++ b/src/layouts/IndexLayout.astro @@ -40,8 +40,8 @@ }, es: { hero_title: 'La Blockchain Inteligente con Programabilidad Basada en Cuentas', - hero_subtitle: 'No solo contratos inteligentes – cuentas inteligentes. Barato y rápido por diseño. Construido para el mundo real.', - hero_learn: 'Aprende los conceptos básicos', + hero_subtitle: 'No solo contratos inteligentes. Cuentas inteligentes. Barato y rápido por diseño. Construido para el mundo real.', + hero_learn: 'Aprende lo básico', hero_docs: 'Ver documentación', network_title: 'La Red Xahau', network_subtitle: '¿Por qué Xahau es la blockchain adecuada para tu negocio?', @@ -129,7 +129,7 @@ {i.hero_learn} {i.hero_docs} @@ -205,7 +205,7 @@

16M+

{i.stats_node_cta} From 8958dbd70186a5c7b129d47f51b670a48f298a93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Fri, 3 Apr 2026 11:42:58 +0200 Subject: [PATCH 03/24] internal link fix --- .../docs/es/docs/features/amendments.mdx | 22 ++++++------ .../network-features/account-managment.mdx | 10 +++--- .../network-features/balance-rewards.mdx | 4 +-- .../docs/features/network-features/check.mdx | 6 ++-- .../docs/features/network-features/escrow.mdx | 6 ++-- .../docs/features/network-features/hooks.mdx | 4 +-- .../docs/features/network-features/offer.mdx | 4 +-- .../features/network-features/payments.mdx | 12 +++---- .../features/network-features/uritoken.mdx | 10 +++--- .../docs/es/docs/hooks/concepts/chaining.mdx | 18 +++++----- .../es/docs/hooks/concepts/collect-call.mdx | 2 +- .../docs/hooks/concepts/compiling-hooks.mdx | 2 +- .../docs/hooks/concepts/debugging-hooks.mdx | 6 ++-- .../hooks/concepts/emitted-transactions.mdx | 12 +++---- .../hooks/concepts/execution-metadata.mdx | 4 +-- .../concepts/floating-point-numbers-xfl.mdx | 36 +++++++++---------- .../docs/es/docs/hooks/concepts/grants.mdx | 10 +++--- .../docs/es/docs/hooks/concepts/hook-fees.mdx | 6 ++-- .../hooks/concepts/introduction/index.mdx | 2 +- .../hooks/concepts/loops-and-guarding.mdx | 2 +- .../es/docs/hooks/concepts/namespaces.mdx | 14 ++++---- .../es/docs/hooks/concepts/parameters.mdx | 14 ++++---- .../reference-counted-hook-definitions.mdx | 4 +-- .../hooks/concepts/serialized-objects.mdx | 12 +++---- .../hooks/concepts/sethook-transaction.mdx | 6 ++-- .../docs/hooks/concepts/slots-and-keylets.mdx | 20 +++++------ .../docs/hooks/concepts/state-management.mdx | 12 +++---- .../es/docs/hooks/concepts/terminology.mdx | 18 +++++----- .../docs/hooks/concepts/weak-and-strong.mdx | 2 +- .../docs/hooks/functions/control/accept.mdx | 4 +-- .../docs/hooks/functions/control/rollback.mdx | 4 +-- .../developer-defined/cbak-callback.mdx | 2 +- .../functions/developer-defined/hook.mdx | 2 +- .../functions/emitted-transaction/emit-1.mdx | 2 +- .../functions/emitted-transaction/emit.mdx | 2 +- .../emitted-transaction/etxn_burden.mdx | 2 +- .../emitted-transaction/etxn_details.mdx | 2 +- .../emitted-transaction/etxn_fee_base.mdx | 4 +-- .../emitted-transaction/etxn_generation.mdx | 2 +- .../emitted-transaction/etxn_nonce.mdx | 2 +- .../emitted-transaction/etxn_reserve.mdx | 2 +- .../hooks/functions/float/float_compare.mdx | 2 +- .../hooks/functions/float/float_divide.mdx | 2 +- .../hooks/functions/float/float_exponent.mdx | 2 +- .../docs/hooks/functions/float/float_int.mdx | 2 +- .../hooks/functions/float/float_invert.mdx | 2 +- .../docs/hooks/functions/float/float_log.mdx | 2 +- .../hooks/functions/float/float_mantissa.mdx | 2 +- .../hooks/functions/float/float_mulratio.mdx | 2 +- .../hooks/functions/float/float_multiply.mdx | 2 +- .../hooks/functions/float/float_negate.mdx | 2 +- .../docs/hooks/functions/float/float_one.mdx | 2 +- .../docs/hooks/functions/float/float_root.mdx | 2 +- .../docs/hooks/functions/float/float_set.mdx | 2 +- .../docs/hooks/functions/float/float_sign.mdx | 2 +- .../docs/hooks/functions/float/float_sto.mdx | 4 +-- .../hooks/functions/float/float_sto_set.mdx | 4 +-- .../docs/hooks/functions/float/float_sum.mdx | 2 +- .../functions/hook-context/hook_again.mdx | 2 +- .../docs/hooks/functions/ledger/fee_base.mdx | 2 +- .../originating-transaction/meta_slot.mdx | 2 +- .../overview/hook-api-conventions.mdx | 8 ++--- .../functions/serialization/sto_emplace.mdx | 2 +- .../functions/serialization/sto_erase.mdx | 2 +- .../functions/serialization/sto_from_json.mdx | 2 +- .../functions/serialization/sto_subarray.mdx | 2 +- .../functions/serialization/sto_subfield.mdx | 2 +- .../functions/serialization/sto_to_json.mdx | 2 +- .../functions/serialization/sto_validate.mdx | 2 +- .../hooks/functions/utilities/util_keylet.mdx | 2 +- src/content/docs/es/docs/hooks/index.mdx | 4 +-- .../infrastructure/enabling-validation.mdx | 2 +- .../docs/infrastructure/installing-xahaud.mdx | 2 +- .../es/docs/infrastructure/interacting.mdx | 2 +- .../protocol-reference/ledger-data/index.mdx | 10 +++--- .../ledger-data/ledger-objects-types/cron.mdx | 4 +-- .../pseudo-transaction-types/cron.mdx | 10 +++--- .../transaction-types/accountset.mdx | 2 +- .../transaction-types/checkcash.mdx | 2 +- .../transaction-types/checkcreate.mdx | 2 +- .../transaction-types/escrowcreate.mdx | 2 +- .../transaction-types/offercreate.mdx | 4 +-- .../transaction-types/payment.mdx | 4 +-- .../transaction-types/paymentchannelclaim.mdx | 4 +-- .../paymentchannelcreate.mdx | 2 +- .../transaction-types/paymentchannelfund.mdx | 2 +- .../transactions/transaction-types/remit.mdx | 2 +- .../transaction-types/trustset.mdx | 2 +- .../transaction-types/uritokenbuy.mdx | 2 +- .../uritokencreateselloffer.mdx | 2 +- .../transaction-types/uritokenmint.mdx | 2 +- .../docs/es/docs/what-is-different.mdx | 22 ++++++------ 92 files changed, 234 insertions(+), 234 deletions(-) diff --git a/src/content/docs/es/docs/features/amendments.mdx b/src/content/docs/es/docs/features/amendments.mdx index a5cd20a..54c14ff 100644 --- a/src/content/docs/es/docs/features/amendments.mdx +++ b/src/content/docs/es/docs/features/amendments.mdx @@ -63,15 +63,15 @@ Las siguientes enmiendas han sido implementadas o están en proceso de habilitar ##### XahauGenesis -Habilita la cuenta génesis para acuñar XAH y distribuirlo mediante [transacciones GenesisMint](/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn). +Habilita la cuenta génesis para acuñar XAH y distribuirlo mediante [transacciones GenesisMint](/es/docs/protocol-reference/transactions/transaction-types/genesismint-emitted-txn). ##### MultiSign -Habilita la funcionalidad de firma múltiple, permitiendo a las cuentas requerir múltiples firmas para las transacciones. Esta enmienda introduce [transacciones SignerListSet](/docs/protocol-reference/transactions/transaction-types/signerlistset) y [objetos de ledger SignerList](/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list) para soportar la firma múltiple. +Habilita la funcionalidad de firma múltiple, permitiendo a las cuentas requerir múltiples firmas para las transacciones. Esta enmienda introduce [transacciones SignerListSet](/es/docs/protocol-reference/transactions/transaction-types/signerlistset) y [objetos de ledger SignerList](/es/docs/protocol-reference/ledger-data/ledger-objects-types/signers-list) para soportar la firma múltiple. ##### DepositAuth -Habilita la funcionalidad de autorización de depósito, permitiendo a las cuentas requerir preautorización antes de recibir pagos. Esta enmienda introduce [transacciones DepositPreauth](/docs/protocol-reference/transactions/transaction-types/depositpreauth) y [objetos de ledger DepositPreauth](/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth) para gestionar las preautorizaciones. +Habilita la funcionalidad de autorización de depósito, permitiendo a las cuentas requerir preautorización antes de recibir pagos. Esta enmienda introduce [transacciones DepositPreauth](/es/docs/protocol-reference/transactions/transaction-types/depositpreauth) y [objetos de ledger DepositPreauth](/es/docs/protocol-reference/ledger-data/ledger-objects-types/deposit-pre-auth) para gestionar las preautorizaciones. ##### Hooks @@ -83,7 +83,7 @@ Actualizaciones y mejoras al sistema de Hooks. ##### Remit -Implementa [XLS-55](https://github.com/XRPLF/XRPL-Standards/discussions/156). Un nuevo tipo de transacción de pago push simple pero potente de lo-que-ves-es-lo-que-obtienes. Habilita [transacciones Remit](/docs/protocol-reference/transactions/transaction-types/remit) que permiten pagar múltiples monedas y URITokens en la misma transacción al mismo destino. La transacción paga automáticamente para crear líneas de confianza faltantes, paga automáticamente las reservas en tokens transferidos y paga automáticamente para crear la cuenta de destino si no existe. Puede acuñar un recibo o URIToken de bonificación inline dentro de la transacción. Opcionalmente, informar a un Hook de terceros sobre la transacción. Sin pagos parciales ni rutas. +Implementa [XLS-55](https://github.com/XRPLF/XRPL-Standards/discussions/156). Un nuevo tipo de transacción de pago push simple pero potente de lo-que-ves-es-lo-que-obtienes. Habilita [transacciones Remit](/es/docs/protocol-reference/transactions/transaction-types/remit) que permiten pagar múltiples monedas y URITokens en la misma transacción al mismo destino. La transacción paga automáticamente para crear líneas de confianza faltantes, paga automáticamente las reservas en tokens transferidos y paga automáticamente para crear la cuenta de destino si no existe. Puede acuñar un recibo o URIToken de bonificación inline dentro de la transacción. Opcionalmente, informar a un Hook de terceros sobre la transacción. Sin pagos parciales ni rutas. ##### ZeroB2M @@ -91,7 +91,7 @@ Deshabilita la ruta burn-to-mint para XRP a XAH. El comportamiento normal de la ##### Remarks -La enmienda Remarks permite almacenar pares clave-valor (similares al estado de hooks) por los propietarios de objetos en esos objetos. Esto es análogo a dar vuelta un documento y escribir una nota a mano en él. Los Remarks pueden ser cualquier cosa y significar cosas diferentes para distintas partes. Los Remarks también pueden establecerse como inmutables. Los Remarks siguen a un objeto a través de cambios de propiedad y pueden usarse para lograr casos de uso novedosos como NFTs dinámicos y simplificar algunas operaciones de estado de hooks que de otro modo serían muy complicadas. Habilita [transacciones SetRemarks](/docs/protocol-reference/transactions/transaction-types/setremarks). +La enmienda Remarks permite almacenar pares clave-valor (similares al estado de hooks) por los propietarios de objetos en esos objetos. Esto es análogo a dar vuelta un documento y escribir una nota a mano en él. Los Remarks pueden ser cualquier cosa y significar cosas diferentes para distintas partes. Los Remarks también pueden establecerse como inmutables. Los Remarks siguen a un objeto a través de cambios de propiedad y pueden usarse para lograr casos de uso novedosos como NFTs dinámicos y simplificar algunas operaciones de estado de hooks que de otro modo serían muy complicadas. Habilita [transacciones SetRemarks](/es/docs/protocol-reference/transactions/transaction-types/setremarks). ##### Touch @@ -99,11 +99,11 @@ Esta enmienda garantiza que todas las cuentas involucradas en una transacción ( ##### HookCanEmit -Esta enmienda añade un nuevo campo a los objetos HookSet: `HookCanEmit` es sintácticamente idéntico al campo `HookOn`, excepto que controla qué tipos de transacciones el Hook tiene permitido emitir en lugar de qué tipos de transacciones activan el hook. Tenga en cuenta que usa la misma semántica activo-bajo que `HookOn` con `SetHook` siendo activo-alto. Sin embargo, si el campo está ausente, se toma como que el Hook puede emitir cualquier transacción incluyendo `SetHook`. Añade el campo `HookCanEmit` a los objetos [HookDefinition](/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition). +Esta enmienda añade un nuevo campo a los objetos HookSet: `HookCanEmit` es sintácticamente idéntico al campo `HookOn`, excepto que controla qué tipos de transacciones el Hook tiene permitido emitir en lugar de qué tipos de transacciones activan el hook. Tenga en cuenta que usa la misma semántica activo-bajo que `HookOn` con `SetHook` siendo activo-alto. Sin embargo, si el campo está ausente, se toma como que el Hook puede emitir cualquier transacción incluyendo `SetHook`. Añade el campo `HookCanEmit` a los objetos [HookDefinition](/es/docs/protocol-reference/ledger-data/ledger-objects-types/hook-definition). ##### Clawback -Habilita [transacciones Clawback](/docs/protocol-reference/transactions/transaction-types/clawback) que permiten a los emisores revocar tokens que fueron previamente emitidos por su cuenta. Esta es una característica portada desde XRPL. _(Introducida en 2025.7.9-release+1951)_ +Habilita [transacciones Clawback](/es/docs/protocol-reference/transactions/transaction-types/clawback) que permiten a los emisores revocar tokens que fueron previamente emitidos por su cuenta. Esta es una característica portada desde XRPL. _(Introducida en 2025.7.9-release+1951)_ ##### DeepFreeze @@ -111,15 +111,15 @@ Habilita la funcionalidad de congelamiento profundo para líneas de confianza y ##### IOUIssuerWeakTSH -Convierte a los emisores de IOU en partes interesadas transaccionales (TSH) débiles en ciertos tipos de transacciones. Garantiza que los Emisores de Moneda tengan sus hooks ejecutados en transacciones de terceros que toquen o mencionen su moneda, si han optado por la ejecución débil. Consulte [Débil y Fuerte](/docs/hooks/concepts/weak-and-strong) para más detalles. _(Introducida en 2025.7.9-release+1951)_ +Convierte a los emisores de IOU en partes interesadas transaccionales (TSH) débiles en ciertos tipos de transacciones. Garantiza que los Emisores de Moneda tengan sus hooks ejecutados en transacciones de terceros que toquen o mencionen su moneda, si han optado por la ejecución débil. Consulte [Débil y Fuerte](/es/docs/hooks/concepts/weak-and-strong) para más detalles. _(Introducida en 2025.7.9-release+1951)_ ##### Cron -Habilita la ejecución programada de Hooks mediante [transacciones CronSet](/docs/protocol-reference/transactions/transaction-types/cronset) y [objetos de ledger Cron](/docs/protocol-reference/ledger-data/ledger-objects-types/cron). Esta característica permite a los Hooks programar una serie de auto-invocaciones futuras (similar a un cronjob en sistemas Linux) que puede ayudar a los desarrolladores de Hooks a escribir estructuras de gobernanza complejas, juegos y más. El número máximo de repeticiones es 256, sin embargo emitir una transacción `CronSet` adicional puede extender esto una vez que el número de repeticiones cruce un umbral mínimo deseado. _(Introducida en 2025.10.27-release+2405)_ +Habilita la ejecución programada de Hooks mediante [transacciones CronSet](/es/docs/protocol-reference/transactions/transaction-types/cronset) y [objetos de ledger Cron](/es/docs/protocol-reference/ledger-data/ledger-objects-types/cron). Esta característica permite a los Hooks programar una serie de auto-invocaciones futuras (similar a un cronjob en sistemas Linux) que puede ayudar a los desarrolladores de Hooks a escribir estructuras de gobernanza complejas, juegos y más. El número máximo de repeticiones es 256, sin embargo emitir una transacción `CronSet` adicional puede extender esto una vez que el número de repeticiones cruce un umbral mínimo deseado. _(Introducida en 2025.10.27-release+2405)_ ##### ExtendedHookState -Extiende las capacidades de gestión del estado de Hooks, incluyendo el campo `HookStateScale` para objetos [AccountRoot](/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot) para controlar cuándo las entradas de estado de Hook quedan obsoletas. Esta característica expande la cantidad de datos que los Hooks pueden almacenar en su estado (sistema clave-valor para Hooks) para permitir a los Hooks un almacenamiento de datos más rico cuando lo necesiten. La escala (hasta 16) afecta tanto al tamaño máximo del valor que puede almacenar en un único estado de hook, como al número de unidades de reserva que ese par k-v consume. Una escala de 1 (predeterminada) significa que paga 1 reserva por hasta 256 bytes almacenados por estado de Hook. Una escala de 4 significa que paga 4 unidades de reserva por hasta 1024 bytes por estado de Hook. Es importante tener en cuenta que paga esta tasa (la tasa de escala) incluso si todos sus estados de Hook contienen solo un byte. Es posible aumentar la escala después de que su Hook ya tenga estado almacenado, pero no disminuirla. Disminuir la escala requiere que primero se eliminen todos los HookState. _(Introducida en 2025.10.27-release+2405)_ +Extiende las capacidades de gestión del estado de Hooks, incluyendo el campo `HookStateScale` para objetos [AccountRoot](/es/docs/protocol-reference/ledger-data/ledger-objects-types/accountroot) para controlar cuándo las entradas de estado de Hook quedan obsoletas. Esta característica expande la cantidad de datos que los Hooks pueden almacenar en su estado (sistema clave-valor para Hooks) para permitir a los Hooks un almacenamiento de datos más rico cuando lo necesiten. La escala (hasta 16) afecta tanto al tamaño máximo del valor que puede almacenar en un único estado de hook, como al número de unidades de reserva que ese par k-v consume. Una escala de 1 (predeterminada) significa que paga 1 reserva por hasta 256 bytes almacenados por estado de Hook. Una escala de 4 significa que paga 4 unidades de reserva por hasta 1024 bytes por estado de Hook. Es importante tener en cuenta que paga esta tasa (la tasa de escala) incluso si todos sus estados de Hook contienen solo un byte. Es posible aumentar la escala después de que su Hook ya tenga estado almacenado, pero no disminuirla. Disminuir la escala requiere que primero se eliminen todos los HookState. _(Introducida en 2025.10.27-release+2405)_ #### Enmiendas de Corrección de Errores @@ -153,7 +153,7 @@ Enmienda de corrección de errores del 11 de septiembre de 2024. ##### fixFloatDivide -Corrige problemas con las operaciones de división de punto flotante en Hooks. Esta enmienda garantiza el manejo adecuado de la división por cero y los casos extremos en la función `float_divide`. Cambia el comportamiento de la API de hook `float_divide` para corregir un pequeño error. Esta enmienda está configurada para votar: _sí_ por defecto. Consulte [float_divide](/docs/hooks/functions/float/float_divide) para más detalles. _(Introducida en 2024.11.18-release+1141)_ +Corrige problemas con las operaciones de división de punto flotante en Hooks. Esta enmienda garantiza el manejo adecuado de la división por cero y los casos extremos en la función `float_divide`. Cambia el comportamiento de la API de hook `float_divide` para corregir un pequeño error. Esta enmienda está configurada para votar: _sí_ por defecto. Consulte [float_divide](/es/docs/hooks/functions/float/float_divide) para más detalles. _(Introducida en 2024.11.18-release+1141)_ ##### fixReduceImport diff --git a/src/content/docs/es/docs/features/network-features/account-managment.mdx b/src/content/docs/es/docs/features/network-features/account-managment.mdx index 63b1807..b2b8c64 100644 --- a/src/content/docs/es/docs/features/network-features/account-managment.mdx +++ b/src/content/docs/es/docs/features/network-features/account-managment.mdx @@ -13,25 +13,25 @@ Esto incluye varios tipos de transacciones que permiten a los usuarios realizar El tipo de transacción `AccountSet` permite a los usuarios modificar las propiedades de sus cuentas. Esto incluye configuraciones como la tasa de transferencia, las banderas de cuenta y más. - + + + + + + + + + + + + + + + + + + + + + + + + + + + +hook_again

| Gratis (ya pagado durante la ejecución fuerte). | +|

Again As Weak
- Ocurre cuando un Hook ejecutado de forma fuerte llama a etxn_generation.

| Este campo realiza el seguimiento de la cadena de transacciones emitidas que generan otras transacciones. | -| sfEmitBurden |

Si la Transacción Originaria es una transacción emitida, entonces su burden multiplicado por el número máximo de transacciones que el Hook ha declarado emitir mediante etxn_reserve.

Si no lo es, entonces 1.

Debe establecerse usando etxn_burden.

| Este campo sirve como heurística para detectar ataques tipo fork bomb. Las comisiones aumentan exponencialmente en cadenas de emisión para evitar la saturación de la red. | +| sfEmitGeneration |

Si la Transacción Originaria es una transacción emitida, entonces uno más que su sfEmitGeneration.

Si no lo es, entonces 1.

Debe establecerse usando etxn_reserve.

Si no lo es, entonces 1.

Debe establecerse usando diff --git a/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx b/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx index 4d5207e..165702c 100644 --- a/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx +++ b/src/content/docs/es/docs/hooks/concepts/execution-metadata.mdx @@ -13,6 +13,6 @@ Cuando los Hooks se ejecutan, dejan información sobre el estado de esa ejecuci | sfHookReturnCode | El entero devuelto como tercer parámetro de `accept` o `rollback`. | | sfHookReturnString | La cadena devuelta en los dos primeros parámetros de `accept` o `rollback`, si existe. | | sfHookInstructionCount | El número total de instrucciones de WebAssembly ejecutadas durante la ejecución del Hook. | -| sfHookEmitCount | El número total de [Transacciones emitidas](/docs/hooks/concepts/emitted-transactions) producidas por el Hook. | +| sfHookEmitCount | El número total de [Transacciones emitidas](/es/docs/hooks/concepts/emitted-transactions) producidas por el Hook. | | sfHookExecutionIndex | El orden en el que se ejecutó el Hook (en relación con otras ejecuciones de Hooks en la misma Transacción Originaria). | -| sfHookStateChangeCount | El número de cambios de [estado del Hook](/docs/hooks/concepts/state-management) realizados durante la ejecución. | \ No newline at end of file +| sfHookStateChangeCount | El número de cambios de [estado del Hook](/es/docs/hooks/concepts/state-management) realizados durante la ejecución. | \ No newline at end of file diff --git a/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx b/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx index 7307713..7e1e728 100644 --- a/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx +++ b/src/content/docs/es/docs/hooks/concepts/floating-point-numbers-xfl.mdx @@ -8,7 +8,7 @@ import { Aside } from '@astrojs/starlight/components'; Los [números de punto flotante](https://en.wikipedia.org/wiki/Floating-point_arithmetic) se utilizan ampliamente en informática para realizar cálculos de precisión finita pero escala arbitraria. -La mayoría de las CPUs modernas son capaces de realizar operaciones rápidas de punto flotante utilizando el [estándar IEEE de punto flotante binario](https://en.wikipedia.org/wiki/Double-precision_floating-point_format), sin embargo `xahaud` **no** utiliza este formato. En su lugar, Xahau utiliza un [estándar decimal de punto flotante personalizado](/docs/protocol-reference/binary-format). +La mayoría de las CPUs modernas son capaces de realizar operaciones rápidas de punto flotante utilizando el [estándar IEEE de punto flotante binario](https://en.wikipedia.org/wiki/Double-precision_floating-point_format), sin embargo `xahaud` **no** utiliza este formato. En su lugar, Xahau utiliza un [estándar decimal de punto flotante personalizado](/es/docs/protocol-reference/binary-format). Este formato personalizado tiene tres propiedades básicas: @@ -50,26 +50,26 @@ Una vez que tienes un XFL, puedes usar la API de Float para realizar distintos c | Hook API | Qué hace | | ----------------------------------------------------------------------- | ----------------------------------------------------------------- | -| [float_set](/docs/hooks/functions/float/float_set) | Crear un float a partir de un exponente y una mantisa | -| [float_multiply](/docs/hooks/functions/float/float_multiply) | Multiplicar dos números XFL | -| [float_mulratio](/docs/hooks/functions/float/float_mulratio) | Multiplicar un XFL por un numerador y denominador no-XFL | -| [float_negate](/docs/hooks/functions/float/float_negate) | Negar un número de punto flotante XFL | -| [float_compare](/docs/hooks/functions/float/float_compare) | Comparar dos números XFL | -| [float_sum](/docs/hooks/functions/float/float_sum) | Sumar dos números XFL | -| [float_sto](/docs/hooks/functions/float/float_sto) | Convertir un XFL en un objeto serializado | -| [float_sto_set](/docs/hooks/functions/float/float_sto_set) | Leer una cantidad serializada en un XFL | -| [float_invert](/docs/hooks/functions/float/float_invert) | Calcular el inverso de un XFL | -| [float_divide](/docs/hooks/functions/float/float_divide) | Dividir un XFL entre otro XFL | -| [float_one](/docs/hooks/functions/float/float_one) | Devolver el número 1 como XFL | -| [float_exponent](/docs/hooks/functions/float/float_exponent) | Obtener el exponente de un XFL | -| [float_mantissa](/docs/hooks/functions/float/float_mantissa) | Obtener la mantisa de un XFL | -| [float_sign](/docs/hooks/functions/float/float_sign) | Obtener el signo de un XFL | +| [float_set](/es/docs/hooks/functions/float/float_set) | Crear un float a partir de un exponente y una mantisa | +| [float_multiply](/es/docs/hooks/functions/float/float_multiply) | Multiplicar dos números XFL | +| [float_mulratio](/es/docs/hooks/functions/float/float_mulratio) | Multiplicar un XFL por un numerador y denominador no-XFL | +| [float_negate](/es/docs/hooks/functions/float/float_negate) | Negar un número de punto flotante XFL | +| [float_compare](/es/docs/hooks/functions/float/float_compare) | Comparar dos números XFL | +| [float_sum](/es/docs/hooks/functions/float/float_sum) | Sumar dos números XFL | +| [float_sto](/es/docs/hooks/functions/float/float_sto) | Convertir un XFL en un objeto serializado | +| [float_sto_set](/es/docs/hooks/functions/float/float_sto_set) | Leer una cantidad serializada en un XFL | +| [float_invert](/es/docs/hooks/functions/float/float_invert) | Calcular el inverso de un XFL | +| [float_divide](/es/docs/hooks/functions/float/float_divide) | Dividir un XFL entre otro XFL | +| [float_one](/es/docs/hooks/functions/float/float_one) | Devolver el número 1 como XFL | +| [float_exponent](/es/docs/hooks/functions/float/float_exponent) | Obtener el exponente de un XFL | +| [float_mantissa](/es/docs/hooks/functions/float/float_mantissa) | Obtener la mantisa de un XFL | +| [float_sign](/es/docs/hooks/functions/float/float_sign) | Obtener el signo de un XFL | | float_exponent_set | Establecer el exponente de un XFL | | float_mantissa_set | Establecer la mantisa de un XFL | | float_sign_set | Establecer el signo de un XFL | -| [float_int](/docs/hooks/functions/float/float_int) | Convertir un XFL a entero (redondeo hacia abajo) | -| [float_root](/docs/hooks/functions/float/float_root) | Calcular la raíz n-ésima de un XFL | -| [float_log](/docs/hooks/functions/float/float_log) | Calcular el logaritmo decimal de un XFL | +| [float_int](/es/docs/hooks/functions/float/float_int) | Convertir un XFL a entero (redondeo hacia abajo) | +| [float_root](/es/docs/hooks/functions/float/float_root) | Calcular la raíz n-ésima de un XFL | +| [float_log](/es/docs/hooks/functions/float/float_log) | Calcular el logaritmo decimal de un XFL |

-

Xahau

+

+ Xahau +

{t.about} {t.features} {t.ecosystem} @@ -68,7 +102,9 @@ {t.privacy}
-

{t.docs}

+

+ {t.docs} +

{t.getstarted} {t.protocol} Hooks @@ -77,12 +113,16 @@ Whitepaper
-

{t.connect}

+

+ {t.connect} +

{t.events} Dev Contest X GitHub - {t.discord} + {t.discord}
diff --git a/src/components/Header.jsx b/src/components/Header.jsx index e451669..c8aed53 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -31,25 +31,46 @@ const languages = [ const nav = { en: { - about: 'About', features: 'Features', ecosystem: 'Ecosystem', - roadmap: 'Roadmap', docs: 'Documentation', connect: 'Connect', - explorers: 'Explorers', events: 'Events', - getstarted: 'Get started', protocol: 'Protocol Reference', - infra: 'Infrastructure', discord: 'Community Discord', + about: 'About', + features: 'Features', + ecosystem: 'Ecosystem', + roadmap: 'Roadmap', + docs: 'Documentation', + connect: 'Connect', + explorers: 'Explorers', + events: 'Events', + getstarted: 'Get started', + protocol: 'Protocol Reference', + infra: 'Infrastructure', + discord: 'Community Discord', }, es: { - about: 'Acerca de', features: 'Características', ecosystem: 'Ecosistema', - roadmap: 'Hoja de ruta', docs: 'Documentación', connect: 'Conectar', - explorers: 'Exploradores', events: 'Eventos', - getstarted: 'Primeros pasos', protocol: 'Referencia de Protocolo', - infra: 'Infraestructura', discord: 'Discord de la Comunidad', + about: 'Acerca de', + features: 'Características', + ecosystem: 'Ecosistema', + roadmap: 'Hoja de ruta', + docs: 'Documentación', + connect: 'Conectar', + explorers: 'Exploradores', + events: 'Eventos', + getstarted: 'Primeros pasos', + protocol: 'Referencia de Protocolo', + infra: 'Infraestructura', + discord: 'Discord de la Comunidad', }, ja: { - about: 'Xahauについて', features: '機能', ecosystem: 'エコシステム', - roadmap: 'ロードマップ', docs: 'ドキュメント', connect: 'コネクト', - explorers: 'エクスプローラー', events: 'イベント', - getstarted: 'はじめる', protocol: 'プロトコルリファレンス', - infra: 'インフラストラクチャ', discord: 'コミュニティDiscord', + about: 'Xahauについて', + features: '機能', + ecosystem: 'エコシステム', + roadmap: 'ロードマップ', + docs: 'ドキュメント', + connect: 'コネクト', + explorers: 'エクスプローラー', + events: 'イベント', + getstarted: 'はじめる', + protocol: 'プロトコルリファレンス', + infra: 'インフラストラクチャ', + discord: 'コミュニティDiscord', }, } @@ -71,7 +92,7 @@ export default function Header(props) { function langUrl(code) { const prefix = currentLocale !== 'en' ? `/${currentLocale}` : '' - const basePath = prefix ? (pathname.slice(prefix.length) || '/') : pathname + const basePath = prefix ? pathname.slice(prefix.length) || '/' : pathname if (code === 'en') return basePath return basePath === '/' ? `/${code}` : `/${code}${basePath}` } @@ -111,9 +132,12 @@ export default function Header(props) { ] const pathSegments = pathname.slice(1).split('/') - const activeSegment = LOCALES.includes(pathSegments[0]) ? pathSegments[1] : pathSegments[0] + const activeSegment = LOCALES.includes(pathSegments[0]) + ? pathSegments[1] + : pathSegments[0] - const dropdownItemClass = 'group relative flex items-center gap-x-6 p-2 text-sm/6' + const dropdownItemClass = + 'group relative flex items-center gap-x-6 p-2 text-sm/6' return (
@@ -138,7 +162,8 @@ export default function Header(props) { {/* Desktop navigation */} {navItems.map((navItem) => { - const isActive = navItem.urlPattern && activeSegment === navItem.urlPattern + const isActive = + navItem.urlPattern && activeSegment === navItem.urlPattern if (navItem.href) { return ( {navItem.name} - ))}
@@ -211,7 +246,11 @@ export default function Header(props) { {/* Mobile menu */} - +
@@ -229,7 +268,8 @@ export default function Header(props) {
{navItems.map((navItem) => { - const isActive = navItem.urlPattern && activeSegment === navItem.urlPattern + const isActive = + navItem.urlPattern && activeSegment === navItem.urlPattern if (navItem.href) { return ( {navItem.name} - ))} diff --git a/src/i18n/indexTranslations.ts b/src/i18n/indexTranslations.ts new file mode 100644 index 0000000..bc87306 --- /dev/null +++ b/src/i18n/indexTranslations.ts @@ -0,0 +1,107 @@ +export const indexTranslations = { + en: { + hero_title: 'The Smarter Blockchain with Account-Based Programmability', + hero_subtitle: + 'Not just smart contracts – smart accounts. Cheap and fast by design. Built for the real world.', + hero_learn: 'Learn the basics', + hero_docs: 'View docs', + network_title: 'The Xahau Network', + network_subtitle: 'Why is Xahau the right blockchain for your business?', + feat1_title: '1. Smart Contract Hooks', + feat1_desc: + 'Xahau supports lightweight smart contracts directly on accounts, enabling automatic logic for approvals, rejections, or custom behavior without requiring users to call a contract.', + feat2_title: '2. Low Fees with Fee Burning', + feat2_desc: + 'Xahau offers predictable, low transaction costs. A portion of each fee is burned, reducing spam and aligning incentives with long-term network health.', + feat3_title: '3. Enterprise-Ready Governance', + feat3_desc: + 'With structured governance and validator coordination, Xahau provides a stable environment for regulated and enterprise use, including supply chain, payments, and compliance applications.', + feat4_title: '4. Fast, Green, and Scalable', + feat4_desc: + 'With an efficient consensus protocol, Xahau processes transactions quickly without mining—ideal for businesses needing performance and sustainability.', + feat5_title: '5. Token and Asset Control by Design', + feat5_desc: + "Businesses can issue assets or tokens with fine-grained control over how they're used or transferred, enforcing rules automatically at the ledger level.", + feat_more: 'Discover more features', + stats_title: 'Network statistics', + stats_subtitle: 'Xahau in numbers', + stats_accounts: 'Accounts', + stats_hooks: 'Hooks installed', + stats_nodes: 'Nodes', + stats_txs: 'Transactions/24h', + stats_ledgers: 'Ledgers closed', + stats_node_cta: 'Want to run a node?', + }, + es: { + hero_title: + 'La Blockchain Inteligente con Programabilidad Basada en Cuentas', + hero_subtitle: + 'No solo contratos inteligentes. Cuentas inteligentes. Barato y rápido por diseño. Construido para el mundo real.', + hero_learn: 'Aprende lo básico', + hero_docs: 'Ver documentación', + network_title: 'La Red Xahau', + network_subtitle: + '¿Por qué Xahau es la blockchain adecuada para tu negocio?', + feat1_title: '1. Smart Contract Hooks', + feat1_desc: + 'Xahau soporta contratos inteligentes ligeros directamente en cuentas, permitiendo lógica automática para aprobaciones, rechazos o comportamiento personalizado sin que los usuarios necesiten llamar a un contrato.', + feat2_title: '2. Bajas Comisiones con Quema de Fees', + feat2_desc: + 'Xahau ofrece costes de transacción predecibles y bajos. Una parte de cada comisión se quema, reduciendo el spam y alineando los incentivos con la salud a largo plazo de la red.', + feat3_title: '3. Gobernanza para Empresas', + feat3_desc: + 'Con gobernanza estructurada y coordinación de validadores, Xahau proporciona un entorno estable para uso regulado y empresarial, incluyendo cadena de suministro, pagos y cumplimiento normativo.', + feat4_title: '4. Rápido, Verde y Escalable', + feat4_desc: + 'Con un eficiente protocolo de consenso, Xahau procesa transacciones rápidamente sin minería, ideal para negocios que necesitan rendimiento y sostenibilidad.', + feat5_title: '5. Control de Tokens y Activos por Diseño', + feat5_desc: + 'Las empresas pueden emitir activos o tokens con control granular sobre cómo se usan o transfieren, aplicando reglas automáticamente a nivel de ledger.', + feat_more: 'Descubre más características', + stats_title: 'Estadísticas de la red', + stats_subtitle: 'Xahau en números', + stats_accounts: 'Cuentas', + stats_hooks: 'Hooks instalados', + stats_nodes: 'Nodos', + stats_txs: 'Transacciones/24h', + stats_ledgers: 'Ledgers cerrados', + stats_node_cta: '¿Quieres ejecutar un nodo?', + }, + ja: { + hero_title: + 'アカウントベースのプログラマビリティを持つスマートなブロックチェーン', + hero_subtitle: + 'スマートコントラクトだけでなく、スマートアカウント。設計上、安価で高速。現実世界のために構築。', + hero_learn: '基礎を学ぶ', + hero_docs: 'ドキュメントを見る', + network_title: 'Xahauネットワーク', + network_subtitle: + 'なぜXahauがあなたのビジネスに最適なブロックチェーンなのか?', + feat1_title: '1. スマートコントラクトHooks', + feat1_desc: + 'Xahauはアカウント上に直接軽量なスマートコントラクトをサポートし、ユーザーがコントラクトを呼び出すことなく、承認、拒否、またはカスタム動作のための自動ロジックを可能にします。', + feat2_title: '2. 手数料燃焼による低手数料', + feat2_desc: + 'Xahauは予測可能な低い取引コストを提供します。各手数料の一部は燃焼され、スパムを減らし、長期的なネットワークの健全性にインセンティブを合わせます。', + feat3_title: '3. エンタープライズ対応ガバナンス', + feat3_desc: + '構造化されたガバナンスとバリデーターの調整により、Xahauはサプライチェーン、決済、コンプライアンスアプリケーションを含む規制およびエンタープライズ用途に安定した環境を提供します。', + feat4_title: '4. 高速、グリーン、スケーラブル', + feat4_desc: + '効率的なコンセンサスプロトコルにより、Xahauはマイニングなしで高速に取引を処理します。パフォーマンスと持続可能性を必要とするビジネスに最適です。', + feat5_title: '5. 設計によるトークンと資産の制御', + feat5_desc: + '企業はトークンや資産をどのように使用または転送されるかについての詳細な制御で発行でき、ルールをレジャーレベルで自動的に適用できます。', + feat_more: 'さらに多くの機能を発見する', + stats_title: 'ネットワーク統計', + stats_subtitle: '数字で見るXahau', + stats_accounts: 'アカウント', + stats_hooks: 'インストール済みHooks', + stats_nodes: 'ノード', + stats_txs: '取引/24時間', + stats_ledgers: '閉鎖済みレジャー', + stats_node_cta: 'ノードを運営したいですか?', + }, +} + +export type IndexLocale = keyof typeof indexTranslations diff --git a/src/layouts/IndexLayout.astro b/src/layouts/IndexLayout.astro index 1b115c1..b78a072 100644 --- a/src/layouts/IndexLayout.astro +++ b/src/layouts/IndexLayout.astro @@ -1,100 +1,19 @@ --- import '../styles/main.css' import worldmap from '../assets/worldmap.svg' + import type { IndexLocale } from '../i18n/indexTranslations' + import { indexTranslations } from '../i18n/indexTranslations' import BaseLayout from '../layouts/BaseLayout.astro' const _frontmatter = Astro.props.frontmatter const LOCALES = ['es', 'ja'] const firstSegment = Astro.url.pathname.split('/')[1] - const locale = LOCALES.includes(firstSegment) ? firstSegment : 'en' + const locale = ( + LOCALES.includes(firstSegment) ? firstSegment : 'en' + ) as IndexLocale const p = locale !== 'en' ? `/${locale}` : '' - - const translations = { - en: { - hero_title: 'The Smarter Blockchain with Account-Based Programmability', - hero_subtitle: 'Not just smart contracts – smart accounts. Cheap and fast by design. Built for the real world.', - hero_learn: 'Learn the basics', - hero_docs: 'View docs', - network_title: 'The Xahau Network', - network_subtitle: 'Why is Xahau the right blockchain for your business?', - feat1_title: '1. Smart Contract Hooks', - feat1_desc: 'Xahau supports lightweight smart contracts directly on accounts, enabling automatic logic for approvals, rejections, or custom behavior without requiring users to call a contract.', - feat2_title: '2. Low Fees with Fee Burning', - feat2_desc: 'Xahau offers predictable, low transaction costs. A portion of each fee is burned, reducing spam and aligning incentives with long-term network health.', - feat3_title: '3. Enterprise-Ready Governance', - feat3_desc: 'With structured governance and validator coordination, Xahau provides a stable environment for regulated and enterprise use, including supply chain, payments, and compliance applications.', - feat4_title: '4. Fast, Green, and Scalable', - feat4_desc: 'With an efficient consensus protocol, Xahau processes transactions quickly without mining—ideal for businesses needing performance and sustainability.', - feat5_title: '5. Token and Asset Control by Design', - feat5_desc: "Businesses can issue assets or tokens with fine-grained control over how they're used or transferred, enforcing rules automatically at the ledger level.", - feat_more: 'Discover more features', - stats_title: 'Network statistics', - stats_subtitle: 'Xahau in numbers', - stats_accounts: 'Accounts', - stats_hooks: 'Hooks installed', - stats_nodes: 'Nodes', - stats_txs: 'Transactions/24h', - stats_ledgers: 'Ledgers closed', - stats_node_cta: 'Want to run a node?', - }, - es: { - hero_title: 'La Blockchain Inteligente con Programabilidad Basada en Cuentas', - hero_subtitle: 'No solo contratos inteligentes. Cuentas inteligentes. Barato y rápido por diseño. Construido para el mundo real.', - hero_learn: 'Aprende lo básico', - hero_docs: 'Ver documentación', - network_title: 'La Red Xahau', - network_subtitle: '¿Por qué Xahau es la blockchain adecuada para tu negocio?', - feat1_title: '1. Smart Contract Hooks', - feat1_desc: 'Xahau soporta contratos inteligentes ligeros directamente en cuentas, permitiendo lógica automática para aprobaciones, rechazos o comportamiento personalizado sin que los usuarios necesiten llamar a un contrato.', - feat2_title: '2. Bajas Comisiones con Quema de Fees', - feat2_desc: 'Xahau ofrece costes de transacción predecibles y bajos. Una parte de cada comisión se quema, reduciendo el spam y alineando los incentivos con la salud a largo plazo de la red.', - feat3_title: '3. Gobernanza para Empresas', - feat3_desc: 'Con gobernanza estructurada y coordinación de validadores, Xahau proporciona un entorno estable para uso regulado y empresarial, incluyendo cadena de suministro, pagos y cumplimiento normativo.', - feat4_title: '4. Rápido, Verde y Escalable', - feat4_desc: 'Con un eficiente protocolo de consenso, Xahau procesa transacciones rápidamente sin minería, ideal para negocios que necesitan rendimiento y sostenibilidad.', - feat5_title: '5. Control de Tokens y Activos por Diseño', - feat5_desc: 'Las empresas pueden emitir activos o tokens con control granular sobre cómo se usan o transfieren, aplicando reglas automáticamente a nivel de ledger.', - feat_more: 'Descubre más características', - stats_title: 'Estadísticas de la red', - stats_subtitle: 'Xahau en números', - stats_accounts: 'Cuentas', - stats_hooks: 'Hooks instalados', - stats_nodes: 'Nodos', - stats_txs: 'Transacciones/24h', - stats_ledgers: 'Ledgers cerrados', - stats_node_cta: '¿Quieres ejecutar un nodo?', - }, - ja: { - hero_title: 'アカウントベースのプログラマビリティを持つスマートなブロックチェーン', - hero_subtitle: 'スマートコントラクトだけでなく、スマートアカウント。設計上、安価で高速。現実世界のために構築。', - hero_learn: '基礎を学ぶ', - hero_docs: 'ドキュメントを見る', - network_title: 'Xahauネットワーク', - network_subtitle: 'なぜXahauがあなたのビジネスに最適なブロックチェーンなのか?', - feat1_title: '1. スマートコントラクトHooks', - feat1_desc: 'Xahauはアカウント上に直接軽量なスマートコントラクトをサポートし、ユーザーがコントラクトを呼び出すことなく、承認、拒否、またはカスタム動作のための自動ロジックを可能にします。', - feat2_title: '2. 手数料燃焼による低手数料', - feat2_desc: 'Xahauは予測可能な低い取引コストを提供します。各手数料の一部は燃焼され、スパムを減らし、長期的なネットワークの健全性にインセンティブを合わせます。', - feat3_title: '3. エンタープライズ対応ガバナンス', - feat3_desc: '構造化されたガバナンスとバリデーターの調整により、Xahauはサプライチェーン、決済、コンプライアンスアプリケーションを含む規制およびエンタープライズ用途に安定した環境を提供します。', - feat4_title: '4. 高速、グリーン、スケーラブル', - feat4_desc: '効率的なコンセンサスプロトコルにより、Xahauはマイニングなしで高速に取引を処理します。パフォーマンスと持続可能性を必要とするビジネスに最適です。', - feat5_title: '5. 設計によるトークンと資産の制御', - feat5_desc: '企業はトークンや資産をどのように使用または転送されるかについての詳細な制御で発行でき、ルールをレジャーレベルで自動的に適用できます。', - feat_more: 'さらに多くの機能を発見する', - stats_title: 'ネットワーク統計', - stats_subtitle: '数字で見るXahau', - stats_accounts: 'アカウント', - stats_hooks: 'インストール済みHooks', - stats_nodes: 'ノード', - stats_txs: '取引/24時間', - stats_ledgers: '閉鎖済みレジャー', - stats_node_cta: 'ノードを運営したいですか?', - }, - } - - const i = translations[locale] + const i = indexTranslations[locale] ---
-

{i.feat1_title}

+

+ {i.feat1_title} +

{i.feat1_desc}

-

{i.feat2_title}

+

+ {i.feat2_title} +

{i.feat2_desc}

-

{i.feat3_title}

+

+ {i.feat3_title} +

{i.feat3_desc}

-

{i.feat4_title}

+

+ {i.feat4_title} +

{i.feat4_desc}

-

{i.feat5_title}

+

+ {i.feat5_title} +

{i.feat5_desc}

-
+

{i.stats_accounts}

130K+

-
+

{i.stats_hooks}

5K+

-
+

{i.stats_nodes}

300+

-
+

{i.stats_txs}

1.5M+

-
+

{i.stats_ledgers}

16M+

From 531a11e9ea3d6b6471fe4bf87dc2f312648c1f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Mon, 6 Apr 2026 07:24:33 +0200 Subject: [PATCH 07/24] More title fixes --- src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx | 2 +- .../es/docs/protocol-reference/data-types/currency-formats.mdx | 2 +- .../ledger-data/ledger-objects-types/ripple-state.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx index dae34e9..c3564e4 100644 --- a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx @@ -138,7 +138,7 @@ El binario resultante es `rippled`. Renómbralo a `xahaud`. ``` -## Entornos de compilación +## Entornos de compilación {#build-environments-for-beginners} ### Contenedores diff --git a/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx b/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx index f69ca16..ef0e1d5 100644 --- a/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx +++ b/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx @@ -22,7 +22,7 @@ La siguiente tabla resume algunas de las diferencias entre XAH y tokens en Xahau Para más información, consulta ¿Qué es XAH? y Tokens. -### Especificando Montos de Moneda +### Especificando Montos de Moneda {#specifying-currency-amounts} Usa el formato apropiado para el tipo de moneda que quieres especificar: diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx index 415092f..8ac4e72 100644 --- a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx @@ -5,7 +5,7 @@ title: Ripple State El tipo de objeto `RippleState` conecta dos cuentas en una sola moneda. Conceptualmente, un objeto `RippleState` representa dos líneas de confianza entre las cuentas, una desde cada lado. Cada cuenta puede cambiar la configuración de su lado del objeto `RippleState`, pero el saldo es un único valor compartido. Una línea de confianza que está completamente en su estado predeterminado se considera igual a una línea de confianza que no existe, por lo que `rippled` elimina objetos `RippleState` cuando sus propiedades son completamente predeterminadas. -### Cuenta Alta vs. Cuenta Baja +### Cuenta Alta vs. Cuenta Baja {#high-vs-low-account} Solo puede haber un objeto `RippleState` por moneda para cualquier par dado de cuentas. Como ninguna cuenta tiene privilegio en Xahau, un objeto `RippleState` ordena las direcciones de cuenta numéricamente para asegurar una forma canónica. Cualquier dirección que sea numéricamente menor al decodificarse se considera la "cuenta baja" y la otra es la "cuenta alta". El saldo neto de la línea de confianza se almacena desde la perspectiva de la cuenta baja. From e67748881213a94358e5b5c28df805fef1a8633d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Mon, 6 Apr 2026 08:07:23 +0200 Subject: [PATCH 08/24] Links fixed --- .../docs/es/docs/infrastructure/build-xahaud/linux.mdx | 4 +++- .../docs/protocol-reference/data-types/currency-formats.mdx | 4 +++- .../ledger-data/ledger-objects-types/ripple-state.mdx | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx index c3564e4..a2c48bc 100644 --- a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx @@ -138,7 +138,9 @@ El binario resultante es `rippled`. Renómbralo a `xahaud`. ``` -## Entornos de compilación {#build-environments-for-beginners} +
+ +## Entornos de compilación ### Contenedores diff --git a/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx b/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx index ef0e1d5..e629a6c 100644 --- a/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx +++ b/src/content/docs/es/docs/protocol-reference/data-types/currency-formats.mdx @@ -22,7 +22,9 @@ La siguiente tabla resume algunas de las diferencias entre XAH y tokens en Xahau Para más información, consulta ¿Qué es XAH? y Tokens. -### Especificando Montos de Moneda {#specifying-currency-amounts} + + +### Especificando Montos de Moneda Usa el formato apropiado para el tipo de moneda que quieres especificar: diff --git a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx index 8ac4e72..f34f20c 100644 --- a/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx +++ b/src/content/docs/es/docs/protocol-reference/ledger-data/ledger-objects-types/ripple-state.mdx @@ -5,7 +5,9 @@ title: Ripple State El tipo de objeto `RippleState` conecta dos cuentas en una sola moneda. Conceptualmente, un objeto `RippleState` representa dos líneas de confianza entre las cuentas, una desde cada lado. Cada cuenta puede cambiar la configuración de su lado del objeto `RippleState`, pero el saldo es un único valor compartido. Una línea de confianza que está completamente en su estado predeterminado se considera igual a una línea de confianza que no existe, por lo que `rippled` elimina objetos `RippleState` cuando sus propiedades son completamente predeterminadas. -### Cuenta Alta vs. Cuenta Baja {#high-vs-low-account} + + +### Cuenta Alta vs. Cuenta Baja Solo puede haber un objeto `RippleState` por moneda para cualquier par dado de cuentas. Como ninguna cuenta tiene privilegio en Xahau, un objeto `RippleState` ordena las direcciones de cuenta numéricamente para asegurar una forma canónica. Cualquier dirección que sea numéricamente menor al decodificarse se considera la "cuenta baja" y la otra es la "cuenta alta". El saldo neto de la línea de confianza se almacena desde la perspectiva de la cuenta baja. From f060b3e468630cb0c00da175f7a1f27851dcaa0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Mon, 6 Apr 2026 08:22:00 +0200 Subject: [PATCH 09/24] Currency Amounts fix --- .../transactions/transaction-types/escrowcreate.mdx | 2 +- .../transactions/transaction-types/offercreate.mdx | 4 ++-- .../transactions/transaction-types/payment.mdx | 4 ++-- .../transactions/transaction-types/paymentchannelclaim.mdx | 4 ++-- .../transactions/transaction-types/paymentchannelcreate.mdx | 2 +- .../transactions/transaction-types/paymentchannelfund.mdx | 2 +- .../transactions/transaction-types/uritokenmint.mdx | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx index 3bcf6a0..9de0bc1 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/escrowcreate.mdx @@ -30,7 +30,7 @@ _Añadido por la enmienda \[Escrow]\[]._ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto a deducir del saldo del emisor y poner en escrow. Una vez en escrow, el Amount puede ir a la dirección `Destination` (después del tiempo `FinishAfter`) o ser devuelto al emisor (después del tiempo `CancelAfter`). | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | Monto a deducir del saldo del emisor y poner en escrow. Una vez en escrow, el Amount puede ir a la dirección `Destination` (después del tiempo `FinishAfter`) o ser devuelto al emisor (después del tiempo `CancelAfter`). | | `Destination` | String | AccountID | Dirección para recibir el Amount en escrow. | | `CancelAfter` | Number | UInt32 | _(Opcional)_ El tiempo, en \[segundos desde la Época Ripple]\[], cuando este escrow expira. Este valor es inmutable; los fondos solo pueden devolverse al emisor después de este tiempo. | | `FinishAfter` | Number | UInt32 | _(Opcional)_ El tiempo, en \[segundos desde la Época Ripple]\[], cuando el Amount en escrow puede liberarse al destinatario. Este valor es inmutable; los fondos no pueden moverse hasta que se alcance este tiempo. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx index d0fa1fb..b73a10b 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/offercreate.mdx @@ -32,8 +32,8 @@ description: >- | `Expiration` | Number | UInt32 | _(Opcional)_ Tiempo después del cual la Oferta ya no está activa, en \[segundos desde la Época Ripple]\[]. | | `OfferSequence` | Number | UInt32 | _(Opcional)_ Una Oferta a eliminar primero, especificada de la misma manera que \[OfferCancel]\[]. | | `OfferID` | String | Hash256 | _(Opcional)_ El ID del objeto ledger Offer a cancelar, como una cadena hexadecimal de 64 caracteres. | -| `TakerGets` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad y tipo de moneda que se vende. | -| `TakerPays` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad y tipo de moneda que se compra. | +| `TakerGets` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | La cantidad y tipo de moneda que se vende. | +| `TakerPays` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | La cantidad y tipo de moneda que se compra. | ### Indicadores OfferCreate diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx index ecb277c..7aa4e51 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx @@ -26,12 +26,12 @@ description: >- | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda a entregar. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Si el indicador `tfPartialPayment` está activado, entrega _hasta_ este monto en su lugar. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/##especificando-montos-de-moneda) | Amount | La cantidad de moneda a entregar. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Si el indicador `tfPartialPayment` está activado, entrega _hasta_ este monto en su lugar. | | `Destination` | String | AccountID | La dirección única de la cuenta que recibe el pago. | | `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria que identifica la razón del pago al destino, o un destinatario alojado al que pagar. | | `InvoiceID` | String | Hash256 | _(Opcional)_ Hash arbitrario de 256 bits que representa una razón o identificador específico para este pago. | | `Paths` | Array de arrays de rutas | PathSet | (Opcional, auto-rellenable) Array de rutas de pago a usar para esta transacción. Debe omitirse para transacciones XAH a XAH. | -| `SendMax` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ Monto máximo de moneda fuente que puede costar esta transacción, incluyendo tarifas de transferencia, tipos de cambio y [deslizamiento](http://en.wikipedia.org/wiki/Slippage_\(finance\)). No incluye el XAH destruido como costo de envío. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Debe proporcionarse para pagos entre diferentes monedas. Debe omitirse para pagos XAH a XAH. | +| `SendMax` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/##especificando-montos-de-moneda) | Amount | _(Opcional)_ Monto máximo de moneda fuente que puede costar esta transacción, incluyendo tarifas de transferencia, tipos de cambio y [deslizamiento](http://en.wikipedia.org/wiki/Slippage_\(finance\)). No incluye el XAH destruido como costo de envío. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Debe proporcionarse para pagos entre diferentes monedas. Debe omitirse para pagos XAH a XAH. | | `DeliverMin` | \[Monto de Moneda]\[] | Amount | _(Opcional)_ Monto mínimo de moneda de destino que debe entregar esta transacción. Solo válido para pagos parciales. Para montos que no son XAH, los nombres de campos están en minúsculas. | ### Tipos de Pagos diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx index d7550b9..fa29cbf 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelclaim.mdx @@ -42,8 +42,8 @@ La **dirección de destino** de un canal puede: | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Channel` | String | Hash256 | El ID único del canal, como una cadena hexadecimal de 64 caracteres. | -| `Balance` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ Monto total entregado por este canal después de procesar este claim. Requerido para entregar Amount. Debe ser mayor que el monto total entregado por el canal hasta ahora, pero no mayor que el `Amount` del claim firmado. | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ El monto autorizado por la `Signature`. Esto debe coincidir con el monto en el mensaje firmado. Este es el monto acumulativo de Amount que puede dispensarse por el canal, incluyendo XAH previamente canjeado. | +| `Balance` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | _(Opcional)_ Monto total entregado por este canal después de procesar este claim. Requerido para entregar Amount. Debe ser mayor que el monto total entregado por el canal hasta ahora, pero no mayor que el `Amount` del claim firmado. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | _(Opcional)_ El monto autorizado por la `Signature`. Esto debe coincidir con el monto en el mensaje firmado. Este es el monto acumulativo de Amount que puede dispensarse por el canal, incluyendo XAH previamente canjeado. | | `Signature` | String | Blob | _(Opcional)_ La firma de este claim, en hexadecimal. El mensaje firmado contiene el ID del canal y el monto del claim. Requerido a menos que el emisor de la transacción sea la dirección fuente del canal. | | `PublicKey` | String | Blob | _(Opcional)_ La clave pública usada para la firma, en hexadecimal. Debe coincidir con el `PublicKey` almacenado en el ledger para el canal. Requerido a menos que el emisor de la transacción sea la dirección fuente del canal y el campo `Signature` sea omitido. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx index fc8b85f..72ebd7b 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx @@ -30,7 +30,7 @@ _Añadido por la enmienda \[PayChan]\[]._ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto a deducir del saldo del emisor y reservar en este canal. Mientras el canal esté abierto, el Amount solo puede ir a la dirección `Destination`. Cuando el canal se cierra, cualquier Amount no reclamado se devuelve al saldo de la dirección fuente. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/##especificando-montos-de-moneda) | Amount | Monto a deducir del saldo del emisor y reservar en este canal. Mientras el canal esté abierto, el Amount solo puede ir a la dirección `Destination`. Cuando el canal se cierra, cualquier Amount no reclamado se devuelve al saldo de la dirección fuente. | | `Destination` | String | AccountID | Dirección para recibir claims contra este canal. También conocida como la "dirección de destino" del canal. No puede ser la misma que el emisor (`Account`). | | `SettleDelay` | Number | UInt32 | Tiempo que la dirección fuente debe esperar antes de cerrar el canal si tiene Amount no reclamado. | | `PublicKey` | String | Blob | La clave pública de 33 bytes del par de claves que la fuente usará para firmar claims contra este canal, en hexadecimal. Puede ser cualquier clave pública secp256k1 o Ed25519. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx index 74da8d2..21a5408 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelfund.mdx @@ -28,7 +28,7 @@ _Añadido por la enmienda \[PayChan]\[]._ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Channel` | String | Hash256 | El ID único del canal a financiar, como una cadena hexadecimal de 64 caracteres. | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto a agregar al canal. Debe ser una cantidad positiva. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | Monto a agregar al canal. Debe ser una cantidad positiva. | | `Expiration` | Number | UInt32 | _(Opcional)_ Nuevo tiempo de `Expiration` a establecer para el canal, en \[segundos desde la Época Ripple]\[]. Debe ser posterior tanto al tiempo actual más el `SettleDelay` del canal, como a la `Expiration` existente del canal. Después del tiempo de `Expiration`, cualquier transacción que acceda al canal cierra el canal sin realizar su acción normal. Cualquier Amount no gastado se devuelve a la dirección fuente cuando el canal se cierra. (`Expiration` es independiente del tiempo inmutable `CancelAfter` del canal.) | ### Casos de Error diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx index e1c48bc..3509f27 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenmint.mdx @@ -33,7 +33,7 @@ _(Añadido por la enmienda \[URIToken]\[].)_ | `URI` | String | String | El URI asociado con el URIToken acuñado. (máximo 256 bytes) | | `Digest` | String | Hash256 | _(Opcional)_ El digest del URIToken. | | `Destination` | String | AccountID | _(Opcional)_ La dirección de la cuenta que puede comprar el URIToken acuñado. | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ La cantidad de moneda que la cuenta quiere recibir a cambio del URIToken. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | _(Opcional)_ La cantidad de moneda que la cuenta quiere recibir a cambio del URIToken. | ### Indicadores URITokenMint From ea97415bf3cfad32e8ebaf9f3fb5d00298f8881a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Mon, 6 Apr 2026 08:45:34 +0200 Subject: [PATCH 10/24] Links fixed --- .../docs/es/docs/infrastructure/build-xahaud/linux.mdx | 2 +- .../transactions/transaction-types/checkcash.mdx | 2 +- .../transactions/transaction-types/checkcreate.mdx | 2 +- .../transactions/transaction-types/payment.mdx | 4 ++-- .../transactions/transaction-types/remit.mdx | 2 +- .../transactions/transaction-types/uritokenbuy.mdx | 2 +- .../transaction-types/uritokencreateselloffer.mdx | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx index a2c48bc..4c870d0 100644 --- a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx @@ -138,7 +138,7 @@ El binario resultante es `rippled`. Renómbralo a `xahaud`. ``` - + ## Entornos de compilación diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx index 8e623af..aca2a12 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcash.mdx @@ -23,7 +23,7 @@ _(Añadido por la enmienda \[Checks]\[].)_ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CheckID` | String | Hash256 | El ID del objeto ledger Check a canjear, como una cadena hexadecimal de 64 caracteres. | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | _(Opcional)_ Canjear el Check por exactamente esta cantidad, si es posible. La moneda debe coincidir con la del `SendMax` de la transacción CheckCreate correspondiente. Debe proporcionar este campo o `DeliverMin`. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | _(Opcional)_ Canjear el Check por exactamente esta cantidad, si es posible. La moneda debe coincidir con la del `SendMax` de la transacción CheckCreate correspondiente. Debe proporcionar este campo o `DeliverMin`. | | `DeliverMin` | \[Monto de Moneda]\[] | Amount | _(Opcional)_ Canjear el Check por al menos esta cantidad y por todo lo posible. La moneda debe coincidir con la del `SendMax` de la transacción CheckCreate correspondiente. Debe proporcionar este campo o `Amount`. | La transacción _**debe**_ incluir `Amount` o `DeliverMin`, pero no ambos. diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx index e7040b9..d319ff7 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/checkcreate.mdx @@ -27,7 +27,7 @@ _(Añadido por la enmienda \[Checks]\[].)_ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Destination` | String | AccountID | La dirección única de la cuenta que puede canjear el Check. | -| `SendMax` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | Monto máximo de moneda fuente que el Check puede debitar al emisor, incluyendo tarifas de transferencia en monedas que no son XAH. El Check solo puede acreditar al destino con la misma moneda (del mismo emisor, para monedas que no son XAH). Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. | +| `SendMax` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | Monto máximo de moneda fuente que el Check puede debitar al emisor, incluyendo tarifas de transferencia en monedas que no son XAH. El Check solo puede acreditar al destino con la misma moneda (del mismo emisor, para monedas que no son XAH). Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. | | `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria que identifica la razón del Check, o un destinatario alojado al que pagar. | | `Expiration` | Number | UInt32 | _(Opcional)_ Tiempo después del cual el Check ya no es válido, en \[segundos desde la Época Ripple]\[]. | | `InvoiceID` | String | Hash256 | _(Opcional)_ Hash arbitrario de 256 bits que representa una razón o identificador específico para este Check. | diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx index 7aa4e51..f5dfa15 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/payment.mdx @@ -26,12 +26,12 @@ description: >- | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/##especificando-montos-de-moneda) | Amount | La cantidad de moneda a entregar. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Si el indicador `tfPartialPayment` está activado, entrega _hasta_ este monto en su lugar. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | La cantidad de moneda a entregar. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Si el indicador `tfPartialPayment` está activado, entrega _hasta_ este monto en su lugar. | | `Destination` | String | AccountID | La dirección única de la cuenta que recibe el pago. | | `DestinationTag` | Number | UInt32 | _(Opcional)_ Etiqueta arbitraria que identifica la razón del pago al destino, o un destinatario alojado al que pagar. | | `InvoiceID` | String | Hash256 | _(Opcional)_ Hash arbitrario de 256 bits que representa una razón o identificador específico para este pago. | | `Paths` | Array de arrays de rutas | PathSet | (Opcional, auto-rellenable) Array de rutas de pago a usar para esta transacción. Debe omitirse para transacciones XAH a XAH. | -| `SendMax` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/##especificando-montos-de-moneda) | Amount | _(Opcional)_ Monto máximo de moneda fuente que puede costar esta transacción, incluyendo tarifas de transferencia, tipos de cambio y [deslizamiento](http://en.wikipedia.org/wiki/Slippage_\(finance\)). No incluye el XAH destruido como costo de envío. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Debe proporcionarse para pagos entre diferentes monedas. Debe omitirse para pagos XAH a XAH. | +| `SendMax` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | _(Opcional)_ Monto máximo de moneda fuente que puede costar esta transacción, incluyendo tarifas de transferencia, tipos de cambio y [deslizamiento](http://en.wikipedia.org/wiki/Slippage_\(finance\)). No incluye el XAH destruido como costo de envío. Para montos que no son XAH, los nombres de campos anidados DEBEN estar en minúsculas. Debe proporcionarse para pagos entre diferentes monedas. Debe omitirse para pagos XAH a XAH. | | `DeliverMin` | \[Monto de Moneda]\[] | Amount | _(Opcional)_ Monto mínimo de moneda de destino que debe entregar esta transacción. Solo válido para pagos parciales. Para montos que no son XAH, los nombres de campos están en minúsculas. | ### Tipos de Pagos diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx index 7c98be7..82b6e78 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/remit.mdx @@ -63,7 +63,7 @@ _(Añadido por la enmienda \[Remit]\[].)_ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------- | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda que la cuenta quiere enviar al `Destination`. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | La cantidad de moneda que la cuenta quiere enviar al `Destination`. | ### Campos de MintURIToken diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx index 0f1e2c7..1ff1ec1 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokenbuy.mdx @@ -27,7 +27,7 @@ _(Añadido por la enmienda \[URIToken]\[].)_ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------- | | `Account` | String | AccountID | La dirección de la cuenta del comprador. | | `URITokenID` | String | Hash256 | El identificador único del URIToken a comprar. | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda a pagar por el URIToken. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | La cantidad de moneda a pagar por el URIToken. | ### Costo de Transacción Especial diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx index d467d9e..d082cc5 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/uritokencreateselloffer.mdx @@ -31,7 +31,7 @@ _(Añadido por la enmienda \[URIToken]\[].)_ | `Account` | String | AccountID | La dirección de la cuenta que crea la oferta de venta. | | `URITokenID` | String | Hash256 | El ID del URIToken que se vende. | | `Destination` | String | AccountID | _(Opcional)_ La dirección de la cuenta que recibirá la oferta de venta. | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#specifying-currency-amounts) | Amount | La cantidad de moneda que la cuenta quiere recibir a cambio del URIToken. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | La cantidad de moneda que la cuenta quiere recibir a cambio del URIToken. | ### Casos de Error From 0f2476d6889eaeddcf05eb18fbbacf0c7e320296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekiserrep=C3=A9?= Date: Mon, 6 Apr 2026 08:58:17 +0200 Subject: [PATCH 11/24] More links fixed --- .../infrastructure/build-xahaud/linux.mdx | 396 +++++++++++++----- .../paymentchannelcreate.mdx | 2 +- 2 files changed, 300 insertions(+), 98 deletions(-) diff --git a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx index 4c870d0..cefcd81 100644 --- a/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx +++ b/src/content/docs/es/docs/infrastructure/build-xahaud/linux.mdx @@ -1,29 +1,27 @@ --- -title: Instrucciones de compilación en Linux +title: Instrucciones de compilación para Linux --- - import { Aside } from '@astrojs/starlight/components'; -Estas instrucciones están diseñadas para funcionar en distribuciones basadas en Debian (como Ubuntu 22.04 y 24.04) y Red Hat Enterprise Linux (9 o 10). Muchas instrucciones son comunes, aunque se indican diferencias entre sistemas operativos cuando corresponde. Aunque se intenta probar en múltiples entornos, Ubuntu es el entorno más probado y soportado para compilar y ejecutar xahaud. + +Estas instrucciones están diseñadas para funcionar en distribuciones basadas en Debian (por ejemplo, Ubuntu 22.04 y 24.04) y Red Hat Enterprise Linux (9 o 10). Muchas instrucciones se solapan, aunque las diferencias entre sistemas operativos se indican a lo largo del texto. Se hacen esfuerzos por probar las compilaciones en distintos sistemas operativos; sin embargo, Ubuntu es el entorno más probado y compatible para compilar y ejecutar xahaud. Para instrucciones adicionales, consulta el archivo [BUILD.md](https://github.com/Xahau/xahaud/blob/dev/BUILD.md) en el repositorio GitHub de Xahau/xahaud. ## Instalar dependencias -Usuarios Debian/Ubuntu: - +Los usuarios de Debian/Ubuntu pueden instalar las dependencias requeridas con estos comandos: ``` sudo apt install -y git curl wget python3-pip python3-venv python3-dev ca-certificates gcc g++ build-essential cmake ninja-build libc6-dev libssl-dev libsqlite3-dev ``` -Usuarios RHEL 9/10: - +Del mismo modo, los usuarios de RHEL 9 o RHEL 10 pueden instalar las dependencias: ``` sudo dnf install epel-release && sudo dnf update -y @@ -33,45 +31,37 @@ sudo dnf install curl wget git ca-certificates cmake glibc-headers glibc-devel n ``` -## Clonar el repositorio +## Clonar el repositorio GitHub de Xahau/xahaud +Antes de compilar, obtén una copia local del repositorio GitHub de xahaud: -``` +`git clone https://github.com/Xahau/xahaud.git` -git clone [https://github.com/Xahau/xahaud.git](https://github.com/Xahau/xahaud.git) +Es posible compilar desde otros forks del repositorio; simplemente ajusta la URL anterior según sea necesario. -``` +### Seleccionar la rama del repositorio +La rama principal usada para el desarrollo de xahaud es `dev`. Los usuarios que prefieran compilar desde una rama alternativa pueden hacerlo: -### Seleccionar rama +`git checkout [nombre-de-rama]` -``` +### Preparar el directorio de compilación +Crea un directorio dentro del repositorio de xahaud para almacenar los archivos generados durante el proceso de compilación: -git checkout [nombre-de-rama] - -``` - -### Preparar directorio de build - -``` - -mkdir [/ruta/xahaud]/.build - -``` +`mkdir [/ruta/al_repositorio_github_xahaud]/.build` ## Instalar y configurar Conan2 +1. Asegúrate de estar en el directorio de compilación: `cd [/ruta/al_repositorio_github_xahaud]/.build` -``` +2. Crea un entorno virtual de Python3 (venv) en el directorio `env`: `python3 -m venv env` -cd [/ruta/xahaud]/.build -python3 -m venv env -source ./env/bin/activate -pip install --upgrade pip -pip install conan -conan profile detect +3. Activa el entorno virtual: `source ./env/bin/activate` -``` +4. Actualiza pip para que estén disponibles las últimas versiones del software: `pip install --upgrade pip` -Exportar dependencias: +5. Instala Conan2: `pip install conan` +6. Crea un nuevo perfil de Conan2 (si todavía no lo has hecho): `conan profile detect` + +7. Instala las recetas de Conan para las dependencias Snappy, SOCI y WasmEdge, incluidas en el repositorio GitHub "xahaud": ``` conan export external/snappy --version 1.1.10 --user xahaud --channel stable @@ -79,135 +69,347 @@ conan export external/soci --version 4.0.3 --user xahaud --channel stable conan export external/wasmedge --version 0.11.2 --user xahaud --channel stable ``` - -Editar perfil Conan si es necesario: - +8. Revisa tu perfil de Conan2, ubicado en: `/home/[nombre-de-usuario]/.conan2/profiles/default`. Si es necesario, añade: ``` [settings] compiler.cppstd=20 compiler.libcxx=libstdc++11 +``` +9. Puede ser necesario incluir las siguientes líneas al final de tu perfil de Conan2: +``` + [conf] tools.build:cxxflags=['-Wno-restrict'] ``` ## Compilar xahaud +1. Dentro del directorio `.build`, con el entorno virtual de Python3 activo, ajusta `build_type` a `"Release"` o `"Debug"` y ejecuta el siguiente comando. Es posible ejecutar el comando dos veces para generar archivos para cada `build_type`. +``` + +conan install .. --output-folder . --build missing --settings build_type=["Release" or "Debug"] -c tools.build:verbosity=verbose -c tools.compilation:verbosity=verbose ``` -conan install .. --output-folder . --build missing --settings build_type=["Release" o "Debug"] +2. Si es necesario, pueden pasarse opciones adicionales a Conan2: +``` + +conan install .. --output-folder . --build missing --settings build_type=["Release" or "Debug"] -s compiler=gcc -s compiler.version=12 -s compiler.libcxx=libstdc++11 -s compiler.cppstd=20 -c tools.build:verbosity=verbose -c tools.compilation:verbosity=verbose -g VirtualBuildEnv -g VirtualRunEnv ``` -Opcional: - -``` - -conan install .. --output-folder . --build missing --settings build_type=["Release" o "Debug"] -s compiler=gcc ... - -``` - -Ejecutar cmake: +3. Cuando Conan2 termine, ejecuta cmake. No especifiques `DCMAKE_BUILD_TYPE` si estás compilando con múltiples configuraciones (tanto `"Release"` como `"Debug"`). ``` cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW --DCMAKE_BUILD_TYPE=["Release" o "Debug"] --DCMAKE_TOOLCHAIN_FILE=build/generators/conan_toolchain.cmake +-DCMAKE_BUILD_TYPE=["Release" or "Debug"] +-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake .. ``` -Compilar: +4. Finalmente, usa cmake para completar el proceso de compilación: `cmake --build . [añade '--config Release' o '--config Debug' si se generaron múltiples tipos de compilación]`. -``` +El archivo de salida se llama `rippled` y se encuentra en el directorio `.build`. Si se especificaron múltiples tipos de compilación (tanto `"Release"` como `"Debug"`), el producto final estará en: `.build/["Release" or "Debug"]/rippled` Renombra el archivo a `xahaud` y muévelo a su ubicación final (teniendo cuidado de no sobrescribir el repositorio GitHub de `xahaud`). Marca el archivo final como ejecutable y descarga un archivo de configuración y un archivo de validadores según sea necesario. -cmake --build . +## Probar la compilación +Para ejecutar pruebas unitarias: `./xahaud --unittest` -``` -El binario resultante es `rippled`. Renómbralo a `xahaud`. +## Entornos de compilación para principiantes -## Test +Mantener distintos entornos de compilación (venvs de Python3, perfiles de Conan2, etc.) es una tarea compleja, y aún más porque los sistemas operativos subyacentes a menudo dependen de versiones específicas de software o esperan determinadas versiones. Por ello, quienes son nuevos en el proceso de compilación pueden beneficiarse del uso de contenedores o de escribir scripts bash que se utilicen en máquinas virtuales que restablezcan su estado al reiniciarse. -``` - -./xahaud --unittest - -``` - - - -## Entornos de compilación +Las siguientes subsecciones cubren los conceptos básicos de configuración de entornos de compilación amnésicos y basados en contenedores. ### Contenedores +Es posible usar [Docker](https://docker.com) u otros entornos en contenedores (Podman, Kubernetes, etc.) para aislar el proceso de compilación, manteniendo así limpio el sistema subyacente. El uso de contenedores tiene además la ventaja de poder probar compilaciones fácilmente en múltiples entornos. Por ejemplo, pueden configurarse contenedores basados en RHEL, Debian y otras distribuciones para usar distintas versiones de compilador. Además, características como los Dockerfiles multietapa permiten a los usuarios compilar y luego desplegar (ejecutar) xahaud usando un único Dockerfile. Los usuarios también pueden aprovechar el plugin `buildx` de Docker, que permite compilar para múltiples plataformas de manera concurrente. -Puedes usar Docker para aislar el entorno. +#### Instalar Docker +``` -Instalación: +# Debian/Ubuntu: + +sudo apt update && sudo apt install docker.io docker-compose-v2 docker-buildx + +# RHEL (requiere añadir el repositorio de docker.com): + +sudo dnf config-manager --add-repo [https://download.docker.com/linux/rhel/docker-ce.repo](https://download.docker.com/linux/rhel/docker-ce.repo) +sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` -# Ubuntu +Después de instalarlo, es posible añadir tu cuenta de usuario local al grupo Docker, de forma que interactuar con Docker no requiera acceso root/sudo: `sudo usermod -aG docker $USER`. Para que los cambios surtan efecto, debes cerrar sesión y volver a iniciarla. -sudo apt install docker.io docker-compose-v2 docker-buildx +#### Ejemplo de Dockerfile +Para facilitar y dar consistencia, es posible usar scripts Dockerfile (por ejemplo, buildx, multietapa, docker-compose v2, etc.) para configurar el entorno de compilación y completar el proceso de build. -# RHEL - -sudo dnf install docker-ce docker-ce-cli containerd.io +Por ejemplo, xahaud puede compilarse dentro de un contenedor Docker de Ubuntu 24.04 usando un Dockerfile para describir el contenedor, descargar e instalar dependencias y compilar el producto final. Ten en cuenta que el siguiente código sigue los mismos pasos descritos anteriormente en esta página para el proceso general de compilación en Linux; simplemente se aplican dentro de un contenedor aislado. Es posible añadir variables adicionales o ajustar el siguiente código para personalizar el proceso de compilación. ``` -Ejemplo: +# ~~~~ Argumentos usados para personalizar el contenedor y la compilación ~~~~ + +ARG BASE_IMAGE=ubuntu:24.04 # Sistema operativo para el contenedor de compilación +ARG REPO_URL=[https://github.com/Xahau/xahaud](https://github.com/Xahau/xahaud) # URL del repositorio con el código a compilar +ARG REPO_BRANCH=dev # Rama del repositorio que se usará para la compilación +ARG RELEASE_TYPE=Release # Establecer a "Release" o "Debug" +ARG BASE_DIR=/build # Directorio donde compilar xahaud + +# ~~~~ Iniciar un contenedor ~~~~ + +FROM --platform=$BUILDPLATFORM ${BASE_IMAGE} AS builder + +ARG REPO_URL +ARG REPO_BRANCH +ARG RELEASE_TYPE +ARG BASE_DIR +ARG TARGETPLATFORM +ARG BUILDPLATFORM + +ENV DEBIAN_FRONTEND=noninteractive +CONAN2_DIR=/root/.conan2 + +# ~~~~ Instalar dependencias de compilación ~~~~ + +RUN set -ex; +if [ -f /etc/os-release ]; then . /etc/os-release; fi; +case " $ID $ID_LIKE " in +*debian*|*ubuntu*) +apt-get update && apt-get install -y -qq +git curl wget python3-pip python3-venv python3-dev ca-certificates +gcc g++ build-essential cmake ninja-build +libc6-dev libssl-dev libsqlite3-dev +&& rm -rf /var/lib/apt/lists/* +;; +*rhel*|*fedora*|*centos*|*rocky*|*alma*) +dnf install -y config-manager epel-release && dnf update -y && +dnf config-manager --set-enabled crb -y && +dnf groupinstall -y "Development Tools" && +dnf install -y curl wget git ca-certificates cmake glibc-headers glibc-devel +ninja-build perl-interpreter perl perl-FindBin sqlite-devel +libstdc++ libstdc++-devel libstdc++-static gcc-c++ python3-pip python3-devel +&& dnf clean all +;; +*) echo "Unsupported OS"; exit 1 ;; +esac + +# ~~~~ Clonar el repositorio GitHub de xahaud y crear un directorio '.build' ~~~~ + +WORKDIR ${BASE_DIR} +RUN git clone ${REPO_URL} xahaud && +cd xahaud && +git checkout ${REPO_BRANCH} && +mkdir -p .build + +# ~~~~ Crear un entorno virtual Python3 e instalar Conan2 ~~~~ + +RUN python3 -m venv ${BASE_DIR}/env && +. ${BASE_DIR}/env/bin/activate && +pip install --upgrade pip && +pip install conan + +# ~~~~ Configurar perfil Conan2 (lo siguiente asume que el usuario desea usar cppstd versión 20) ~~~~ + +RUN . ${BASE_DIR}/env/bin/activate && +conan profile detect && +CONAN2_PROFILE="${CONAN2_DIR}/profiles/default" && +if grep -q '^compiler.cppstd=' "$CONAN2_PROFILE"; then +sed -i 's/^compiler.cppstd=.*/compiler.cppstd=20/' "$CONAN2_PROFILE"; +else +echo 'compiler.cppstd=20' >> "$CONAN2_PROFILE"; +fi && +if ! grep -Fqx "[conf]" "$CONAN2_PROFILE"; then +printf "[conf]\ntools.build:cxxflags=['-Wno-restrict']\n" >> "$CONAN2_PROFILE"; +fi + +# ~~~~ Exportar recetas Conan para snappy, soci y wasmedge ~~~~ + +RUN . ${BASE_DIR}/env/bin/activate && +cd ${BASE_DIR}/xahaud && +conan export external/snappy --version 1.1.10 --user xahaud --channel stable && +conan export external/soci --version 4.0.3 --user xahaud --channel stable && +conan export external/wasmedge --version 0.11.2 --user xahaud --channel stable + +# ~~~~ Compilar xahaud ~~~~ + +RUN . ${BASE_DIR}/env/bin/activate && +cd ${BASE_DIR}/xahaud/.build && +conan install .. --output-folder . +--settings build_type=${RELEASE_TYPE} +--options *:shared=False +--build missing +-c tools.build:verbosity=verbose +-c tools.compilation:verbosity=verbose +-g VirtualBuildEnv +-g VirtualRunEnv && +cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW +-DCMAKE_BUILD_TYPE=${RELEASE_TYPE} +-DBUILD_SHARED_LIBS=OFF +-DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" +-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake +.. && +cmake --build . --parallel $(nproc) + +# ~~~~ Copiar los archivos de configuración al BASE_DIR ~~~~ + +RUN cp ${BASE_DIR}/xahaud/cfg/xahaud-example.cfg ${BASE_DIR}/xahaud.cfg && +cp ${BASE_DIR}/xahaud/cfg/validators-example.txt ${BASE_DIR}/validators-xahau.txt && +cp ${BASE_DIR}/xahaud/.build/rippled ${BASE_DIR}/rippled + +# ~~~~ Copiar los archivos xahaud.cfg y validators-xahau.txt al sistema anfitrión ~~~~ + +FROM scratch AS export +ARG BASE_DIR + +COPY --from=builder ${BASE_DIR}/rippled /xahaud +COPY --from=builder ${BASE_DIR}/xahaud.cfg /xahaud.cfg +COPY --from=builder ${BASE_DIR}/validators-xahau.txt /validators-xahau.txt + +# ~~~~ Crear una imagen Docker con xahaud y archivos de configuración ~~~~ + +FROM ${BASE_IMAGE} AS runtime +ARG BASE_DIR +ENV DEBIAN_FRONTEND=noninteractive + +# ~~~~ Instalar dependencias de ejecución ~~~~ + +RUN set -ex; +if [ -f /etc/os-release ]; then . /etc/os-release; fi; +case " $ID $ID_LIKE " in +*debian*|*ubuntu*) +apt-get update && apt-get install -y -qq +libssl3 libsqlite3-0 ca-certificates +&& update-ca-certificates +&& rm -rf /var/lib/apt/lists/* +;; +*rhel*|*fedora*|*centos*|*rocky*|*alma*) +dnf install -y openssl-libs sqlite-libs ca-certificates +&& dnf clean all && update-ca-trust +;; +esac + +# ~~~~ Copiar binario compilado y configs desde builder ~~~~ + +RUN mkdir -p /opt/xahaud/etc /opt/xahaud/bin /opt/xahaud/db /var/log/xahaud +COPY --from=builder ${BASE_DIR}/rippled /opt/xahaud/bin/xahaud +COPY --from=builder ${BASE_DIR}/xahaud.cfg /opt/xahaud/etc/xahaud.cfg +COPY --from=builder ${BASE_DIR}/validators-xahau.txt /opt/xahaud/etc/validators-xahau.txt + +# ~~~~ Crear directorios y copiar bibliotecas compartidas requeridas desde builder ~~~~ + +RUN --mount=type=bind,from=builder,source=/root/.conan2,target=/tmp/conan +find /tmp/conan -name "*.so*" -type f -exec cp {} /usr/local/lib/ ; && +ldconfig + +# ~~~~ Establecer permisos ~~~~ + +RUN chmod -R 755 /opt/xahaud /var/log/xahaud + +WORKDIR /opt/xahaud + +# ~~~~ Exponer puertos ~~~~ + +EXPOSE 5009 6009 50051 21337 21338 + +# ~~~~ Ejecutar xahaud ~~~~ + +ENTRYPOINT ["/opt/xahaud/bin/xahaud"] +CMD ["--conf", "/opt/xahaud/etc/xahaud.cfg"] ``` -docker buildx build -t xahaud-builder . -docker run -d --name xahaud xahaud:latest +El Dockerfile multietapa anterior puede utilizarse para compilar xahaud ejecutando: +`docker buildx build -t xahaud-builder --target builder --load .` + +Esto crea una imagen Docker llamada `xahaud-builder` a partir del Dockerfile. La bandera `--target builder` detiene el script en el proceso de compilación y la bandera `--load` importa la imagen resultante en Docker. + +La imagen compilada también puede exportarse al sistema operativo anfitrión (junto con los archivos de configuración): + +`docker buildx build --target export --output type=local,dest=$HOME .` + +Para ejecutar el archivo de compilación multietapa y crear una nueva imagen Docker con xahaud y los archivos de configuración requeridos: + +`docker buildx build --target runtime --load -t xahaud:latest .` + +La imagen resultante puede verse con: `docker images` y ejecutarse con: + +`docker run --rm -d --name xahaud -p 5009:5009 -p 6009:6009 -p 21337:21337 -v /home/$USER/xahaud/opt:/opt/xahaud -v /home/$USER/xahaud/log:/var/log/xahaud xahaud:latest` + +En el comando anterior, puedes ajustar la bandera `-d` para alternar entre modo desacoplado o no, las banderas `-p xxxx:xxxx` que definen el mapeo de puertos, la bandera `--name xahaud` para cambiar el nombre del contenedor, y la bandera `-v /ruta/en/host:/ruta/en/contenedor` para cambiar dónde se almacenan los datos persistentes en el sistema operativo subyacente. Si se ejecuta en modo desacoplado, los logs pueden verse con `docker logs -f xahaud`. + +### Sistemas operativos amnésicos + +Configurar un sistema Linux para que olvide completamente todo el software instalado o modificado durante la ejecución proporciona una vía sencilla para recuperarse de errores de compilación. Normalmente, un sistema operativo amnésico se ejecuta como una máquina virtual con una gran cantidad de memoria disponible, ya que todos los cambios se escriben en memoria en vez de disco. Compilar xahaud puede requerir más de 20 GB de memoria si todas las dependencias y requisitos se instalan en un sistema de archivos overlay basado en memoria. Suele ser posible instalar la mayoría de las dependencias (usando `apt` o `dnf`) antes de hacer el sistema amnésico, reduciendo así la memoria necesaria. + +#### Configurar un sistema operativo amnésico usando una máquina virtual basada en Debian ``` -### Sistemas amnésicos +# Instalar el paquete 'overlayroot' -Permiten restaurar el sistema tras reiniciar. +apt update && apt install overlayroot -#### Debian +# Actualizar el archivo de configuración (/etc/overlayroot.conf) para habilitar un sistema de archivos overlay en memoria. -``` +sudo sed -i 's/^overlayroot=.*/overlayroot="tmpfs:swap=1,recurse=0"/' /etc/overlayroot.conf + +# Reconstruir initramfs -apt install overlayroot -sudo sed -i '...' /etc/overlayroot.conf update-initramfs -u + +# Reiniciar en el overlay + reboot -``` +# Después de reiniciar, es posible volver a montar el sistema de archivos overlay con más memoria, ya que por defecto solo el 50% de la memoria disponible se dedica al overlayfs. -#### RHEL +# Al redimensionar la memoria, asegúrate de que quede memoria disponible para el sistema. Lo siguiente volverá a montar el overlayfs para usar 30G de memoria; ajusta según sea necesario. + +# También es posible usar un archivo systemd para habilitar cambios persistentes en el tamaño del overlayfs. + +sudo mount -o remount,size=30G /media/root-rw ``` -dnf install dracut +#### Configurar un sistema operativo amnésico usando una máquina virtual basada en RHEL +``` + +# Asegurarse de que dracut está instalado + +dnf install dracut -y + +# Configurar dracut para soportar el overlay + +printf 'add_drivers+=" overlay "\n' > /etc/dracut.conf.d/overlay.conf # Usa esta línea para RHEL 9 +printf 'add_drivers+=" overlay "\nadd_dracutmodules+=" overlayfs "\n' > /etc/dracut.conf.d/overlay.conf # Usa esta línea para RHEL 10 + +# Reconstruir + dracut -f + +# Actualizar la imagen de arranque para usar un overlay volátil de systemd + grubby --update-kernel=ALL --args="systemd.volatile=overlay" ``` -### Desactivar modo amnésico +#### Compilar xahaud +Una vez creada una máquina virtual amnésica con memoria suficiente, es posible compilar xahaud siguiendo las instrucciones [anteriores en esta página](#_top). -Debian: +#### Desactivar la amnesia +Instalar actualizaciones de software o realizar otras tareas que deban persistir requerirá que los usuarios desactiven la amnesia. Esto puede hacerse temporal o permanentemente. Algunas actualizaciones de software requieren configuración adicional tras reiniciar, por lo que se recomienda desactivar la amnesia por segunda vez al reiniciar después de una actualización. -``` +Para desactivar la amnesia en sistemas basados en Debian: +1. Pulsa `e` para editar la entrada de arranque de Ubuntu. +2. En la línea que comienza con `linux...`, edita o añade la opción `overlayroot=` para que quede como `overlayroot=disabled`. Esto permitirá un arranque puntual en un sistema con almacenamiento persistente. +3. Para desactivar la amnesia permanentemente, ejecuta `sudo sed -i '/^overlayroot=/c\overlayroot="disabled"' /etc/overlayroot.conf` para cambiar `overlayroot="disabled"` en el archivo `/etc/overlayroot.conf`. Después actualiza initramfs con `sudo update-initramfs -u`. -overlayroot=disabled - -``` - -RHEL: - -``` - -grubby --remove-args="systemd.volatile=overlay" - -``` \ No newline at end of file +Para desactivar la amnesia en sistemas basados en RHEL 9/10: +1. Pulsa `e` en el menú de arranque para editar las opciones. +2. Elimina la opción `systemd.volatile=overlay`. +3. Pulsa `F10` para arrancar. +4. Para desactivar la amnesia permanentemente, ejecuta `grubby --update-kernel=ALL --remove-args="systemd.volatile=overlay"` \ No newline at end of file diff --git a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx index 72ebd7b..83bb4e5 100644 --- a/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx +++ b/src/content/docs/es/docs/protocol-reference/transactions/transaction-types/paymentchannelcreate.mdx @@ -30,7 +30,7 @@ _Añadido por la enmienda \[PayChan]\[]._ | Campo | Tipo JSON | \[Tipo Interno]\[] | Descripción | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/##especificando-montos-de-moneda) | Amount | Monto a deducir del saldo del emisor y reservar en este canal. Mientras el canal esté abierto, el Amount solo puede ir a la dirección `Destination`. Cuando el canal se cierra, cualquier Amount no reclamado se devuelve al saldo de la dirección fuente. | +| `Amount` | [Monto de Moneda](/es/docs/protocol-reference/data-types/currency-formats/#especificando-montos-de-moneda) | Amount | Monto a deducir del saldo del emisor y reservar en este canal. Mientras el canal esté abierto, el Amount solo puede ir a la dirección `Destination`. Cuando el canal se cierra, cualquier Amount no reclamado se devuelve al saldo de la dirección fuente. | | `Destination` | String | AccountID | Dirección para recibir claims contra este canal. También conocida como la "dirección de destino" del canal. No puede ser la misma que el emisor (`Account`). | | `SettleDelay` | Number | UInt32 | Tiempo que la dirección fuente debe esperar antes de cerrar el canal si tiene Amount no reclamado. | | `PublicKey` | String | Blob | La clave pública de 33 bytes del par de claves que la fuente usará para firmar claims contra este canal, en hexadecimal. Puede ser cualquier clave pública secp256k1 o Ed25519. | From 7c6b554d415d9cf06127f61179b923c71615e986 Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 9 Apr 2026 12:51:09 +0900 Subject: [PATCH 12/24] Refactor i18n to use Astro's built-in Astro.currentLocale and getRelativeLocaleUrl() instead of manual URL parsing --- astro.config.mjs | 1 + src/components/Footer.astro | 49 +++++++++++++++++++++-------------- src/components/Header.jsx | 6 ++--- src/layouts/BaseLayout.astro | 5 ++-- src/layouts/DocsLayout.astro | 2 +- src/layouts/IndexLayout.astro | 16 +++++------- 6 files changed, 42 insertions(+), 37 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 9fbc5f0..83ad662 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -16,6 +16,7 @@ export default defineConfig({ starlight({ title: 'Xahau Docs', description: 'Documentation for the Xahau blockchain', + defaultLocale: 'root', locales: { root: { label: 'English', lang: 'en' }, es: { label: 'Español', lang: 'es' }, diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 479381d..074511e 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,11 +1,9 @@ --- import { Image } from 'astro:assets' + import { getRelativeLocaleUrl } from 'astro:i18n' import logo from '../assets/xahau-logo.svg' - const LOCALES = ['es', 'ja'] - const firstSegment = Astro.url.pathname.split('/')[1] - const locale = LOCALES.includes(firstSegment) ? firstSegment : 'en' - const p = locale !== 'en' ? `/${locale}` : '' + const locale = Astro.currentLocale ?? 'en' const translations = { en: { @@ -78,7 +76,7 @@ class="flex-none container mx-auto py-12 max-w-7xl p-6 grid grid-cols-1 md:grid-cols-10 gap-4" >

{t.connect}

- {t.events} - Dev Contest + {t.events} + Dev Contest X GitHub -
+
diff --git a/src/layouts/IndexLayout.astro b/src/layouts/IndexLayout.astro index ce87a2a..ffc8d24 100644 --- a/src/layouts/IndexLayout.astro +++ b/src/layouts/IndexLayout.astro @@ -1,10 +1,10 @@ --- import '../styles/main.css' + import { getRelativeLocaleUrl } from 'astro:i18n' import worldmap from '../assets/worldmap.svg' import type { IndexLocale } from '../i18n/indexTranslations' import { indexTranslations } from '../i18n/indexTranslations' import BaseLayout from '../layouts/BaseLayout.astro' - import { getRelativeLocaleUrl } from 'astro:i18n' const _frontmatter = Astro.props.frontmatter @@ -95,8 +95,9 @@ {i.feat_more} + {i.feat_more} +
From 7a58ebc9cbf464d68908238ebcc91f2257b51507 Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 9 Apr 2026 14:25:34 +0900 Subject: [PATCH 14/24] fix --- src/components/Header.jsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/Header.jsx b/src/components/Header.jsx index ce73576..eba9007 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -21,7 +21,6 @@ import { useState } from 'react' import logo from '../assets/xahau-logo.svg' - const languages = [ { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'es', label: 'Español', flag: '🇪🇸' }, @@ -130,9 +129,8 @@ export default function Header(props) { ] const pathSegments = pathname.slice(1).split('/') - const activeSegment = currentLocale !== 'en' - ? pathSegments[1] - : pathSegments[0] + const activeSegment = + currentLocale !== 'en' ? pathSegments[1] : pathSegments[0] const dropdownItemClass = 'group relative flex items-center gap-x-6 p-2 text-sm/6' From f4ef7b22fcc4351068eebeb3e1f5566e0e73ffc5 Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 9 Apr 2026 14:48:46 +0900 Subject: [PATCH 15/24] remove country flags --- src/components/Header.jsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/Header.jsx b/src/components/Header.jsx index eba9007..ebcd37c 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -22,9 +22,9 @@ import { useState } from 'react' import logo from '../assets/xahau-logo.svg' const languages = [ - { code: 'en', label: 'English', flag: '🇬🇧' }, - { code: 'es', label: 'Español', flag: '🇪🇸' }, - { code: 'ja', label: '日本語', flag: '🇯🇵' }, + { code: 'en', label: 'English' }, + { code: 'es', label: 'Español' }, + { code: 'ja', label: '日本語' }, ] const nav = { @@ -228,7 +228,6 @@ export default function Header(props) { href={langUrl(lang.code)} className={`no-underline flex items-center gap-x-2 px-3 py-2 text-sm text-white hover:bg-white/10 ${currentLocale === lang.code ? 'font-bold' : 'font-regular'}`} > - {lang.flag} {lang.label} {currentLocale === lang.code && ( From fd9344d44c3704e0582e9a9ac1946ae5bd536ff9 Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 9 Apr 2026 16:59:24 +0900 Subject: [PATCH 16/24] add es pages --- .../es/docs/compliance/security-audit.mdx | 67 +++-------- src/pages/es/privacy-policy.mdx | 105 ++++++++++++++++++ 2 files changed, 118 insertions(+), 54 deletions(-) create mode 100644 src/pages/es/privacy-policy.mdx diff --git a/src/content/docs/es/docs/compliance/security-audit.mdx b/src/content/docs/es/docs/compliance/security-audit.mdx index c5b0b68..511dbf7 100644 --- a/src/content/docs/es/docs/compliance/security-audit.mdx +++ b/src/content/docs/es/docs/compliance/security-audit.mdx @@ -1,65 +1,24 @@ --- -title: Auditoría de Seguridad -description: >- - Xahau se somete a auditorías de seguridad periódicas realizadas por terceros para - garantizar la integridad, fiabilidad y seguridad de su infraestructura y código. +title: Auditorías de Seguridad --- +import { Aside } from '@astrojs/starlight/components'; -### Auditoría de Seguridad +La enmienda Hooks, parte integral de la infraestructura de contratos inteligentes de XRPL, ha superado una auditoría de seguridad detallada realizada por FYEO. La auditoría examinó la implementación del framework de Hooks, incluyendo la API de Hooks, funciones auxiliares y el entorno de ejecución. -La seguridad es un pilar fundamental del ecosistema Xahau. Para garantizar los más altos estándares, el código y la infraestructura de Xahau se someten regularmente a auditorías de seguridad independientes realizadas por terceros especializados. +Sin detectarse problemas de seguridad graves y con todos los problemas menores resueltos, esta auditoría sirve como testimonio de nuestro compromiso con la seguridad y la solidez de Hooks. -Estas auditorías tienen como objetivo identificar posibles vulnerabilidades, validar la robustez del sistema y asegurar que las mejores prácticas de seguridad se implementan correctamente. +Al permitir lógica de transacciones inteligentes directamente en la Capa 1 de XRPL, Hooks aporta una mayor flexibilidad para adaptar las aplicaciones a sus necesidades específicas, inspirando una mayor innovación dentro del ecosistema XRPL. -### Objetivos de las auditorías +Los desarrolladores ahora cuentan con herramientas robustas para crear y desplegar lógica personalizada, accesibles en nuestra testnet. -Las auditorías de seguridad en Xahau están diseñadas para: +### **Garantía de Seguridad Continua** -* Detectar vulnerabilidades en el código fuente -* Evaluar la arquitectura del sistema y sus posibles riesgos -* Verificar la correcta implementación de medidas de seguridad -* Revisar dependencias externas y posibles vectores de ataque -* Asegurar la resiliencia frente a ataques conocidos +La finalización exitosa de la auditoría no es solo un hito, sino una base fundamental para la seguridad y sostenibilidad continuas de la red Hooks. -### Alcance +Con todas las vulnerabilidades identificadas resueltas, la enmienda Hooks está preparada para impulsar la innovación de forma segura en Xahau. -Las auditorías pueden incluir: + -* Código del nodo (`xahaud`) -* Hooks y lógica en cadena -* Infraestructura de red -* APIs y servicios asociados -* Integraciones externas - -### Resultados - -Los resultados de las auditorías se documentan y se revisan internamente para: - -* Priorizar y corregir vulnerabilidades detectadas -* Mejorar procesos de desarrollo seguro -* Fortalecer la arquitectura del sistema - -En la medida de lo posible, los informes de auditoría o sus resúmenes se comparten con la comunidad para fomentar la transparencia. - -### Frecuencia - -Las auditorías se realizan de forma periódica, especialmente: - -* Antes de lanzamientos importantes -* Tras cambios significativos en el protocolo -* Cuando se incorporan nuevas funcionalidades críticas - -### Participación de terceros - -Xahau colabora con empresas especializadas en ciberseguridad para llevar a cabo estas auditorías. Estas entidades aportan una visión externa e independiente que ayuda a reforzar la seguridad del ecosistema. - -### Mejora continua - -La auditoría de seguridad no es un proceso puntual, sino continuo. Xahau mantiene un compromiso constante con la mejora de sus sistemas mediante: - -* Revisión continua del código -* Programas de divulgación responsable -* Monitorización activa de la red -* Actualizaciones y parches de seguridad - -La combinación de auditorías externas y buenas prácticas internas permite a Xahau ofrecer una plataforma robusta y segura para sus usuarios. \ No newline at end of file +¡Hacia un futuro más brillante e innovador con Xahau! diff --git a/src/pages/es/privacy-policy.mdx b/src/pages/es/privacy-policy.mdx new file mode 100644 index 0000000..64d1d46 --- /dev/null +++ b/src/pages/es/privacy-policy.mdx @@ -0,0 +1,105 @@ +--- +layout: ../layouts/PageLayout.astro +title: Política de Privacidad +description: Política de Privacidad de xahau.network +--- + +# Política de Privacidad + +_Última actualización: 1 de julio de 2025_ + +Esta Política de Privacidad explica cómo recopilamos, utilizamos y protegemos sus datos personales cuando visita [xahau.network](https://xahau.network). Nos comprometemos a cumplir con el Reglamento General de Protección de Datos (RGPD) y a respetar sus derechos. + +## 1. Quiénes Somos + +El sitio web xahau.network es operado por: + +**INFTF MTU** +Número de registro: 80586600 +Dirección: Ringtee 15, Kuressaare, Estonia 93815 +Correo electrónico: [info@inftf.org](mailto:info@inftf.org) + +INFTF MTU es el responsable del tratamiento de los datos de este sitio web. + +## 2. Datos que Recopilamos + +Podemos recopilar las siguientes categorías de datos personales: + +- **Datos de uso** (por ejemplo, páginas visitadas, tiempo de permanencia en el sitio) +- **Datos analíticos** (por ejemplo, dirección IP, tipo de navegador, información del dispositivo) + +No recopilamos **datos identificativos personales** como su nombre o dirección de correo electrónico, a menos que usted los proporcione activamente. + +## 3. Cómo Recopilamos los Datos + +Recopilamos datos mediante: + +- **Cookies y tecnologías similares** + (Se le solicita su consentimiento cuando visita el sitio por primera vez.) + +- **Herramientas de analítica de terceros** + (Estas herramientas pueden recopilar información de uso con fines estadísticos y de seguridad.) + +## 4. Finalidad del Tratamiento de Datos + +Utilizamos los datos recopilados para los siguientes fines: + +- **Analítica**: Para comprender y mejorar el uso de nuestro sitio web. +- **Seguridad**: Para detectar y prevenir abusos o actividades maliciosas. + +## 5. Base Legal del Tratamiento + +Tratamos sus datos conforme a las siguientes bases legales: + +- **Consentimiento**: Para analítica y cookies no esenciales. +- **Intereses legítimos**: Para garantizar la seguridad e integridad del sitio web. + +## 6. Cookies y Tecnologías de Seguimiento + +Utilizamos cookies para recopilar datos analíticos y mejorar el rendimiento del sitio web. Cuando visita nuestro sitio, un banner le permite elegir si desea aceptar o rechazar cookies no esenciales. + +Para más información, consulte nuestra [Política de Cookies](/privacy-policy) (enlace por añadir). + +## 7. Cesión de Datos + +No compartimos sus datos personales con terceros. + +## 8. Conservación de Datos + +Conservamos los datos analíticos durante un máximo de **12 meses**, tras lo cual se eliminan o se anonimizan. + +## 9. Transferencias de Datos Fuera de la UE + +No transferimos datos personales fuera de la Unión Europea. + +## 10. Sus Derechos según el RGPD + +Usted tiene derecho a: + +- Acceder a sus datos personales +- Solicitar la rectificación de datos inexactos +- Solicitar la eliminación de sus datos +- Oponerse o limitar el tratamiento +- Retirar su consentimiento en cualquier momento (cuando el tratamiento se base en el consentimiento) +- Presentar una reclamación ante una autoridad de control + +Para ejercer sus derechos, contáctenos en [info@inftf.org](mailto:info@inftf.org). + +## 11. Limitaciones de Edad + +Nuestro sitio web no está específicamente dirigido a menores, pero no imponemos restricciones de edad. + +## 12. Autoridad de Control + +Tiene derecho a presentar una reclamación ante la Autoridad de Protección de Datos de Estonia: + +**Andmekaitse Inspektsioon** +Sitio web: [https://www.aki.ee](https://www.aki.ee) +Teléfono: +372 627 4135 +Correo electrónico: [info@aki.ee](mailto:info@aki.ee) + +## 13. Actualizaciones de esta Política + +Podemos actualizar esta política ocasionalmente. La versión más reciente estará siempre disponible en esta página, y la fecha de la última actualización se indicará en la parte superior. + +Para cualquier pregunta sobre esta Política de Privacidad, puede contactarnos en [info@inftf.org](mailto:info@inftf.org). From 0fc18ddb61662509c688ceae1fde929736c32b1f Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 9 Apr 2026 17:05:36 +0900 Subject: [PATCH 17/24] fix path to layout --- src/pages/es/privacy-policy.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/es/privacy-policy.mdx b/src/pages/es/privacy-policy.mdx index 64d1d46..503aa58 100644 --- a/src/pages/es/privacy-policy.mdx +++ b/src/pages/es/privacy-policy.mdx @@ -1,5 +1,5 @@ --- -layout: ../layouts/PageLayout.astro +layout: ../../layouts/PageLayout.astro title: Política de Privacidad description: Política de Privacidad de xahau.network --- From b5bf9077abb1834e14b1ecb795bebc2d4e6bc07e Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 9 Apr 2026 17:27:14 +0900 Subject: [PATCH 18/24] Fix Header.jsx to use getRelativeLocaleUrl --- src/components/Footer.astro | 2 +- src/components/Header.jsx | 68 ++++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src/components/Footer.astro b/src/components/Footer.astro index f34550c..ea56be3 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -67,7 +67,7 @@ }, } - const t = translations[locale] + const t = translations[locale as 'en' | 'es' | 'ja'] ---