From 0e3f5a552becebcba382a699cc954c79ad3fe095 Mon Sep 17 00:00:00 2001 From: Ben Marx Date: Wed, 26 Aug 2026 11:19:07 -0700 Subject: [PATCH 1/2] docs: point the swap page repo links at malbeclabs doublezero-offchain moves from the doublezerofoundation org to malbeclabs. Updates the three links on the SOL to 2Z swap page in all eight languages. Do not merge before the transfer. The new URLs 404 until the repo moves. --- docs/Swapping-sol-to-2z.es.md | 110 ++++++++++++++++---------------- docs/Swapping-sol-to-2z.fr.md | 95 ++++++++++++++-------------- docs/Swapping-sol-to-2z.it.md | 116 +++++++++++++++++----------------- docs/Swapping-sol-to-2z.ja.md | 116 +++++++++++++++++----------------- docs/Swapping-sol-to-2z.ko.md | 106 +++++++++++++++---------------- docs/Swapping-sol-to-2z.md | 4 +- docs/Swapping-sol-to-2z.pt.md | 96 ++++++++++++++-------------- docs/Swapping-sol-to-2z.zh.md | 114 ++++++++++++++++----------------- 8 files changed, 371 insertions(+), 386 deletions(-) diff --git a/docs/Swapping-sol-to-2z.es.md b/docs/Swapping-sol-to-2z.es.md index 87cb14d..2d288fe 100644 --- a/docs/Swapping-sol-to-2z.es.md +++ b/docs/Swapping-sol-to-2z.es.md @@ -1,59 +1,57 @@ -**Revise el Descargo de Responsabilidad antes de acceder o usar el código o cualquier material relacionado.** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." +**Revise el Aviso Legal antes de acceder o utilizar el código o cualquier material relacionado.** + - +??? warning "Aviso Legal" + + Este documento y el código asociado se proporcionan únicamente con fines informativos y técnicos. La funcionalidad de conversión de tokens descrita en este documento es no custodial: los usuarios interactúan directamente con los contratos inteligentes subyacentes y conservan el control total de sus activos en todo momento. -??? warning "Descargo de Responsabilidad" + El sistema puede depender de o interactuar con código de terceros, fuentes de datos o mecanismos de precios y comisiones (por ejemplo, contratos inteligentes, APIs o exchanges descentralizados) que no son desarrollados, controlados ni revisados por el/los desarrollador(es) o editor(es). No se realiza ninguna declaración ni garantía respecto a la precisión, funcionalidad o seguridad de cualquier componente de terceros. + El/los desarrollador(es) y editor(es) de este código no garantizan su precisión, integridad o disponibilidad continuada. El código y los materiales relacionados se proporcionan "tal cual" y pueden contener errores, fallos o vulnerabilidades. Su uso es enteramente bajo su propio riesgo. + El/los desarrollador(es) y editor(es) no reciben ninguna comisión en relación con el uso de estos contratos. No tienen obligación alguna de mantener, actualizar o dar soporte al código o la documentación relacionada. - Este documento y el código asociado se proporcionan únicamente con fines informativos y técnicos. La funcionalidad de conversión de tokens descrita aquí es sin custodia: los usuarios interactúan directamente con los contratos inteligentes subyacentes y retienen el control total de sus activos en todo momento. + Este documento no constituye una oferta de venta, una solicitud de compra ni una recomendación para participar en ninguna conversión de tokens, intercambio u otra transacción. No se proporciona asesoramiento legal, financiero ni de inversión. + Los usuarios son los únicos responsables de determinar la legalidad de sus actividades. Deben revisar las leyes y regulaciones aplicables en su jurisdicción y consultar a asesores independientes antes de utilizar el código o participar en cualquier conversión. Su uso está prohibido cuando sea ilegal, incluyendo por personas o entidades sujetas a sanciones o en jurisdicciones restringidas. - El sistema puede depender de o interactuar con código, fuentes de datos o mecanismos de precios y tarifas de terceros (por ejemplo, contratos inteligentes, APIs o exchanges descentralizados) que no son desarrollados, controlados ni revisados por los desarrolladores o publicadores. No se hace ninguna declaración o garantía sobre la precisión, funcionalidad o seguridad de ningún componente de terceros. - Los desarrolladores y publicadores de este código no garantizan su exactitud, integridad o disponibilidad continua. El código y los materiales relacionados se proporcionan "tal cual" y pueden contener errores, bugs o vulnerabilidades. El uso es completamente bajo su propio riesgo. - Los desarrolladores y publicadores no reciben ninguna tarifa en conexión con el uso de estos contratos. No tienen ninguna obligación de mantener, actualizar o apoyar el código o la documentación relacionada. + En la máxima medida permitida por la ley, el/los desarrollador(es) y editor(es) declinan toda responsabilidad por cualquier pérdida, daño o reclamación que surja de o en relación con el uso del código o la participación en la conversión. - Este documento no constituye una oferta de venta, una solicitud de compra ni una recomendación para participar en ninguna conversión de tokens, swap u otra transacción. No se proporciona asesoramiento legal, financiero ni de inversión. - Los usuarios son los únicos responsables de determinar la legalidad de sus actividades. Deben revisar las leyes y regulaciones aplicables en su jurisdicción y consultar asesores independientes antes de usar el código o participar en cualquier conversión. El uso está prohibido donde sea ilegal, incluso por personas o entidades sujetas a sanciones o en jurisdicciones restringidas. + La revisión y el uso de este documento y del código asociado están sujetos a los [Términos y Condiciones del Sitio Web](https://doublezero.xyz/terms) y los [Términos y Condiciones del Protocolo](https://doublezero.xyz/terms-protocol). - En la medida máxima permitida por la ley, los desarrolladores y publicadores rechazan toda responsabilidad por cualquier pérdida, daño o reclamación que surja de o en relación con el uso del código o la participación en la conversión. +El protocolo DoubleZero recauda ingresos denominados en SOL de sus usuarios validadores, pero distribuye recompensas denominadas en 2Z a los contribuyentes. Por lo tanto, debe convertir SOL en 2Z. - La revisión y el uso de este documento y el código asociado están sujetos a los [Términos y Condiciones del Sitio Web](https://doublezero.xyz/terms) y los [Términos y Condiciones del Protocolo](https://doublezero.xyz/terms-protocol). +**Para ello, los participantes elegibles pueden operar contra un contrato de intercambio de DoubleZero, comprando SOL del contrato y vendiendo 2Z. El precio se basa en los feeds de precios de Pyth con un mecanismo de descuento programático.** -El protocolo DoubleZero recauda ingresos denominados en SOL de sus validadores usuarios, pero distribuye recompensas denominadas en 2Z a los contribuidores. Por lo tanto, debe convertir SOL en 2Z. +Esta breve guía explica cómo utilizar el programa. -**Para hacerlo, los participantes elegibles pueden operar contra un contrato de swap de DoubleZero, comprando SOL del contrato y vendiéndolo a 2Z. Los precios se basan en feeds de precios de Pyth con un mecanismo de descuento programático.** - -Esta breve guía explica cómo usar el programa. - -***Revise el Descargo de Responsabilidad al final de este documento antes de acceder o usar el código o cualquier material relacionado.*** +***Revise el Aviso Legal al final de este documento antes de acceder o utilizar el código o cualquier material relacionado.*** --- ## Diseño del Programa -El programa de swap es efectivamente un pool de liquidez unilateral que vende SOL en un tamaño de lote fijo de 1 SOL por operación. Cualquier participante elegible puede retirar SOL del programa depositando 2Z, a un precio determinado por un precio de oráculo de Pyth y un descuento dinámico. Con el tiempo, esto ejecuta el objetivo del programa de convertir tokens nativos en 2Z. +El programa de intercambio es efectivamente un pool de liquidez unilateral que vende SOL en un tamaño de lote fijo de 1 SOL por operación. Cualquier participante elegible puede retirar SOL del programa depositando 2Z, a un precio determinado por un precio oráculo de Pyth y un descuento dinámico. Con el tiempo, esto cumple el objetivo del programa de convertir tokens nativos en 2Z. -Para utilizarlo, un trader debe proporcionar dos precios recientes de Pyth (SOL/USD y 2Z/USD) y una cantidad de 2Z. Luego el programa calcula el 2Z necesario para comprar ese 1 SOL basándose en el precio implícito SOL/2Z. Luego realiza algunos pasos adicionales: +Para utilizarlo, un operador debe proporcionar dos precios recientes de Pyth (SOL/USD y 2Z/USD) y una cantidad de 2Z. El programa entonces calcula la cantidad de 2Z necesaria para comprar ese 1 SOL basándose en el precio implícito SOL/2Z. Luego realiza algunos pasos adicionales: -- Comprueba que los precios de Pyth sean suficientemente recientes, es decir, que no tengan más de 5 segundos de antigüedad. -- Comprueba que los intervalos de confianza de los dos precios sean suficientemente pequeños. Es decir, la suma de dos desviaciones estándar de Laplace (es decir, el parámetro `conf` en el precio de Pyth) para los dos precios, normalizada por sus niveles, debe ser menor o igual a 30 puntos básicos. -- Ajusta el precio SOL/2Z mediante un descuento dinámico, expresado como porcentaje del precio de Pyth. Este descuento es una función del tiempo desde la última operación. La fórmula siguiente especifica el descuento, suponiendo que la última operación se realizó en el slot $s_{\text{last}}$ y el slot actual es $s_{\text{now}}$. (Por ejemplo, si han transcurrido 200 slots desde la última operación, el descuento es de 40 puntos básicos.) +- Verifica que los precios de Pyth sean suficientemente recientes, es decir, que no tengan más de 5 segundos de antigüedad. +- Verifica que los intervalos de confianza de los dos precios sean suficientemente pequeños. Es decir, la suma de dos desviaciones estándar de Laplace (es decir, el parámetro `conf` en el precio de Pyth) para los dos precios, normalizada por sus niveles, debe ser menor o igual a 30 puntos básicos. +- Ajusta el precio SOL/2Z mediante un descuento dinámico, expresado como un porcentaje del precio de Pyth. Este descuento es una función del tiempo transcurrido desde la última operación. La fórmula a continuación especifica el descuento, asumiendo que la última operación se realizó en el slot $s_{\text{last}}$ y el slot actual es $s_{\text{now}}$. (Por ejemplo, si han transcurrido 200 slots desde la última operación, el descuento es de 40 puntos básicos.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -En este punto, si el trader ha proporcionado suficiente 2Z para ejecutar la transacción a este precio calculado (incluyendo el descuento), se ejecuta a este precio calculado. Devuelve al trader la cantidad de SOL comprada y cualquier 2Z excedente. +En este punto, si el operador ha proporcionado suficiente 2Z para ejecutar la transacción a este precio calculado (incluyendo el descuento), se ejecuta a este precio calculado. Se devuelve al operador la cantidad comprada de SOL y cualquier excedente de 2Z. -Luego el contrato no permite más operaciones para ese slot. Esto es para evitar que el contrato pague un slippage excesivamente alto si el precio de Pyth está muy lejos del precio real en un momento dado de maneras que los filtros existentes no detectan. +El contrato entonces no permite más operaciones para ese slot. Esto es para evitar que el contrato pague un deslizamiento excesivamente alto en caso de que el precio de Pyth esté lejos del precio real en un momento dado de maneras que los filtros existentes no detecten. --- -## Ejecución Atómica Sin Gas +## Ejecución Atómica sin Gas -Esta sección detallará cómo usar el comando `harvest-dz`. Este comando realizará atómicamente 2 acciones. -1. El comando solicita una cotización de Jupiter frente al programa de conversión nativo SOL <> 2Z. -2. Cuando la ruta de Jupiter produce más 2Z por SOL de lo que requiere el programa de conversión nativo, `harvest-2z` ejecuta un swap, devolviendo a su billetera 1 SOL más la diferencia en 2Z. +Esta sección detallará cómo utilizar el comando `harvest-dz`. Este comando realizará atómicamente 2 acciones. +1. El comando solicita una cotización de Jupiter frente al programa nativo de conversión SOL <> 2Z. +2. Cuando la ruta de Jupiter ofrece más 2Z por SOL de lo que requiere el programa de conversión nativo, `harvest-2z` ejecuta un intercambio, devolviendo a su billetera 1 SOL más la diferencia en 2Z. ### Cosechar 2Z @@ -65,7 +63,7 @@ La salida se parecerá a: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -El comando también puede simularse con el argumento `--dry-run`. La ejecución en seco producirá logs del programa y una salida que se asemejará a: +El comando también puede simularse con el argumento `--dry-run`. La ejecución en seco producirá registros del programa y una salida similar a: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -73,11 +71,11 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL --- -## Conversión de Protocolo +## Conversión del Protocolo -Esta sección analiza la verificación de las tasas de conversión y la ejecución de la conversión usando el CLI `doublezero-solana`. Y al final, analizamos la interfaz para integraciones personalizadas con el contrato de swap de DoubleZero. +Esta sección aborda cómo verificar las tasas de conversión y ejecutar la conversión utilizando el CLI `doublezero-solana`. Y al final, discutimos la interfaz para integraciones personalizadas con el contrato de intercambio de DoubleZero. -### Cómo verificar el precio de conversión SOL/2Z a través de `doublezero-solana` +### Cómo verificar el precio de conversión SOL/2Z mediante `doublezero-solana` Para encontrar las tasas de conversión SOL/2Z en mainnet-beta, ejecute el siguiente comando: @@ -85,7 +83,7 @@ Para encontrar las tasas de conversión SOL/2Z en mainnet-beta, ejecute el sigui doublezero-solana revenue-distribution fetch sol-conversion ``` -Y la salida que vería se parecerá a: +Y la salida que verá se parecerá a: ```bash | field | description | value | note | @@ -95,11 +93,11 @@ Y la salida que vería se parecerá a: | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -El Saldo del Diario informa al usuario cuánta liquidez SOL hay en el contrato inteligente de Distribución de Ingresos. Un usuario puede operar siempre que el Saldo del Diario supere el tamaño de operación fijo de 1 SOL. +El Journal Balance informa al usuario cuánta liquidez en SOL hay en el contrato inteligente de Distribución de Ingresos. Un usuario puede operar siempre que el Journal Balance exceda el tamaño fijo de operación de 1 SOL. -La primera fila muestra el precio de conversión SOL/2Z "verdadero" a través de un oráculo offchain. La segunda fila es el precio de conversión utilizado en cadena para el swap, que simplemente ajusta el precio verdadero por el descuento algorítmico. +La primera fila muestra el precio de conversión SOL/2Z "real" a través de un oráculo fuera de cadena. La segunda fila es el precio de conversión utilizado en cadena para el intercambio, que simplemente ajusta el precio real por el descuento algorítmico. -### Cómo convertir su 2Z a SOL a través de `doublezero-solana` +### Cómo convertir sus 2Z a SOL mediante `doublezero-solana` Para convertir sus tokens 2Z a SOL, ejecute el siguiente comando: @@ -107,25 +105,25 @@ Para convertir sus tokens 2Z a SOL, ejecute el siguiente comando: doublezero-solana revenue-distribution convert-2z ``` -Por defecto, si hay suficiente liquidez de SOL y su ATA tiene suficiente 2Z para realizar el swap, esta transacción tendrá éxito. Puede ajustar más finamente el swap especificando los siguientes argumentos: +Por defecto, si hay suficiente liquidez en SOL y su ATA tiene suficiente 2Z para realizar el intercambio, esta transacción tendrá éxito. Puede ajustar más finamente el intercambio especificando los siguientes argumentos: ```bash - --limit-price El precio límite por defecto es el precio de oráculo actual SOL/2Z - --source-2z-account La cuenta de tokens debe ser propiedad del firmante. Por defecto es el ATA del firmante si no se especifica - --checked-sol-amount Verificar explícitamente la cantidad de SOL. Cuando se especifica, esta cantidad se verificará contra la cantidad de relleno fija + --limit-price Limit price defaults to the current SOL/2Z oracle price + --source-2z-account Token account must be owned by the signer. Defaults to signer ATA if not specified + --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -El precio límite especificado determina el precio en el peor caso que está dispuesto a aceptar al realizar la conversión SOL/2Z. Por ejemplo, supongamos que el precio descontado de 2Z para SOL es 800, lo que significa 800 tokens 2Z por 1 SOL. Si especifica un precio límite de 790, no está dispuesto a realizar el swap porque está requiriendo intercambiar como máximo 790 tokens 2Z por 1 SOL. Pero si especifica 810, la operación se realizará porque estaba dispuesto a intercambiar como máximo 810 tokens 2Z (y en este caso, solo habrá intercambiado 800 tokens 2Z en esta transacción). +El precio límite especificado determina el peor precio que está dispuesto a aceptar al realizar la conversión SOL/2Z. Por ejemplo, supongamos que el precio con descuento de 2Z por SOL es 800, lo que significa 800 tokens 2Z por 1 SOL. Si especifica un precio límite de 790, no está dispuesto a realizar el intercambio porque está exigiendo intercambiar como máximo 790 tokens 2Z por 1 SOL. Pero si especifica 810, la operación se ejecutará porque estaba dispuesto a intercambiar como máximo 810 tokens 2Z (y en este caso, solo habrá intercambiado 800 tokens 2Z en esta transacción). -La cuenta de tokens 2Z de origen reemplaza el ATA por defecto usando el firmante como propietario de este ATA de 2Z. Pero si tiene otra cuenta de tokens que desea usar para realizar el swap, proporcione la pubkey con este argumento. +La cuenta de tokens 2Z de origen anula la ATA predeterminada utilizando el firmante como propietario de esta ATA de 2Z. Pero si tiene otra cuenta de tokens que desea utilizar para realizar el intercambio, proporcione la pubkey correspondiente con este argumento. -Opcionalmente, puede especificar la cantidad de SOL verificada al tamaño de relleno estándar (establecido en 1 SOL al lanzamiento). Si no coincide con el tamaño de relleno del programa, el swap falla. Esto mitiga el riesgo de que el tamaño de relleno del programa cambie y usted no lo note. +Opcionalmente, puede especificar la cantidad verificada de SOL con el tamaño de llenado estándar (establecido en 1 SOL en el lanzamiento). Si no coincide con el tamaño de llenado del programa, el intercambio falla. Esto mitiga el riesgo de que el tamaño de llenado del programa cambie y usted no lo note. ### Interfaz para Comprar SOL -La interfaz y el CLI `doublezero-solana` viven en [este repositorio](https://github.com/doublezerofoundation/doublezero-offchain). El código fuente de la interfaz del contrato de swap de DoubleZero se puede encontrar [aquí](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). El ID del programa es `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +La interfaz y el CLI `doublezero-solana` se encuentran en [este repositorio](https://github.com/malbeclabs/doublezero-offchain). El código fuente de la interfaz del contrato de intercambio de DoubleZero se puede encontrar [aquí](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). El program ID es `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. -Una forma conveniente de generar las cuentas necesarias para la instrucción de compra de SOL es usar el método `new` (que se encuentra en *instruction/account.rs*). +Una forma conveniente de generar las cuentas necesarias para la instrucción de compra de SOL es usando el método `new` (que se encuentra en *instruction/account.rs*). ```rust pub fn new( @@ -136,12 +134,12 @@ pub fn new( ) -> Self; ``` -La `fill_registry_key` se puede obtener ya sea del `ProgramState` +El `fill_registry_key` se puede obtener del `ProgramState` ```rust pub struct ProgramState { pub admin_key: Pubkey, - pub fills_registry_key: Pubkey, // esta clave + pub fills_registry_key: Pubkey, // this key pub is_paused: bool, pub configuration_registry_bump: u8, pub program_state_bump: u8, @@ -152,13 +150,13 @@ pub struct ProgramState { } ``` -Alternativamente, puede llamar a `getProgramAccounts` a través del RPC de Solana con su discriminador. Pero recomendamos almacenar en caché esta pubkey ya que nunca cambiará. +Alternativamente, puede llamar a `getProgramAccounts` a través de Solana RPC con su discriminador. Pero recomendamos almacenar en caché esta pubkey ya que nunca cambiará. -La `user_key` es un firmante para la instrucción de compra de SOL y debe ser el propietario de la `user_token_account_key`. Como se describió anteriormente, esto NO necesita ser un ATA. Siempre que su cuenta de tokens 2Z sea propiedad de la `user_key`, esta instrucción tendrá éxito. +El `user_key` es un firmante para la instrucción de compra de SOL y debe ser el propietario del `user_token_account_key`. Como se describió anteriormente, esto NO necesita ser una ATA. Siempre que su cuenta de tokens 2Z sea propiedad del `user_key`, esta instrucción tendrá éxito. -La estructura `BuySolAccounts` implementa `Into>` para que pueda generar todos los metadatos de cuenta que necesita para construir la instrucción. +La estructura `BuySolAccounts` implementa `Into>` para que pueda generar todos los account metas que necesita para construir la instrucción. -Los datos de instrucción son: +Los datos de la instrucción son ```rust SolConversionInstructionData::BuySol { @@ -167,9 +165,9 @@ Los datos de instrucción son: }, ``` -Estos datos de instrucción están serializados en Borsh y tienen un selector Anchor de 8 bytes, que todo se serializará cuando se use `BorshSerialize::serialize`. +Estos datos de instrucción se serializan con Borsh y tienen un selector Anchor de 8 bytes, que se serializará completamente al usar `BorshSerialize::serialize`. -Los datos de precio del oráculo se pueden obtener desde este endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Los datos son deserializables con serde usando la estructura OraclePriceData que se encuentra en *oracle.rs*. +Los datos del precio del oráculo se pueden obtener desde este endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Los datos son deserializables con serde usando la estructura OraclePriceData que se encuentra en *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -Ejemplo de cómo obtener usando el [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): +Ejemplo de cómo obtenerlo usando el [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): ```rust use anyhow::{Context, Result}; @@ -202,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -Con el ID del programa, las cuentas y los datos de instrucción, debería poder construir la instrucción para comprar SOL del contrato de swap de DoubleZero. +Con el program ID, las cuentas y los datos de instrucción, debería poder construir la instrucción para comprar SOL del contrato de intercambio de DoubleZero. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.fr.md b/docs/Swapping-sol-to-2z.fr.md index fbc2adb..08fc226 100644 --- a/docs/Swapping-sol-to-2z.fr.md +++ b/docs/Swapping-sol-to-2z.fr.md @@ -1,61 +1,59 @@ -**Lisez le Avertissement avant d'accéder ou d'utiliser le code ou tout matériel associé.** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." +**Consultez l'Avertissement avant d'accéder ou d'utiliser le code ou tout matériel associé.** - - + ??? warning "Avertissement" + + Ce document et le code associé sont fournis à des fins informatives et techniques uniquement. La fonctionnalité de conversion de tokens décrite ici est non-custodiale — les utilisateurs interagissent directement avec les contrats intelligents sous-jacents et conservent le contrôle total de leurs actifs à tout moment. - Ce document et le code associé sont fournis à des fins d'information et techniques uniquement. La fonctionnalité de conversion de tokens décrite ici est non-custodiale — les utilisateurs interagissent directement avec les contrats intelligents sous-jacents et conservent le plein contrôle de leurs actifs à tout moment. - - Le système peut s'appuyer sur ou interagir avec du code tiers, des sources de données, ou des mécanismes de tarification et de frais (par exemple, des contrats intelligents, des API, ou des échanges décentralisés) qui ne sont pas développés, contrôlés, ou examinés par le(s) développeur(s) ou éditeur(s). Aucune représentation ou garantie n'est faite quant à l'exactitude, la fonctionnalité, ou la sécurité de tout composant tiers. - Le(s) développeur(s) et éditeur(s) de ce code ne garantissent pas son exactitude, son exhaustivité, ou sa disponibilité continue. Le code et les matériaux associés sont fournis "tels quels", et peuvent contenir des bugs, des erreurs, ou des vulnérabilités. L'utilisation est entièrement à vos propres risques. - Le(s) développeur(s) et éditeur(s) ne reçoivent aucuns frais en rapport avec l'utilisation de ces contrats. Ils n'ont aucune obligation de maintenir, mettre à jour, ou soutenir le code ou la documentation associée. + Le système peut s'appuyer sur ou interagir avec du code tiers, des sources de données, ou des mécanismes de tarification et de frais (par exemple, des contrats intelligents, des API ou des échanges décentralisés) qui ne sont pas développés, contrôlés ou examinés par le(s) développeur(s) ou éditeur(s). Aucune déclaration ou garantie n'est faite quant à l'exactitude, la fonctionnalité ou la sécurité de tout composant tiers. + Le(s) développeur(s) et éditeur(s) de ce code ne garantissent pas son exactitude, son exhaustivité ou sa disponibilité continue. Le code et les matériels associés sont fournis « en l'état » et peuvent contenir des bugs, des erreurs ou des vulnérabilités. L'utilisation se fait entièrement à vos propres risques. + Le(s) développeur(s) et éditeur(s) ne perçoivent aucun frais en lien avec l'utilisation de ces contrats. Ils n'ont aucune obligation de maintenir, mettre à jour ou supporter le code ou la documentation associée. - Ce document ne constitue pas une offre de vente, une sollicitation d'achat, ou une recommandation de participer à une conversion de tokens, un échange ou une autre transaction. Aucun conseil juridique, financier, ou d'investissement n'est fourni. - Les utilisateurs sont seuls responsables de déterminer la légalité de leurs activités. Ils doivent examiner les lois et réglementations applicables dans leur juridiction et consulter des conseillers indépendants avant d'utiliser le code ou de participer à une conversion. L'utilisation est interdite là où elle serait illégale, y compris par des personnes ou entités soumises à des sanctions ou dans des juridictions restreintes. + Ce document ne constitue pas une offre de vente, une sollicitation d'achat, ni une recommandation de participer à une conversion de tokens, un échange ou toute autre transaction. Aucun conseil juridique, financier ou d'investissement n'est fourni. + Les utilisateurs sont seuls responsables de déterminer la légalité de leurs activités. Ils doivent examiner les lois et réglementations applicables dans leur juridiction et consulter des conseillers indépendants avant d'utiliser le code ou de participer à toute conversion. L'utilisation est interdite lorsqu'elle serait illégale, y compris par des personnes ou entités soumises à des sanctions ou dans des juridictions restreintes. - Dans la mesure maximale permise par la loi, le(s) développeur(s) et éditeur(s) déclinent toute responsabilité pour toute perte, dommage, ou réclamation découlant de ou en rapport avec l'utilisation du code ou la participation à la conversion. + Dans la mesure maximale permise par la loi, le(s) développeur(s) et éditeur(s) déclinent toute responsabilité pour toute perte, dommage ou réclamation découlant de ou en lien avec l'utilisation du code ou la participation à la conversion. - L'examen et l'utilisation de ce document et du code associé sont soumis aux [Conditions Générales du Site Web](https://doublezero.xyz/terms) et aux [Conditions Générales du Protocole](https://doublezero.xyz/terms-protocol). + La consultation et l'utilisation de ce document et du code associé sont soumises aux [Conditions Générales du Site Web](https://doublezero.xyz/terms) et aux [Conditions Générales du Protocole](https://doublezero.xyz/terms-protocol). -Le protocole DoubleZero collecte des revenus libellés en SOL auprès de ses validateurs mais distribue des récompenses libellées en 2Z aux contributeurs. Il doit donc convertir des SOL en 2Z. +Le protocole DoubleZero collecte des revenus libellés en SOL auprès de ses utilisateurs validateurs, mais distribue des récompenses libellées en 2Z aux contributeurs. Il doit donc convertir du SOL en 2Z. -**Pour ce faire, les participants éligibles peuvent trader contre un contrat de swap DoubleZero, en achetant des SOL au contrat et en vendant des 2Z. La tarification est basée sur les flux de prix Pyth avec un mécanisme de remise programmatique.** +**Pour ce faire, les participants éligibles peuvent échanger contre un contrat de swap DoubleZero, en achetant du SOL auprès du contrat et en le vendant en 2Z. La tarification est basée sur les flux de prix Pyth avec un mécanisme de remise programmatique.** Ce court guide explique comment utiliser le programme. -***Lisez l'Avertissement à la fin de ce document avant d'accéder ou d'utiliser le code ou tout matériel associé.*** +***Consultez l'Avertissement à la fin de ce document avant d'accéder ou d'utiliser le code ou tout matériel associé.*** --- ## Conception du Programme -Le programme de swap est effectivement un pool de liquidité unilatéral qui vend des SOL par lots fixes de 1 SOL par trade. Tout participant éligible peut retirer des SOL du programme en déposant des 2Z, à un prix déterminé par un prix oracle de Pyth et une remise dynamique. Au fil du temps, cela exécute l'objectif du programme de convertir les tokens natifs en 2Z. +Le programme de swap est essentiellement un pool de liquidité unilatéral qui vend du SOL par lots fixes de 1 SOL par transaction. Tout participant éligible peut retirer du SOL du programme en déposant des 2Z, à un prix déterminé par un prix oracle provenant de Pyth et une remise dynamique. Au fil du temps, cela permet au programme d'atteindre son objectif de conversion des tokens natifs en 2Z. -Pour l'utiliser, un trader doit fournir deux prix Pyth récents (SOL/USD et 2Z/USD) et une quantité de 2Z. Le programme calcule ensuite les 2Z nécessaires pour acheter ce 1 SOL sur la base du prix implicite SOL/2Z. Il prend ensuite quelques étapes supplémentaires : +Pour l'utiliser, un trader doit fournir deux prix Pyth récents (SOL/USD et 2Z/USD) ainsi qu'une quantité de 2Z. Le programme calcule ensuite la quantité de 2Z nécessaire pour acheter ce 1 SOL en se basant sur le prix implicite SOL/2Z. Il effectue ensuite quelques étapes supplémentaires : -- Il vérifie que les prix Pyth sont suffisamment frais, c'est-à-dire qu'ils ne sont pas périmés de plus de 5 secondes. -- Il vérifie que les intervalles de confiance des deux prix sont suffisamment petits. C'est-à-dire que la somme de deux écarts-types de Laplace (c'est-à-dire le paramètre `conf` dans le prix Pyth) pour les deux prix, normalisée par leurs niveaux, doit être inférieure ou égale à 30 points de base. -- Il ajuste le prix SOL/2Z par une remise dynamique, exprimée en pourcentage du prix Pyth. Cette remise est une fonction du temps écoulé depuis le dernier trade. La formule ci-dessous spécifie la remise, en supposant que le dernier trade a été effectué au slot $s_{\text{last}}$ et que le slot actuel est $s_{\text{now}}$. (Par exemple, si 200 slots se sont écoulés depuis le dernier trade, la remise est de 40 points de base.) +- Il vérifie que les prix Pyth sont suffisamment récents, c'est-à-dire qu'ils ne sont pas périmés de plus de 5 secondes. +- Il vérifie que les intervalles de confiance des deux prix sont suffisamment petits. C'est-à-dire que la somme de deux écarts-types laplaciens (soit le paramètre `conf` dans le prix Pyth) pour les deux prix, normalisés par leurs niveaux, doit être inférieure ou égale à 30 points de base. +- Il ajuste le prix SOL/2Z par une remise dynamique, exprimée en pourcentage du prix Pyth. Cette remise est une fonction du temps écoulé depuis la dernière transaction. La formule ci-dessous spécifie la remise, en supposant que la dernière transaction a été effectuée au slot $s_{\text{last}}$ et que le slot actuel est $s_{\text{now}}$. (Par exemple, si 200 slots se sont écoulés depuis la dernière transaction, la remise est de 40 points de base.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -À ce stade, si le trader a fourni suffisamment de 2Z pour exécuter la transaction à ce prix calculé (remise incluse), elle s'exécute à ce prix calculé. Il retourne au trader la quantité de SOL achetée et tout excédent de 2Z. +À ce stade, si le trader a fourni suffisamment de 2Z pour exécuter la transaction à ce prix calculé (remise incluse), elle s'exécute à ce prix calculé. Le programme retourne au trader la quantité de SOL achetée et tout excédent de 2Z. -Le contrat ne permet ensuite plus aucun trade pour ce slot. Ceci est pour empêcher le contrat de payer un slippage excessivement élevé si le prix Pyth est loin du vrai prix à un moment donné d'une manière que les filtres existants ne détectent pas. +Le contrat n'autorise ensuite plus aucune transaction pour ce slot. Cela permet d'éviter que le contrat ne paie un slippage excessivement élevé si le prix Pyth s'éloigne du véritable prix à un moment donné, de manière que les filtres existants ne détecteraient pas. --- -## Exécution Atomique Sans Gaz +## Exécution Atomique Sans Frais de Gas -Cette section détaillera comment utiliser la commande `harvest-dz`. Cette commande effectuera atomiquement 2 actions. -1. La commande demande un devis à Jupiter contre le programme de conversion natif SOL <> 2Z. -2. Lorsque la route Jupiter rapporte plus de 2Z par SOL que ce que le programme de conversion natif requiert, `harvest-2z` exécute un swap, retournant à votre portefeuille 1 SOL plus la différence en 2Z. +Cette section détaille comment utiliser la commande `harvest-dz`. Cette commande effectue atomiquement 2 actions. +1. La commande demande un devis à Jupiter par rapport au programme natif de conversion SOL <> 2Z. +2. Lorsque la route Jupiter fournit plus de 2Z par SOL que ce que le programme natif de conversion requiert, `harvest-2z` exécute un swap, retournant à votre portefeuille 1 SOL plus la différence en 2Z. -### Harvest 2Z +### Récolter des 2Z Pour exécuter, lancez la commande suivante : ``` @@ -65,7 +63,7 @@ La sortie ressemblera à : ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -La commande peut également être simulée avec l'argument `--dry-run`. Le dry-run produira des logs de programme et une sortie ressemblant à : +La commande peut également être simulée avec l'argument `--dry-run`. Le dry-run produira les logs du programme et une sortie ressemblant à : ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -75,7 +73,7 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## Conversion du Protocole -Cette section traite de la vérification des taux de conversion et de l'exécution de la conversion à l'aide de la CLI `doublezero-solana`. Et à la fin, nous discutons de l'interface pour les intégrations personnalisées avec le contrat de swap DoubleZero. +Cette section traite de la vérification des taux de conversion et de l'exécution de la conversion à l'aide du CLI `doublezero-solana`. À la fin, nous abordons l'interface pour les intégrations personnalisées avec le contrat de swap DoubleZero. ### Comment vérifier le prix de conversion SOL/2Z via `doublezero-solana` @@ -95,9 +93,9 @@ Et la sortie que vous verrez ressemblera à : | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Le Journal Balance informe l'utilisateur de la liquidité SOL disponible dans le contrat intelligent de Distribution des Revenus. Un utilisateur peut trader tant que le Journal Balance dépasse la taille de trade fixe de 1 SOL. +Le Journal Balance informe l'utilisateur de la quantité de liquidité SOL disponible dans le contrat intelligent de Distribution des Revenus. Un utilisateur peut effectuer une transaction tant que le Journal Balance dépasse la taille fixe de transaction de 1 SOL. -La première ligne affiche le "vrai" prix de conversion SOL/2Z via un oracle hors chaîne. La deuxième ligne est le prix de conversion utilisé onchain pour le swap, qui ajuste simplement le vrai prix pour la remise algorithmique. +La première ligne affiche le « vrai » prix de conversion SOL/2Z via un oracle hors chaîne. La deuxième ligne est le prix de conversion utilisé on-chain pour le swap, qui ajuste simplement le vrai prix en fonction de la remise algorithmique. ### Comment convertir vos 2Z en SOL via `doublezero-solana` @@ -107,7 +105,7 @@ Pour convertir vos tokens 2Z en SOL, exécutez la commande suivante : doublezero-solana revenue-distribution convert-2z ``` -Par défaut, si il y a suffisamment de liquidité SOL et que votre ATA a suffisamment de 2Z pour effectuer le swap, cette transaction réussira. Vous pouvez affiner davantage le swap en spécifiant les arguments suivants : +Par défaut, s'il y a suffisamment de liquidité SOL et que votre ATA dispose de suffisamment de 2Z pour effectuer le swap, cette transaction réussira. Vous pouvez affiner le swap en spécifiant les arguments suivants : ```bash --limit-price Limit price defaults to the current SOL/2Z oracle price @@ -115,17 +113,17 @@ Par défaut, si il y a suffisamment de liquidité SOL et que votre ATA a suffisa --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -Le prix limite spécifié détermine le prix dans le pire cas que vous êtes prêt à accepter lors de l'exécution de la conversion SOL/2Z. Par exemple, supposons que le prix 2Z actualisé pour le SOL soit de 800, ce qui signifie 800 tokens 2Z pour 1 SOL. Si vous spécifiez un prix limite de 790, vous n'êtes pas prêt à effectuer le swap parce que vous exigez d'échanger au maximum 790 tokens 2Z pour 1 SOL. Mais si vous spécifiez 810, le trade passera parce que vous étiez prêt à échanger au maximum 810 tokens 2Z (et dans ce cas, vous n'aurez échangé que 800 tokens 2Z dans cette transaction). +Le prix limite spécifié détermine le pire prix que vous êtes prêt à accepter lors de la conversion SOL/2Z. Par exemple, supposons que le prix 2Z avec remise pour le SOL est de 800, ce qui signifie 800 tokens 2Z pour 1 SOL. Si vous spécifiez un prix limite de 790, vous n'êtes pas disposé à effectuer le swap car vous exigez de n'échanger qu'au maximum 790 tokens 2Z pour 1 SOL. Mais si vous spécifiez 810, la transaction sera exécutée car vous étiez disposé à échanger au maximum 810 tokens 2Z (et dans ce cas, vous n'aurez échangé que 800 tokens 2Z dans cette transaction). -Le compte de tokens 2Z source remplace l'ATA par défaut en utilisant le signataire comme propriétaire de cet ATA 2Z. Mais si vous avez un autre compte de tokens que vous souhaitez utiliser pour effectuer le swap, fournissez la pubkey avec cet argument. +Le compte de tokens 2Z source remplace l'ATA par défaut en utilisant le signataire comme propriétaire de cet ATA 2Z. Mais si vous avez un autre compte de tokens que vous souhaitez utiliser pour effectuer le swap, fournissez sa pubkey avec cet argument. -Optionnellement, vous pouvez spécifier le montant SOL vérifié à la taille de remplissage standard (fixée à 1 SOL au lancement). Si elle ne correspond pas à la taille de remplissage du programme, le swap échoue. Cela atténue le risque que la taille de remplissage du programme change et que vous ne le remarquiez pas. +Optionnellement, vous pouvez spécifier le montant SOL vérifié correspondant à la taille de remplissage standard (fixée à 1 SOL au lancement). Si celui-ci ne correspond pas à la taille de remplissage du programme, le swap échoue. Cela atténue le risque que la taille de remplissage du programme change sans que vous ne le remarquiez. -### Interface pour Acheter des SOL +### Interface pour Acheter du SOL -L'interface et la CLI `doublezero-solana` se trouvent dans [ce dépôt](https://github.com/doublezerofoundation/doublezero-offchain). Le code source de l'interface du contrat de swap DoubleZero peut être trouvé [ici](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). L'ID du programme est `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +L'interface et le CLI `doublezero-solana` se trouvent dans [ce dépôt](https://github.com/malbeclabs/doublezero-offchain). Le code source de l'interface du contrat de swap DoubleZero peut être trouvé [ici](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). Le Program ID est `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. -Une façon pratique de générer les comptes nécessaires pour l'instruction d'achat de SOL est d'utiliser la méthode `new` (trouvée dans *instruction/account.rs*). +Un moyen pratique de générer les comptes nécessaires pour l'instruction d'achat de SOL est d'utiliser la méthode `new` (trouvée dans *instruction/account.rs*). ```rust pub fn new( @@ -136,7 +134,7 @@ pub fn new( ) -> Self; ``` -La `fill_registry_key` peut être récupérée soit depuis le `ProgramState` +Le `fill_registry_key` peut être récupéré soit depuis le `ProgramState` ```rust pub struct ProgramState { @@ -152,13 +150,13 @@ pub struct ProgramState { } ``` -Alternativement, vous pouvez appeler `getProgramAccounts` via le RPC Solana avec son discriminateur. Mais nous recommandons de mettre cette pubkey en cache car elle ne changera jamais. +Alternativement, vous pouvez appeler `getProgramAccounts` via Solana RPC avec son discriminateur. Mais nous recommandons de mettre en cache cette pubkey car elle ne changera jamais. -La `user_key` est un signataire pour l'instruction d'achat de SOL et doit être le propriétaire du `user_token_account_key`. Comme décrit ci-dessus, cela N'a PAS besoin d'être un ATA. Tant que votre compte de tokens 2Z est détenu par la `user_key`, cette instruction réussira. +Le `user_key` est un signataire pour l'instruction d'achat de SOL et doit être le propriétaire du `user_token_account_key`. Comme décrit ci-dessus, il n'est PAS nécessaire que ce soit un ATA. Tant que votre compte de tokens 2Z est détenu par le `user_key`, cette instruction réussira. -La struct `BuySolAccounts` implémente `Into>` afin que vous puissiez générer tous les account metas dont vous avez besoin pour construire l'instruction. +La structure `BuySolAccounts` implémente `Into>`, ce qui vous permet de générer toutes les métadonnées de compte nécessaires pour construire l'instruction. -Les données d'instruction sont +Les données de l'instruction sont ```rust SolConversionInstructionData::BuySol { @@ -167,9 +165,9 @@ Les données d'instruction sont }, ``` -Ces données d'instruction sont sérialisées en Borsh et ont un sélecteur Anchor de 8 octets, qui sera tout sérialisé lors de l'utilisation de `BorshSerialize::serialize`. +Ces données d'instruction sont sérialisées en Borsh et possèdent un sélecteur Anchor de 8 octets, qui sera entièrement sérialisé lors de l'utilisation de `BorshSerialize::serialize`. -Les données de prix oracle peuvent être récupérées depuis cet endpoint public : [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Les données sont désérialisables avec serde en utilisant la struct OraclePriceData trouvée dans *oracle.rs*. +Les données de prix oracle peuvent être récupérées depuis ce point d'accès public : [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Les données sont désérialisables via serde en utilisant la structure OraclePriceData trouvée dans *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -Exemple de récupération avec le [crate reqwest](https://docs.rs/reqwest/latest/reqwest/) : +Exemple de récupération en utilisant le [crate reqwest](https://docs.rs/reqwest/latest/reqwest/) : ```rust use anyhow::{Context, Result}; @@ -202,5 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -Avec l'ID du programme, les comptes et les données d'instruction, vous devriez être en mesure de construire l'instruction pour acheter des SOL depuis le contrat de swap DoubleZero. - +Avec le Program ID, les comptes et les données d'instruction, vous devriez être en mesure de construire l'instruction pour acheter du SOL auprès du contrat de swap DoubleZero. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.it.md b/docs/Swapping-sol-to-2z.it.md index fb86632..28abcf4 100644 --- a/docs/Swapping-sol-to-2z.it.md +++ b/docs/Swapping-sol-to-2z.it.md @@ -1,71 +1,69 @@ -**Prima di accedere o utilizzare il codice o i materiali correlati, si prega di leggere il disclaimer.** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." +**Leggere il Disclaimer prima di accedere o utilizzare il codice o qualsiasi materiale correlato.** - - + ??? warning "Disclaimer" + + Questo documento e il codice associato sono forniti esclusivamente a scopo informativo e tecnico. La funzionalità di conversione dei token descritta nel presente documento è non-custodial: gli utenti interagiscono direttamente con gli smart contract sottostanti e mantengono il pieno controllo dei propri asset in ogni momento. - Il presente documento e il codice correlato vengono forniti esclusivamente a scopo informativo e tecnico. La funzionalità di conversione token descritta in questo documento è di tipo non-custodial. Gli utenti interagiscono direttamente con gli smart contract sottostanti, mantenendo sempre il controllo completo dei propri asset. - - Il sistema può dipendere da o interagire con codice di terze parti, fonti di dati o meccanismi di prezzo e commissioni (ad esempio smart contract, API o exchange decentralizzati) non sviluppati, gestiti o revisionati dagli sviluppatori e dagli emittenti. Non vengono fornite dichiarazioni o garanzie sull'accuratezza, la funzionalità o la sicurezza dei componenti di terze parti. - Gli sviluppatori e gli emittenti di questo codice non garantiscono la sua accuratezza, completezza o disponibilità continua. Il codice e i materiali correlati vengono forniti "COSÌ COME SONO" e possono contenere errori, difetti o vulnerabilità. L'utilizzo è a proprio rischio. - Gli sviluppatori e gli emittenti non riceveranno alcuna commissione per l'utilizzo di questi contratti. Non vi è alcun obbligo di mantenimento, aggiornamento o supporto del codice o della documentazione correlata. + Il sistema può fare affidamento su o interagire con codice di terze parti, fonti di dati o meccanismi di pricing e commissioni (ad esempio, smart contract, API o exchange decentralizzati) che non sono sviluppati, controllati o revisionati dallo/dagli sviluppatore/i o editore/i. Non viene rilasciata alcuna dichiarazione o garanzia in merito all'accuratezza, alla funzionalità o alla sicurezza di qualsiasi componente di terze parti. + Lo/gli sviluppatore/i e l'editore/i di questo codice non garantiscono la sua accuratezza, completezza o disponibilità continua. Il codice e i materiali correlati sono forniti "così come sono" e possono contenere bug, errori o vulnerabilità. L'utilizzo è interamente a proprio rischio. + Lo/gli sviluppatore/i e l'editore/i non ricevono alcuna commissione in relazione all'utilizzo di questi contratti. Non hanno alcun obbligo di mantenere, aggiornare o supportare il codice o la documentazione correlata. - Il presente documento non costituisce un'offerta, una sollecitazione o una raccomandazione a partecipare alla conversione di token, allo scambio o ad altre transazioni. Non vengono forniti consulenze legali, finanziarie o di investimento. - Gli utenti sono i soli responsabili della determinazione della legalità delle proprie attività. Prima di utilizzare il codice o partecipare alle conversioni, è necessario consultare le leggi e i regolamenti applicabili nella propria giurisdizione e consultare consulenti indipendenti. L'uso è vietato dove illegale, incluso da parte di persone o organizzazioni sanzionate o da regioni soggette a restrizioni. + Questo documento non costituisce un'offerta di vendita, una sollecitazione all'acquisto o una raccomandazione a partecipare a qualsiasi conversione di token, swap o altra transazione. Non viene fornita alcuna consulenza legale, finanziaria o di investimento. + Gli utenti sono i soli responsabili nel determinare la legalità delle proprie attività. Dovrebbero esaminare le leggi e i regolamenti applicabili nella propria giurisdizione e consultare consulenti indipendenti prima di utilizzare il codice o partecipare a qualsiasi conversione. L'utilizzo è vietato laddove risulterebbe illegale, incluso per persone o entità soggette a sanzioni o in giurisdizioni con restrizioni. - Nella misura massima consentita dalla legge, gli sviluppatori e gli emittenti declinano qualsiasi responsabilità per perdite, danni o reclami derivanti da o correlati all'uso del codice o alla partecipazione alle conversioni. + Nella misura massima consentita dalla legge, lo/gli sviluppatore/i e l'editore/i declinano ogni responsabilità per qualsiasi perdita, danno o reclamo derivante da o in relazione all'utilizzo del codice o alla partecipazione alla conversione. - La revisione e l'utilizzo del presente documento e del codice correlato sono soggetti ai [Termini di Utilizzo del Sito Web](https://doublezero.xyz/terms) e ai [Termini di Utilizzo del Protocollo](https://doublezero.xyz/terms-protocol). + La consultazione e l'utilizzo di questo documento e del codice associato sono soggetti ai [Termini e Condizioni del Sito Web](https://doublezero.xyz/terms) e ai [Termini e Condizioni del Protocollo](https://doublezero.xyz/terms-protocol). -Il protocollo DoubleZero raccoglie le entrate dagli utenti validatori denominate in SOL, ma distribuisce le ricompense ai contributori denominate in 2Z. Pertanto, è necessario convertire SOL in 2Z. +Il protocollo DoubleZero raccoglie entrate denominate in SOL dai suoi validatori utenti, ma distribuisce ricompense denominate in 2Z ai contributori. Pertanto, deve convertire SOL in 2Z. -**A tal fine, i partecipanti idonei possono negoziare con il contratto di conversione DoubleZero, acquistando SOL dal contratto e vendendo 2Z. Il pricing si basa sui feed di prezzo Pyth e su un meccanismo di sconto programmato.** +**Per farlo, i partecipanti idonei possono operare contro uno swap contract di DoubleZero, acquistando SOL dal contratto e vendendo 2Z. Il pricing si basa sui price feed di Pyth con un meccanismo di sconto programmatico.** -Questa guida descrive come utilizzare il programma. +Questa breve guida spiega come utilizzare il programma. -***Prima di accedere o utilizzare questo documento e il codice correlato, si prega di leggere il disclaimer in fondo al documento.*** +***Leggere il Disclaimer alla fine di questo documento prima di accedere o utilizzare il codice o qualsiasi materiale correlato.*** --- ## Design del Programma -Il programma di conversione è essenzialmente un pool di liquidità unilaterale, con una dimensione batch fissa di 1 SOL per ogni transazione. I partecipanti idonei possono depositare 2Z e prelevare SOL dal programma, con il prezzo determinato dal prezzo oracolo Pyth e da uno sconto dinamico. Nel tempo, questo realizza l'obiettivo di convertire il token nativo del programma in 2Z. +Il programma di swap è di fatto un pool di liquidità unilaterale che vende SOL in lotti fissi di 1 SOL per operazione. Qualsiasi partecipante idoneo può prelevare SOL dal programma depositando 2Z, a un prezzo determinato da un prezzo oracle da Pyth e uno sconto dinamico. Nel tempo, questo realizza l'obiettivo del programma di convertire token nativi in 2Z. -Per utilizzare il programma, i trader devono fornire due prezzi Pyth recenti (SOL/USD e 2Z/USD) e la quantità di 2Z. Il programma calcola quindi la quantità di 2Z necessaria per acquistare 1 SOL basandosi sul prezzo SOL/2Z implicito. Vengono poi eseguiti alcuni passaggi aggiuntivi: +Per utilizzarlo, un trader deve fornire due prezzi Pyth recenti (SOL/USD e 2Z/USD) e una quantità di 2Z. Il programma calcola quindi la quantità di 2Z necessaria per acquistare 1 SOL sulla base del prezzo implicito SOL/2Z. Successivamente, esegue alcuni passaggi aggiuntivi: -- Verifica che i prezzi Pyth siano sufficientemente recenti, ovvero non più vecchi di 5 secondi. -- Verifica che gli intervalli di confidenza di entrambi i prezzi siano sufficientemente piccoli, ovvero che la somma delle deviazioni standard di Laplace (parametro Pyth `conf`) di entrambi i prezzi, normalizzata al loro livello, non superi i 30 punti base. -- Regola il prezzo SOL/2Z con lo sconto dinamico (espresso come percentuale del prezzo Pyth). Questo sconto è funzione del tempo trascorso dall'ultima transazione. La formula seguente specifica lo sconto, assumendo che l'ultima transazione sia avvenuta allo slot $s_{\text{last}}$ e che lo slot corrente sia $s_{\text{now}}$. (Ad esempio, se sono trascorsi 200 slot dall'ultima transazione, lo sconto è di 40 punti base.) +- Verifica che i prezzi Pyth siano sufficientemente aggiornati, ovvero che non siano obsoleti da più di 5 secondi. +- Verifica che gli intervalli di confidenza dei due prezzi siano sufficientemente piccoli. Ovvero, la somma di due deviazioni standard laplaciane (cioè il parametro `conf` nel prezzo Pyth) per i due prezzi, normalizzata per i rispettivi livelli, deve essere inferiore o uguale a 30 punti base. +- Regola il prezzo SOL/2Z con uno sconto dinamico, espresso come percentuale del prezzo Pyth. Questo sconto è una funzione del tempo trascorso dall'ultima operazione. La formula seguente specifica lo sconto, assumendo che l'ultima operazione sia stata effettuata allo slot $s_{\text{last}}$ e lo slot corrente sia $s_{\text{now}}$. (Ad esempio, se sono trascorsi 200 slot dall'ultima operazione, lo sconto è di 40 punti base.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -A questo punto, se il trader fornisce abbastanza 2Z per eseguire la transazione al prezzo calcolato (incluso lo sconto), la transazione verrà eseguita a quel prezzo. Il trader riceverà il SOL acquistato e il 2Z in eccesso. +A questo punto, se il trader ha fornito abbastanza 2Z per eseguire la transazione a questo prezzo calcolato (incluso lo sconto), l'operazione viene eseguita a questo prezzo calcolato. Al trader viene restituita la quantità di SOL acquistata e l'eventuale eccedenza di 2Z. -Il contratto non consente quindi ulteriori transazioni nello stesso slot. Questo per evitare che il contratto paghi uno slippage eccessivo nel caso in cui il prezzo Pyth si discosti troppo dal prezzo reale in qualsiasi momento (al di là di quanto possono catturare i filtri esistenti). +Il contratto non consente ulteriori operazioni per quello slot. Questo serve a impedire che il contratto paghi uno slippage eccessivamente alto nel caso in cui il prezzo Pyth sia lontano dal prezzo reale in un dato momento, in modi che i filtri esistenti non riescano a rilevare. --- ## Esecuzione Atomica Senza Gas -Questa sezione descrive l'utilizzo del comando `harvest-dz`. Questo comando esegue atomicamente due operazioni: -1. Il comando richiede a Jupiter una quotazione contro il programma di conversione SOL nativo <> 2Z. -2. Se il routing Jupiter produce più 2Z/SOL rispetto a quanto richiesto dal programma di conversione SOL nativo, `harvest-2z` eseguirà la conversione e restituirà al portafoglio 1 SOL e la differenza in 2Z. +Questa sezione descrive come utilizzare il comando `harvest-dz`. Questo comando eseguirà atomicamente 2 azioni. +1. Il comando richiede una quotazione da Jupiter rispetto al programma nativo di conversione SOL <> 2Z. +2. Quando il percorso Jupiter offre più 2Z per SOL rispetto a quanto richiesto dal programma di conversione nativo, `harvest-2z` esegue uno swap, restituendo al tuo wallet 1 SOL più la differenza in 2Z. -### Raccolta di 2Z +### Harvest 2Z -Per eseguire, esegui il seguente comando: +Per eseguire, lancia il seguente comando: ``` doublezero-solana revenue-distribution harvest-2z ``` -L'output sarà simile al seguente: +L'output sarà simile a: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -Il comando può anche essere simulato usando il parametro `--dry-run`. L'esecuzione a secco genererà log del programma e un output come il seguente: +Il comando può anche essere simulato con l'argomento `--dry-run`. Il dry-run produrrà i log del programma e un output simile a: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -73,19 +71,19 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL --- -## Conversione Tramite Protocollo +## Conversione del Protocollo -Questa sezione descrive come controllare il tasso di conversione e come eseguire la conversione usando la CLI `doublezero-solana`. Infine, descrive l'interfaccia per integrazioni personalizzate con il contratto di conversione DoubleZero. +Questa sezione illustra come verificare i tassi di conversione ed eseguire la conversione utilizzando la CLI `doublezero-solana`. Alla fine, discutiamo l'interfaccia per integrazioni personalizzate con lo swap contract di DoubleZero. -### Come controllare il prezzo di conversione SOL/2Z tramite `doublezero-solana` +### Come verificare il prezzo di conversione SOL/2Z tramite `doublezero-solana` -Per controllare il tasso di conversione SOL/2Z su Mainnet Beta, esegui il seguente comando: +Per trovare i tassi di conversione SOL/2Z su mainnet-beta, eseguire il seguente comando: ```bash doublezero-solana revenue-distribution fetch sol-conversion ``` -L'output visualizzato sarà simile al seguente: +L'output che vedrai sarà simile a: ```bash | field | description | value | note | @@ -95,37 +93,37 @@ L'output visualizzato sarà simile al seguente: | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Il Journal Balance informa l'utente di quanta liquidità SOL è disponibile nello smart contract di distribuzione delle entrate. Finché il Journal Balance supera la dimensione della transazione fissa di 1 SOL, l'utente può negoziare. +Il Journal Balance informa l'utente sulla quantità di liquidità SOL presente nello smart contract Revenue Distribution. Un utente può operare finché il Journal Balance supera la dimensione fissa dell'operazione di 1 SOL. -La prima riga mostra il prezzo di conversione SOL/2Z "reale" dell'oracolo off-chain. La seconda riga è il prezzo di conversione utilizzato dalla conversione on-chain, che è il prezzo reale aggiustato per lo sconto algoritmico. +La prima riga mostra il prezzo di conversione SOL/2Z "reale" tramite un oracle offchain. La seconda riga è il prezzo di conversione utilizzato on-chain per lo swap, che semplicemente aggiusta il prezzo reale applicando lo sconto algoritmico. -### Come convertire 2Z in SOL tramite `doublezero-solana` +### Come convertire i tuoi 2Z in SOL tramite `doublezero-solana` -Per convertire token 2Z in SOL, esegui il seguente comando: +Per convertire i tuoi token 2Z in SOL, eseguire il seguente comando: ```bash doublezero-solana revenue-distribution convert-2z ``` -Per impostazione predefinita, questa transazione avrà successo se c'è sufficiente liquidità SOL e abbastanza 2Z nell'ATA per eseguire la conversione. Specificando i seguenti parametri, puoi avere un controllo più granulare sulla conversione: +Per impostazione predefinita, se c'è sufficiente liquidità SOL e il tuo ATA ha abbastanza 2Z per eseguire lo swap, questa transazione avrà successo. Puoi perfezionare lo swap specificando i seguenti argomenti: ```bash - --limit-price Il prezzo limite predefinito è il prezzo oracolo SOL/2Z corrente - --source-2z-account L'account token deve essere di proprietà del firmatario. Se non specificato, il valore predefinito è l'ATA del firmatario - --checked-sol-amount Controlla esplicitamente l'importo SOL. Se specificato, questo importo verrà verificato rispetto alla quantità di riempimento fissa + --limit-price Limit price defaults to the current SOL/2Z oracle price + --source-2z-account Token account must be owned by the signer. Defaults to signer ATA if not specified + --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -Il prezzo limite specificato determina il prezzo peggiore che sei disposto ad accettare quando esegui la conversione SOL/2Z. Ad esempio, supponiamo che il prezzo 2Z scontato di SOL sia 800 (800 token 2Z per 1 SOL). Se specifichi un prezzo limite di 790, non sei disposto a scambiare più di 790 token 2Z per 1 SOL, quindi non verrà tentata la conversione. Ma se specifichi 810, sei disposto a scambiare fino a 810 token 2Z (in questo caso, solo 800 token 2Z in questa transazione), quindi la transazione passerà. +Il prezzo limite specificato determina il prezzo peggiore che sei disposto ad accettare quando esegui la conversione SOL/2Z. Ad esempio, supponiamo che il prezzo scontato in 2Z per SOL sia 800, il che significa 800 token 2Z per 1 SOL. Se specifichi un prezzo limite di 790, non sei disposto a eseguire lo swap perché stai richiedendo di scambiare al massimo 790 token 2Z per 1 SOL. Ma se specifichi 810, l'operazione andrà a buon fine perché eri disposto a scambiare al massimo 810 token 2Z (e in questo caso, avrai scambiato solo 800 token 2Z in questa transazione). -L'account token 2Z di origine sovrascrive l'ATA predefinito, usando il firmatario come proprietario di questo ATA 2Z. Tuttavia, se hai un altro account token che vuoi usare per la conversione, fornisci la sua chiave pubblica tramite questo parametro. +L'account token 2Z di origine sovrascrive l'ATA predefinito utilizzando il firmatario come proprietario di questo ATA 2Z. Ma se hai un altro account token che desideri utilizzare per eseguire lo swap, fornisci la pubkey corrispondente con questo argomento. -Come opzione, puoi specificare l'importo SOL da verificare rispetto alla dimensione di riempimento standard (impostata a 1 SOL all'avvio). Se non corrisponde alla dimensione di riempimento del programma, la conversione fallirà. Questo riduce il rischio di non accorgersi che la dimensione di riempimento del programma è cambiata. +Facoltativamente, puoi specificare l'importo SOL verificato alla dimensione di fill standard (impostata a 1 SOL al lancio). Se non corrisponde alla dimensione di fill del programma, lo swap fallisce. Questo mitiga il rischio che la dimensione di fill del programma cambi senza che tu te ne accorga. -### Interfaccia per l'Acquisto di SOL +### Interfaccia per Acquistare SOL -L'interfaccia e la CLI `doublezero-solana` si trovano in [questo repository](https://github.com/doublezerofoundation/doublezero-offchain). Il codice sorgente dell'interfaccia del contratto di conversione DoubleZero è [qui](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). Il Program ID è `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +L'interfaccia e la CLI `doublezero-solana` si trovano in [questo repository](https://github.com/malbeclabs/doublezero-offchain). Il codice sorgente per l'interfaccia dello swap contract di DoubleZero è disponibile [qui](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). Il program ID è `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. -Un metodo conveniente per generare gli account necessari per l'istruzione buy SOL è usare il metodo `new` (in *instruction/account.rs*): +Un modo conveniente per generare gli account necessari per l'istruzione buy SOL è utilizzare il metodo `new` (che si trova in *instruction/account.rs*). ```rust pub fn new( @@ -136,12 +134,12 @@ pub fn new( ) -> Self; ``` -`fill_registry_key` può essere ottenuto da `ProgramState` +La `fill_registry_key` può essere ottenuta dal `ProgramState` ```rust pub struct ProgramState { pub admin_key: Pubkey, - pub fills_registry_key: Pubkey, // questa chiave + pub fills_registry_key: Pubkey, // this key pub is_paused: bool, pub configuration_registry_bump: u8, pub program_state_bump: u8, @@ -152,11 +150,11 @@ pub struct ProgramState { } ``` -In alternativa, puoi chiamare `getProgramAccounts` con il discriminatore tramite Solana RPC. Tuttavia, poiché questa chiave pubblica non cambierà mai, si raccomanda di metterla in cache. +In alternativa, puoi chiamare `getProgramAccounts` tramite Solana RPC con il suo discriminatore. Ma raccomandiamo di memorizzare in cache questa pubkey poiché non cambierà mai. -`user_key` è il firmatario dell'istruzione buy SOL e deve essere il proprietario di `user_token_account_key`. Come descritto sopra, non deve essere necessariamente l'ATA. Finché l'account token 2Z è di proprietà di `user_key`, l'istruzione avrà successo. +La `user_key` è un firmatario per l'istruzione buy SOL e deve essere il proprietario della `user_token_account_key`. Come descritto sopra, questo NON deve necessariamente essere un ATA. A condizione che il tuo account token 2Z sia posseduto dalla `user_key`, questa istruzione avrà successo. -La struttura `BuySolAccounts` implementa `Into>`, quindi può generare tutti i metadati degli account necessari per costruire l'istruzione. +La struct `BuySolAccounts` implementa `Into>` così puoi generare tutti gli account meta necessari per costruire l'istruzione. I dati dell'istruzione sono @@ -167,9 +165,9 @@ I dati dell'istruzione sono }, ``` -Questi dati dell'istruzione sono serializzati con Borsh, con un selettore Anchor di 8 byte, serializzando tutto con `BorshSerialize::serialize`. +Questi dati dell'istruzione sono serializzati con Borsh e hanno un selettore Anchor di 8 byte, che verranno tutti serializzati utilizzando `BorshSerialize::serialize`. -I dati del prezzo oracolo possono essere ottenuti da questo endpoint pubblico: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). I dati possono essere deserializzati usando la struttura OraclePriceData in *oracle.rs* tramite serde. +I dati del prezzo oracle possono essere ottenuti da questo endpoint pubblico: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). I dati sono deserializzabili con serde utilizzando la struct OraclePriceData che si trova in *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -Esempio di recupero usando il [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): +Esempio di come effettuare la richiesta utilizzando il [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): ```rust use anyhow::{Context, Result}; @@ -202,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -Con il Program ID, gli account e i dati dell'istruzione, dovresti essere in grado di costruire l'istruzione per acquistare SOL dal contratto di conversione DoubleZero. +Con il program ID, gli account e i dati dell'istruzione, dovresti essere in grado di costruire l'istruzione per acquistare SOL dallo swap contract di DoubleZero. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.ja.md b/docs/Swapping-sol-to-2z.ja.md index 81205d5..c841f02 100644 --- a/docs/Swapping-sol-to-2z.ja.md +++ b/docs/Swapping-sol-to-2z.ja.md @@ -1,71 +1,69 @@ -**コードまたは関連資料にアクセスまたは使用する前に免責事項を確認してください。** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." +**コードまたは関連資料にアクセスまたは使用する前に、免責事項を確認してください。** - - + ??? warning "免責事項" + + 本文書および関連コードは、情報提供および技術的な目的のためにのみ提供されています。本書に記載されているトークン変換機能はノンカストディアルであり、ユーザーは基盤となるスマートコントラクトと直接やり取りし、常に自身の資産を完全に管理します。 - このドキュメントおよび関連コードは、情報提供および技術的目的のみのために提供されています。ここで説明されているトークン変換機能はノンカストディアル(非保管型)です。ユーザーは基礎となるスマートコントラクトと直接対話し、常に自分の資産を完全に制御します。 - - このシステムは、開発者や発行者によって開発、管理、またはレビューされていないサードパーティのコード、データソース、または価格および手数料メカニズム(例:スマートコントラクト、API、または分散型取引所)に依存または対話する場合があります。サードパーティコンポーネントの精度、機能、またはセキュリティについて表明や保証はなされません。 - このコードの開発者と発行者は、その精度、完全性、または継続的な可用性を保証しません。コードと関連資料は「現状のまま」(AS IS)で提供され、バグ、エラー、または脆弱性が含まれる場合があります。使用はすべてご自身のリスクでお行いください。 - 開発者と発行者はこれらのコントラクトの使用に関連していかなる手数料も受け取りません。コードまたは関連ドキュメントのメンテナンス、更新、またはサポートの義務はありません。 + 本システムは、開発者または公開者が開発、管理、またはレビューしていないサードパーティのコード、データソース、または価格設定および手数料メカニズム(例:スマートコントラクト、API、または分散型取引所)に依存または連携する場合があります。サードパーティのコンポーネントの正確性、機能性、またはセキュリティについて、いかなる表明または保証も行いません。 + 本コードの開発者および公開者は、その正確性、完全性、または継続的な利用可能性を保証しません。コードおよび関連資料は「現状のまま」提供され、バグ、エラー、または脆弱性を含む可能性があります。使用は完全にご自身のリスクで行ってください。 + 開発者および公開者は、これらのコントラクトの使用に関連していかなる手数料も受け取りません。コードまたは関連ドキュメントの保守、更新、またはサポートを行う義務はありません。 - このドキュメントはトークン変換、スワップまたはその他のトランザクションへの参加を売り込む、買い求める、または推奨するものではありません。法的、財務的、または投資上のアドバイスは提供されません。 - ユーザーは自分の活動の合法性を判断する責任を単独で負います。コードを使用したり変換に参加したりする前に、管轄区域に適用される法律と規制を確認し、独立した顧問に相談する必要があります。制裁対象の個人や組織、または制限区域での使用を含む、違法となる場所での使用は禁止されています。 + 本文書は、トークン変換、スワップ、またはその他の取引への売却の申し出、購入の勧誘、または参加の推奨を構成するものではありません。法的、財務的、または投資に関するアドバイスは提供されません。 + ユーザーは、自身の活動の合法性を判断する責任を単独で負います。コードの使用または変換への参加前に、管轄区域で適用される法律および規制を確認し、独立したアドバイザーに相談する必要があります。制裁対象者もしくは団体、または制限された管轄区域においてなど、違法となる場合の使用は禁止されています。 - 法律で許可される最大限の範囲で、開発者と発行者は、コードの使用または変換への参加に起因するまたは関連するすべての損失、損害、または請求に対する一切の責任を否認します。 + 法律で許容される最大限の範囲において、開発者および公開者は、コードの使用または変換への参加に起因または関連して生じるいかなる損失、損害、または請求についても、一切の責任を否認します。 - このドキュメントおよび関連コードのレビューと使用は、[ウェブサイト利用規約](https://doublezero.xyz/terms)および[プロトコル利用規約](https://doublezero.xyz/terms-protocol)に従います。 + 本文書および関連コードの確認および使用は、[ウェブサイト利用規約](https://doublezero.xyz/terms)および[プロトコル利用規約](https://doublezero.xyz/terms-protocol)に従うものとします。 -DoubleZeroプロトコルはバリデーターユーザーからSOL建ての収益を収集しますが、コントリビューターには2Z建ての報酬を配布します。そのため、SOLを2Zに変換する必要があります。 +DoubleZeroプロトコルは、バリデーターユーザーからSOL建ての収益を徴収しますが、コントリビューターには2Z建ての報酬を分配します。そのため、SOLを2Zに変換する必要があります。 -**そのために、適格な参加者はDoubleZeroスワップコントラクトに対してトレードし、コントラクトからSOLを購入して2Zを売ることができます。価格設定はPythプライスフィードとプログラマティックディスカウントメカニズムに基づいています。** +**これを行うために、適格な参加者はDoubleZeroのスワップコントラクトに対して取引を行い、コントラクトからSOLを購入して2Zを売却できます。価格設定はPythの価格フィードに基づき、プログラマティックなディスカウントメカニズムが適用されます。** -このガイドではプログラムの使用方法を説明します。 +この短いガイドでは、プログラムの使用方法を説明します。 -***このドキュメントおよび関連コードにアクセスまたは使用する前に、ドキュメントの最後にある免責事項を確認してください。*** +***コードまたは関連資料にアクセスまたは使用する前に、本文書末尾の免責事項を確認してください。*** --- ## プログラム設計 -スワッププログラムは実質的に、1取引あたり1 SOLの固定バッチサイズでSOLを販売する片側流動性プールです。適格な参加者はPythのオラクル価格とダイナミックディスカウントによって決定される価格で、2Zを預け入れてプログラムからSOLを引き出すことができます。時間の経過とともに、これはプログラムのネイティブトークンを2Zに変換するというゴールを実行します。 +スワッププログラムは、実質的に1取引あたり1 SOLの固定バッチサイズでSOLを販売する片側流動性プールです。適格な参加者は誰でも、Pythからのオラクル価格と動的ディスカウントによって決定される価格で、2Zを預け入れることによりプログラムからSOLを引き出すことができます。時間の経過とともに、これによりネイティブトークンを2Zに変換するというプログラムの目標が実行されます。 -利用するには、トレーダーは2つの最新のPyth価格(SOL/USDおよび2Z/USD)と2Zの数量を提供する必要があります。プログラムはその後、暗示されたSOL/2Z価格に基づいてその1 SOLを購入するために必要な2Zを計算します。その後いくつかの追加ステップを実行します: +利用するには、トレーダーは2つの最新のPyth価格(SOL/USDおよび2Z/USD)と2Zの数量を提供する必要があります。プログラムは、暗示されるSOL/2Z価格に基づいて1 SOLを購入するために必要な2Zを計算します。その後、いくつかの追加ステップを実行します: -- Pyth価格が十分に新しいかを確認します。つまり、最大5秒以上古くないかを確認します。 -- 2つの価格の信頼区間が十分に小さいかを確認します。つまり、2つの価格のLaplaceの標準偏差(Pyth価格のパラメーター`conf`)の合計は、それらのレベルで正規化された場合、30ベーシスポイント以下でなければなりません。 -- ダイナミックディスカウント(Pyth価格のパーセントで表現)でSOL/2Z価格を調整します。このディスカウントは最後の取引からの時間の関数です。以下の式はディスカウントを指定しており、最後の取引がスロット$s_{\text{last}}$で行われ、現在のスロットが$s_{\text{now}}$であると仮定します。(例えば、最後の取引から200スロットが経過した場合、ディスカウントは40ベーシスポイントです。) +- Pyth価格が十分に新鮮であること、つまり5秒以上古くないことを確認します。 +- 2つの価格の信頼区間が十分に小さいことを確認します。具体的には、2つの価格のラプラシアン標準偏差(つまり、Pyth価格のパラメータ `conf`)の合計を、それぞれの水準で正規化した値が30ベーシスポイント以下でなければなりません。 +- SOL/2Z価格を、Pyth価格のパーセントとして表される動的ディスカウントで調整します。このディスカウントは、前回の取引からの経過時間の関数です。以下の式は、前回の取引がスロット $s_{\text{last}}$ で行われ、現在のスロットが $s_{\text{now}}$ であると仮定した場合のディスカウントを示しています。(例えば、前回の取引から200スロット経過した場合、ディスカウントは40ベーシスポイントです。) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -この時点で、トレーダーがこの計算された価格(ディスカウントを含む)でトランザクションを実行するのに十分な2Zを提供した場合、この計算された価格で実行されます。トレーダーには購入したSOLと余分な2Zが返されます。 +この時点で、トレーダーがこの計算された価格(ディスカウント込み)で取引を実行するのに十分な2Zを提供している場合、この計算された価格で実行されます。購入されたSOLの数量と余剰の2Zがトレーダーに返却されます。 -コントラクトはその後、そのスロットでのトレードをこれ以上許可しません。これは、既存のフィルターが捉えないほどPyth価格が任意の時点で真の価格から大きく離れている場合に、コントラクトが過度に高いスリッページを支払わないようにするためです。 +コントラクトはその後、そのスロットでのさらなる取引を許可しません。これは、既存のフィルターでは問題を検出できない形で、任意の時点でPyth価格が真の価格から大きく乖離している場合に、コントラクトが過度に高いスリッページを支払うことを防ぐためです。 --- ## ガスレスアトミック実行 -このセクションでは`harvest-dz`コマンドの使用方法を説明します。このコマンドは2つのアクションをアトミックに実行します。 -1. コマンドはJupiterにネイティブのSOL <> 2Z変換プログラムに対するクォートを要求します。 -2. JupiterルートがネイティブのSOL変換プログラムが必要とするよりも多くの2Z/SOLを生成する場合、`harvest-2z`はスワップを実行し、1 SOLと2Zの差額をウォレットに返します。 +このセクションでは、`harvest-dz` コマンドの使用方法を詳しく説明します。このコマンドは2つのアクションをアトミックに実行します。 +1. コマンドはJupiterとネイティブのSOL <> 2Z変換プログラムから見積もりを要求します。 +2. JupiterルートがネイティブのV変換プログラムが要求するよりも1 SOLあたり多くの2Zを提供する場合、`harvest-2z` はスワップを実行し、ウォレットに1 SOLと2Zの差額を返します。 -### 2Zのハーベスト +### Harvest 2Z -実行するには、次のコマンドを実行します: +実行するには、以下を実行してください: ``` doublezero-solana revenue-distribution harvest-2z ``` -出力は次のようになります: +出力は以下のようになります: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -コマンドは`--dry-run`引数でシミュレーションすることもできます。ドライランはプログラムログと次のような出力を生成します: +このコマンドは `--dry-run` 引数でシミュレーションすることもできます。ドライランはプログラムログと以下のような出力を生成します: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -75,17 +73,17 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## プロトコル変換 -このセクションでは、変換レートの確認と`doublezero-solana` CLIを使用した変換の実行について説明します。また最後に、DoubleZeroスワップコントラクトとのカスタムビルド統合のインターフェースについて説明します。 +このセクションでは、`doublezero-solana` CLIを使用した変換レートの確認と変換の実行について説明します。最後に、DoubleZeroスワップコントラクトとのカスタムビルド統合用のインターフェースについて説明します。 -### `doublezero-solana`を通じてSOL/2Z変換価格を確認する方法 +### `doublezero-solana` を使用してSOL/2Z変換価格を確認する方法 -メインネットベータのSOL/2Z変換レートを確認するには、次のコマンドを実行します: +mainnet-betaでSOL/2Z変換レートを確認するには、以下のコマンドを実行してください: ```bash doublezero-solana revenue-distribution fetch sol-conversion ``` -表示される出力は次のようになります: +表示される出力は以下のようになります: ```bash | field | description | value | note | @@ -95,37 +93,37 @@ doublezero-solana revenue-distribution fetch sol-conversion | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Journal Balanceは、Revenue DistributionスマートコントラクトにどれだけのSOL流動性があるかをユーザーに通知します。Journal Balanceが固定取引サイズの1 SOLを超える限り、ユーザーは取引できます。 +Journal Balanceは、Revenue DistributionスマートコントラクトにどれだけのSOL流動性があるかをユーザーに通知します。Journal Balanceが固定取引サイズの1 SOLを超えている限り、ユーザーは取引を行うことができます。 -最初の行はオフチェーンオラクルによる「真の」SOL/2Z変換価格を表示します。2行目はスワップにオンチェーンで使用される変換価格で、アルゴリズムディスカウントのために真の価格を調整したものです。 +最初の行は、オフチェーンオラクルによる「真の」SOL/2Z変換価格を表示します。2番目の行は、スワップでオンチェーンで使用される変換価格であり、アルゴリズムによるディスカウントで真の価格を調整したものです。 -### `doublezero-solana`を通じて2ZをSOLに変換する方法 +### `doublezero-solana` を使用して2ZをSOLに変換する方法 -2Zトークンをマルチに変換するには、次のコマンドを実行します: +2ZトークンをSOLに変換するには、以下のコマンドを実行してください: ```bash doublezero-solana revenue-distribution convert-2z ``` -デフォルトでは、十分なSOL流動性があり、ATAにスワップを実行するのに十分な2Zがある場合、このトランザクションは成功します。次の引数を指定することで、スワップをより細かく調整できます: +デフォルトでは、十分なSOL流動性があり、ATAにスワップを実行するのに十分な2Zがある場合、このトランザクションは成功します。以下の引数を指定することで、スワップをより細かく調整できます: ```bash - --limit-price 指値価格はデフォルトで現在のSOL/2Zオラクル価格 - --source-2z-account トークンアカウントはサイナーが所有する必要があります。指定しない場合はサイナーATAがデフォルト - --checked-sol-amount SOL金額を明示的に確認します。指定した場合、この金額は固定フィル数量に対して確認されます + --limit-price Limit price defaults to the current SOL/2Z oracle price + --source-2z-account Token account must be owned by the signer. Defaults to signer ATA if not specified + --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -指定された指値価格は、SOL/2Z変換を実行する際に受け入れる最悪のケースの価格を決定します。例えば、SOLのディスカウント2Z価格が800(1 SOLに対して800 2Zトークン)だとします。指値価格を790に指定した場合、1 SOLに対して最大790 2Zトークンしかスワップしたくないため、スワップを実行しようとしません。しかし810を指定した場合、最大810 2Zトークム(この場合、このトランザクションで800 2Zトークンのみスワップ)を喜んでスワップするので、取引は通ります。 +指定されたリミット価格は、SOL/2Z変換を実行する際に受け入れる最悪のケースの価格を決定します。例えば、SOLのディスカウント後の2Z価格が800、つまり1 SOLに対して800 2Zトークンだとしましょう。リミット価格を790に指定した場合、最大790 2Zトークンでのみ1 SOLとのスワップを要求しているため、スワップを実行しません。しかし、810を指定した場合、最大810 2Zトークンでのスワップを許容しているため、取引は成立します(この場合、実際にはこのトランザクションで800 2Zトークンのみをスワップすることになります)。 -ソース2Zトークンアカウントは、このデフォルトのATAをサイナーをこの2Z ATAの所有者として使用するよりも上書きします。しかし、スワップを実行するために使用したい別のトークンアカウントがある場合は、この引数でその公開鍵を提供してください。 +ソース2Zトークンアカウントは、署名者をこの2Z ATAの所有者として使用するデフォルトのATAを上書きします。ただし、スワップに使用したい別のトークンアカウントがある場合は、この引数でそのpubkeyを指定してください。 -オプションとして、確認したいSOL金額を標準のフィルサイズ(起動時に1 SOLに設定)に指定できます。プログラムのフィルサイズと一致しない場合、スワップは失敗します。これにより、プログラムのフィルサイズが変わり気づかないというリスクを軽減します。 +オプションで、チェック対象のSOL金額を標準フィルサイズ(ローンチ時は1 SOLに設定)に指定できます。プログラムのフィルサイズと一致しない場合、スワップは失敗します。これにより、プログラムのフィルサイズが変更され、気づかないリスクを軽減します。 -### SOLを購入するインターフェース +### SOL購入のインターフェース -インターフェースと`doublezero-solana` CLIは[このリポジトリ](https://github.com/doublezerofoundation/doublezero-offchain)にあります。DoubleZeroスワップコントラクトインターフェースのソースコードは[こちら](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)にあります。プログラムIDは`9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`です。 +インターフェースと `doublezero-solana` CLIは[このリポジトリ](https://github.com/malbeclabs/doublezero-offchain)にあります。DoubleZeroスワップコントラクトインターフェースのソースコードは[こちら](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)で見つけることができます。プログラムIDは `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs` です。 -buy SOL命令に必要なアカウントを生成する便利な方法は、`new`メソッド(*instruction/account.rs*にある)を使用することです。 +SOL購入命令に必要なアカウントを生成する便利な方法は、`new` メソッド(*instruction/account.rs* にあります)を使用することです。 ```rust pub fn new( @@ -136,12 +134,12 @@ pub fn new( ) -> Self; ``` -`fill_registry_key`は`ProgramState`から取得できます +`fill_registry_key` は `ProgramState` から取得できます。 ```rust pub struct ProgramState { pub admin_key: Pubkey, - pub fills_registry_key: Pubkey, // このキー + pub fills_registry_key: Pubkey, // this key pub is_paused: bool, pub configuration_registry_bump: u8, pub program_state_bump: u8, @@ -152,13 +150,13 @@ pub struct ProgramState { } ``` -あるいは、Solana RPCを通じてディスクリミネーターで`getProgramAccounts`を呼び出すこともできます。しかし、この公開鍵は決して変わらないのでキャッシュすることを推奨します。 +あるいは、Solana RPCを介してディスクリミネーターを使用して `getProgramAccounts` を呼び出すこともできます。ただし、このpubkeyは変更されることがないため、キャッシュすることをお勧めします。 -`user_key`はbuy SOL命令のサイナーであり、`user_token_account_key`の所有者でなければなりません。上記のように、これはATAである必要はありません。2Zトークンアカウントが`user_key`によって所有されている限り、この命令は成功します。 +`user_key` はSOL購入命令の署名者であり、`user_token_account_key` の所有者でなければなりません。上記で説明したように、これはATAである必要はありません。2ZトークンアカウントがB `user_key` によって所有されている限り、この命令は成功します。 -`BuySolAccounts`構造体は`Into>`を実装しているため、命令を構築するために必要なすべてのアカウントメタを生成できます。 +`BuySolAccounts` 構造体は `Into>` を実装しているため、命令を構築するために必要なすべてのアカウントメタを生成できます。 -命令データは +命令データは以下の通りです: ```rust SolConversionInstructionData::BuySol { @@ -167,9 +165,9 @@ pub struct ProgramState { }, ``` -この命令データはBorshシリアライズされており、8バイトのAnchorセレクターがあり、`BorshSerialize::serialize`を使用するとすべてシリアライズされます。 +この命令データはBorshシリアライズされ、8バイトのAnchorセレクターを持ちます。`BorshSerialize::serialize` を使用するとすべてシリアライズされます。 -オラクル価格データはこのパブリックエンドポイントから取得できます:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。データは*oracle.rs*にあるOraclePriceData構造体を使用してserdeでデシリアライズ可能です。 +オラクル価格データは、このパブリックエンドポイントから取得できます:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。データは *oracle.rs* にある OraclePriceData 構造体を使用してserdeデシリアライズ可能です。 ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -[reqwestクレート](https://docs.rs/reqwest/latest/reqwest/)を使用した取得の例: +[reqwest クレート](https://docs.rs/reqwest/latest/reqwest/)を使用した取得の例: ```rust use anyhow::{Context, Result}; @@ -202,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -プログラムID、アカウント、命令データを使用して、DoubleZeroスワップコントラクトからSOLを購入する命令を構築できるはずです。 +プログラムID、アカウント、および命令データがあれば、DoubleZeroスワップコントラクトからSOLを購入するための命令を構築できるはずです。 \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.ko.md b/docs/Swapping-sol-to-2z.ko.md index e367f68..dd1890b 100644 --- a/docs/Swapping-sol-to-2z.ko.md +++ b/docs/Swapping-sol-to-2z.ko.md @@ -1,63 +1,61 @@ -**코드 또는 관련 자료에 액세스하거나 사용하기 전에 면책 조항을 검토하세요.** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." +**코드 또는 관련 자료에 접근하거나 사용하기 전에 면책 조항을 검토하십시오.** - - + ??? warning "면책 조항" + + 이 문서와 관련 코드는 정보 제공 및 기술적 목적으로만 제공됩니다. 본 문서에 설명된 토큰 변환 기능은 비수탁(non-custodial) 방식으로, 사용자는 기본 스마트 컨트랙트와 직접 상호작용하며 항상 자산에 대한 완전한 통제권을 유지합니다. - 이 문서와 관련 코드는 정보 및 기술적 목적으로만 제공됩니다. 여기에 설명된 토큰 변환 기능은 비수탁형입니다. 사용자는 기본 스마트 계약과 직접 상호 작용하며 항상 자산에 대한 완전한 통제권을 유지합니다. - - 이 시스템은 개발자 또는 게시자가 개발, 제어 또는 검토하지 않은 제3자 코드, 데이터 소스 또는 가격 및 수수료 메커니즘(예: 스마트 계약, API 또는 탈중앙화 거래소)에 의존하거나 상호 작용할 수 있습니다. 제3자 구성 요소의 정확성, 기능 또는 보안에 대한 어떠한 보증이나 보장도 없습니다. - 이 코드의 개발자 및 게시자는 정확성, 완전성 또는 지속적인 가용성을 보장하지 않습니다. 코드 및 관련 자료는 "있는 그대로" 제공되며 버그, 오류 또는 취약점이 포함될 수 있습니다. 사용은 전적으로 귀하의 책임입니다. - 코드의 개발자 및 게시자는 이 계약의 사용과 관련하여 어떠한 수수료도 받지 않습니다. 코드 또는 관련 문서를 유지, 업데이트 또는 지원할 의무가 없습니다. + 이 시스템은 개발자 또는 게시자가 개발, 통제 또는 검토하지 않은 서드파티 코드, 데이터 소스, 가격 책정 및 수수료 메커니즘(예: 스마트 컨트랙트, API 또는 탈중앙화 거래소)에 의존하거나 이와 상호작용할 수 있습니다. 서드파티 구성요소의 정확성, 기능성 또는 보안에 대한 어떠한 진술이나 보증도 하지 않습니다. + 이 코드의 개발자 및 게시자는 코드의 정확성, 완전성 또는 지속적인 가용성을 보장하지 않습니다. 코드 및 관련 자료는 "있는 그대로" 제공되며, 버그, 오류 또는 취약점을 포함할 수 있습니다. 사용에 따른 모든 위험은 전적으로 사용자 본인에게 있습니다. + 개발자 및 게시자는 이러한 컨트랙트의 사용과 관련하여 어떠한 수수료도 받지 않습니다. 코드 또는 관련 문서를 유지, 업데이트 또는 지원할 의무가 없습니다. - 이 문서는 토큰 변환, 스왑 또는 기타 거래에 매도 제안, 매수 권유 또는 참여 권장으로 구성되지 않습니다. 법적, 재정적 또는 투자 조언은 제공되지 않습니다. - 사용자는 활동의 합법성을 결정할 전적인 책임이 있습니다. 해당 관할 지역에서 적용 가능한 법률과 규정을 검토하고 코드를 사용하거나 변환에 참여하기 전에 독립적인 어드바이저와 상담해야 합니다. 제재 대상 또는 제한된 관할 지역의 사람 또는 주체를 포함하여 불법이 될 경우 사용이 금지됩니다. + 이 문서는 토큰 변환, 스왑 또는 기타 거래에 대한 매도 제안, 매수 권유 또는 참여 권고를 구성하지 않습니다. 법률적, 재정적 또는 투자 조언은 제공되지 않습니다. + 사용자는 자신의 활동의 적법성을 판단할 전적인 책임이 있습니다. 코드를 사용하거나 변환에 참여하기 전에 자신의 관할권에 적용되는 법률 및 규정을 검토하고 독립적인 자문을 구해야 합니다. 제재 대상 개인 또는 단체, 또는 제한된 관할권에서의 사용을 포함하여 불법이 되는 경우 사용이 금지됩니다. - 법률이 허용하는 최대한도 내에서 개발자 및 게시자는 코드 사용 또는 변환 참여와 관련하여 발생하는 손실, 손해 또는 청구에 대한 모든 책임을 면책합니다. + 법률이 허용하는 최대 범위 내에서, 개발자 및 게시자는 코드 사용 또는 변환 참여로 인해 발생하거나 이와 관련된 모든 손실, 손해 또는 청구에 대한 책임을 부인합니다. - 이 문서 및 관련 코드의 검토 및 사용은 [웹사이트 이용약관](https://doublezero.xyz/terms) 및 [프로토콜 이용약관](https://doublezero.xyz/terms-protocol)에 따릅니다. + 이 문서와 관련 코드의 검토 및 사용은 [웹사이트 이용약관](https://doublezero.xyz/terms) 및 [프로토콜 이용약관](https://doublezero.xyz/terms-protocol)의 적용을 받습니다. -DoubleZero 프로토콜은 검증자 사용자로부터 SOL 단위의 수익을 수집하지만 기여자에게 2Z 단위의 보상을 배포합니다. 따라서 SOL을 2Z로 변환해야 합니다. +DoubleZero 프로토콜은 검증자 사용자로부터 SOL 표시 수익을 수집하지만, 기여자에게는 2Z 표시 보상을 분배합니다. 따라서 SOL을 2Z로 변환해야 합니다. -**이를 위해 적격 참여자는 DoubleZero 스왑 계약에 대해 거래하여 계약에서 SOL을 구매하고 2Z를 판매할 수 있습니다. 가격은 Pyth 가격 피드와 프로그래매틱 할인 메커니즘을 기반으로 합니다.** +**이를 위해 자격을 갖춘 참여자는 DoubleZero 스왑 컨트랙트를 상대로 거래하여 컨트랙트로부터 SOL을 구매하고 2Z를 판매할 수 있습니다. 가격은 Pyth 가격 피드를 기반으로 하며 프로그래밍 방식의 할인 메커니즘이 적용됩니다.** -이 짧은 가이드는 프로그램 사용 방법을 설명합니다. +이 간략한 가이드는 프로그램 사용 방법을 설명합니다. -***코드 또는 관련 자료에 액세스하거나 사용하기 전에 이 문서 끝에 있는 면책 조항을 검토하세요.*** +***코드 또는 관련 자료에 접근하거나 사용하기 전에 이 문서 끝에 있는 면책 조항을 검토하십시오.*** --- ## 프로그램 설계 -스왑 프로그램은 거래당 1 SOL의 고정 배치 크기로 SOL을 판매하는 단방향 유동성 풀입니다. 적격 참여자는 오라클 가격과 동적 할인에 의해 결정되는 가격으로 2Z를 예치하여 프로그램에서 SOL을 인출할 수 있습니다. 시간이 지남에 따라 이는 네이티브 토큰을 2Z로 전환하는 프로그램의 목표를 실행합니다. +스왑 프로그램은 사실상 거래당 1 SOL의 고정 배치 크기로 SOL을 판매하는 단방향 유동성 풀입니다. 자격을 갖춘 모든 참여자는 Pyth의 오라클 가격과 동적 할인에 의해 결정되는 가격으로 2Z를 예치하여 프로그램에서 SOL을 인출할 수 있습니다. 시간이 지남에 따라 이는 네이티브 토큰을 2Z로 전환하는 프로그램의 목표를 달성합니다. -사용하려면 트레이더가 두 개의 최근 Pyth 가격(SOL/USD 및 2Z/USD)과 2Z 수량을 제공해야 합니다. 그러면 프로그램은 내포된 SOL/2Z 가격을 기반으로 1 SOL 구매에 필요한 2Z를 계산합니다. 그런 다음 몇 가지 추가 단계를 수행합니다: +이를 사용하려면 거래자는 두 개의 최근 Pyth 가격(SOL/USD 및 2Z/USD)과 일정량의 2Z를 제공해야 합니다. 그러면 프로그램은 내재된 SOL/2Z 가격을 기반으로 1 SOL을 구매하는 데 필요한 2Z를 계산합니다. 이후 몇 가지 추가 단계를 수행합니다: -- Pyth 가격이 충분히 신선한지 확인합니다. 즉, 5초 이상 오래되지 않았는지 확인합니다. -- 두 가격의 신뢰 구간이 충분히 작은지 확인합니다. 즉, 두 가격의 두 라플라스 표준 편차(Pyth 가격의 `conf` 파라미터)의 합이 수준으로 정규화될 때 30 기저점 이하여야 합니다. -- 동적 할인(Pyth 가격의 백분율)으로 SOL/2Z 가격을 조정합니다. 이 할인은 마지막 거래 이후 시간의 함수입니다. 아래 공식은 마지막 거래가 슬롯 $s_{\text{last}}$에서 이루어지고 현재 슬롯이 $s_{\text{now}}$인 경우의 할인을 지정합니다. (예를 들어 마지막 거래 이후 200 슬롯이 경과한 경우 할인은 40 기저점입니다.) +- Pyth 가격이 충분히 최신인지, 즉 5초 이상 오래되지 않았는지 확인합니다. +- 두 가격의 신뢰 구간이 충분히 작은지 확인합니다. 즉, 두 가격에 대한 두 개의 라플라스 표준편차(Pyth 가격의 `conf` 매개변수)의 합을 각각의 가격 수준으로 정규화한 값이 30 베이시스 포인트 이하여야 합니다. +- SOL/2Z 가격을 동적 할인으로 조정합니다. 이 할인은 Pyth 가격의 백분율로 표시됩니다. 이 할인은 마지막 거래 이후 경과한 시간의 함수입니다. 아래 수식은 마지막 거래가 슬롯 $s_{\text{last}}$에서 이루어졌고 현재 슬롯이 $s_{\text{now}}$일 때의 할인을 명시합니다. (예를 들어, 마지막 거래 이후 200 슬롯이 경과했다면 할인은 40 베이시스 포인트입니다.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -이 시점에서 트레이더가 이 계산된 가격(할인 포함)으로 트랜잭션을 실행하기에 충분한 2Z를 제공했다면, 이 계산된 가격으로 실행됩니다. 트레이더에게 구매한 SOL 수량과 초과 2Z를 반환합니다. +이 시점에서 거래자가 계산된 가격(할인 포함)으로 거래를 실행하기에 충분한 2Z를 제공했다면 이 계산된 가격으로 거래가 실행됩니다. 구매한 SOL 수량과 초과 2Z가 거래자에게 반환됩니다. -그런 다음 계약은 해당 슬롯에 대해 더 이상 거래를 허용하지 않습니다. 이는 Pyth 가격이 현재 기존 필터가 잡지 못하는 방식으로 특정 시점의 실제 가격과 멀리 떨어져 있을 경우 계약이 과도하게 높은 슬리피지를 지불하는 것을 방지하기 위한 것입니다. +이후 컨트랙트는 해당 슬롯에서 더 이상의 거래를 허용하지 않습니다. 이는 기존 필터가 포착하지 못하는 방식으로 특정 시점에서 Pyth 가격이 실제 가격과 크게 벗어날 경우, 컨트랙트가 과도하게 높은 슬리피지를 지불하는 것을 방지하기 위함입니다. --- ## 가스 없는 원자적 실행 -이 섹션에서는 `harvest-dz` 명령을 사용하는 방법을 자세히 설명합니다. 이 명령은 2가지 작업을 원자적으로 수행합니다. -1. 명령이 Jupiter에서 네이티브 SOL <> 2Z 변환 프로그램 대비 견적을 요청합니다. -2. Jupiter 경로가 네이티브 변환 프로그램이 요구하는 것보다 SOL당 더 많은 2Z를 생성할 때, `harvest-2z`는 스왑을 실행하여 지갑에 1 SOL과 2Z의 차이를 반환합니다. +이 섹션에서는 `harvest-dz` 명령어 사용 방법을 자세히 설명합니다. 이 명령어는 2가지 작업을 원자적으로 수행합니다. +1. Jupiter에서 네이티브 SOL <> 2Z 변환 프로그램과 비교하여 시세를 요청합니다. +2. Jupiter 경로가 네이티브 변환 프로그램이 요구하는 것보다 SOL당 더 많은 2Z를 산출할 때, `harvest-2z`는 스왑을 실행하여 지갑에 1 SOL과 2Z 차액을 반환합니다. -### Harvest 2Z +### 2Z 수확 -실행하려면 다음을 실행하세요: +실행하려면 다음을 실행하십시오: ``` doublezero-solana revenue-distribution harvest-2z ``` @@ -65,7 +63,7 @@ doublezero-solana revenue-distribution harvest-2z ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -명령은 `--dry-run` 인수로 시뮬레이션할 수도 있습니다. 드라이런은 프로그램 로그와 다음과 유사한 출력을 생성합니다: +이 명령어는 `--dry-run` 인수를 사용하여 시뮬레이션할 수도 있습니다. 시뮬레이션 실행은 프로그램 로그와 다음과 유사한 출력을 생성합니다: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -75,17 +73,17 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## 프로토콜 변환 -이 섹션에서는 `doublezero-solana` CLI를 사용하여 환율을 확인하고 변환을 실행하는 방법을 설명합니다. 마지막에는 DoubleZero 스왑 계약과의 맞춤형 통합을 위한 인터페이스를 설명합니다. +이 섹션에서는 `doublezero-solana` CLI를 사용한 변환율 확인 및 변환 실행에 대해 설명합니다. 마지막 부분에서는 DoubleZero 스왑 컨트랙트와의 커스텀 통합을 위한 인터페이스에 대해 논의합니다. -### `doublezero-solana`를 통해 SOL/2Z 환율 확인 방법 +### `doublezero-solana`를 통한 SOL/2Z 변환 가격 확인 방법 -메인넷-베타의 SOL/2Z 환율을 찾으려면 다음 명령을 실행하세요: +mainnet-beta에서 SOL/2Z 변환율을 확인하려면 다음 명령어를 실행하십시오: ```bash doublezero-solana revenue-distribution fetch sol-conversion ``` -출력은 다음과 유사합니다: +표시되는 출력은 다음과 유사합니다: ```bash | field | description | value | note | @@ -95,37 +93,37 @@ doublezero-solana revenue-distribution fetch sol-conversion | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -저널 잔액은 수익 배분 스마트 계약에 얼마나 많은 SOL 유동성이 있는지 사용자에게 알립니다. 저널 잔액이 1 SOL의 고정 거래 크기를 초과하는 한 사용자는 거래할 수 있습니다. +Journal Balance는 Revenue Distribution 스마트 컨트랙트에 얼마나 많은 SOL 유동성이 있는지 사용자에게 알려줍니다. Journal Balance가 고정 거래 크기인 1 SOL을 초과하는 한 사용자는 거래할 수 있습니다. -첫 번째 행은 오프체인 오라클을 통한 "실제" SOL/2Z 환율을 표시합니다. 두 번째 행은 스왑에 온체인으로 사용되는 환율로, 단순히 알고리즘 할인에 대한 실제 가격을 조정합니다. +첫 번째 행은 오프체인 오라클을 통한 "실제" SOL/2Z 변환 가격을 표시합니다. 두 번째 행은 온체인 스왑에 사용되는 변환 가격으로, 단순히 알고리즘 할인을 반영하여 실제 가격을 조정한 것입니다. -### `doublezero-solana`를 통해 2Z를 SOL로 변환하는 방법 +### `doublezero-solana`를 통한 2Z를 SOL로 변환하는 방법 -2Z 토큰을 SOL로 변환하려면 다음 명령을 실행하세요: +2Z 토큰을 SOL로 변환하려면 다음 명령어를 실행하십시오: ```bash doublezero-solana revenue-distribution convert-2z ``` -기본적으로 충분한 SOL 유동성이 있고 ATA에 스왑을 수행할 충분한 2Z가 있으면 이 트랜잭션이 성공합니다. 다음 인수를 지정하여 스왑을 더 세밀하게 조정할 수 있습니다: +기본적으로 충분한 SOL 유동성이 있고 ATA에 스왑을 수행할 충분한 2Z가 있다면 이 거래는 성공합니다. 다음 인수를 지정하여 스왑을 더 세밀하게 조정할 수 있습니다: ```bash - --limit-price 현재 SOL/2Z 오라클 가격을 기본값으로 하는 지정가 - --source-2z-account 토큰 계정은 서명자가 소유해야 합니다. 지정하지 않으면 서명자 ATA로 기본 설정됩니다. - --checked-sol-amount SOL 금액을 명시적으로 확인합니다. 지정된 경우 이 금액이 고정 채움 수량과 비교하여 확인됩니다. + --limit-price Limit price defaults to the current SOL/2Z oracle price + --source-2z-account Token account must be owned by the signer. Defaults to signer ATA if not specified + --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -지정된 지정가는 SOL/2Z 변환을 수행할 때 수락할 최악의 경우 가격을 결정합니다. 예를 들어 SOL에 대한 할인된 2Z 가격이 800이라고 가정합시다. 즉, 1 SOL에 2Z 토큰 800개입니다. 지정가를 790으로 지정하면 최대 790개의 2Z 토큰만 스왑하도록 요구하기 때문에 스왑을 수행하지 않습니다. 그러나 810을 지정하면 최대 810개의 2Z 토큰을 스왑할 의향이 있었으므로 거래가 이루어집니다(이 경우 이 트랜잭션에서 2Z 토큰 800개만 스왑됩니다). +지정된 지정가(limit price)는 SOL/2Z 변환을 수행할 때 수용할 수 있는 최악의 가격을 결정합니다. 예를 들어, SOL의 할인된 2Z 가격이 800이라고 가정합시다. 이는 1 SOL에 800 2Z 토큰을 의미합니다. 지정가를 790으로 설정하면, 1 SOL에 최대 790 2Z 토큰만 스왑하겠다는 것이므로 스왑을 수행하지 않습니다. 그러나 810으로 설정하면 최대 810 2Z 토큰까지 스왑할 의향이 있었으므로 거래가 체결됩니다(이 경우 실제로는 이 거래에서 800 2Z 토큰만 스왑됩니다). -소스 2Z 토큰 계정은 이 2Z ATA의 소유자로 서명자를 사용하는 기본 ATA를 재정의합니다. 그러나 스왑을 수행하는 데 사용하려는 다른 토큰 계정이 있는 경우 이 인수와 함께 해당 공개 키를 제공하세요. +소스 2Z 토큰 계정은 서명자를 이 2Z ATA의 소유자로 사용하는 기본 ATA를 재정의합니다. 그러나 스왑에 사용하려는 다른 토큰 계정이 있다면, 이 인수를 통해 해당 공개키를 제공하십시오. -선택적으로, 확인된 SOL 금액을 표준 채움 크기(출시 시 1 SOL로 설정됨)에 지정할 수 있습니다. 프로그램의 채움 크기와 일치하지 않으면 스왑이 실패합니다. 이는 프로그램의 채움 크기가 변경되고 귀하가 알아차리지 못하는 위험을 완화합니다. +선택적으로 표준 체결 크기(출시 시 1 SOL로 설정)에 대해 확인된 SOL 수량을 지정할 수 있습니다. 프로그램의 체결 크기와 일치하지 않으면 스왑이 실패합니다. 이는 프로그램의 체결 크기가 변경되었는데 사용자가 이를 인지하지 못하는 위험을 완화합니다. ### SOL 구매 인터페이스 -인터페이스와 `doublezero-solana` CLI는 [이 저장소](https://github.com/doublezerofoundation/doublezero-offchain)에 있습니다. DoubleZero 스왑 계약 인터페이스의 소스 코드는 [여기](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)에서 찾을 수 있습니다. 프로그램 ID는 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`입니다. +인터페이스와 `doublezero-solana` CLI는 [이 저장소](https://github.com/malbeclabs/doublezero-offchain)에 있습니다. DoubleZero 스왑 컨트랙트 인터페이스의 소스 코드는 [여기](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)에서 찾을 수 있습니다. 프로그램 ID는 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`입니다. -buy SOL 명령에 필요한 계정을 생성하는 편리한 방법은 *instruction/account.rs*에 있는 `new` 메서드를 사용하는 것입니다. +SOL 구매 명령에 필요한 계정을 생성하는 편리한 방법은 `new` 메서드(*instruction/account.rs*에 있음)를 사용하는 것입니다. ```rust pub fn new( @@ -141,7 +139,7 @@ pub fn new( ```rust pub struct ProgramState { pub admin_key: Pubkey, - pub fills_registry_key: Pubkey, // 이 키 + pub fills_registry_key: Pubkey, // this key pub is_paused: bool, pub configuration_registry_bump: u8, pub program_state_bump: u8, @@ -152,9 +150,9 @@ pub struct ProgramState { } ``` -대안으로 판별자를 사용하여 Solana RPC를 통해 `getProgramAccounts`를 호출할 수 있습니다. 그러나 이 공개 키는 절대 변경되지 않으므로 캐시하는 것을 권장합니다. +또는 Solana RPC를 통해 디스크리미네이터와 함께 `getProgramAccounts`를 호출할 수 있습니다. 그러나 이 공개키는 절대 변경되지 않으므로 캐싱하는 것을 권장합니다. -`user_key`는 buy SOL 명령의 서명자이며 `user_token_account_key`의 소유자여야 합니다. 위에서 설명한 바와 같이 이것은 ATA일 필요가 없습니다. 2Z 토큰 계정이 `user_key`가 소유하는 한 이 명령이 성공합니다. +`user_key`는 SOL 구매 명령의 서명자이며 `user_token_account_key`의 소유자여야 합니다. 위에서 설명한 대로 이것은 ATA일 필요가 없습니다. 2Z 토큰 계정이 `user_key`에 의해 소유되기만 하면 이 명령은 성공합니다. `BuySolAccounts` 구조체는 `Into>`를 구현하므로 명령을 빌드하는 데 필요한 모든 계정 메타를 생성할 수 있습니다. @@ -167,9 +165,9 @@ pub struct ProgramState { }, ``` -이 명령 데이터는 Borsh 직렬화되고 8바이트 Anchor 선택자가 있으며, 이는 `BorshSerialize::serialize`를 사용할 때 모두 직렬화됩니다. +이 명령 데이터는 Borsh 직렬화되며 8바이트 Anchor 선택자를 가지고 있으며, `BorshSerialize::serialize` 사용 시 모두 직렬화됩니다. -오라클 가격 데이터는 이 공개 엔드포인트에서 가져올 수 있습니다: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). 데이터는 *oracle.rs*에 있는 OraclePriceData 구조체를 사용하여 serde 역직렬화 가능합니다. +오라클 가격 데이터는 다음 공개 엔드포인트에서 가져올 수 있습니다: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). 데이터는 *oracle.rs*에 있는 OraclePriceData 구조체를 사용하여 serde 역직렬화가 가능합니다. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -[reqwest 크레이트](https://docs.rs/reqwest/latest/reqwest/)를 사용하여 가져오는 방법 예시: +[reqwest 크레이트](https://docs.rs/reqwest/latest/reqwest/)를 사용하여 가져오는 예시: ```rust use anyhow::{Context, Result}; @@ -202,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -프로그램 ID, 계정 및 명령 데이터를 사용하여 DoubleZero 스왑 계약에서 SOL을 구매하는 명령을 빌드할 수 있어야 합니다. +프로그램 ID, 계정 및 명령 데이터를 사용하면 DoubleZero 스왑 컨트랙트에서 SOL을 구매하는 명령을 빌드할 수 있습니다. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.md b/docs/Swapping-sol-to-2z.md index 1c7d010..7a42a11 100644 --- a/docs/Swapping-sol-to-2z.md +++ b/docs/Swapping-sol-to-2z.md @@ -1,6 +1,6 @@ **Review the Disclaimer before accessing or using the code or any related materials.** - + ??? warning "Disclaimer" @@ -121,7 +121,7 @@ Optionally, you may specify the checked SOL amount to the standard fill size (se ### Interface to Buy SOL -The interface and `doublezero-solana` CLI live in [this repo](https://github.com/doublezerofoundation/doublezero-offchain). The source code for the DoubleZero swap contract interface can be found [here](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). The program ID is `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +The interface and `doublezero-solana` CLI live in [this repo](https://github.com/malbeclabs/doublezero-offchain). The source code for the DoubleZero swap contract interface can be found [here](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). The program ID is `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. A convenient way of generating the accounts needed for the buy SOL instruction is using the `new` method (found in *instruction/account.rs*). diff --git a/docs/Swapping-sol-to-2z.pt.md b/docs/Swapping-sol-to-2z.pt.md index 38f2d58..5c8e388 100644 --- a/docs/Swapping-sol-to-2z.pt.md +++ b/docs/Swapping-sol-to-2z.pt.md @@ -1,29 +1,27 @@ **Revise o Aviso Legal antes de acessar ou usar o código ou quaisquer materiais relacionados.** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." - - + ??? warning "Aviso Legal" - - Este documento e o código associado são fornecidos apenas para fins informativos e técnicos. A funcionalidade de conversão de tokens descrita aqui é não custodial — os usuários interagem diretamente com os contratos inteligentes subjacentes e mantêm controle total de seus ativos em todos os momentos. + + Este documento e o código associado são fornecidos apenas para fins informativos e técnicos. A funcionalidade de conversão de tokens descrita aqui é não-custodial — os usuários interagem diretamente com os contratos inteligentes subjacentes e mantêm total controle de seus ativos em todos os momentos. O sistema pode depender de ou interagir com código de terceiros, fontes de dados ou mecanismos de precificação e taxas (por exemplo, contratos inteligentes, APIs ou exchanges descentralizadas) que não são desenvolvidos, controlados ou revisados pelo(s) desenvolvedor(es) ou publicador(es). Nenhuma representação ou garantia é feita quanto à precisão, funcionalidade ou segurança de qualquer componente de terceiros. - O(s) desenvolvedor(es) e publicador(es) deste código não garantem sua precisão, integridade ou disponibilidade contínua. O código e os materiais relacionados são fornecidos "no estado em que se encontram" e podem conter bugs, erros ou vulnerabilidades. O uso é inteiramente por sua própria conta e risco. - O(s) desenvolvedor(es) e publicador(es) não recebem quaisquer taxas em conexão com o uso desses contratos. Eles não têm obrigação de manter, atualizar ou suportar o código ou a documentação relacionada. + O(s) desenvolvedor(es) e publicador(es) deste código não garantem sua precisão, completude ou disponibilidade contínua. O código e os materiais relacionados são fornecidos "como estão" e podem conter bugs, erros ou vulnerabilidades. O uso é inteiramente por sua conta e risco. + O(s) desenvolvedor(es) e publicador(es) não recebem quaisquer taxas em conexão com o uso destes contratos. Eles não têm obrigação de manter, atualizar ou dar suporte ao código ou à documentação relacionada. - Este documento não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação para participar de qualquer conversão de token, swap ou outra transação. Nenhum conselho jurídico, financeiro ou de investimento é fornecido. - Os usuários são os únicos responsáveis por determinar a legalidade de suas atividades. Eles devem revisar as leis e regulamentos aplicáveis em sua jurisdição e consultar assessores independentes antes de usar o código ou participar de qualquer conversão. O uso é proibido onde for ilegal, incluindo por pessoas ou entidades sujeitas a sanções ou em jurisdições restritas. + Este documento não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação para participar de qualquer conversão de tokens, swap ou outra transação. Nenhum aconselhamento jurídico, financeiro ou de investimento é fornecido. + Os usuários são os únicos responsáveis por determinar a legalidade de suas atividades. Eles devem revisar as leis e regulamentos aplicáveis em sua jurisdição e consultar consultores independentes antes de usar o código ou participar de qualquer conversão. O uso é proibido onde seria ilegal, incluindo por pessoas ou entidades sujeitas a sanções ou em jurisdições restritas. - Na extensão máxima permitida por lei, o(s) desenvolvedor(es) e publicador(es) se isentam de toda responsabilidade por qualquer perda, dano ou reclamação decorrente ou em conexão com o uso do código ou participação na conversão. + Na extensão máxima permitida por lei, o(s) desenvolvedor(es) e publicador(es) isentam-se de toda responsabilidade por qualquer perda, dano ou reclamação decorrente de ou em conexão com o uso do código ou participação na conversão. A revisão e o uso deste documento e do código associado estão sujeitos aos [Termos e Condições do Website](https://doublezero.xyz/terms) e [Termos e Condições do Protocolo](https://doublezero.xyz/terms-protocol). -O protocolo DoubleZero coleta receita denominada em SOL de seus usuários validadores, mas distribui recompensas denominadas em 2Z para os contribuidores. Portanto, ele deve converter SOL em 2Z. +O protocolo DoubleZero coleta receita denominada em SOL de seus usuários validadores, mas distribui recompensas denominadas em 2Z aos contribuidores. Assim, ele precisa converter SOL em 2Z. -**Para isso, participantes elegíveis podem negociar contra um contrato de swap DoubleZero, comprando SOL do contrato e vendendo 2Z. O preço é baseado em feeds de preço Pyth com um mecanismo de desconto programático.** +**Para isso, participantes elegíveis podem negociar contra um contrato de swap do DoubleZero, comprando SOL do contrato e vendendo 2Z. A precificação é baseada em feeds de preço da Pyth com um mecanismo de desconto programático.** -Este guia curto explica como usar o programa. +Este breve guia explica como usar o programa. ***Revise o Aviso Legal no final deste documento antes de acessar ou usar o código ou quaisquer materiais relacionados.*** @@ -31,37 +29,37 @@ Este guia curto explica como usar o programa. ## Design do Programa -O programa de swap é efetivamente um pool de liquidez unilateral que vende SOL em um tamanho de lote fixo de 1 SOL por negociação. Qualquer participante elegível pode retirar SOL do programa depositando 2Z, a um preço determinado por um preço oracle do Pyth e um desconto dinâmico. Com o tempo, isso executa o objetivo do programa de transformar tokens nativos em 2Z. +O programa de swap é efetivamente um pool de liquidez unilateral que vende SOL em um tamanho de lote fixo de 1 SOL por negociação. Qualquer participante elegível pode retirar SOL do programa depositando 2Z, a um preço determinado por um preço oráculo da Pyth e um desconto dinâmico. Ao longo do tempo, isso executa o objetivo do programa de converter tokens nativos em 2Z. -Para utilizar, um trader deve fornecer dois preços Pyth recentes (SOL/USD e 2Z/USD) e uma quantidade de 2Z. O programa então calcula o 2Z necessário para comprar aquele 1 SOL com base no preço implícito SOL/2Z. Em seguida, executa algumas etapas adicionais: +Para utilizar, um trader deve fornecer dois preços recentes da Pyth (SOL/USD e 2Z/USD) e uma quantidade de 2Z. O programa então calcula o 2Z necessário para comprar aquele 1 SOL com base no preço implícito SOL/2Z. Em seguida, ele executa algumas etapas adicionais: -- Verifica que os preços Pyth são suficientemente recentes, ou seja, não estão mais do que 5 segundos desatualizados. -- Verifica que os intervalos de confiança dos dois preços são suficientemente pequenos. Ou seja, a soma de dois desvios padrão de Laplace (ou seja, parâmetro `conf` no preço Pyth) para os dois preços, normalizada por seus níveis, deve ser menor ou igual a 30 pontos base. -- Ajusta o preço SOL/2Z por um desconto dinâmico, expresso como percentual do preço Pyth. Este desconto é uma função do tempo desde o último trade. A fórmula abaixo especifica o desconto, assumindo que o último trade foi feito no slot $s_{\text{last}}$ e o slot atual é $s_{\text{now}}$. (Por exemplo, se 200 slots se passaram desde o último trade, o desconto é de 40 pontos base.) +- Verifica se os preços da Pyth são suficientemente recentes, ou seja, não estão desatualizados por mais de 5 segundos. +- Verifica se os intervalos de confiança dos dois preços são suficientemente pequenos. Isto é, a soma de dois desvios padrão laplacianos (ou seja, o parâmetro `conf` no preço da Pyth) para os dois preços, normalizados por seus níveis, deve ser menor ou igual a 30 pontos base. +- Ajusta o preço SOL/2Z por um desconto dinâmico, expresso como uma porcentagem do preço da Pyth. Este desconto é uma função do tempo desde a última negociação. A fórmula abaixo especifica o desconto, assumindo que a última negociação foi feita no slot $s_{\text{last}}$ e o slot atual é $s_{\text{now}}$. (Por exemplo, se 200 slots se passaram desde a última negociação, o desconto é de 40 pontos base.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -Neste ponto, se o trader forneceu 2Z suficiente para executar a transação a esse preço calculado (inclusive o desconto), ela é executada a esse preço calculado. Retorna ao trader a quantidade comprada de SOL e qualquer excesso de 2Z. +Neste ponto, se o trader forneceu 2Z suficiente para executar a transação neste preço calculado (incluindo o desconto), ela é executada neste preço calculado. O programa retorna ao trader a quantidade comprada de SOL e qualquer excesso de 2Z. -O contrato então não permite mais negociações para aquele slot. Isso é para evitar que o contrato pague slippage excessivamente alto caso o preço Pyth esteja longe do preço verdadeiro em qualquer momento de maneiras que os filtros existentes não capturam. +O contrato então não permite mais negociações para aquele slot. Isso é para evitar que o contrato pague slippage excessivamente alto caso o preço da Pyth esteja longe do preço real em qualquer momento, de maneiras que os filtros existentes não detectem problemas. --- -## Execução Atômica Sem Gas +## Execução Atômica sem Gas Esta seção detalha como usar o comando `harvest-dz`. Este comando executará atomicamente 2 ações. -1. O comando solicita uma cotação do Jupiter versus o programa de conversão nativo SOL <> 2Z. -2. Quando a rota do Jupiter gera mais 2Z por SOL do que o programa de conversão nativo requer, `harvest-2z` executa um swap, retornando à sua carteira 1 SOL mais a diferença em 2Z. +1. O comando solicita uma cotação do Jupiter versus o programa nativo de conversão SOL <> 2Z. +2. Quando a rota do Jupiter rende mais 2Z por SOL do que o programa de conversão nativo requer, `harvest-2z` executa um swap, retornando para sua carteira 1 SOL mais a diferença em 2Z. ### Harvest 2Z -Para executar, execute o seguinte: +Para executar, rode o seguinte: ``` doublezero-solana revenue-distribution harvest-2z ``` -A saída se parecerá com: +A saída será semelhante a: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` @@ -75,17 +73,17 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## Conversão do Protocolo -Esta seção discute como verificar as taxas de conversão e executar a conversão usando o CLI `doublezero-solana`. E no final, discutimos a interface para integrações personalizadas com o contrato de swap DoubleZero. +Esta seção discute a verificação de taxas de conversão e a execução da conversão usando a CLI `doublezero-solana`. E ao final, discutimos a interface para integrações personalizadas com o contrato de swap do DoubleZero. ### Como verificar o preço de conversão SOL/2Z via `doublezero-solana` -Para encontrar as taxas de conversão SOL/2Z no mainnet-beta, execute o seguinte comando: +Para encontrar as taxas de conversão SOL/2Z na mainnet-beta, execute o seguinte comando: ```bash doublezero-solana revenue-distribution fetch sol-conversion ``` -E a saída que você veria se parecerá com: +E a saída que você verá será semelhante a: ```bash | field | description | value | note | @@ -95,9 +93,9 @@ E a saída que você veria se parecerá com: | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -O Journal Balance informa ao usuário quanta liquidez SOL existe no contrato inteligente de Distribuição de Receita. Um usuário pode negociar enquanto o Journal Balance exceder o tamanho fixo de negociação de 1 SOL. +O Journal Balance informa ao usuário quanta liquidez de SOL existe no contrato inteligente de Distribuição de Receita. Um usuário pode negociar desde que o Journal Balance exceda o tamanho fixo de negociação de 1 SOL. -A primeira linha exibe o preço "verdadeiro" de conversão SOL/2Z via oracle offchain. A segunda linha é o preço de conversão usado onchain para o swap, que simplesmente ajusta o preço verdadeiro para o desconto algorítmico. +A primeira linha exibe o preço de conversão SOL/2Z "real" via um oráculo offchain. A segunda linha é o preço de conversão usado on-chain para o swap, que simplesmente ajusta o preço real pelo desconto algorítmico. ### Como converter seu 2Z para SOL via `doublezero-solana` @@ -107,25 +105,25 @@ Para converter seus tokens 2Z para SOL, execute o seguinte comando: doublezero-solana revenue-distribution convert-2z ``` -Por padrão, se houver liquidez SOL suficiente e sua ATA tiver 2Z suficiente para realizar o swap, esta transação terá sucesso. Você pode ajustar o swap mais precisamente especificando os seguintes argumentos: +Por padrão, se houver liquidez de SOL suficiente e sua ATA tiver 2Z suficiente para realizar o swap, esta transação será bem-sucedida. Você pode ajustar mais detalhadamente o swap especificando os seguintes argumentos: ```bash - --limit-price O preço limite padrão é o preço oracle atual SOL/2Z - --source-2z-account A conta de token deve ser de propriedade do signatário. Padrão para ATA do signatário se não especificado - --checked-sol-amount Verificar explicitamente o valor SOL. Quando especificado, este valor será verificado contra a quantidade fixa de preenchimento + --limit-price Limit price defaults to the current SOL/2Z oracle price + --source-2z-account Token account must be owned by the signer. Defaults to signer ATA if not specified + --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -O preço limite especificado determina o pior caso de preço que você está disposto a aceitar ao realizar a conversão SOL/2Z. Por exemplo, digamos que o preço 2Z com desconto para SOL seja 800, o que significa 800 tokens 2Z por 1 SOL. Se você especificar um preço limite de 790, não estará disposto a realizar o swap porque está exigindo trocar no máximo 790 tokens 2Z por 1 SOL. Mas se você especificar 810, o trade passará porque você estava disposto a trocar no máximo 810 tokens 2Z (e neste caso, você terá trocado apenas 800 tokens 2Z nesta transação). +O preço limite especificado determina o pior preço que você está disposto a aceitar ao realizar a conversão SOL/2Z. Por exemplo, digamos que o preço com desconto de 2Z para SOL é 800, o que significa 800 tokens 2Z para 1 SOL. Se você especificar um preço limite de 790, você não está disposto a realizar o swap porque está exigindo que troque no máximo 790 tokens 2Z por 1 SOL. Mas se você especificar 810, a negociação será executada porque você estava disposto a trocar no máximo 810 tokens 2Z (e neste caso, você terá trocado apenas 800 tokens 2Z nesta transação). -A conta de token 2Z de origem substitui a ATA padrão usando o signatário como proprietário desta ATA 2Z. Mas se você tiver outra conta de token que deseja usar para realizar o swap, forneça a pubkey para ela com este argumento. +A conta de token 2Z de origem substitui a ATA padrão usando o signatário como proprietário desta ATA de 2Z. Mas se você tiver outra conta de token que deseja usar para realizar o swap, forneça a pubkey dela com este argumento. -Opcionalmente, você pode especificar o valor SOL verificado para o tamanho de preenchimento padrão (definido como 1 SOL no lançamento). Se não estiver alinhado com o tamanho de preenchimento do programa, o swap falhará. Isso mitiga o risco de que o tamanho de preenchimento do programa mude e você não perceba. +Opcionalmente, você pode especificar o valor verificado de SOL para o tamanho de preenchimento padrão (definido como 1 SOL no lançamento). Se não estiver alinhado com o tamanho de preenchimento do programa, o swap falhará. Isso mitiga o risco de que o tamanho de preenchimento do programa mude e você não perceba. ### Interface para Comprar SOL -A interface e o CLI `doublezero-solana` residem em [este repositório](https://github.com/doublezerofoundation/doublezero-offchain). O código-fonte para a interface do contrato de swap DoubleZero pode ser encontrado [aqui](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). O ID do programa é `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +A interface e a CLI `doublezero-solana` estão [neste repositório](https://github.com/malbeclabs/doublezero-offchain). O código-fonte da interface do contrato de swap do DoubleZero pode ser encontrado [aqui](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). O Program ID é `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. -Uma maneira conveniente de gerar as contas necessárias para a instrução de compra de SOL é usar o método `new` (encontrado em *instruction/account.rs*). +Uma maneira conveniente de gerar as contas necessárias para a instrução de compra de SOL é usando o método `new` (encontrado em *instruction/account.rs*). ```rust pub fn new( @@ -136,12 +134,12 @@ pub fn new( ) -> Self; ``` -O `fill_registry_key` pode ser buscado do `ProgramState` +O `fill_registry_key` pode ser obtido a partir do `ProgramState` ```rust pub struct ProgramState { pub admin_key: Pubkey, - pub fills_registry_key: Pubkey, // esta chave + pub fills_registry_key: Pubkey, // this key pub is_paused: bool, pub configuration_registry_bump: u8, pub program_state_bump: u8, @@ -152,13 +150,13 @@ pub struct ProgramState { } ``` -Alternativamente, você pode chamar `getProgramAccounts` via Solana RPC com seu discriminador. Mas recomendamos armazenar em cache esta pubkey, pois ela nunca mudará. +Alternativamente, você pode chamar `getProgramAccounts` via Solana RPC com seu discriminador. Mas recomendamos fazer cache desta pubkey, pois ela nunca mudará. -O `user_key` é um signatário para a instrução de compra de SOL e deve ser o proprietário do `user_token_account_key`. Conforme descrito acima, isso NÃO precisa ser uma ATA. Desde que sua conta de token 2Z seja de propriedade do `user_key`, esta instrução terá sucesso. +O `user_key` é um signatário para a instrução de compra de SOL e deve ser o proprietário do `user_token_account_key`. Como descrito acima, isso NÃO precisa ser uma ATA. Desde que sua conta de token 2Z seja de propriedade do `user_key`, esta instrução será bem-sucedida. -A struct `BuySolAccounts` implementa `Into>` para que você possa gerar todos os metadados de conta necessários para construir a instrução. +A struct `BuySolAccounts` implementa `Into>` para que você possa gerar todos os account metas necessários para construir a instrução. -Os dados de instrução são +Os dados da instrução são ```rust SolConversionInstructionData::BuySol { @@ -167,9 +165,9 @@ Os dados de instrução são }, ``` -Esses dados de instrução são serializados em Borsh e têm um seletor Anchor de 8 bytes, que todos serializarão ao usar `BorshSerialize::serialize`. +Estes dados de instrução são serializados em Borsh e possuem um seletor Anchor de 8 bytes, que será totalmente serializado ao usar `BorshSerialize::serialize`. -Os dados de preço oracle podem ser obtidos deste endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Os dados são desserializáveis em serde usando a struct OraclePriceData encontrada em *oracle.rs*. +Os dados de preço do oráculo podem ser obtidos a partir deste endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Os dados são desserializáveis via serde usando a struct OraclePriceData encontrada em *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -Exemplo de como buscar usando o [reqwest crate](https://docs.rs/reqwest/latest/reqwest/): +Exemplo de como buscar usando a [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): ```rust use anyhow::{Context, Result}; @@ -202,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -Com o ID do programa, contas e dados de instrução, você deve ser capaz de construir a instrução para comprar SOL do contrato de swap DoubleZero. +Com o Program ID, as contas e os dados da instrução, você deverá ser capaz de construir a instrução para comprar SOL do contrato de swap do DoubleZero. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.zh.md b/docs/Swapping-sol-to-2z.zh.md index d64ba0c..0b750fe 100644 --- a/docs/Swapping-sol-to-2z.zh.md +++ b/docs/Swapping-sol-to-2z.zh.md @@ -1,71 +1,69 @@ -**在访问或使用代码或相关材料之前,请查看免责声明。** -!!! warning "This translation was generated using artificial intelligence and has not been reviewed by a human translator. It may contain inaccuracies or errors and should not be relied upon." +**在访问或使用代码或任何相关材料之前,请查阅免责声明。** - - + ??? warning "免责声明" + + 本文档及相关代码仅供参考和技术用途。本文所述的代币转换功能为非托管模式——用户直接与底层智能合约交互,并始终保留对其资产的完全控制权。 - 本文档及相关代码仅供信息和技术目的提供。本文中描述的代币转换功能是非托管型的。用户直接与底层智能合约交互,始终完全控制自己的资产。 - - 该系统可能依赖于或与开发人员和发行人未开发、管理或审查的第三方代码、数据源或价格和费用机制(例如智能合约、API或去中心化交易所)交互。对第三方组件的准确性、功能或安全性不作任何声明或保证。 - 本代码的开发人员和发行人不保证其准确性、完整性或持续可用性。代码和相关材料按"原样"(AS IS)提供,可能包含错误、缺陷或漏洞。使用风险自负。 - 开发人员和发行人不会因使用这些合约而收取任何费用。对代码或相关文档没有维护、更新或支持的义务。 + 本系统可能依赖或与第三方代码、数据源或定价和费用机制(例如智能合约、API 或去中心化交易所)进行交互,这些均非由开发者或发布者开发、控制或审查。对于任何第三方组件的准确性、功能性或安全性,不作任何声明或保证。 + 本代码的开发者和发布者不保证其准确性、完整性或持续可用性。代码及相关材料按"原样"提供,可能包含错误、缺陷或漏洞。使用风险完全由您自行承担。 + 开发者和发布者不会因使用这些合约而收取任何费用。他们没有义务维护、更新或支持代码或相关文档。 - 本文件不是对参与代币转换、兑换或其他交易的推介、招揽或建议。不提供法律、财务或投资建议。 - 用户单独负责确定其活动的合法性。在使用代码或参与转换之前,必须查阅适用于其司法管辖区的法律法规,并咨询独立顾问。在违法的地方使用是被禁止的,包括受制裁的个人或组织或受限地区的使用。 + 本文档不构成出售要约、购买邀约,也不构成参与任何代币转换、兑换或其他交易的建议。本文不提供任何法律、财务或投资建议。 + 用户须自行负责确定其活动的合法性。用户应在使用代码或参与任何转换之前,查阅其所在司法管辖区适用的法律法规,并咨询独立顾问。在可能违法的情况下禁止使用,包括受制裁对象或受限司法管辖区内的个人或实体。 - 在法律允许的最大范围内,开发人员和发行人否认因使用代码或参与转换而引起的或与之相关的所有损失、损害或索赔的任何责任。 + 在法律允许的最大范围内,开发者和发布者对因使用代码或参与转换而产生的或与之相关的任何损失、损害或索赔不承担任何责任。 - 本文档及相关代码的审查和使用须遵守[网站使用条款](https://doublezero.xyz/terms)和[协议使用条款](https://doublezero.xyz/terms-protocol)。 + 查阅和使用本文档及相关代码须遵守[网站条款与条件](https://doublezero.xyz/terms)和[协议条款与条件](https://doublezero.xyz/terms-protocol)。 -DoubleZero协议从验证器用户处收取以SOL计价的收益,但以2Z计价向贡献者分配奖励。因此,需要将SOL转换为2Z。 +DoubleZero 协议从其验证者用户处收取以 SOL 计价的收入,但向贡献者分配以 2Z 计价的奖励。因此,它必须将 SOL 转换为 2Z。 -**为此,合格的参与者可以与DoubleZero兑换合约进行交易,从合约购买SOL并出售2Z。定价基于Pyth价格数据流和程序性折扣机制。** +**为此,符合条件的参与者可以与 DoubleZero 兑换合约进行交易,从合约中购买 SOL 并出售 2Z。定价基于 Pyth 价格馈送以及程序化折扣机制。** -本指南介绍如何使用该程序。 +本简要指南说明如何使用该程序。 -***在访问或使用本文档及相关代码之前,请查看文档末尾的免责声明。*** +***在访问或使用代码或任何相关材料之前,请查阅本文档末尾的免责声明。*** --- ## 程序设计 -兑换程序本质上是一个单边流动性池,每笔交易的固定批量为1 SOL进行SOL销售。合格的参与者可以存入2Z并从程序提取SOL,价格由Pyth的预言机价格和动态折扣决定。随着时间的推移,这实现了将程序的原生代币转换为2Z的目标。 +兑换程序实质上是一个单边流动性池,以每笔交易固定批量 1 SOL 的方式出售 SOL。任何符合条件的参与者都可以通过存入 2Z 从程序中提取 SOL,价格由 Pyth 的预言机价格和动态折扣决定。随着时间的推移,这实现了该程序将原生代币转换为 2Z 的目标。 -要使用该程序,交易者需要提供两个最新的Pyth价格(SOL/USD和2Z/USD)以及2Z的数量。程序随后根据隐含的SOL/2Z价格计算购买1 SOL所需的2Z。然后执行一些额外步骤: +要使用该功能,交易者必须提供两个最新的 Pyth 价格(SOL/USD 和 2Z/USD)以及一定数量的 2Z。然后程序根据隐含的 SOL/2Z 价格计算购买 1 SOL 所需的 2Z 数量。接下来它还会执行以下几个额外步骤: -- 检查Pyth价格是否足够新,即不超过5秒的旧价格。 -- 检查两个价格的置信区间是否足够小,即两个价格的拉普拉斯标准差(Pyth价格参数`conf`)之和在其水平上归一化后不得超过30个基点。 -- 用动态折扣(以Pyth价格的百分比表示)调整SOL/2Z价格。此折扣是自上次交易以来时间的函数。以下公式指定折扣,假设上次交易在槽位$s_{\text{last}}$,当前槽位为$s_{\text{now}}$。(例如,如果自上次交易以来已经过了200个槽位,折扣为40个基点。) +- 检查 Pyth 价格是否足够新鲜,即不超过 5 秒的延迟。 +- 检查两个价格的置信区间是否足够小。即两个价格的两个拉普拉斯标准差(即 Pyth 价格中的 `conf` 参数)之和,经各自价格水平归一化后,必须小于或等于 30 个基点。 +- 通过动态折扣调整 SOL/2Z 价格,折扣以 Pyth 价格的百分比表示。此折扣是自上次交易以来时间的函数。以下公式指定了折扣,假设上次交易在槽位 $s_{\text{last}}$ 进行,当前槽位为 $s_{\text{now}}$。(例如,如果自上次交易以来已过去 200 个槽位,则折扣为 40 个基点。) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -此时,如果交易者提供足够的2Z以按此计算价格(含折扣)执行交易,则将按此计算价格执行。交易者将收到购买的SOL和多余的2Z。 +此时,如果交易者提供了足够的 2Z 以在此计算价格(包含折扣)下执行交易,则按此计算价格执行。它会将购买的 SOL 数量和多余的 2Z 返还给交易者。 -合约随后不允许在该槽位进行更多交易。这是为了防止合约在Pyth价格在任何时间点与真实价格相差太远(超出现有过滤器的捕获范围)时支付过高的滑点。 +之后该合约在该槽位内不再允许更多交易。这是为了防止在任何给定时间点 Pyth 价格远离真实价格时(现有过滤器未能捕获的情况下),合约支付过高的滑点。 --- -## 无Gas原子执行 +## 无 Gas 原子执行 -本节介绍`harvest-dz`命令的使用方法。该命令以原子方式执行两个操作: -1. 命令向Jupiter请求针对原生SOL <> 2Z转换程序的报价。 -2. 如果Jupiter路由产生的2Z/SOL多于原生SOL转换程序所需的,`harvest-2z`将执行兑换,并将1 SOL和2Z的差额返还到钱包。 +本节将详细介绍如何使用 `harvest-dz` 命令。此命令将原子性地执行 2 个操作。 +1. 该命令从 Jupiter 请求报价,并与原生 SOL <> 2Z 转换程序进行对比。 +2. 当 Jupiter 路由的每 SOL 兑换的 2Z 数量多于原生转换程序所需的数量时,`harvest-2z` 执行一笔兑换,将 1 SOL 加上 2Z 差额返回到您的钱包。 -### 2Z的收割 +### 收割 2Z 要执行,请运行以下命令: ``` doublezero-solana revenue-distribution harvest-2z ``` -输出将如下所示: +输出将类似于: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -该命令也可以使用`--dry-run`参数进行模拟。干运行将生成程序日志和如下输出: +该命令也可以使用 `--dry-run` 参数进行模拟。模拟运行将产生程序日志和类似以下的输出: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -75,17 +73,17 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## 协议转换 -本节介绍如何检查转换率以及如何使用`doublezero-solana` CLI执行转换。最后还介绍了与DoubleZero兑换合约进行自定义集成的接口。 +本节讨论如何使用 `doublezero-solana` CLI 检查转换汇率和执行转换。最后,我们讨论与 DoubleZero 兑换合约进行自定义集成的接口。 -### 如何通过`doublezero-solana`检查SOL/2Z转换价格 +### 如何通过 `doublezero-solana` 查看 SOL/2Z 转换价格 -要检查主网Beta的SOL/2Z转换率,请运行以下命令: +要查看主网 (mainnet-beta) 上的 SOL/2Z 转换汇率,请运行以下命令: ```bash doublezero-solana revenue-distribution fetch sol-conversion ``` -显示的输出将如下所示: +您将看到类似以下的输出: ```bash | field | description | value | note | @@ -95,37 +93,37 @@ doublezero-solana revenue-distribution fetch sol-conversion | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Journal Balance告知用户收入分配智能合约中有多少SOL流动性。只要Journal Balance超过固定交易大小1 SOL,用户就可以交易。 +Journal Balance 告知用户收入分配智能合约中有多少 SOL 流动性。只要 Journal Balance 超过固定交易大小 1 SOL,用户就可以进行交易。 -第一行显示链下预言机的"真实"SOL/2Z转换价格。第二行是链上兑换使用的转换价格,是对算法折扣的真实价格的调整。 +第一行显示通过链下预言机获得的"真实" SOL/2Z 转换价格。第二行是用于链上兑换的转换价格,它只是在真实价格的基础上应用了算法折扣调整。 -### 如何通过`doublezero-solana`将2Z转换为SOL +### 如何通过 `doublezero-solana` 将您的 2Z 转换为 SOL -要将2Z代币转换为多的,请运行以下命令: +要将您的 2Z 代币转换为 SOL,请运行以下命令: ```bash doublezero-solana revenue-distribution convert-2z ``` -默认情况下,如果有足够的SOL流动性,并且ATA中有足够的2Z执行兑换,此交易将成功。通过指定以下参数,您可以更精细地控制兑换: +默认情况下,如果有足够的 SOL 流动性且您的 ATA 有足够的 2Z 来执行兑换,该交易将会成功。您可以通过指定以下参数来更精细地调整兑换: ```bash - --limit-price 限价默认为当前SOL/2Z预言机价格 - --source-2z-account 代币账户必须由签名者拥有。如果不指定,默认为签名者ATA - --checked-sol-amount 明确检查SOL金额。如果指定,此金额将针对固定填充数量进行检查 + --limit-price Limit price defaults to the current SOL/2Z oracle price + --source-2z-account Token account must be owned by the signer. Defaults to signer ATA if not specified + --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -指定的限价决定了执行SOL/2Z转换时您愿意接受的最坏情况价格。例如,假设SOL的折扣2Z价格为800(每1 SOL 800个2Z代币)。如果您将限价指定为790,您不愿意以每1 SOL多于790个2Z代币进行兑换,因此不会尝试执行兑换。但如果您指定810,您愿意兑换最多810个2Z代币(在本例中,仅在此交易中兑换800个2Z代币),因此交易将通过。 +指定的限价决定了您在执行 SOL/2Z 转换时愿意接受的最差价格。例如,假设折后 SOL 的 2Z 价格为 800,即 800 个 2Z 代币换 1 SOL。如果您指定限价为 790,您将不愿意执行兑换,因为您要求最多只用 790 个 2Z 代币换 1 SOL。但如果您指定 810,交易将会执行,因为您愿意最多兑换 810 个 2Z 代币(在这种情况下,您在该笔交易中实际只兑换了 800 个 2Z 代币)。 -源2Z代币账户会覆盖默认的ATA,使用签名者作为此2Z ATA的所有者。但是,如果您有另一个想要用于执行兑换的代币账户,请通过此参数提供其公钥。 +源 2Z 代币账户会覆盖默认的 ATA(使用签名者作为此 2Z ATA 的所有者)。但如果您有另一个代币账户想用于执行兑换,请使用此参数提供其公钥。 -作为选项,您可以指定要检查的SOL金额到标准填充大小(启动时设置为1 SOL)。如果与程序的填充大小不匹配,兑换将失败。这减少了程序填充大小发生变化而您未注意到的风险。 +可选地,您可以将已检查的 SOL 数量指定为标准成交大小(启动时设为 1 SOL)。如果它与程序的成交大小不一致,兑换将失败。这降低了程序成交大小发生变化而您未注意到的风险。 -### 购买SOL的接口 +### 购买 SOL 的接口 -接口和`doublezero-solana` CLI位于[此仓库](https://github.com/doublezerofoundation/doublezero-offchain)中。DoubleZero兑换合约接口的源代码在[这里](https://github.com/doublezerofoundation/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)。程序ID为`9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`。 +接口和 `doublezero-solana` CLI 位于[此仓库](https://github.com/malbeclabs/doublezero-offchain)。DoubleZero 兑换合约接口的源代码可在[此处](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)找到。程序 ID 为 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`。 -生成buy SOL指令所需账户的便捷方法是使用`new`方法(位于*instruction/account.rs*): +生成购买 SOL 指令所需账户的便捷方法是使用 `new` 方法(位于 *instruction/account.rs* 中)。 ```rust pub fn new( @@ -136,12 +134,12 @@ pub fn new( ) -> Self; ``` -`fill_registry_key`可从`ProgramState`获取 +`fill_registry_key` 可以从 `ProgramState` 中获取 ```rust pub struct ProgramState { pub admin_key: Pubkey, - pub fills_registry_key: Pubkey, // 此密钥 + pub fills_registry_key: Pubkey, // this key pub is_paused: bool, pub configuration_registry_bump: u8, pub program_state_bump: u8, @@ -152,11 +150,11 @@ pub struct ProgramState { } ``` -或者,您也可以通过Solana RPC使用判别器调用`getProgramAccounts`。但是,由于此公钥永远不会改变,建议对其进行缓存。 +或者,您可以通过 Solana RPC 使用其判别器调用 `getProgramAccounts`。但我们建议缓存此公钥,因为它永远不会改变。 -`user_key`是buy SOL指令的签名者,必须是`user_token_account_key`的所有者。如上所述,这不需要是ATA。只要2Z代币账户由`user_key`拥有,此指令就会成功。 +`user_key` 是购买 SOL 指令的签名者,必须是 `user_token_account_key` 的所有者。如上所述,这不需要是 ATA。只要您的 2Z 代币账户由 `user_key` 所有,此指令就会成功。 -`BuySolAccounts`结构体实现了`Into>`,因此可以生成构建指令所需的所有账户元数据。 +`BuySolAccounts` 结构体实现了 `Into>`,因此您可以生成构建指令所需的所有账户元数据。 指令数据为 @@ -167,9 +165,9 @@ pub struct ProgramState { }, ``` -此指令数据以Borsh序列化,有8字节的Anchor选择器,使用`BorshSerialize::serialize`序列化所有内容。 +此指令数据经过 Borsh 序列化,并带有 8 字节的 Anchor 选择器,使用 `BorshSerialize::serialize` 时会全部完成序列化。 -预言机价格数据可从此公共端点获取:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。数据可使用*oracle.rs*中的OraclePriceData结构体通过serde反序列化。 +预言机价格数据可以从此公共端点获取:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。该数据可使用 *oracle.rs* 中的 OraclePriceData 结构体进行 serde 反序列化。 ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -185,7 +183,7 @@ pub struct OraclePriceData { } ``` -使用[reqwest crate](https://docs.rs/reqwest/latest/reqwest/)的获取示例: +以下是使用 [reqwest crate](https://docs.rs/reqwest/latest/reqwest/) 获取数据的示例: ```rust use anyhow::{Context, Result}; @@ -202,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -使用程序ID、账户和指令数据,您应该能够构建从DoubleZero兑换合约购买SOL的指令。 +有了程序 ID、账户和指令数据,您应该能够构建从 DoubleZero 兑换合约购买 SOL 的指令。 \ No newline at end of file From 951b0c9dc73760e70cc44298a21a9c4a9c0e52b1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:38:12 +0000 Subject: [PATCH 2/2] chore: auto-translate docs --- docs/Swapping-sol-to-2z.es.md | 48 +++++++++---------- docs/Swapping-sol-to-2z.fr.md | 60 ++++++++++++------------ docs/Swapping-sol-to-2z.it.md | 74 +++++++++++++++--------------- docs/Swapping-sol-to-2z.ja.md | 82 ++++++++++++++++----------------- docs/Swapping-sol-to-2z.ko.md | 82 ++++++++++++++++----------------- docs/Swapping-sol-to-2z.pt.md | 86 +++++++++++++++++------------------ docs/Swapping-sol-to-2z.zh.md | 74 +++++++++++++++--------------- 7 files changed, 253 insertions(+), 253 deletions(-) diff --git a/docs/Swapping-sol-to-2z.es.md b/docs/Swapping-sol-to-2z.es.md index 2d288fe..27fbd5f 100644 --- a/docs/Swapping-sol-to-2z.es.md +++ b/docs/Swapping-sol-to-2z.es.md @@ -6,20 +6,20 @@ Este documento y el código asociado se proporcionan únicamente con fines informativos y técnicos. La funcionalidad de conversión de tokens descrita en este documento es no custodial: los usuarios interactúan directamente con los contratos inteligentes subyacentes y conservan el control total de sus activos en todo momento. - El sistema puede depender de o interactuar con código de terceros, fuentes de datos o mecanismos de precios y comisiones (por ejemplo, contratos inteligentes, APIs o exchanges descentralizados) que no son desarrollados, controlados ni revisados por el/los desarrollador(es) o editor(es). No se realiza ninguna declaración ni garantía respecto a la precisión, funcionalidad o seguridad de cualquier componente de terceros. - El/los desarrollador(es) y editor(es) de este código no garantizan su precisión, integridad o disponibilidad continuada. El código y los materiales relacionados se proporcionan "tal cual" y pueden contener errores, fallos o vulnerabilidades. Su uso es enteramente bajo su propio riesgo. - El/los desarrollador(es) y editor(es) no reciben ninguna comisión en relación con el uso de estos contratos. No tienen obligación alguna de mantener, actualizar o dar soporte al código o la documentación relacionada. + El sistema puede depender de o interactuar con código de terceros, fuentes de datos o mecanismos de precios y tarifas (por ejemplo, contratos inteligentes, APIs o exchanges descentralizados) que no son desarrollados, controlados ni revisados por el/los desarrollador(es) o editor(es). No se realiza ninguna declaración ni garantía en cuanto a la precisión, funcionalidad o seguridad de ningún componente de terceros. + El/los desarrollador(es) y editor(es) de este código no garantizan su precisión, integridad o disponibilidad continua. El código y los materiales relacionados se proporcionan "tal cual" y pueden contener errores, fallos o vulnerabilidades. Su uso es completamente bajo su propio riesgo. + El/los desarrollador(es) y editor(es) no reciben ninguna tarifa en relación con el uso de estos contratos. No tienen ninguna obligación de mantener, actualizar o dar soporte al código o a la documentación relacionada. Este documento no constituye una oferta de venta, una solicitud de compra ni una recomendación para participar en ninguna conversión de tokens, intercambio u otra transacción. No se proporciona asesoramiento legal, financiero ni de inversión. - Los usuarios son los únicos responsables de determinar la legalidad de sus actividades. Deben revisar las leyes y regulaciones aplicables en su jurisdicción y consultar a asesores independientes antes de utilizar el código o participar en cualquier conversión. Su uso está prohibido cuando sea ilegal, incluyendo por personas o entidades sujetas a sanciones o en jurisdicciones restringidas. + Los usuarios son los únicos responsables de determinar la legalidad de sus actividades. Deben revisar las leyes y regulaciones aplicables en su jurisdicción y consultar a asesores independientes antes de utilizar el código o participar en cualquier conversión. El uso está prohibido donde sea ilegal, incluyendo por personas o entidades sujetas a sanciones o en jurisdicciones restringidas. - En la máxima medida permitida por la ley, el/los desarrollador(es) y editor(es) declinan toda responsabilidad por cualquier pérdida, daño o reclamación que surja de o en relación con el uso del código o la participación en la conversión. + En la máxima medida permitida por la ley, el/los desarrollador(es) y editor(es) renuncian a toda responsabilidad por cualquier pérdida, daño o reclamación que surja de o en relación con el uso del código o la participación en la conversión. - La revisión y el uso de este documento y del código asociado están sujetos a los [Términos y Condiciones del Sitio Web](https://doublezero.xyz/terms) y los [Términos y Condiciones del Protocolo](https://doublezero.xyz/terms-protocol). + La revisión y el uso de este documento y del código asociado están sujetos a los [Términos y Condiciones del Sitio Web](https://doublezero.xyz/terms) y a los [Términos y Condiciones del Protocolo](https://doublezero.xyz/terms-protocol). -El protocolo DoubleZero recauda ingresos denominados en SOL de sus usuarios validadores, pero distribuye recompensas denominadas en 2Z a los contribuyentes. Por lo tanto, debe convertir SOL en 2Z. +El protocolo DoubleZero recauda ingresos denominados en SOL de sus usuarios validadores, pero distribuye recompensas denominadas en 2Z a los contribuidores. Por lo tanto, debe convertir SOL en 2Z. -**Para ello, los participantes elegibles pueden operar contra un contrato de intercambio de DoubleZero, comprando SOL del contrato y vendiendo 2Z. El precio se basa en los feeds de precios de Pyth con un mecanismo de descuento programático.** +**Para ello, los participantes elegibles pueden operar contra un contrato de intercambio de DoubleZero, comprando SOL del contrato y vendiéndole 2Z. El precio se basa en los feeds de precios de Pyth con un mecanismo de descuento programático.** Esta breve guía explica cómo utilizar el programa. @@ -29,9 +29,9 @@ Esta breve guía explica cómo utilizar el programa. ## Diseño del Programa -El programa de intercambio es efectivamente un pool de liquidez unilateral que vende SOL en un tamaño de lote fijo de 1 SOL por operación. Cualquier participante elegible puede retirar SOL del programa depositando 2Z, a un precio determinado por un precio oráculo de Pyth y un descuento dinámico. Con el tiempo, esto cumple el objetivo del programa de convertir tokens nativos en 2Z. +El programa de intercambio es efectivamente un pool de liquidez unilateral que vende SOL en un tamaño de lote fijo de 1 SOL por operación. Cualquier participante elegible puede retirar SOL del programa depositando 2Z, a un precio determinado por un precio de oráculo de Pyth y un descuento dinámico. Con el tiempo, esto cumple el objetivo del programa de convertir tokens nativos en 2Z. -Para utilizarlo, un operador debe proporcionar dos precios recientes de Pyth (SOL/USD y 2Z/USD) y una cantidad de 2Z. El programa entonces calcula la cantidad de 2Z necesaria para comprar ese 1 SOL basándose en el precio implícito SOL/2Z. Luego realiza algunos pasos adicionales: +Para utilizarlo, un operador debe proporcionar dos precios recientes de Pyth (SOL/USD y 2Z/USD) y una cantidad de 2Z. El programa entonces calcula la cantidad de 2Z necesaria para comprar ese 1 SOL basándose en el precio implícito SOL/2Z. Luego toma algunos pasos adicionales: - Verifica que los precios de Pyth sean suficientemente recientes, es decir, que no tengan más de 5 segundos de antigüedad. - Verifica que los intervalos de confianza de los dos precios sean suficientemente pequeños. Es decir, la suma de dos desviaciones estándar de Laplace (es decir, el parámetro `conf` en el precio de Pyth) para los dos precios, normalizada por sus niveles, debe ser menor o igual a 30 puntos básicos. @@ -43,23 +43,23 @@ $$ En este punto, si el operador ha proporcionado suficiente 2Z para ejecutar la transacción a este precio calculado (incluyendo el descuento), se ejecuta a este precio calculado. Se devuelve al operador la cantidad comprada de SOL y cualquier excedente de 2Z. -El contrato entonces no permite más operaciones para ese slot. Esto es para evitar que el contrato pague un deslizamiento excesivamente alto en caso de que el precio de Pyth esté lejos del precio real en un momento dado de maneras que los filtros existentes no detecten. +El contrato entonces no permite más operaciones para ese slot. Esto es para evitar que el contrato pague un deslizamiento excesivamente alto en caso de que el precio de Pyth esté lejos del precio real en un momento dado, de maneras que los filtros existentes no detecten problemas. --- ## Ejecución Atómica sin Gas -Esta sección detallará cómo utilizar el comando `harvest-dz`. Este comando realizará atómicamente 2 acciones. +Esta sección detallará cómo usar el comando `harvest-dz`. Este comando realizará atómicamente 2 acciones. 1. El comando solicita una cotización de Jupiter frente al programa nativo de conversión SOL <> 2Z. -2. Cuando la ruta de Jupiter ofrece más 2Z por SOL de lo que requiere el programa de conversión nativo, `harvest-2z` ejecuta un intercambio, devolviendo a su billetera 1 SOL más la diferencia en 2Z. +2. Cuando la ruta de Jupiter produce más 2Z por SOL de lo que el programa de conversión nativo requiere, `harvest-2z` ejecuta un intercambio, devolviendo a su billetera 1 SOL más la diferencia en 2Z. -### Cosechar 2Z +### Harvest 2Z Para ejecutar, ejecute lo siguiente: ``` doublezero-solana revenue-distribution harvest-2z ``` -La salida se parecerá a: +La salida será similar a: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` @@ -73,7 +73,7 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## Conversión del Protocolo -Esta sección aborda cómo verificar las tasas de conversión y ejecutar la conversión utilizando el CLI `doublezero-solana`. Y al final, discutimos la interfaz para integraciones personalizadas con el contrato de intercambio de DoubleZero. +Esta sección trata sobre cómo verificar las tasas de conversión y ejecutar la conversión utilizando el CLI `doublezero-solana`. Y al final, discutimos la interfaz para integraciones personalizadas con el contrato de intercambio de DoubleZero. ### Cómo verificar el precio de conversión SOL/2Z mediante `doublezero-solana` @@ -83,7 +83,7 @@ Para encontrar las tasas de conversión SOL/2Z en mainnet-beta, ejecute el sigui doublezero-solana revenue-distribution fetch sol-conversion ``` -Y la salida que verá se parecerá a: +Y la salida que verá será similar a: ```bash | field | description | value | note | @@ -95,7 +95,7 @@ Y la salida que verá se parecerá a: El Journal Balance informa al usuario cuánta liquidez en SOL hay en el contrato inteligente de Distribución de Ingresos. Un usuario puede operar siempre que el Journal Balance exceda el tamaño fijo de operación de 1 SOL. -La primera fila muestra el precio de conversión SOL/2Z "real" a través de un oráculo fuera de cadena. La segunda fila es el precio de conversión utilizado en cadena para el intercambio, que simplemente ajusta el precio real por el descuento algorítmico. +La primera fila muestra el precio de conversión SOL/2Z "real" a través de un oráculo offchain. La segunda fila es el precio de conversión utilizado on-chain para el intercambio, que simplemente ajusta el precio real con el descuento algorítmico. ### Cómo convertir sus 2Z a SOL mediante `doublezero-solana` @@ -105,7 +105,7 @@ Para convertir sus tokens 2Z a SOL, ejecute el siguiente comando: doublezero-solana revenue-distribution convert-2z ``` -Por defecto, si hay suficiente liquidez en SOL y su ATA tiene suficiente 2Z para realizar el intercambio, esta transacción tendrá éxito. Puede ajustar más finamente el intercambio especificando los siguientes argumentos: +Por defecto, si hay suficiente liquidez en SOL y su ATA tiene suficiente 2Z para realizar el intercambio, esta transacción se completará con éxito. Puede ajustar el intercambio más precisamente especificando los siguientes argumentos: ```bash --limit-price Limit price defaults to the current SOL/2Z oracle price @@ -113,11 +113,11 @@ Por defecto, si hay suficiente liquidez en SOL y su ATA tiene suficiente 2Z para --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -El precio límite especificado determina el peor precio que está dispuesto a aceptar al realizar la conversión SOL/2Z. Por ejemplo, supongamos que el precio con descuento de 2Z por SOL es 800, lo que significa 800 tokens 2Z por 1 SOL. Si especifica un precio límite de 790, no está dispuesto a realizar el intercambio porque está exigiendo intercambiar como máximo 790 tokens 2Z por 1 SOL. Pero si especifica 810, la operación se ejecutará porque estaba dispuesto a intercambiar como máximo 810 tokens 2Z (y en este caso, solo habrá intercambiado 800 tokens 2Z en esta transacción). +El precio límite especificado determina el peor precio que está dispuesto a aceptar al realizar la conversión SOL/2Z. Por ejemplo, supongamos que el precio con descuento de 2Z por SOL es 800, lo que significa 800 tokens 2Z por 1 SOL. Si especifica un precio límite de 790, no está dispuesto a realizar el intercambio porque está requiriendo intercambiar como máximo 790 tokens 2Z por 1 SOL. Pero si especifica 810, la operación se ejecutará porque estaba dispuesto a intercambiar como máximo 810 tokens 2Z (y en este caso, solo habrá intercambiado 800 tokens 2Z en esta transacción). -La cuenta de tokens 2Z de origen anula la ATA predeterminada utilizando el firmante como propietario de esta ATA de 2Z. Pero si tiene otra cuenta de tokens que desea utilizar para realizar el intercambio, proporcione la pubkey correspondiente con este argumento. +La cuenta de tokens 2Z de origen anula la ATA predeterminada que usa al firmante como propietario de esta ATA de 2Z. Pero si tiene otra cuenta de tokens que desea usar para realizar el intercambio, proporcione la pubkey correspondiente con este argumento. -Opcionalmente, puede especificar la cantidad verificada de SOL con el tamaño de llenado estándar (establecido en 1 SOL en el lanzamiento). Si no coincide con el tamaño de llenado del programa, el intercambio falla. Esto mitiga el riesgo de que el tamaño de llenado del programa cambie y usted no lo note. +Opcionalmente, puede especificar la cantidad verificada de SOL al tamaño de llenado estándar (establecido en 1 SOL en el lanzamiento). Si no coincide con el tamaño de llenado del programa, el intercambio falla. Esto mitiga el riesgo de que el tamaño de llenado del programa cambie y usted no lo note. ### Interfaz para Comprar SOL @@ -152,7 +152,7 @@ pub struct ProgramState { Alternativamente, puede llamar a `getProgramAccounts` a través de Solana RPC con su discriminador. Pero recomendamos almacenar en caché esta pubkey ya que nunca cambiará. -El `user_key` es un firmante para la instrucción de compra de SOL y debe ser el propietario del `user_token_account_key`. Como se describió anteriormente, esto NO necesita ser una ATA. Siempre que su cuenta de tokens 2Z sea propiedad del `user_key`, esta instrucción tendrá éxito. +El `user_key` es un firmante para la instrucción de compra de SOL y debe ser el propietario del `user_token_account_key`. Como se describió anteriormente, esto NO necesita ser una ATA. Siempre que su cuenta de tokens 2Z sea propiedad del `user_key`, esta instrucción se ejecutará con éxito. La estructura `BuySolAccounts` implementa `Into>` para que pueda generar todos los account metas que necesita para construir la instrucción. @@ -165,7 +165,7 @@ Los datos de la instrucción son }, ``` -Estos datos de instrucción se serializan con Borsh y tienen un selector Anchor de 8 bytes, que se serializará completamente al usar `BorshSerialize::serialize`. +Estos datos de instrucción se serializan con Borsh y tienen un selector Anchor de 8 bytes, que se serializará todo al usar `BorshSerialize::serialize`. Los datos del precio del oráculo se pueden obtener desde este endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Los datos son deserializables con serde usando la estructura OraclePriceData que se encuentra en *oracle.rs*. diff --git a/docs/Swapping-sol-to-2z.fr.md b/docs/Swapping-sol-to-2z.fr.md index 08fc226..d88b4ed 100644 --- a/docs/Swapping-sol-to-2z.fr.md +++ b/docs/Swapping-sol-to-2z.fr.md @@ -4,22 +4,22 @@ ??? warning "Avertissement" - Ce document et le code associé sont fournis à des fins informatives et techniques uniquement. La fonctionnalité de conversion de tokens décrite ici est non-custodiale — les utilisateurs interagissent directement avec les contrats intelligents sous-jacents et conservent le contrôle total de leurs actifs à tout moment. + Ce document et le code associé sont fournis à des fins d'information et à des fins techniques uniquement. La fonctionnalité de conversion de jetons décrite ici est non-custodiale — les utilisateurs interagissent directement avec les contrats intelligents sous-jacents et conservent le contrôle total de leurs actifs à tout moment. - Le système peut s'appuyer sur ou interagir avec du code tiers, des sources de données, ou des mécanismes de tarification et de frais (par exemple, des contrats intelligents, des API ou des échanges décentralisés) qui ne sont pas développés, contrôlés ou examinés par le(s) développeur(s) ou éditeur(s). Aucune déclaration ou garantie n'est faite quant à l'exactitude, la fonctionnalité ou la sécurité de tout composant tiers. - Le(s) développeur(s) et éditeur(s) de ce code ne garantissent pas son exactitude, son exhaustivité ou sa disponibilité continue. Le code et les matériels associés sont fournis « en l'état » et peuvent contenir des bugs, des erreurs ou des vulnérabilités. L'utilisation se fait entièrement à vos propres risques. - Le(s) développeur(s) et éditeur(s) ne perçoivent aucun frais en lien avec l'utilisation de ces contrats. Ils n'ont aucune obligation de maintenir, mettre à jour ou supporter le code ou la documentation associée. + Le système peut s'appuyer sur ou interagir avec du code tiers, des sources de données ou des mécanismes de tarification et de frais (par exemple, des contrats intelligents, des API ou des échanges décentralisés) qui ne sont pas développés, contrôlés ou examinés par le(s) développeur(s) ou le(s) éditeur(s). Aucune déclaration ni garantie n'est faite quant à l'exactitude, la fonctionnalité ou la sécurité de tout composant tiers. + Le(s) développeur(s) et le(s) éditeur(s) de ce code ne garantissent pas son exactitude, son exhaustivité ou sa disponibilité continue. Le code et les matériels associés sont fournis « en l'état » et peuvent contenir des bogues, des erreurs ou des vulnérabilités. L'utilisation se fait entièrement à vos propres risques. + Le(s) développeur(s) et le(s) éditeur(s) ne reçoivent aucuns frais en lien avec l'utilisation de ces contrats. Ils n'ont aucune obligation de maintenir, mettre à jour ou supporter le code ou la documentation associée. - Ce document ne constitue pas une offre de vente, une sollicitation d'achat, ni une recommandation de participer à une conversion de tokens, un échange ou toute autre transaction. Aucun conseil juridique, financier ou d'investissement n'est fourni. - Les utilisateurs sont seuls responsables de déterminer la légalité de leurs activités. Ils doivent examiner les lois et réglementations applicables dans leur juridiction et consulter des conseillers indépendants avant d'utiliser le code ou de participer à toute conversion. L'utilisation est interdite lorsqu'elle serait illégale, y compris par des personnes ou entités soumises à des sanctions ou dans des juridictions restreintes. + Ce document ne constitue pas une offre de vente, une sollicitation d'achat, ni une recommandation de participer à une conversion, un échange de jetons ou toute autre transaction. Aucun conseil juridique, financier ou en investissement n'est fourni. + Les utilisateurs sont seuls responsables de déterminer la légalité de leurs activités. Ils doivent examiner les lois et réglementations applicables dans leur juridiction et consulter des conseillers indépendants avant d'utiliser le code ou de participer à toute conversion. L'utilisation est interdite lorsqu'elle serait illégale, y compris pour les personnes ou entités soumises à des sanctions ou dans des juridictions restreintes. - Dans la mesure maximale permise par la loi, le(s) développeur(s) et éditeur(s) déclinent toute responsabilité pour toute perte, dommage ou réclamation découlant de ou en lien avec l'utilisation du code ou la participation à la conversion. + Dans toute la mesure permise par la loi, le(s) développeur(s) et le(s) éditeur(s) déclinent toute responsabilité pour toute perte, dommage ou réclamation découlant de ou en relation avec l'utilisation du code ou la participation à la conversion. La consultation et l'utilisation de ce document et du code associé sont soumises aux [Conditions Générales du Site Web](https://doublezero.xyz/terms) et aux [Conditions Générales du Protocole](https://doublezero.xyz/terms-protocol). Le protocole DoubleZero collecte des revenus libellés en SOL auprès de ses utilisateurs validateurs, mais distribue des récompenses libellées en 2Z aux contributeurs. Il doit donc convertir du SOL en 2Z. -**Pour ce faire, les participants éligibles peuvent échanger contre un contrat de swap DoubleZero, en achetant du SOL auprès du contrat et en le vendant en 2Z. La tarification est basée sur les flux de prix Pyth avec un mécanisme de remise programmatique.** +**Pour ce faire, les participants éligibles peuvent effectuer des transactions contre un contrat de swap DoubleZero, en achetant du SOL au contrat et en le vendant contre du 2Z. La tarification est basée sur les flux de prix Pyth avec un mécanisme de remise programmatique.** Ce court guide explique comment utiliser le programme. @@ -29,28 +29,28 @@ Ce court guide explique comment utiliser le programme. ## Conception du Programme -Le programme de swap est essentiellement un pool de liquidité unilatéral qui vend du SOL par lots fixes de 1 SOL par transaction. Tout participant éligible peut retirer du SOL du programme en déposant des 2Z, à un prix déterminé par un prix oracle provenant de Pyth et une remise dynamique. Au fil du temps, cela permet au programme d'atteindre son objectif de conversion des tokens natifs en 2Z. +Le programme de swap est essentiellement un pool de liquidité unilatéral qui vend du SOL par lots fixes de 1 SOL par transaction. Tout participant éligible peut retirer du SOL du programme en déposant du 2Z, à un prix déterminé par un prix oracle provenant de Pyth et une remise dynamique. Au fil du temps, cela accomplit l'objectif du programme de convertir des jetons natifs en 2Z. Pour l'utiliser, un trader doit fournir deux prix Pyth récents (SOL/USD et 2Z/USD) ainsi qu'une quantité de 2Z. Le programme calcule ensuite la quantité de 2Z nécessaire pour acheter ce 1 SOL en se basant sur le prix implicite SOL/2Z. Il effectue ensuite quelques étapes supplémentaires : - Il vérifie que les prix Pyth sont suffisamment récents, c'est-à-dire qu'ils ne sont pas périmés de plus de 5 secondes. -- Il vérifie que les intervalles de confiance des deux prix sont suffisamment petits. C'est-à-dire que la somme de deux écarts-types laplaciens (soit le paramètre `conf` dans le prix Pyth) pour les deux prix, normalisés par leurs niveaux, doit être inférieure ou égale à 30 points de base. -- Il ajuste le prix SOL/2Z par une remise dynamique, exprimée en pourcentage du prix Pyth. Cette remise est une fonction du temps écoulé depuis la dernière transaction. La formule ci-dessous spécifie la remise, en supposant que la dernière transaction a été effectuée au slot $s_{\text{last}}$ et que le slot actuel est $s_{\text{now}}$. (Par exemple, si 200 slots se sont écoulés depuis la dernière transaction, la remise est de 40 points de base.) +- Il vérifie que les intervalles de confiance des deux prix sont suffisamment petits. C'est-à-dire que la somme de deux écarts-types laplaciens (c'est-à-dire le paramètre `conf` dans le prix Pyth) pour les deux prix, normalisée par leurs niveaux, doit être inférieure ou égale à 30 points de base. +- Il ajuste le prix SOL/2Z par une remise dynamique, exprimée en pourcentage du prix Pyth. Cette remise est fonction du temps écoulé depuis la dernière transaction. La formule ci-dessous spécifie la remise, en supposant que la dernière transaction a été effectuée au slot $s_{\text{last}}$ et que le slot actuel est $s_{\text{now}}$. (Par exemple, si 200 slots se sont écoulés depuis la dernière transaction, la remise est de 40 points de base.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -À ce stade, si le trader a fourni suffisamment de 2Z pour exécuter la transaction à ce prix calculé (remise incluse), elle s'exécute à ce prix calculé. Le programme retourne au trader la quantité de SOL achetée et tout excédent de 2Z. +À ce stade, si le trader a fourni suffisamment de 2Z pour exécuter la transaction à ce prix calculé (remise incluse), elle s'exécute à ce prix calculé. Le programme retourne au trader la quantité de SOL achetée ainsi que tout excédent de 2Z. -Le contrat n'autorise ensuite plus aucune transaction pour ce slot. Cela permet d'éviter que le contrat ne paie un slippage excessivement élevé si le prix Pyth s'éloigne du véritable prix à un moment donné, de manière que les filtres existants ne détecteraient pas. +Le contrat n'autorise ensuite plus de transactions pour ce slot. Cela vise à empêcher le contrat de payer un slippage excessivement élevé dans le cas où le prix Pyth serait éloigné du vrai prix à un moment donné, d'une manière que les filtres existants ne détecteraient pas. --- ## Exécution Atomique Sans Frais de Gas -Cette section détaille comment utiliser la commande `harvest-dz`. Cette commande effectue atomiquement 2 actions. -1. La commande demande un devis à Jupiter par rapport au programme natif de conversion SOL <> 2Z. +Cette section détaille comment utiliser la commande `harvest-dz`. Cette commande effectuera atomiquement 2 actions. +1. La commande demande une cotation auprès de Jupiter par rapport au programme natif de conversion SOL <> 2Z. 2. Lorsque la route Jupiter fournit plus de 2Z par SOL que ce que le programme natif de conversion requiert, `harvest-2z` exécute un swap, retournant à votre portefeuille 1 SOL plus la différence en 2Z. ### Récolter des 2Z @@ -63,7 +63,7 @@ La sortie ressemblera à : ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -La commande peut également être simulée avec l'argument `--dry-run`. Le dry-run produira les logs du programme et une sortie ressemblant à : +La commande peut également être simulée avec l'argument `--dry-run`. Le dry-run produira des logs de programme et une sortie ressemblant à : ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -73,7 +73,7 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## Conversion du Protocole -Cette section traite de la vérification des taux de conversion et de l'exécution de la conversion à l'aide du CLI `doublezero-solana`. À la fin, nous abordons l'interface pour les intégrations personnalisées avec le contrat de swap DoubleZero. +Cette section traite de la vérification des taux de conversion et de l'exécution de la conversion à l'aide du CLI `doublezero-solana`. Et à la fin, nous présentons l'interface pour les intégrations personnalisées avec le contrat de swap DoubleZero. ### Comment vérifier le prix de conversion SOL/2Z via `doublezero-solana` @@ -93,13 +93,13 @@ Et la sortie que vous verrez ressemblera à : | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Le Journal Balance informe l'utilisateur de la quantité de liquidité SOL disponible dans le contrat intelligent de Distribution des Revenus. Un utilisateur peut effectuer une transaction tant que le Journal Balance dépasse la taille fixe de transaction de 1 SOL. +Le Journal Balance informe l'utilisateur de la quantité de liquidité SOL disponible dans le contrat intelligent de distribution des revenus. Un utilisateur peut effectuer une transaction tant que le Journal Balance dépasse la taille fixe de transaction de 1 SOL. -La première ligne affiche le « vrai » prix de conversion SOL/2Z via un oracle hors chaîne. La deuxième ligne est le prix de conversion utilisé on-chain pour le swap, qui ajuste simplement le vrai prix en fonction de la remise algorithmique. +La première ligne affiche le « vrai » prix de conversion SOL/2Z via un oracle hors chaîne. La deuxième ligne est le prix de conversion utilisé on-chain pour le swap, qui ajuste simplement le vrai prix en tenant compte de la remise algorithmique. ### Comment convertir vos 2Z en SOL via `doublezero-solana` -Pour convertir vos tokens 2Z en SOL, exécutez la commande suivante : +Pour convertir vos jetons 2Z en SOL, exécutez la commande suivante : ```bash doublezero-solana revenue-distribution convert-2z @@ -113,15 +113,15 @@ Par défaut, s'il y a suffisamment de liquidité SOL et que votre ATA dispose de --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -Le prix limite spécifié détermine le pire prix que vous êtes prêt à accepter lors de la conversion SOL/2Z. Par exemple, supposons que le prix 2Z avec remise pour le SOL est de 800, ce qui signifie 800 tokens 2Z pour 1 SOL. Si vous spécifiez un prix limite de 790, vous n'êtes pas disposé à effectuer le swap car vous exigez de n'échanger qu'au maximum 790 tokens 2Z pour 1 SOL. Mais si vous spécifiez 810, la transaction sera exécutée car vous étiez disposé à échanger au maximum 810 tokens 2Z (et dans ce cas, vous n'aurez échangé que 800 tokens 2Z dans cette transaction). +Le prix limite spécifié détermine le pire prix que vous êtes prêt à accepter lors de la conversion SOL/2Z. Par exemple, supposons que le prix 2Z avec remise pour le SOL est de 800, ce qui signifie 800 jetons 2Z pour 1 SOL. Si vous spécifiez un prix limite de 790, vous n'êtes pas disposé à effectuer le swap car vous exigez de ne swapper qu'au maximum 790 jetons 2Z pour 1 SOL. Mais si vous spécifiez 810, la transaction sera exécutée car vous étiez prêt à swapper au maximum 810 jetons 2Z (et dans ce cas, vous n'aurez swappé que 800 jetons 2Z dans cette transaction). -Le compte de tokens 2Z source remplace l'ATA par défaut en utilisant le signataire comme propriétaire de cet ATA 2Z. Mais si vous avez un autre compte de tokens que vous souhaitez utiliser pour effectuer le swap, fournissez sa pubkey avec cet argument. +Le compte source de jetons 2Z remplace l'ATA par défaut utilisant le signataire comme propriétaire de cet ATA 2Z. Mais si vous avez un autre compte de jetons que vous souhaitez utiliser pour effectuer le swap, fournissez sa clé publique avec cet argument. -Optionnellement, vous pouvez spécifier le montant SOL vérifié correspondant à la taille de remplissage standard (fixée à 1 SOL au lancement). Si celui-ci ne correspond pas à la taille de remplissage du programme, le swap échoue. Cela atténue le risque que la taille de remplissage du programme change sans que vous ne le remarquiez. +Optionnellement, vous pouvez spécifier le montant vérifié de SOL correspondant à la taille de remplissage standard (fixée à 1 SOL au lancement). S'il ne correspond pas à la taille de remplissage du programme, le swap échoue. Cela atténue le risque que la taille de remplissage du programme change sans que vous ne le remarquiez. ### Interface pour Acheter du SOL -L'interface et le CLI `doublezero-solana` se trouvent dans [ce dépôt](https://github.com/malbeclabs/doublezero-offchain). Le code source de l'interface du contrat de swap DoubleZero peut être trouvé [ici](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). Le Program ID est `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +L'interface et le CLI `doublezero-solana` se trouvent dans [ce dépôt](https://github.com/malbeclabs/doublezero-offchain). Le code source de l'interface du contrat de swap DoubleZero peut être trouvé [ici](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). L'ID du programme est `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. Un moyen pratique de générer les comptes nécessaires pour l'instruction d'achat de SOL est d'utiliser la méthode `new` (trouvée dans *instruction/account.rs*). @@ -150,13 +150,13 @@ pub struct ProgramState { } ``` -Alternativement, vous pouvez appeler `getProgramAccounts` via Solana RPC avec son discriminateur. Mais nous recommandons de mettre en cache cette pubkey car elle ne changera jamais. +Alternativement, vous pouvez appeler `getProgramAccounts` via Solana RPC avec son discriminateur. Mais nous recommandons de mettre en cache cette clé publique car elle ne changera jamais. -Le `user_key` est un signataire pour l'instruction d'achat de SOL et doit être le propriétaire du `user_token_account_key`. Comme décrit ci-dessus, il n'est PAS nécessaire que ce soit un ATA. Tant que votre compte de tokens 2Z est détenu par le `user_key`, cette instruction réussira. +Le `user_key` est un signataire pour l'instruction d'achat de SOL et doit être le propriétaire du `user_token_account_key`. Comme décrit ci-dessus, il n'est PAS nécessaire que ce soit un ATA. Tant que votre compte de jetons 2Z est détenu par le `user_key`, cette instruction réussira. -La structure `BuySolAccounts` implémente `Into>`, ce qui vous permet de générer toutes les métadonnées de compte nécessaires pour construire l'instruction. +La struct `BuySolAccounts` implémente `Into>` afin que vous puissiez générer tous les account metas nécessaires pour construire l'instruction. -Les données de l'instruction sont +Les données d'instruction sont : ```rust SolConversionInstructionData::BuySol { @@ -167,7 +167,7 @@ Les données de l'instruction sont Ces données d'instruction sont sérialisées en Borsh et possèdent un sélecteur Anchor de 8 octets, qui sera entièrement sérialisé lors de l'utilisation de `BorshSerialize::serialize`. -Les données de prix oracle peuvent être récupérées depuis ce point d'accès public : [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Les données sont désérialisables via serde en utilisant la structure OraclePriceData trouvée dans *oracle.rs*. +Les données de prix oracle peuvent être récupérées depuis ce point de terminaison public : [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Les données sont désérialisables via serde en utilisant la struct OraclePriceData trouvée dans *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -200,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -Avec le Program ID, les comptes et les données d'instruction, vous devriez être en mesure de construire l'instruction pour acheter du SOL auprès du contrat de swap DoubleZero. \ No newline at end of file +Avec l'ID du programme, les comptes et les données d'instruction, vous devriez être en mesure de construire l'instruction pour acheter du SOL auprès du contrat de swap DoubleZero. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.it.md b/docs/Swapping-sol-to-2z.it.md index 28abcf4..529d995 100644 --- a/docs/Swapping-sol-to-2z.it.md +++ b/docs/Swapping-sol-to-2z.it.md @@ -1,4 +1,4 @@ -**Leggere il Disclaimer prima di accedere o utilizzare il codice o qualsiasi materiale correlato.** +**Leggi il Disclaimer prima di accedere o utilizzare il codice o qualsiasi materiale correlato.** @@ -6,52 +6,52 @@ Questo documento e il codice associato sono forniti esclusivamente a scopo informativo e tecnico. La funzionalità di conversione dei token descritta nel presente documento è non-custodial: gli utenti interagiscono direttamente con gli smart contract sottostanti e mantengono il pieno controllo dei propri asset in ogni momento. - Il sistema può fare affidamento su o interagire con codice di terze parti, fonti di dati o meccanismi di pricing e commissioni (ad esempio, smart contract, API o exchange decentralizzati) che non sono sviluppati, controllati o revisionati dallo/dagli sviluppatore/i o editore/i. Non viene rilasciata alcuna dichiarazione o garanzia in merito all'accuratezza, alla funzionalità o alla sicurezza di qualsiasi componente di terze parti. - Lo/gli sviluppatore/i e l'editore/i di questo codice non garantiscono la sua accuratezza, completezza o disponibilità continua. Il codice e i materiali correlati sono forniti "così come sono" e possono contenere bug, errori o vulnerabilità. L'utilizzo è interamente a proprio rischio. - Lo/gli sviluppatore/i e l'editore/i non ricevono alcuna commissione in relazione all'utilizzo di questi contratti. Non hanno alcun obbligo di mantenere, aggiornare o supportare il codice o la documentazione correlata. + Il sistema potrebbe basarsi su o interagire con codice di terze parti, fonti di dati o meccanismi di pricing e commissioni (ad esempio, smart contract, API o exchange decentralizzati) che non sono sviluppati, controllati o revisionati dallo/dagli sviluppatore/i o editore/i. Non viene fornita alcuna dichiarazione o garanzia riguardo all'accuratezza, funzionalità o sicurezza di qualsiasi componente di terze parti. + Lo/gli sviluppatore/i e l'editore/i di questo codice non garantiscono la sua accuratezza, completezza o disponibilità continuativa. Il codice e i materiali correlati sono forniti "così come sono" e possono contenere bug, errori o vulnerabilità. L'utilizzo è interamente a proprio rischio. + Lo/gli sviluppatore/i e l'editore/i non ricevono alcuna commissione in relazione all'uso di questi contratti. Non hanno alcun obbligo di mantenere, aggiornare o supportare il codice o la documentazione correlata. Questo documento non costituisce un'offerta di vendita, una sollecitazione all'acquisto o una raccomandazione a partecipare a qualsiasi conversione di token, swap o altra transazione. Non viene fornita alcuna consulenza legale, finanziaria o di investimento. - Gli utenti sono i soli responsabili nel determinare la legalità delle proprie attività. Dovrebbero esaminare le leggi e i regolamenti applicabili nella propria giurisdizione e consultare consulenti indipendenti prima di utilizzare il codice o partecipare a qualsiasi conversione. L'utilizzo è vietato laddove risulterebbe illegale, incluso per persone o entità soggette a sanzioni o in giurisdizioni con restrizioni. + Gli utenti sono gli unici responsabili nel determinare la legalità delle proprie attività. Dovrebbero esaminare le leggi e i regolamenti applicabili nella propria giurisdizione e consultare consulenti indipendenti prima di utilizzare il codice o partecipare a qualsiasi conversione. L'uso è vietato laddove sarebbe illegale, incluse le persone o entità soggette a sanzioni o in giurisdizioni soggette a restrizioni. - Nella misura massima consentita dalla legge, lo/gli sviluppatore/i e l'editore/i declinano ogni responsabilità per qualsiasi perdita, danno o reclamo derivante da o in relazione all'utilizzo del codice o alla partecipazione alla conversione. + Nella misura massima consentita dalla legge, lo/gli sviluppatore/i e l'editore/i declinano ogni responsabilità per qualsiasi perdita, danno o reclamo derivante da o in connessione con l'uso del codice o la partecipazione alla conversione. - La consultazione e l'utilizzo di questo documento e del codice associato sono soggetti ai [Termini e Condizioni del Sito Web](https://doublezero.xyz/terms) e ai [Termini e Condizioni del Protocollo](https://doublezero.xyz/terms-protocol). + La consultazione e l'uso di questo documento e del codice associato sono soggetti ai [Termini e Condizioni del Sito Web](https://doublezero.xyz/terms) e ai [Termini e Condizioni del Protocollo](https://doublezero.xyz/terms-protocol). -Il protocollo DoubleZero raccoglie entrate denominate in SOL dai suoi validatori utenti, ma distribuisce ricompense denominate in 2Z ai contributori. Pertanto, deve convertire SOL in 2Z. +Il protocollo DoubleZero raccoglie ricavi denominati in SOL dai suoi utenti validatori, ma distribuisce ricompense denominate in 2Z ai contributori. Pertanto, deve convertire SOL in 2Z. **Per farlo, i partecipanti idonei possono operare contro uno swap contract di DoubleZero, acquistando SOL dal contratto e vendendo 2Z. Il pricing si basa sui price feed di Pyth con un meccanismo di sconto programmatico.** Questa breve guida spiega come utilizzare il programma. -***Leggere il Disclaimer alla fine di questo documento prima di accedere o utilizzare il codice o qualsiasi materiale correlato.*** +***Leggi il Disclaimer alla fine di questo documento prima di accedere o utilizzare il codice o qualsiasi materiale correlato.*** --- -## Design del Programma +## Progettazione del Programma -Il programma di swap è di fatto un pool di liquidità unilaterale che vende SOL in lotti fissi di 1 SOL per operazione. Qualsiasi partecipante idoneo può prelevare SOL dal programma depositando 2Z, a un prezzo determinato da un prezzo oracle da Pyth e uno sconto dinamico. Nel tempo, questo realizza l'obiettivo del programma di convertire token nativi in 2Z. +Il programma di swap è effettivamente un pool di liquidità unilaterale che vende SOL in lotti fissi di 1 SOL per operazione. Qualsiasi partecipante idoneo può prelevare SOL dal programma depositando 2Z, a un prezzo determinato da un prezzo oracolo di Pyth e uno sconto dinamico. Nel tempo, questo realizza l'obiettivo del programma di convertire token nativi in 2Z. -Per utilizzarlo, un trader deve fornire due prezzi Pyth recenti (SOL/USD e 2Z/USD) e una quantità di 2Z. Il programma calcola quindi la quantità di 2Z necessaria per acquistare 1 SOL sulla base del prezzo implicito SOL/2Z. Successivamente, esegue alcuni passaggi aggiuntivi: +Per utilizzarlo, un trader deve fornire due prezzi Pyth recenti (SOL/USD e 2Z/USD) e una quantità di 2Z. Il programma calcola quindi la quantità di 2Z necessaria per acquistare 1 SOL basandosi sul prezzo implicito SOL/2Z. Successivamente esegue alcuni passaggi aggiuntivi: -- Verifica che i prezzi Pyth siano sufficientemente aggiornati, ovvero che non siano obsoleti da più di 5 secondi. -- Verifica che gli intervalli di confidenza dei due prezzi siano sufficientemente piccoli. Ovvero, la somma di due deviazioni standard laplaciane (cioè il parametro `conf` nel prezzo Pyth) per i due prezzi, normalizzata per i rispettivi livelli, deve essere inferiore o uguale a 30 punti base. -- Regola il prezzo SOL/2Z con uno sconto dinamico, espresso come percentuale del prezzo Pyth. Questo sconto è una funzione del tempo trascorso dall'ultima operazione. La formula seguente specifica lo sconto, assumendo che l'ultima operazione sia stata effettuata allo slot $s_{\text{last}}$ e lo slot corrente sia $s_{\text{now}}$. (Ad esempio, se sono trascorsi 200 slot dall'ultima operazione, lo sconto è di 40 punti base.) +- Verifica che i prezzi Pyth siano sufficientemente recenti, ovvero che non siano obsoleti da più di 5 secondi. +- Verifica che gli intervalli di confidenza dei due prezzi siano sufficientemente piccoli. Ovvero, la somma di due deviazioni standard Laplaciane (cioè il parametro `conf` nel prezzo Pyth) per i due prezzi, normalizzata per i rispettivi livelli, deve essere inferiore o uguale a 30 punti base. +- Aggiusta il prezzo SOL/2Z con uno sconto dinamico, espresso come percentuale del prezzo Pyth. Questo sconto è una funzione del tempo trascorso dall'ultima operazione. La formula seguente specifica lo sconto, assumendo che l'ultima operazione sia stata effettuata allo slot $s_{\text{last}}$ e lo slot corrente sia $s_{\text{now}}$. (Ad esempio, se sono trascorsi 200 slot dall'ultima operazione, lo sconto è di 40 punti base.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -A questo punto, se il trader ha fornito abbastanza 2Z per eseguire la transazione a questo prezzo calcolato (incluso lo sconto), l'operazione viene eseguita a questo prezzo calcolato. Al trader viene restituita la quantità di SOL acquistata e l'eventuale eccedenza di 2Z. +A questo punto, se il trader ha fornito abbastanza 2Z per eseguire la transazione a questo prezzo calcolato (incluso lo sconto), l'operazione viene eseguita a questo prezzo calcolato. Restituisce al trader la quantità acquistata di SOL e l'eventuale eccesso di 2Z. -Il contratto non consente ulteriori operazioni per quello slot. Questo serve a impedire che il contratto paghi uno slippage eccessivamente alto nel caso in cui il prezzo Pyth sia lontano dal prezzo reale in un dato momento, in modi che i filtri esistenti non riescano a rilevare. +Il contratto non consente ulteriori operazioni per quello slot. Questo serve a impedire che il contratto paghi uno slippage eccessivamente alto nel caso in cui il prezzo Pyth sia lontano dal prezzo reale in un dato momento, in modi che i filtri esistenti non riescono a individuare. --- -## Esecuzione Atomica Senza Gas +## Esecuzione Atomica Gasless Questa sezione descrive come utilizzare il comando `harvest-dz`. Questo comando eseguirà atomicamente 2 azioni. 1. Il comando richiede una quotazione da Jupiter rispetto al programma nativo di conversione SOL <> 2Z. -2. Quando il percorso Jupiter offre più 2Z per SOL rispetto a quanto richiesto dal programma di conversione nativo, `harvest-2z` esegue uno swap, restituendo al tuo wallet 1 SOL più la differenza in 2Z. +2. Quando il percorso Jupiter produce più 2Z per SOL rispetto a quanto richiesto dal programma di conversione nativo, `harvest-2z` esegue uno swap, restituendo al tuo wallet 1 SOL più la differenza in 2Z. ### Harvest 2Z @@ -63,7 +63,7 @@ L'output sarà simile a: ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -Il comando può anche essere simulato con l'argomento `--dry-run`. Il dry-run produrrà i log del programma e un output simile a: +Il comando può anche essere simulato con l'argomento `--dry-run`. La simulazione produrrà i log del programma e un output simile a: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -73,11 +73,11 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## Conversione del Protocollo -Questa sezione illustra come verificare i tassi di conversione ed eseguire la conversione utilizzando la CLI `doublezero-solana`. Alla fine, discutiamo l'interfaccia per integrazioni personalizzate con lo swap contract di DoubleZero. +Questa sezione tratta la verifica dei tassi di conversione e l'esecuzione della conversione utilizzando la CLI `doublezero-solana`. Alla fine, discutiamo l'interfaccia per integrazioni personalizzate con lo swap contract di DoubleZero. ### Come verificare il prezzo di conversione SOL/2Z tramite `doublezero-solana` -Per trovare i tassi di conversione SOL/2Z su mainnet-beta, eseguire il seguente comando: +Per trovare i tassi di conversione SOL/2Z su mainnet-beta, esegui il seguente comando: ```bash doublezero-solana revenue-distribution fetch sol-conversion @@ -93,19 +93,19 @@ L'output che vedrai sarà simile a: | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Il Journal Balance informa l'utente sulla quantità di liquidità SOL presente nello smart contract Revenue Distribution. Un utente può operare finché il Journal Balance supera la dimensione fissa dell'operazione di 1 SOL. +Il Journal Balance informa l'utente su quanta liquidità in SOL è presente nello smart contract di Revenue Distribution. Un utente può operare fintanto che il Journal Balance supera la dimensione fissa dell'operazione di 1 SOL. -La prima riga mostra il prezzo di conversione SOL/2Z "reale" tramite un oracle offchain. La seconda riga è il prezzo di conversione utilizzato on-chain per lo swap, che semplicemente aggiusta il prezzo reale applicando lo sconto algoritmico. +La prima riga mostra il prezzo di conversione SOL/2Z "reale" tramite un oracolo offchain. La seconda riga è il prezzo di conversione utilizzato on-chain per lo swap, che semplicemente aggiusta il prezzo reale in base allo sconto algoritmico. ### Come convertire i tuoi 2Z in SOL tramite `doublezero-solana` -Per convertire i tuoi token 2Z in SOL, eseguire il seguente comando: +Per convertire i tuoi token 2Z in SOL, esegui il seguente comando: ```bash doublezero-solana revenue-distribution convert-2z ``` -Per impostazione predefinita, se c'è sufficiente liquidità SOL e il tuo ATA ha abbastanza 2Z per eseguire lo swap, questa transazione avrà successo. Puoi perfezionare lo swap specificando i seguenti argomenti: +Per impostazione predefinita, se c'è abbastanza liquidità in SOL e il tuo ATA ha abbastanza 2Z per eseguire lo swap, questa transazione avrà successo. Puoi regolare più finemente lo swap specificando i seguenti argomenti: ```bash --limit-price Limit price defaults to the current SOL/2Z oracle price @@ -113,17 +113,17 @@ Per impostazione predefinita, se c'è sufficiente liquidità SOL e il tuo ATA ha --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -Il prezzo limite specificato determina il prezzo peggiore che sei disposto ad accettare quando esegui la conversione SOL/2Z. Ad esempio, supponiamo che il prezzo scontato in 2Z per SOL sia 800, il che significa 800 token 2Z per 1 SOL. Se specifichi un prezzo limite di 790, non sei disposto a eseguire lo swap perché stai richiedendo di scambiare al massimo 790 token 2Z per 1 SOL. Ma se specifichi 810, l'operazione andrà a buon fine perché eri disposto a scambiare al massimo 810 token 2Z (e in questo caso, avrai scambiato solo 800 token 2Z in questa transazione). +Il prezzo limite specificato determina il prezzo peggiore che sei disposto ad accettare quando esegui la conversione SOL/2Z. Ad esempio, supponiamo che il prezzo scontato di 2Z per SOL sia 800, il che significa 800 token 2Z per 1 SOL. Se specifichi un prezzo limite di 790, non sei disposto a eseguire lo swap perché richiedi di scambiare al massimo 790 token 2Z per 1 SOL. Ma se specifichi 810, l'operazione andrà a buon fine perché eri disposto a scambiare al massimo 810 token 2Z (e in questo caso, avrai scambiato solo 800 token 2Z in questa transazione). -L'account token 2Z di origine sovrascrive l'ATA predefinito utilizzando il firmatario come proprietario di questo ATA 2Z. Ma se hai un altro account token che desideri utilizzare per eseguire lo swap, fornisci la pubkey corrispondente con questo argomento. +L'account token 2Z sorgente sovrascrive l'ATA predefinito utilizzando il firmatario come proprietario di questo ATA 2Z. Ma se hai un altro account token che vuoi usare per eseguire lo swap, fornisci la pubkey corrispondente con questo argomento. -Facoltativamente, puoi specificare l'importo SOL verificato alla dimensione di fill standard (impostata a 1 SOL al lancio). Se non corrisponde alla dimensione di fill del programma, lo swap fallisce. Questo mitiga il rischio che la dimensione di fill del programma cambi senza che tu te ne accorga. +Opzionalmente, puoi specificare la quantità di SOL verificata alla dimensione di riempimento standard (impostata a 1 SOL al lancio). Se non corrisponde alla dimensione di riempimento del programma, lo swap fallisce. Questo mitiga il rischio che la dimensione di riempimento del programma cambi senza che tu te ne accorga. ### Interfaccia per Acquistare SOL -L'interfaccia e la CLI `doublezero-solana` si trovano in [questo repository](https://github.com/malbeclabs/doublezero-offchain). Il codice sorgente per l'interfaccia dello swap contract di DoubleZero è disponibile [qui](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). Il program ID è `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +L'interfaccia e la CLI `doublezero-solana` si trovano in [questo repository](https://github.com/malbeclabs/doublezero-offchain). Il codice sorgente dell'interfaccia dello swap contract di DoubleZero è disponibile [qui](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). Il program ID è `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. -Un modo conveniente per generare gli account necessari per l'istruzione buy SOL è utilizzare il metodo `new` (che si trova in *instruction/account.rs*). +Un modo comodo per generare gli account necessari per l'istruzione buy SOL è utilizzare il metodo `new` (presente in *instruction/account.rs*). ```rust pub fn new( @@ -134,7 +134,7 @@ pub fn new( ) -> Self; ``` -La `fill_registry_key` può essere ottenuta dal `ProgramState` +La `fill_registry_key` può essere recuperata dal `ProgramState` ```rust pub struct ProgramState { @@ -150,9 +150,9 @@ pub struct ProgramState { } ``` -In alternativa, puoi chiamare `getProgramAccounts` tramite Solana RPC con il suo discriminatore. Ma raccomandiamo di memorizzare in cache questa pubkey poiché non cambierà mai. +In alternativa, puoi chiamare `getProgramAccounts` tramite Solana RPC con il suo discriminator. Tuttavia, raccomandiamo di memorizzare in cache questa pubkey poiché non cambierà mai. -La `user_key` è un firmatario per l'istruzione buy SOL e deve essere il proprietario della `user_token_account_key`. Come descritto sopra, questo NON deve necessariamente essere un ATA. A condizione che il tuo account token 2Z sia posseduto dalla `user_key`, questa istruzione avrà successo. +La `user_key` è un firmatario per l'istruzione buy SOL e deve essere il proprietario della `user_token_account_key`. Come descritto sopra, questo NON deve necessariamente essere un ATA. Fintanto che il tuo account token 2Z è di proprietà della `user_key`, questa istruzione avrà successo. La struct `BuySolAccounts` implementa `Into>` così puoi generare tutti gli account meta necessari per costruire l'istruzione. @@ -165,9 +165,9 @@ I dati dell'istruzione sono }, ``` -Questi dati dell'istruzione sono serializzati con Borsh e hanno un selettore Anchor di 8 byte, che verranno tutti serializzati utilizzando `BorshSerialize::serialize`. +Questi dati dell'istruzione sono serializzati in Borsh e hanno un selettore Anchor di 8 byte, che verrà tutto serializzato utilizzando `BorshSerialize::serialize`. -I dati del prezzo oracle possono essere ottenuti da questo endpoint pubblico: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). I dati sono deserializzabili con serde utilizzando la struct OraclePriceData che si trova in *oracle.rs*. +I dati del prezzo oracolo possono essere recuperati da questo endpoint pubblico: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). I dati sono deserializzabili tramite serde utilizzando la struct OraclePriceData presente in *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -183,7 +183,7 @@ pub struct OraclePriceData { } ``` -Esempio di come effettuare la richiesta utilizzando il [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): +Esempio di come recuperare i dati utilizzando il [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): ```rust use anyhow::{Context, Result}; diff --git a/docs/Swapping-sol-to-2z.ja.md b/docs/Swapping-sol-to-2z.ja.md index c841f02..2d2d5bb 100644 --- a/docs/Swapping-sol-to-2z.ja.md +++ b/docs/Swapping-sol-to-2z.ja.md @@ -4,56 +4,56 @@ ??? warning "免責事項" - 本文書および関連コードは、情報提供および技術的な目的のためにのみ提供されています。本書に記載されているトークン変換機能はノンカストディアルであり、ユーザーは基盤となるスマートコントラクトと直接やり取りし、常に自身の資産を完全に管理します。 + 本文書および関連コードは、情報提供および技術的な目的のみで提供されています。本書に記載されているトークン変換機能はノンカストディアルであり、ユーザーは基盤となるスマートコントラクトと直接やり取りし、常に自身の資産を完全に管理します。 - 本システムは、開発者または公開者が開発、管理、またはレビューしていないサードパーティのコード、データソース、または価格設定および手数料メカニズム(例:スマートコントラクト、API、または分散型取引所)に依存または連携する場合があります。サードパーティのコンポーネントの正確性、機能性、またはセキュリティについて、いかなる表明または保証も行いません。 - 本コードの開発者および公開者は、その正確性、完全性、または継続的な利用可能性を保証しません。コードおよび関連資料は「現状のまま」提供され、バグ、エラー、または脆弱性を含む可能性があります。使用は完全にご自身のリスクで行ってください。 + 本システムは、開発者または公開者が開発、管理、またはレビューしていないサードパーティのコード、データソース、または価格設定および手数料メカニズム(例:スマートコントラクト、API、分散型取引所)に依存する、またはそれらとやり取りする場合があります。サードパーティのコンポーネントの正確性、機能性、またはセキュリティについて、いかなる表明または保証も行いません。 + 本コードの開発者および公開者は、その正確性、完全性、または継続的な利用可能性を保証しません。コードおよび関連資料は「現状のまま」提供され、バグ、エラー、または脆弱性を含む場合があります。使用は完全に自己責任で行ってください。 開発者および公開者は、これらのコントラクトの使用に関連していかなる手数料も受け取りません。コードまたは関連ドキュメントの保守、更新、またはサポートを行う義務はありません。 - 本文書は、トークン変換、スワップ、またはその他の取引への売却の申し出、購入の勧誘、または参加の推奨を構成するものではありません。法的、財務的、または投資に関するアドバイスは提供されません。 - ユーザーは、自身の活動の合法性を判断する責任を単独で負います。コードの使用または変換への参加前に、管轄区域で適用される法律および規制を確認し、独立したアドバイザーに相談する必要があります。制裁対象者もしくは団体、または制限された管轄区域においてなど、違法となる場合の使用は禁止されています。 + 本文書は、トークンの変換、スワップ、またはその他の取引への売却の申し出、購入の勧誘、または参加の推奨を構成するものではありません。法的、財務的、または投資に関するアドバイスは提供されません。 + ユーザーは、自身の活動の合法性を判断する責任を単独で負います。コードを使用するか、または変換に参加する前に、管轄区域で適用される法律および規制を確認し、独立したアドバイザーに相談する必要があります。制裁対象の個人もしくは団体、または制限された管轄区域を含め、違法となる場合の使用は禁止されています。 - 法律で許容される最大限の範囲において、開発者および公開者は、コードの使用または変換への参加に起因または関連して生じるいかなる損失、損害、または請求についても、一切の責任を否認します。 + 法律で許容される最大限の範囲において、開発者および公開者は、コードの使用または変換への参加に起因または関連して生じるいかなる損失、損害、または請求に対する一切の責任を否認します。 - 本文書および関連コードの確認および使用は、[ウェブサイト利用規約](https://doublezero.xyz/terms)および[プロトコル利用規約](https://doublezero.xyz/terms-protocol)に従うものとします。 + 本文書および関連コードのレビューおよび使用は、[Webサイト利用規約](https://doublezero.xyz/terms)および[プロトコル利用規約](https://doublezero.xyz/terms-protocol)に従うものとします。 DoubleZeroプロトコルは、バリデーターユーザーからSOL建ての収益を徴収しますが、コントリビューターには2Z建ての報酬を分配します。そのため、SOLを2Zに変換する必要があります。 -**これを行うために、適格な参加者はDoubleZeroのスワップコントラクトに対して取引を行い、コントラクトからSOLを購入して2Zを売却できます。価格設定はPythの価格フィードに基づき、プログラマティックなディスカウントメカニズムが適用されます。** +**これを行うために、適格な参加者はDoubleZeroスワップコントラクトに対してトレードし、コントラクトからSOLを購入して2Zを売却できます。価格設定はPythの価格フィードに基づき、プログラムによる割引メカニズムが適用されます。** この短いガイドでは、プログラムの使用方法を説明します。 -***コードまたは関連資料にアクセスまたは使用する前に、本文書末尾の免責事項を確認してください。*** +***コードまたは関連資料にアクセスまたは使用する前に、本文書の末尾にある免責事項を確認してください。*** --- ## プログラム設計 -スワッププログラムは、実質的に1取引あたり1 SOLの固定バッチサイズでSOLを販売する片側流動性プールです。適格な参加者は誰でも、Pythからのオラクル価格と動的ディスカウントによって決定される価格で、2Zを預け入れることによりプログラムからSOLを引き出すことができます。時間の経過とともに、これによりネイティブトークンを2Zに変換するというプログラムの目標が実行されます。 +スワッププログラムは実質的に片側流動性プールであり、1取引あたり1 SOLの固定バッチサイズでSOLを売却します。適格な参加者は誰でも、2Zを預け入れることでプログラムからSOLを引き出すことができ、その価格はPythのオラクル価格と動的割引によって決定されます。時間の経過とともに、これによりネイティブトークンを2Zに変換するというプログラムの目標が達成されます。 -利用するには、トレーダーは2つの最新のPyth価格(SOL/USDおよび2Z/USD)と2Zの数量を提供する必要があります。プログラムは、暗示されるSOL/2Z価格に基づいて1 SOLを購入するために必要な2Zを計算します。その後、いくつかの追加ステップを実行します: +利用するには、トレーダーは2つの最新のPyth価格(SOL/USDと2Z/USD)および一定量の2Zを提供する必要があります。プログラムは、暗示されるSOL/2Z価格に基づいて1 SOLの購入に必要な2Z量を計算します。その後、いくつかの追加ステップを実行します: -- Pyth価格が十分に新鮮であること、つまり5秒以上古くないことを確認します。 -- 2つの価格の信頼区間が十分に小さいことを確認します。具体的には、2つの価格のラプラシアン標準偏差(つまり、Pyth価格のパラメータ `conf`)の合計を、それぞれの水準で正規化した値が30ベーシスポイント以下でなければなりません。 -- SOL/2Z価格を、Pyth価格のパーセントとして表される動的ディスカウントで調整します。このディスカウントは、前回の取引からの経過時間の関数です。以下の式は、前回の取引がスロット $s_{\text{last}}$ で行われ、現在のスロットが $s_{\text{now}}$ であると仮定した場合のディスカウントを示しています。(例えば、前回の取引から200スロット経過した場合、ディスカウントは40ベーシスポイントです。) +- Pyth価格が十分に新しいこと、つまり5秒以上古くないことを確認します。 +- 2つの価格の信頼区間が十分に小さいことを確認します。具体的には、2つの価格のラプラシアン標準偏差(Pyth価格のパラメータ`conf`)の合計を各レベルで正規化した値が30ベーシスポイント以下である必要があります。 +- SOL/2Z価格を動的割引で調整します。この割引はPyth価格に対するパーセンテージで表されます。この割引は前回の取引からの経過時間の関数です。以下の式は、前回の取引がスロット$s_{\text{last}}$で行われ、現在のスロットが$s_{\text{now}}$であると仮定した場合の割引を示しています。(例えば、前回の取引から200スロットが経過した場合、割引は40ベーシスポイントです。) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -この時点で、トレーダーがこの計算された価格(ディスカウント込み)で取引を実行するのに十分な2Zを提供している場合、この計算された価格で実行されます。購入されたSOLの数量と余剰の2Zがトレーダーに返却されます。 +この時点で、トレーダーが計算された価格(割引込み)で取引を実行するのに十分な2Zを提供している場合、この計算された価格で取引が実行されます。購入したSOL量と余剰の2Zがトレーダーに返されます。 -コントラクトはその後、そのスロットでのさらなる取引を許可しません。これは、既存のフィルターでは問題を検出できない形で、任意の時点でPyth価格が真の価格から大きく乖離している場合に、コントラクトが過度に高いスリッページを支払うことを防ぐためです。 +その後、コントラクトはそのスロットでのさらなる取引を許可しません。これは、既存のフィルターが問題を検出できない方法でPyth価格が任意の時点で真の価格から大きく乖離している場合に、コントラクトが過度に高いスリッページを支払うことを防ぐためです。 --- ## ガスレスアトミック実行 -このセクションでは、`harvest-dz` コマンドの使用方法を詳しく説明します。このコマンドは2つのアクションをアトミックに実行します。 -1. コマンドはJupiterとネイティブのSOL <> 2Z変換プログラムから見積もりを要求します。 -2. JupiterルートがネイティブのV変換プログラムが要求するよりも1 SOLあたり多くの2Zを提供する場合、`harvest-2z` はスワップを実行し、ウォレットに1 SOLと2Zの差額を返します。 +このセクションでは、`harvest-dz`コマンドの使用方法を詳しく説明します。このコマンドは2つのアクションをアトミックに実行します。 +1. コマンドはJupiterからネイティブSOL <> 2Z変換プログラムと比較した見積もりをリクエストします。 +2. Jupiterルートがネイティブ変換プログラムの要求よりもSOLあたりのより多くの2Zを生み出す場合、`harvest-2z`はスワップを実行し、ウォレットに1 SOLと2Zの差額を返します。 -### Harvest 2Z +### 2Zの収穫 実行するには、以下を実行してください: ``` @@ -63,7 +63,7 @@ doublezero-solana revenue-distribution harvest-2z ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -このコマンドは `--dry-run` 引数でシミュレーションすることもできます。ドライランはプログラムログと以下のような出力を生成します: +コマンドは`--dry-run`引数でシミュレーションすることもできます。ドライランはプログラムログと以下のような出力を生成します: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -73,11 +73,11 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## プロトコル変換 -このセクションでは、`doublezero-solana` CLIを使用した変換レートの確認と変換の実行について説明します。最後に、DoubleZeroスワップコントラクトとのカスタムビルド統合用のインターフェースについて説明します。 +このセクションでは、`doublezero-solana` CLIを使用した変換レートの確認と変換の実行について説明します。最後に、DoubleZeroスワップコントラクトとのカスタムビルド統合のためのインターフェースについて説明します。 -### `doublezero-solana` を使用してSOL/2Z変換価格を確認する方法 +### `doublezero-solana`経由でSOL/2Z変換価格を確認する方法 -mainnet-betaでSOL/2Z変換レートを確認するには、以下のコマンドを実行してください: +mainnet-betaでのSOL/2Z変換レートを確認するには、以下のコマンドを実行してください: ```bash doublezero-solana revenue-distribution fetch sol-conversion @@ -93,11 +93,11 @@ doublezero-solana revenue-distribution fetch sol-conversion | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Journal Balanceは、Revenue DistributionスマートコントラクトにどれだけのSOL流動性があるかをユーザーに通知します。Journal Balanceが固定取引サイズの1 SOLを超えている限り、ユーザーは取引を行うことができます。 +Journal Balanceは、Revenue DistributionスマートコントラクトにどれだけのSOL流動性があるかをユーザーに通知します。Journal Balanceが1 SOLの固定取引サイズを超えている限り、ユーザーは取引できます。 -最初の行は、オフチェーンオラクルによる「真の」SOL/2Z変換価格を表示します。2番目の行は、スワップでオンチェーンで使用される変換価格であり、アルゴリズムによるディスカウントで真の価格を調整したものです。 +最初の行は、オフチェーンオラクルによる「真の」SOL/2Z変換価格を表示します。2番目の行は、スワップにオンチェーンで使用される変換価格であり、アルゴリズム的割引で真の価格を調整したものです。 -### `doublezero-solana` を使用して2ZをSOLに変換する方法 +### `doublezero-solana`経由で2ZをSOLに変換する方法 2ZトークンをSOLに変換するには、以下のコマンドを実行してください: @@ -113,17 +113,17 @@ doublezero-solana revenue-distribution convert-2z --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -指定されたリミット価格は、SOL/2Z変換を実行する際に受け入れる最悪のケースの価格を決定します。例えば、SOLのディスカウント後の2Z価格が800、つまり1 SOLに対して800 2Zトークンだとしましょう。リミット価格を790に指定した場合、最大790 2Zトークンでのみ1 SOLとのスワップを要求しているため、スワップを実行しません。しかし、810を指定した場合、最大810 2Zトークンでのスワップを許容しているため、取引は成立します(この場合、実際にはこのトランザクションで800 2Zトークンのみをスワップすることになります)。 +指定されたリミット価格は、SOL/2Z変換を実行する際に受け入れるワーストケース価格を決定します。例えば、割引後のSOLに対する2Z価格が800、つまり1 SOLに対して800 2Zトークンだとします。リミット価格を790に指定した場合、1 SOLに対して最大790 2Zトークンのみのスワップを要求しているため、スワップを実行しません。しかし810を指定した場合、最大810 2Zトークンのスワップに同意しているため、取引は成立します(この場合、このトランザクションでは800 2Zトークンのみがスワップされます)。 ソース2Zトークンアカウントは、署名者をこの2Z ATAの所有者として使用するデフォルトのATAを上書きします。ただし、スワップに使用したい別のトークンアカウントがある場合は、この引数でそのpubkeyを指定してください。 -オプションで、チェック対象のSOL金額を標準フィルサイズ(ローンチ時は1 SOLに設定)に指定できます。プログラムのフィルサイズと一致しない場合、スワップは失敗します。これにより、プログラムのフィルサイズが変更され、気づかないリスクを軽減します。 +オプションとして、チェック済みSOL量を標準フィルサイズ(ローンチ時に1 SOLに設定)に指定できます。プログラムのフィルサイズと一致しない場合、スワップは失敗します。これにより、プログラムのフィルサイズが変更されたのに気づかないリスクを軽減します。 -### SOL購入のインターフェース +### SOL購入インターフェース -インターフェースと `doublezero-solana` CLIは[このリポジトリ](https://github.com/malbeclabs/doublezero-offchain)にあります。DoubleZeroスワップコントラクトインターフェースのソースコードは[こちら](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)で見つけることができます。プログラムIDは `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs` です。 +インターフェースと`doublezero-solana` CLIは[このリポジトリ](https://github.com/malbeclabs/doublezero-offchain)にあります。DoubleZeroスワップコントラクトインターフェースのソースコードは[こちら](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)で見つけることができます。プログラムIDは`9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`です。 -SOL購入命令に必要なアカウントを生成する便利な方法は、`new` メソッド(*instruction/account.rs* にあります)を使用することです。 +SOL購入インストラクションに必要なアカウントを生成する便利な方法は、`new`メソッド(*instruction/account.rs*にあります)を使用することです。 ```rust pub fn new( @@ -134,7 +134,7 @@ pub fn new( ) -> Self; ``` -`fill_registry_key` は `ProgramState` から取得できます。 +`fill_registry_key`は`ProgramState`から取得できます。 ```rust pub struct ProgramState { @@ -150,13 +150,13 @@ pub struct ProgramState { } ``` -あるいは、Solana RPCを介してディスクリミネーターを使用して `getProgramAccounts` を呼び出すこともできます。ただし、このpubkeyは変更されることがないため、キャッシュすることをお勧めします。 +あるいは、Solana RPCを通じてディスクリミネーターを指定して`getProgramAccounts`を呼び出すこともできます。ただし、このpubkeyは変更されないため、キャッシュすることを推奨します。 -`user_key` はSOL購入命令の署名者であり、`user_token_account_key` の所有者でなければなりません。上記で説明したように、これはATAである必要はありません。2ZトークンアカウントがB `user_key` によって所有されている限り、この命令は成功します。 +`user_key`はSOL購入インストラクションの署名者であり、`user_token_account_key`の所有者である必要があります。上述のとおり、これはATAである必要はありません。2Zトークンアカウントが`user_key`によって所有されている限り、このインストラクションは成功します。 -`BuySolAccounts` 構造体は `Into>` を実装しているため、命令を構築するために必要なすべてのアカウントメタを生成できます。 +`BuySolAccounts`構造体は`Into>`を実装しているため、インストラクションを構築するために必要なすべてのアカウントメタを生成できます。 -命令データは以下の通りです: +インストラクションデータは以下のとおりです。 ```rust SolConversionInstructionData::BuySol { @@ -165,9 +165,9 @@ pub struct ProgramState { }, ``` -この命令データはBorshシリアライズされ、8バイトのAnchorセレクターを持ちます。`BorshSerialize::serialize` を使用するとすべてシリアライズされます。 +このインストラクションデータはBorshシリアライズされ、8バイトのAnchorセレクターを持ちます。`BorshSerialize::serialize`を使用するとすべてシリアライズされます。 -オラクル価格データは、このパブリックエンドポイントから取得できます:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。データは *oracle.rs* にある OraclePriceData 構造体を使用してserdeデシリアライズ可能です。 +オラクル価格データはこのパブリックエンドポイントから取得できます:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。データは*oracle.rs*にあるOraclePriceData構造体を使用してserdeデシリアライズ可能です。 ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -183,7 +183,7 @@ pub struct OraclePriceData { } ``` -[reqwest クレート](https://docs.rs/reqwest/latest/reqwest/)を使用した取得の例: +[reqwestクレート](https://docs.rs/reqwest/latest/reqwest/)を使用した取得例: ```rust use anyhow::{Context, Result}; @@ -200,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -プログラムID、アカウント、および命令データがあれば、DoubleZeroスワップコントラクトからSOLを購入するための命令を構築できるはずです。 \ No newline at end of file +プログラムID、アカウント、およびインストラクションデータがあれば、DoubleZeroスワップコントラクトからSOLを購入するインストラクションを構築できるはずです。 \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.ko.md b/docs/Swapping-sol-to-2z.ko.md index dd1890b..6b3da90 100644 --- a/docs/Swapping-sol-to-2z.ko.md +++ b/docs/Swapping-sol-to-2z.ko.md @@ -4,22 +4,22 @@ ??? warning "면책 조항" - 이 문서와 관련 코드는 정보 제공 및 기술적 목적으로만 제공됩니다. 본 문서에 설명된 토큰 변환 기능은 비수탁(non-custodial) 방식으로, 사용자는 기본 스마트 컨트랙트와 직접 상호작용하며 항상 자산에 대한 완전한 통제권을 유지합니다. + 이 문서와 관련 코드는 정보 제공 및 기술적 목적으로만 제공됩니다. 본 문서에서 설명하는 토큰 변환 기능은 비수탁형(non-custodial)으로, 사용자는 기반 스마트 컨트랙트와 직접 상호작용하며 자산에 대한 완전한 통제권을 항상 보유합니다. - 이 시스템은 개발자 또는 게시자가 개발, 통제 또는 검토하지 않은 서드파티 코드, 데이터 소스, 가격 책정 및 수수료 메커니즘(예: 스마트 컨트랙트, API 또는 탈중앙화 거래소)에 의존하거나 이와 상호작용할 수 있습니다. 서드파티 구성요소의 정확성, 기능성 또는 보안에 대한 어떠한 진술이나 보증도 하지 않습니다. - 이 코드의 개발자 및 게시자는 코드의 정확성, 완전성 또는 지속적인 가용성을 보장하지 않습니다. 코드 및 관련 자료는 "있는 그대로" 제공되며, 버그, 오류 또는 취약점을 포함할 수 있습니다. 사용에 따른 모든 위험은 전적으로 사용자 본인에게 있습니다. - 개발자 및 게시자는 이러한 컨트랙트의 사용과 관련하여 어떠한 수수료도 받지 않습니다. 코드 또는 관련 문서를 유지, 업데이트 또는 지원할 의무가 없습니다. + 이 시스템은 개발자 또는 발행자가 개발, 통제 또는 검토하지 않은 제3자 코드, 데이터 소스, 가격 책정 및 수수료 메커니즘(예: 스마트 컨트랙트, API 또는 탈중앙화 거래소)에 의존하거나 상호작용할 수 있습니다. 제3자 구성 요소의 정확성, 기능성 또는 보안에 대해 어떠한 진술이나 보증도 하지 않습니다. + 이 코드의 개발자 및 발행자는 코드의 정확성, 완전성 또는 지속적인 가용성을 보장하지 않습니다. 코드 및 관련 자료는 "있는 그대로" 제공되며, 버그, 오류 또는 취약점을 포함할 수 있습니다. 사용은 전적으로 귀하의 책임 하에 이루어집니다. + 개발자 및 발행자는 이러한 컨트랙트 사용과 관련하여 어떠한 수수료도 받지 않습니다. 코드 또는 관련 문서를 유지, 업데이트 또는 지원할 의무가 없습니다. - 이 문서는 토큰 변환, 스왑 또는 기타 거래에 대한 매도 제안, 매수 권유 또는 참여 권고를 구성하지 않습니다. 법률적, 재정적 또는 투자 조언은 제공되지 않습니다. - 사용자는 자신의 활동의 적법성을 판단할 전적인 책임이 있습니다. 코드를 사용하거나 변환에 참여하기 전에 자신의 관할권에 적용되는 법률 및 규정을 검토하고 독립적인 자문을 구해야 합니다. 제재 대상 개인 또는 단체, 또는 제한된 관할권에서의 사용을 포함하여 불법이 되는 경우 사용이 금지됩니다. + 이 문서는 토큰 변환, 스왑 또는 기타 거래에 대한 매도 제안, 매수 권유 또는 참여 권장을 구성하지 않습니다. 법적, 재정적 또는 투자 조언이 제공되지 않습니다. + 사용자는 자신의 활동의 합법성을 판단할 전적인 책임이 있습니다. 코드를 사용하거나 변환에 참여하기 전에 자신의 관할권에 적용되는 법률 및 규정을 검토하고 독립적인 자문을 구해야 합니다. 제재 대상 개인 또는 단체, 제한된 관할권에서의 사용을 포함하여 불법이 될 수 있는 경우 사용이 금지됩니다. - 법률이 허용하는 최대 범위 내에서, 개발자 및 게시자는 코드 사용 또는 변환 참여로 인해 발생하거나 이와 관련된 모든 손실, 손해 또는 청구에 대한 책임을 부인합니다. + 법률이 허용하는 최대 범위 내에서, 개발자 및 발행자는 코드 사용 또는 변환 참여로 인해 또는 이와 관련하여 발생하는 모든 손실, 손해 또는 청구에 대한 모든 책임을 부인합니다. - 이 문서와 관련 코드의 검토 및 사용은 [웹사이트 이용약관](https://doublezero.xyz/terms) 및 [프로토콜 이용약관](https://doublezero.xyz/terms-protocol)의 적용을 받습니다. + 이 문서 및 관련 코드의 검토 및 사용은 [웹사이트 이용약관](https://doublezero.xyz/terms) 및 [프로토콜 이용약관](https://doublezero.xyz/terms-protocol)의 적용을 받습니다. DoubleZero 프로토콜은 검증자 사용자로부터 SOL 표시 수익을 수집하지만, 기여자에게는 2Z 표시 보상을 분배합니다. 따라서 SOL을 2Z로 변환해야 합니다. -**이를 위해 자격을 갖춘 참여자는 DoubleZero 스왑 컨트랙트를 상대로 거래하여 컨트랙트로부터 SOL을 구매하고 2Z를 판매할 수 있습니다. 가격은 Pyth 가격 피드를 기반으로 하며 프로그래밍 방식의 할인 메커니즘이 적용됩니다.** +**이를 위해, 자격을 갖춘 참여자는 DoubleZero 스왑 컨트랙트를 상대로 거래할 수 있으며, 컨트랙트에서 SOL을 구매하고 2Z를 매도합니다. 가격은 Pyth 가격 피드와 프로그래밍 방식의 할인 메커니즘을 기반으로 합니다.** 이 간략한 가이드는 프로그램 사용 방법을 설명합니다. @@ -29,31 +29,31 @@ DoubleZero 프로토콜은 검증자 사용자로부터 SOL 표시 수익을 수 ## 프로그램 설계 -스왑 프로그램은 사실상 거래당 1 SOL의 고정 배치 크기로 SOL을 판매하는 단방향 유동성 풀입니다. 자격을 갖춘 모든 참여자는 Pyth의 오라클 가격과 동적 할인에 의해 결정되는 가격으로 2Z를 예치하여 프로그램에서 SOL을 인출할 수 있습니다. 시간이 지남에 따라 이는 네이티브 토큰을 2Z로 전환하는 프로그램의 목표를 달성합니다. +스왑 프로그램은 사실상 거래당 1 SOL의 고정 배치 크기로 SOL을 판매하는 단방향 유동성 풀입니다. 자격을 갖춘 참여자라면 누구나 Pyth의 오라클 가격과 동적 할인에 의해 결정되는 가격으로 2Z를 예치하여 프로그램에서 SOL을 인출할 수 있습니다. 시간이 지남에 따라, 이는 네이티브 토큰을 2Z로 전환하려는 프로그램의 목표를 달성합니다. -이를 사용하려면 거래자는 두 개의 최근 Pyth 가격(SOL/USD 및 2Z/USD)과 일정량의 2Z를 제공해야 합니다. 그러면 프로그램은 내재된 SOL/2Z 가격을 기반으로 1 SOL을 구매하는 데 필요한 2Z를 계산합니다. 이후 몇 가지 추가 단계를 수행합니다: +활용하려면, 거래자는 두 개의 최신 Pyth 가격(SOL/USD 및 2Z/USD)과 2Z 수량을 제공해야 합니다. 그러면 프로그램은 내재된 SOL/2Z 가격을 기반으로 해당 1 SOL을 구매하는 데 필요한 2Z를 계산합니다. 그런 다음 몇 가지 추가 단계를 수행합니다: -- Pyth 가격이 충분히 최신인지, 즉 5초 이상 오래되지 않았는지 확인합니다. -- 두 가격의 신뢰 구간이 충분히 작은지 확인합니다. 즉, 두 가격에 대한 두 개의 라플라스 표준편차(Pyth 가격의 `conf` 매개변수)의 합을 각각의 가격 수준으로 정규화한 값이 30 베이시스 포인트 이하여야 합니다. -- SOL/2Z 가격을 동적 할인으로 조정합니다. 이 할인은 Pyth 가격의 백분율로 표시됩니다. 이 할인은 마지막 거래 이후 경과한 시간의 함수입니다. 아래 수식은 마지막 거래가 슬롯 $s_{\text{last}}$에서 이루어졌고 현재 슬롯이 $s_{\text{now}}$일 때의 할인을 명시합니다. (예를 들어, 마지막 거래 이후 200 슬롯이 경과했다면 할인은 40 베이시스 포인트입니다.) +- Pyth 가격이 충분히 최신인지, 즉 5초 이상 지연되지 않았는지 확인합니다. +- 두 가격의 신뢰 구간이 충분히 작은지 확인합니다. 즉, 두 가격에 대한 두 라플라스 표준 편차(즉, Pyth 가격의 `conf` 파라미터)의 합을 각각의 수준으로 정규화한 값이 30 베이시스 포인트 이하여야 합니다. +- SOL/2Z 가격을 동적 할인으로 조정하며, 이는 Pyth 가격의 백분율로 표시됩니다. 이 할인은 마지막 거래 이후 경과 시간의 함수입니다. 아래 공식은 마지막 거래가 슬롯 $s_{\text{last}}$에서 이루어졌고 현재 슬롯이 $s_{\text{now}}$인 경우의 할인을 명시합니다. (예를 들어, 마지막 거래 이후 200 슬롯이 경과했다면 할인은 40 베이시스 포인트입니다.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -이 시점에서 거래자가 계산된 가격(할인 포함)으로 거래를 실행하기에 충분한 2Z를 제공했다면 이 계산된 가격으로 거래가 실행됩니다. 구매한 SOL 수량과 초과 2Z가 거래자에게 반환됩니다. +이 시점에서, 거래자가 이 계산된 가격(할인 포함)으로 거래를 실행하기에 충분한 2Z를 제공했다면, 이 계산된 가격으로 실행됩니다. 거래자에게 구매한 SOL 수량과 초과 2Z를 반환합니다. -이후 컨트랙트는 해당 슬롯에서 더 이상의 거래를 허용하지 않습니다. 이는 기존 필터가 포착하지 못하는 방식으로 특정 시점에서 Pyth 가격이 실제 가격과 크게 벗어날 경우, 컨트랙트가 과도하게 높은 슬리피지를 지불하는 것을 방지하기 위함입니다. +그 후 컨트랙트는 해당 슬롯에서 더 이상의 거래를 허용하지 않습니다. 이는 기존 필터가 문제를 포착하지 못하는 방식으로 특정 시점에 Pyth 가격이 실제 가격과 크게 다를 경우, 컨트랙트가 과도하게 높은 슬리피지를 지불하는 것을 방지하기 위함입니다. --- ## 가스 없는 원자적 실행 -이 섹션에서는 `harvest-dz` 명령어 사용 방법을 자세히 설명합니다. 이 명령어는 2가지 작업을 원자적으로 수행합니다. -1. Jupiter에서 네이티브 SOL <> 2Z 변환 프로그램과 비교하여 시세를 요청합니다. -2. Jupiter 경로가 네이티브 변환 프로그램이 요구하는 것보다 SOL당 더 많은 2Z를 산출할 때, `harvest-2z`는 스왑을 실행하여 지갑에 1 SOL과 2Z 차액을 반환합니다. +이 섹션에서는 `harvest-dz` 명령어 사용 방법을 상세히 설명합니다. 이 명령어는 원자적으로 2가지 작업을 수행합니다. +1. 이 명령어는 Jupiter 대비 네이티브 SOL <> 2Z 변환 프로그램의 견적을 요청합니다. +2. Jupiter 경로가 네이티브 변환 프로그램이 요구하는 것보다 SOL당 더 많은 2Z를 제공할 때, `harvest-2z`는 스왑을 실행하여 지갑에 1 SOL과 2Z의 차액을 반환합니다. -### 2Z 수확 +### Harvest 2Z 실행하려면 다음을 실행하십시오: ``` @@ -63,7 +63,7 @@ doublezero-solana revenue-distribution harvest-2z ``` Harvested 5.98151278 2Z tokens with 1.000000000 SOL ``` -이 명령어는 `--dry-run` 인수를 사용하여 시뮬레이션할 수도 있습니다. 시뮬레이션 실행은 프로그램 로그와 다음과 유사한 출력을 생성합니다: +이 명령어는 `--dry-run` 인자를 사용하여 시뮬레이션할 수도 있습니다. Dry-run은 프로그램 로그와 다음과 유사한 출력을 생성합니다: ``` Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL @@ -73,7 +73,7 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## 프로토콜 변환 -이 섹션에서는 `doublezero-solana` CLI를 사용한 변환율 확인 및 변환 실행에 대해 설명합니다. 마지막 부분에서는 DoubleZero 스왑 컨트랙트와의 커스텀 통합을 위한 인터페이스에 대해 논의합니다. +이 섹션에서는 `doublezero-solana` CLI를 사용하여 변환율을 확인하고 변환을 실행하는 방법을 논의합니다. 마지막으로, DoubleZero 스왑 컨트랙트와의 커스텀 통합을 위한 인터페이스에 대해 설명합니다. ### `doublezero-solana`를 통한 SOL/2Z 변환 가격 확인 방법 @@ -83,7 +83,7 @@ mainnet-beta에서 SOL/2Z 변환율을 확인하려면 다음 명령어를 실 doublezero-solana revenue-distribution fetch sol-conversion ``` -표시되는 출력은 다음과 유사합니다: +출력은 다음과 유사합니다: ```bash | field | description | value | note | @@ -93,11 +93,11 @@ doublezero-solana revenue-distribution fetch sol-conversion | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Journal Balance는 Revenue Distribution 스마트 컨트랙트에 얼마나 많은 SOL 유동성이 있는지 사용자에게 알려줍니다. Journal Balance가 고정 거래 크기인 1 SOL을 초과하는 한 사용자는 거래할 수 있습니다. +Journal Balance는 Revenue Distribution 스마트 컨트랙트에 얼마나 많은 SOL 유동성이 있는지 사용자에게 알려줍니다. 사용자는 Journal Balance가 고정 거래 크기인 1 SOL을 초과하는 한 거래할 수 있습니다. -첫 번째 행은 오프체인 오라클을 통한 "실제" SOL/2Z 변환 가격을 표시합니다. 두 번째 행은 온체인 스왑에 사용되는 변환 가격으로, 단순히 알고리즘 할인을 반영하여 실제 가격을 조정한 것입니다. +첫 번째 행은 오프체인 오라클을 통한 "실제" SOL/2Z 변환 가격을 표시합니다. 두 번째 행은 스왑에 사용되는 온체인 변환 가격으로, 실제 가격에 알고리즘적 할인을 적용한 것입니다. -### `doublezero-solana`를 통한 2Z를 SOL로 변환하는 방법 +### `doublezero-solana`를 통한 2Z에서 SOL로의 변환 방법 2Z 토큰을 SOL로 변환하려면 다음 명령어를 실행하십시오: @@ -105,7 +105,7 @@ Journal Balance는 Revenue Distribution 스마트 컨트랙트에 얼마나 많 doublezero-solana revenue-distribution convert-2z ``` -기본적으로 충분한 SOL 유동성이 있고 ATA에 스왑을 수행할 충분한 2Z가 있다면 이 거래는 성공합니다. 다음 인수를 지정하여 스왑을 더 세밀하게 조정할 수 있습니다: +기본적으로, SOL 유동성이 충분하고 ATA에 스왑을 수행할 만큼의 2Z가 있다면 이 트랜잭션은 성공합니다. 다음 인자를 지정하여 스왑을 더 세밀하게 조정할 수 있습니다: ```bash --limit-price Limit price defaults to the current SOL/2Z oracle price @@ -113,17 +113,17 @@ doublezero-solana revenue-distribution convert-2z --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -지정된 지정가(limit price)는 SOL/2Z 변환을 수행할 때 수용할 수 있는 최악의 가격을 결정합니다. 예를 들어, SOL의 할인된 2Z 가격이 800이라고 가정합시다. 이는 1 SOL에 800 2Z 토큰을 의미합니다. 지정가를 790으로 설정하면, 1 SOL에 최대 790 2Z 토큰만 스왑하겠다는 것이므로 스왑을 수행하지 않습니다. 그러나 810으로 설정하면 최대 810 2Z 토큰까지 스왑할 의향이 있었으므로 거래가 체결됩니다(이 경우 실제로는 이 거래에서 800 2Z 토큰만 스왑됩니다). +지정된 지정가는 SOL/2Z 변환 수행 시 수용할 수 있는 최악의 가격을 결정합니다. 예를 들어, SOL의 할인된 2Z 가격이 800이라고 가정합시다. 이는 1 SOL에 800 2Z 토큰을 의미합니다. 지정가를 790으로 설정하면, 1 SOL에 최대 790 2Z 토큰만 교환하겠다고 요구하는 것이므로 스왑이 수행되지 않습니다. 하지만 810으로 지정하면, 최대 810 2Z 토큰을 교환할 의향이 있으므로 거래가 성사됩니다(이 경우, 실제로는 이 트랜잭션에서 800 2Z 토큰만 교환하게 됩니다). -소스 2Z 토큰 계정은 서명자를 이 2Z ATA의 소유자로 사용하는 기본 ATA를 재정의합니다. 그러나 스왑에 사용하려는 다른 토큰 계정이 있다면, 이 인수를 통해 해당 공개키를 제공하십시오. +소스 2Z 토큰 계정은 서명자를 이 2Z ATA의 소유자로 사용하는 기본 ATA를 재정의합니다. 스왑에 사용하고 싶은 다른 토큰 계정이 있다면, 이 인자에 해당 pubkey를 제공하십시오. -선택적으로 표준 체결 크기(출시 시 1 SOL로 설정)에 대해 확인된 SOL 수량을 지정할 수 있습니다. 프로그램의 체결 크기와 일치하지 않으면 스왑이 실패합니다. 이는 프로그램의 체결 크기가 변경되었는데 사용자가 이를 인지하지 못하는 위험을 완화합니다. +선택적으로, 표준 체결 크기(출시 시 1 SOL로 설정)에 맞춰 checked SOL amount를 지정할 수 있습니다. 프로그램의 체결 크기와 일치하지 않으면 스왑이 실패합니다. 이는 프로그램의 체결 크기가 변경되었는데 귀하가 이를 인지하지 못하는 위험을 완화합니다. ### SOL 구매 인터페이스 -인터페이스와 `doublezero-solana` CLI는 [이 저장소](https://github.com/malbeclabs/doublezero-offchain)에 있습니다. DoubleZero 스왑 컨트랙트 인터페이스의 소스 코드는 [여기](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)에서 찾을 수 있습니다. 프로그램 ID는 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`입니다. +인터페이스와 `doublezero-solana` CLI는 [이 저장소](https://github.com/malbeclabs/doublezero-offchain)에 있습니다. DoubleZero 스왑 컨트랙트 인터페이스의 소스 코드는 [여기](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)에서 찾을 수 있습니다. Program ID는 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`입니다. -SOL 구매 명령에 필요한 계정을 생성하는 편리한 방법은 `new` 메서드(*instruction/account.rs*에 있음)를 사용하는 것입니다. +SOL 구매 명령에 필요한 계정을 생성하는 편리한 방법은 `new` 메서드(*instruction/account.rs*에 위치)를 사용하는 것입니다. ```rust pub fn new( @@ -134,7 +134,7 @@ pub fn new( ) -> Self; ``` -`fill_registry_key`는 `ProgramState`에서 가져올 수 있습니다. +`fill_registry_key`는 `ProgramState`에서 가져올 수 있습니다 ```rust pub struct ProgramState { @@ -150,13 +150,13 @@ pub struct ProgramState { } ``` -또는 Solana RPC를 통해 디스크리미네이터와 함께 `getProgramAccounts`를 호출할 수 있습니다. 그러나 이 공개키는 절대 변경되지 않으므로 캐싱하는 것을 권장합니다. +또는, Solana RPC를 통해 해당 discriminator와 함께 `getProgramAccounts`를 호출할 수 있습니다. 하지만 이 pubkey는 절대 변경되지 않으므로 캐싱하는 것을 권장합니다. -`user_key`는 SOL 구매 명령의 서명자이며 `user_token_account_key`의 소유자여야 합니다. 위에서 설명한 대로 이것은 ATA일 필요가 없습니다. 2Z 토큰 계정이 `user_key`에 의해 소유되기만 하면 이 명령은 성공합니다. +`user_key`는 SOL 구매 명령의 서명자이며 `user_token_account_key`의 소유자여야 합니다. 위에서 설명한 바와 같이, 이것은 ATA일 필요가 없습니다. 2Z 토큰 계정이 `user_key`에 의해 소유되기만 하면 이 명령은 성공합니다. -`BuySolAccounts` 구조체는 `Into>`를 구현하므로 명령을 빌드하는 데 필요한 모든 계정 메타를 생성할 수 있습니다. +`BuySolAccounts` 구조체는 `Into>`를 구현하므로, 명령을 빌드하는 데 필요한 모든 account meta를 생성할 수 있습니다. -명령 데이터는 다음과 같습니다: +명령 데이터는 다음과 같습니다 ```rust SolConversionInstructionData::BuySol { @@ -165,9 +165,9 @@ pub struct ProgramState { }, ``` -이 명령 데이터는 Borsh 직렬화되며 8바이트 Anchor 선택자를 가지고 있으며, `BorshSerialize::serialize` 사용 시 모두 직렬화됩니다. +이 명령 데이터는 Borsh 직렬화되며 8바이트 Anchor 셀렉터를 가지고 있으며, `BorshSerialize::serialize`를 사용할 때 모두 직렬화됩니다. -오라클 가격 데이터는 다음 공개 엔드포인트에서 가져올 수 있습니다: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). 데이터는 *oracle.rs*에 있는 OraclePriceData 구조체를 사용하여 serde 역직렬화가 가능합니다. +오라클 가격 데이터는 다음 공개 엔드포인트에서 가져올 수 있습니다: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). 이 데이터는 *oracle.rs*에 있는 OraclePriceData 구조체를 사용하여 serde 역직렬화할 수 있습니다. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -183,7 +183,7 @@ pub struct OraclePriceData { } ``` -[reqwest 크레이트](https://docs.rs/reqwest/latest/reqwest/)를 사용하여 가져오는 예시: +[reqwest 크레이트](https://docs.rs/reqwest/latest/reqwest/)를 사용한 가져오기 예시: ```rust use anyhow::{Context, Result}; @@ -200,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -프로그램 ID, 계정 및 명령 데이터를 사용하면 DoubleZero 스왑 컨트랙트에서 SOL을 구매하는 명령을 빌드할 수 있습니다. \ No newline at end of file +Program ID, 계정 및 명령 데이터를 사용하여 DoubleZero 스왑 컨트랙트에서 SOL을 구매하는 명령을 빌드할 수 있습니다. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.pt.md b/docs/Swapping-sol-to-2z.pt.md index 5c8e388..7d7b7b0 100644 --- a/docs/Swapping-sol-to-2z.pt.md +++ b/docs/Swapping-sol-to-2z.pt.md @@ -4,24 +4,24 @@ ??? warning "Aviso Legal" - Este documento e o código associado são fornecidos apenas para fins informativos e técnicos. A funcionalidade de conversão de tokens descrita aqui é não-custodial — os usuários interagem diretamente com os contratos inteligentes subjacentes e mantêm total controle de seus ativos em todos os momentos. + Este documento e o código associado são fornecidos apenas para fins informativos e técnicos. A funcionalidade de conversão de tokens descrita neste documento é não-custodial—os utilizadores interagem diretamente com os contratos inteligentes subjacentes e mantêm controlo total dos seus ativos em todos os momentos. - O sistema pode depender de ou interagir com código de terceiros, fontes de dados ou mecanismos de precificação e taxas (por exemplo, contratos inteligentes, APIs ou exchanges descentralizadas) que não são desenvolvidos, controlados ou revisados pelo(s) desenvolvedor(es) ou publicador(es). Nenhuma representação ou garantia é feita quanto à precisão, funcionalidade ou segurança de qualquer componente de terceiros. - O(s) desenvolvedor(es) e publicador(es) deste código não garantem sua precisão, completude ou disponibilidade contínua. O código e os materiais relacionados são fornecidos "como estão" e podem conter bugs, erros ou vulnerabilidades. O uso é inteiramente por sua conta e risco. - O(s) desenvolvedor(es) e publicador(es) não recebem quaisquer taxas em conexão com o uso destes contratos. Eles não têm obrigação de manter, atualizar ou dar suporte ao código ou à documentação relacionada. + O sistema pode depender de ou interagir com código de terceiros, fontes de dados ou mecanismos de preços e taxas (por exemplo, contratos inteligentes, APIs ou exchanges descentralizadas) que não são desenvolvidos, controlados ou revisados pelo(s) desenvolvedor(es) ou editor(es). Nenhuma representação ou garantia é feita quanto à precisão, funcionalidade ou segurança de qualquer componente de terceiros. + O(s) desenvolvedor(es) e editor(es) deste código não garantem a sua precisão, completude ou disponibilidade contínua. O código e os materiais relacionados são fornecidos "como estão" e podem conter bugs, erros ou vulnerabilidades. A utilização é inteiramente por sua conta e risco. + O(s) desenvolvedor(es) e editor(es) não recebem quaisquer taxas em conexão com o uso destes contratos. Não têm qualquer obrigação de manter, atualizar ou dar suporte ao código ou à documentação relacionada. - Este documento não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação para participar de qualquer conversão de tokens, swap ou outra transação. Nenhum aconselhamento jurídico, financeiro ou de investimento é fornecido. - Os usuários são os únicos responsáveis por determinar a legalidade de suas atividades. Eles devem revisar as leis e regulamentos aplicáveis em sua jurisdição e consultar consultores independentes antes de usar o código ou participar de qualquer conversão. O uso é proibido onde seria ilegal, incluindo por pessoas ou entidades sujeitas a sanções ou em jurisdições restritas. + Este documento não constitui uma oferta de venda, uma solicitação de compra, ou uma recomendação para participar em qualquer conversão de tokens, swap ou outra transação. Nenhum aconselhamento jurídico, financeiro ou de investimento é fornecido. + Os utilizadores são os únicos responsáveis por determinar a legalidade das suas atividades. Devem rever as leis e regulamentos aplicáveis na sua jurisdição e consultar assessores independentes antes de utilizar o código ou participar em qualquer conversão. A utilização é proibida onde seria ilegal, incluindo por pessoas ou entidades sujeitas a sanções ou em jurisdições restritas. - Na extensão máxima permitida por lei, o(s) desenvolvedor(es) e publicador(es) isentam-se de toda responsabilidade por qualquer perda, dano ou reclamação decorrente de ou em conexão com o uso do código ou participação na conversão. + Na medida máxima permitida por lei, o(s) desenvolvedor(es) e editor(es) rejeitam toda a responsabilidade por qualquer perda, dano ou reclamação decorrente de ou em conexão com o uso do código ou participação na conversão. - A revisão e o uso deste documento e do código associado estão sujeitos aos [Termos e Condições do Website](https://doublezero.xyz/terms) e [Termos e Condições do Protocolo](https://doublezero.xyz/terms-protocol). + A revisão e utilização deste documento e do código associado estão sujeitas aos [Termos e Condições do Website](https://doublezero.xyz/terms) e [Termos e Condições do Protocolo](https://doublezero.xyz/terms-protocol). -O protocolo DoubleZero coleta receita denominada em SOL de seus usuários validadores, mas distribui recompensas denominadas em 2Z aos contribuidores. Assim, ele precisa converter SOL em 2Z. +O protocolo DoubleZero cobra receita denominada em SOL dos seus utilizadores validadores, mas distribui recompensas denominadas em 2Z aos contribuidores. Assim, deve converter SOL em 2Z. -**Para isso, participantes elegíveis podem negociar contra um contrato de swap do DoubleZero, comprando SOL do contrato e vendendo 2Z. A precificação é baseada em feeds de preço da Pyth com um mecanismo de desconto programático.** +**Para tal, participantes elegíveis podem negociar contra um contrato de swap do DoubleZero, comprando SOL do contrato e vendendo-lhe 2Z. A precificação é baseada em feeds de preço da Pyth com um mecanismo de desconto programático.** -Este breve guia explica como usar o programa. +Este breve guia explica como utilizar o programa. ***Revise o Aviso Legal no final deste documento antes de acessar ou usar o código ou quaisquer materiais relacionados.*** @@ -29,33 +29,33 @@ Este breve guia explica como usar o programa. ## Design do Programa -O programa de swap é efetivamente um pool de liquidez unilateral que vende SOL em um tamanho de lote fixo de 1 SOL por negociação. Qualquer participante elegível pode retirar SOL do programa depositando 2Z, a um preço determinado por um preço oráculo da Pyth e um desconto dinâmico. Ao longo do tempo, isso executa o objetivo do programa de converter tokens nativos em 2Z. +O programa de swap é efetivamente um pool de liquidez unilateral que vende SOL num tamanho de lote fixo de 1 SOL por negociação. Qualquer participante elegível pode retirar SOL do programa depositando 2Z, a um preço que é determinado por um preço oracle da Pyth e um desconto dinâmico. Ao longo do tempo, isto executa o objetivo do programa de converter tokens nativos em 2Z. -Para utilizar, um trader deve fornecer dois preços recentes da Pyth (SOL/USD e 2Z/USD) e uma quantidade de 2Z. O programa então calcula o 2Z necessário para comprar aquele 1 SOL com base no preço implícito SOL/2Z. Em seguida, ele executa algumas etapas adicionais: +Para utilizar, um trader deve fornecer dois preços recentes da Pyth (SOL/USD e 2Z/USD) e uma quantidade de 2Z. O programa então calcula o 2Z necessário para comprar aquele 1 SOL com base no preço implícito SOL/2Z. Em seguida, executa alguns passos adicionais: -- Verifica se os preços da Pyth são suficientemente recentes, ou seja, não estão desatualizados por mais de 5 segundos. -- Verifica se os intervalos de confiança dos dois preços são suficientemente pequenos. Isto é, a soma de dois desvios padrão laplacianos (ou seja, o parâmetro `conf` no preço da Pyth) para os dois preços, normalizados por seus níveis, deve ser menor ou igual a 30 pontos base. -- Ajusta o preço SOL/2Z por um desconto dinâmico, expresso como uma porcentagem do preço da Pyth. Este desconto é uma função do tempo desde a última negociação. A fórmula abaixo especifica o desconto, assumindo que a última negociação foi feita no slot $s_{\text{last}}$ e o slot atual é $s_{\text{now}}$. (Por exemplo, se 200 slots se passaram desde a última negociação, o desconto é de 40 pontos base.) +- Verifica que os preços da Pyth são suficientemente recentes, ou seja, não estão desatualizados por mais de 5 segundos. +- Verifica que os intervalos de confiança dos dois preços são suficientemente pequenos. Isto é, a soma de dois desvios padrão de Laplace (ou seja, o parâmetro `conf` no preço da Pyth) para os dois preços, normalizados pelos seus níveis, deve ser menor ou igual a 30 pontos base. +- Ajusta o preço SOL/2Z por um desconto dinâmico, expresso como uma percentagem do preço da Pyth. Este desconto é uma função do tempo desde a última negociação. A fórmula abaixo especifica o desconto, assumindo que a última negociação foi feita no slot $s_{\text{last}}$ e o slot atual é $s_{\text{now}}$. (Por exemplo, se 200 slots se passaram desde a última negociação, o desconto é de 40 pontos base.) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -Neste ponto, se o trader forneceu 2Z suficiente para executar a transação neste preço calculado (incluindo o desconto), ela é executada neste preço calculado. O programa retorna ao trader a quantidade comprada de SOL e qualquer excesso de 2Z. +Neste ponto, se o trader forneceu 2Z suficiente para executar a transação a este preço calculado (incluindo o desconto), ela é executada a este preço calculado. Devolve ao trader a quantidade comprada de SOL e qualquer excesso de 2Z. -O contrato então não permite mais negociações para aquele slot. Isso é para evitar que o contrato pague slippage excessivamente alto caso o preço da Pyth esteja longe do preço real em qualquer momento, de maneiras que os filtros existentes não detectem problemas. +O contrato então não permite mais negociações para aquele slot. Isto serve para evitar que o contrato pague slippage excessivamente alto caso o preço da Pyth esteja longe do preço verdadeiro em qualquer dado momento de formas que os filtros existentes não detetem problemas. --- -## Execução Atômica sem Gas +## Execução Atómica sem Gas -Esta seção detalha como usar o comando `harvest-dz`. Este comando executará atomicamente 2 ações. -1. O comando solicita uma cotação do Jupiter versus o programa nativo de conversão SOL <> 2Z. -2. Quando a rota do Jupiter rende mais 2Z por SOL do que o programa de conversão nativo requer, `harvest-2z` executa um swap, retornando para sua carteira 1 SOL mais a diferença em 2Z. +Esta secção detalha como usar o comando `harvest-dz`. Este comando executará atomicamente 2 ações. +1. O comando solicita uma cotação da Jupiter vs o programa nativo de conversão SOL <> 2Z. +2. Quando a rota da Jupiter produz mais 2Z por SOL do que o programa de conversão nativo requer, `harvest-2z` executa um swap, devolvendo à sua carteira 1 SOL mais a diferença em 2Z. ### Harvest 2Z -Para executar, rode o seguinte: +Para executar, execute o seguinte: ``` doublezero-solana revenue-distribution harvest-2z ``` @@ -73,7 +73,7 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## Conversão do Protocolo -Esta seção discute a verificação de taxas de conversão e a execução da conversão usando a CLI `doublezero-solana`. E ao final, discutimos a interface para integrações personalizadas com o contrato de swap do DoubleZero. +Esta secção discute a verificação das taxas de conversão e a execução da conversão usando a CLI `doublezero-solana`. E no final, discutimos a interface para integrações personalizadas com o contrato de swap do DoubleZero. ### Como verificar o preço de conversão SOL/2Z via `doublezero-solana` @@ -83,7 +83,7 @@ Para encontrar as taxas de conversão SOL/2Z na mainnet-beta, execute o seguinte doublezero-solana revenue-distribution fetch sol-conversion ``` -E a saída que você verá será semelhante a: +E a saída que verá será semelhante a: ```bash | field | description | value | note | @@ -93,19 +93,19 @@ E a saída que você verá será semelhante a: | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -O Journal Balance informa ao usuário quanta liquidez de SOL existe no contrato inteligente de Distribuição de Receita. Um usuário pode negociar desde que o Journal Balance exceda o tamanho fixo de negociação de 1 SOL. +O Journal Balance informa ao utilizador quanta liquidez em SOL existe no contrato inteligente de Distribuição de Receita. Um utilizador pode negociar desde que o Journal Balance exceda o tamanho fixo de negociação de 1 SOL. -A primeira linha exibe o preço de conversão SOL/2Z "real" via um oráculo offchain. A segunda linha é o preço de conversão usado on-chain para o swap, que simplesmente ajusta o preço real pelo desconto algorítmico. +A primeira linha exibe o preço de conversão SOL/2Z "verdadeiro" via um oracle offchain. A segunda linha é o preço de conversão usado on-chain para o swap, que simplesmente ajusta o preço verdadeiro pelo desconto algorítmico. -### Como converter seu 2Z para SOL via `doublezero-solana` +### Como converter o seu 2Z para SOL via `doublezero-solana` -Para converter seus tokens 2Z para SOL, execute o seguinte comando: +Para converter os seus tokens 2Z para SOL, execute o seguinte comando: ```bash doublezero-solana revenue-distribution convert-2z ``` -Por padrão, se houver liquidez de SOL suficiente e sua ATA tiver 2Z suficiente para realizar o swap, esta transação será bem-sucedida. Você pode ajustar mais detalhadamente o swap especificando os seguintes argumentos: +Por padrão, se houver liquidez suficiente em SOL e a sua ATA tiver 2Z suficiente para realizar o swap, esta transação terá sucesso. Pode afinar o swap com mais precisão especificando os seguintes argumentos: ```bash --limit-price Limit price defaults to the current SOL/2Z oracle price @@ -113,17 +113,17 @@ Por padrão, se houver liquidez de SOL suficiente e sua ATA tiver 2Z suficiente --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -O preço limite especificado determina o pior preço que você está disposto a aceitar ao realizar a conversão SOL/2Z. Por exemplo, digamos que o preço com desconto de 2Z para SOL é 800, o que significa 800 tokens 2Z para 1 SOL. Se você especificar um preço limite de 790, você não está disposto a realizar o swap porque está exigindo que troque no máximo 790 tokens 2Z por 1 SOL. Mas se você especificar 810, a negociação será executada porque você estava disposto a trocar no máximo 810 tokens 2Z (e neste caso, você terá trocado apenas 800 tokens 2Z nesta transação). +O preço limite especificado determina o pior preço que está disposto a aceitar ao realizar a conversão SOL/2Z. Por exemplo, digamos que o preço com desconto de 2Z para SOL é 800, o que significa 800 tokens 2Z por 1 SOL. Se especificar um preço limite de 790, não está disposto a realizar o swap porque está a exigir trocar no máximo 790 tokens 2Z por 1 SOL. Mas se especificar 810, a negociação será executada porque estava disposto a trocar no máximo 810 tokens 2Z (e neste caso, terá trocado apenas 800 tokens 2Z nesta transação). -A conta de token 2Z de origem substitui a ATA padrão usando o signatário como proprietário desta ATA de 2Z. Mas se você tiver outra conta de token que deseja usar para realizar o swap, forneça a pubkey dela com este argumento. +A conta de tokens 2Z de origem substitui a ATA padrão que usa o signatário como proprietário desta ATA de 2Z. Mas se tiver outra conta de tokens que deseja usar para realizar o swap, forneça a pubkey correspondente com este argumento. -Opcionalmente, você pode especificar o valor verificado de SOL para o tamanho de preenchimento padrão (definido como 1 SOL no lançamento). Se não estiver alinhado com o tamanho de preenchimento do programa, o swap falhará. Isso mitiga o risco de que o tamanho de preenchimento do programa mude e você não perceba. +Opcionalmente, pode especificar o montante verificado de SOL para o tamanho de preenchimento padrão (definido como 1 SOL no lançamento). Se não estiver alinhado com o tamanho de preenchimento do programa, o swap falha. Isto mitiga o risco de o tamanho de preenchimento do programa mudar sem que o note. ### Interface para Comprar SOL -A interface e a CLI `doublezero-solana` estão [neste repositório](https://github.com/malbeclabs/doublezero-offchain). O código-fonte da interface do contrato de swap do DoubleZero pode ser encontrado [aqui](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). O Program ID é `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. +A interface e a CLI `doublezero-solana` encontram-se [neste repositório](https://github.com/malbeclabs/doublezero-offchain). O código-fonte da interface do contrato de swap do DoubleZero pode ser encontrado [aqui](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09). O program ID é `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`. -Uma maneira conveniente de gerar as contas necessárias para a instrução de compra de SOL é usando o método `new` (encontrado em *instruction/account.rs*). +Uma forma conveniente de gerar as contas necessárias para a instrução de compra de SOL é usar o método `new` (encontrado em *instruction/account.rs*). ```rust pub fn new( @@ -134,7 +134,7 @@ pub fn new( ) -> Self; ``` -O `fill_registry_key` pode ser obtido a partir do `ProgramState` +A `fill_registry_key` pode ser obtida a partir do `ProgramState` ```rust pub struct ProgramState { @@ -150,11 +150,11 @@ pub struct ProgramState { } ``` -Alternativamente, você pode chamar `getProgramAccounts` via Solana RPC com seu discriminador. Mas recomendamos fazer cache desta pubkey, pois ela nunca mudará. +Alternativamente, pode chamar `getProgramAccounts` via Solana RPC com o seu discriminador. Mas recomendamos armazenar em cache esta pubkey, pois nunca mudará. -O `user_key` é um signatário para a instrução de compra de SOL e deve ser o proprietário do `user_token_account_key`. Como descrito acima, isso NÃO precisa ser uma ATA. Desde que sua conta de token 2Z seja de propriedade do `user_key`, esta instrução será bem-sucedida. +A `user_key` é um signatário para a instrução de compra de SOL e deve ser o proprietário da `user_token_account_key`. Como descrito acima, isto NÃO precisa de ser uma ATA. Desde que a sua conta de tokens 2Z seja propriedade da `user_key`, esta instrução terá sucesso. -A struct `BuySolAccounts` implementa `Into>` para que você possa gerar todos os account metas necessários para construir a instrução. +A struct `BuySolAccounts` implementa `Into>` para que possa gerar todos os account metas necessários para construir a instrução. Os dados da instrução são @@ -165,9 +165,9 @@ Os dados da instrução são }, ``` -Estes dados de instrução são serializados em Borsh e possuem um seletor Anchor de 8 bytes, que será totalmente serializado ao usar `BorshSerialize::serialize`. +Estes dados de instrução são serializados com Borsh e têm um seletor Anchor de 8 bytes, que serão todos serializados ao usar `BorshSerialize::serialize`. -Os dados de preço do oráculo podem ser obtidos a partir deste endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Os dados são desserializáveis via serde usando a struct OraclePriceData encontrada em *oracle.rs*. +Os dados do preço oracle podem ser obtidos neste endpoint público: [https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate). Os dados são desserializáveis com serde usando a struct OraclePriceData encontrada em *oracle.rs*. ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -183,7 +183,7 @@ pub struct OraclePriceData { } ``` -Exemplo de como buscar usando a [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): +Exemplo de como obter usando a [crate reqwest](https://docs.rs/reqwest/latest/reqwest/): ```rust use anyhow::{Context, Result}; @@ -200,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -Com o Program ID, as contas e os dados da instrução, você deverá ser capaz de construir a instrução para comprar SOL do contrato de swap do DoubleZero. \ No newline at end of file +Com o program ID, as contas e os dados da instrução, deverá conseguir construir a instrução para comprar SOL do contrato de swap do DoubleZero. \ No newline at end of file diff --git a/docs/Swapping-sol-to-2z.zh.md b/docs/Swapping-sol-to-2z.zh.md index 0b750fe..80ab97c 100644 --- a/docs/Swapping-sol-to-2z.zh.md +++ b/docs/Swapping-sol-to-2z.zh.md @@ -1,59 +1,59 @@ -**在访问或使用代码或任何相关材料之前,请查阅免责声明。** +**在访问或使用代码或任何相关材料之前,请先阅读免责声明。** ??? warning "免责声明" - 本文档及相关代码仅供参考和技术用途。本文所述的代币转换功能为非托管模式——用户直接与底层智能合约交互,并始终保留对其资产的完全控制权。 + 本文档及相关代码仅供信息和技术参考之用。本文所述的代币转换功能为非托管性质——用户直接与底层智能合约交互,并始终保留对其资产的完全控制。 - 本系统可能依赖或与第三方代码、数据源或定价和费用机制(例如智能合约、API 或去中心化交易所)进行交互,这些均非由开发者或发布者开发、控制或审查。对于任何第三方组件的准确性、功能性或安全性,不作任何声明或保证。 + 本系统可能依赖或与第三方代码、数据源或定价和费用机制(例如智能合约、API 或去中心化交易所)进行交互,这些内容并非由开发者或发布者开发、控制或审查。对于任何第三方组件的准确性、功能性或安全性,不作任何陈述或保证。 本代码的开发者和发布者不保证其准确性、完整性或持续可用性。代码及相关材料按"原样"提供,可能包含错误、缺陷或漏洞。使用风险完全由您自行承担。 开发者和发布者不会因使用这些合约而收取任何费用。他们没有义务维护、更新或支持代码或相关文档。 - 本文档不构成出售要约、购买邀约,也不构成参与任何代币转换、兑换或其他交易的建议。本文不提供任何法律、财务或投资建议。 - 用户须自行负责确定其活动的合法性。用户应在使用代码或参与任何转换之前,查阅其所在司法管辖区适用的法律法规,并咨询独立顾问。在可能违法的情况下禁止使用,包括受制裁对象或受限司法管辖区内的个人或实体。 + 本文档不构成出售要约、购买邀约或参与任何代币转换、交换或其他交易的建议。本文不提供任何法律、财务或投资建议。 + 用户应自行负责确定其活动的合法性。用户应审查其所在司法管辖区适用的法律法规,并在使用代码或参与任何转换之前咨询独立顾问。在使用可能违法的情况下(包括受制裁人员或实体或受限司法管辖区),禁止使用。 在法律允许的最大范围内,开发者和发布者对因使用代码或参与转换而产生的或与之相关的任何损失、损害或索赔不承担任何责任。 - 查阅和使用本文档及相关代码须遵守[网站条款与条件](https://doublezero.xyz/terms)和[协议条款与条件](https://doublezero.xyz/terms-protocol)。 + 对本文档和相关代码的查阅和使用受 [网站条款和条件](https://doublezero.xyz/terms) 以及 [协议条款和条件](https://doublezero.xyz/terms-protocol) 的约束。 -DoubleZero 协议从其验证者用户处收取以 SOL 计价的收入,但向贡献者分配以 2Z 计价的奖励。因此,它必须将 SOL 转换为 2Z。 +DoubleZero 协议从其验证者用户处收取以 SOL 计价的收入,但向贡献者分配以 2Z 计价的奖励。因此,协议必须将 SOL 转换为 2Z。 -**为此,符合条件的参与者可以与 DoubleZero 兑换合约进行交易,从合约中购买 SOL 并出售 2Z。定价基于 Pyth 价格馈送以及程序化折扣机制。** +**为此,符合条件的参与者可以与 DoubleZero 交换合约进行交易,从合约中购买 SOL 并出售 2Z。定价基于 Pyth 价格源,并具有程序化折扣机制。** -本简要指南说明如何使用该程序。 +本简短指南说明了如何使用该程序。 -***在访问或使用代码或任何相关材料之前,请查阅本文档末尾的免责声明。*** +***在访问或使用代码或任何相关材料之前,请先阅读本文档末尾的免责声明。*** --- ## 程序设计 -兑换程序实质上是一个单边流动性池,以每笔交易固定批量 1 SOL 的方式出售 SOL。任何符合条件的参与者都可以通过存入 2Z 从程序中提取 SOL,价格由 Pyth 的预言机价格和动态折扣决定。随着时间的推移,这实现了该程序将原生代币转换为 2Z 的目标。 +交换程序实质上是一个单边流动性池,以每笔交易 1 SOL 的固定批量出售 SOL。任何符合条件的参与者都可以通过存入 2Z 从程序中提取 SOL,价格由 Pyth 的预言机价格和动态折扣决定。随着时间的推移,这将实现程序将原生代币转换为 2Z 的目标。 -要使用该功能,交易者必须提供两个最新的 Pyth 价格(SOL/USD 和 2Z/USD)以及一定数量的 2Z。然后程序根据隐含的 SOL/2Z 价格计算购买 1 SOL 所需的 2Z 数量。接下来它还会执行以下几个额外步骤: +要使用该功能,交易者必须提供两个最新的 Pyth 价格(SOL/USD 和 2Z/USD)以及一定数量的 2Z。然后,程序根据隐含的 SOL/2Z 价格计算购买 1 SOL 所需的 2Z 数量。随后,程序还会执行以下几个额外步骤: -- 检查 Pyth 价格是否足够新鲜,即不超过 5 秒的延迟。 -- 检查两个价格的置信区间是否足够小。即两个价格的两个拉普拉斯标准差(即 Pyth 价格中的 `conf` 参数)之和,经各自价格水平归一化后,必须小于或等于 30 个基点。 -- 通过动态折扣调整 SOL/2Z 价格,折扣以 Pyth 价格的百分比表示。此折扣是自上次交易以来时间的函数。以下公式指定了折扣,假设上次交易在槽位 $s_{\text{last}}$ 进行,当前槽位为 $s_{\text{now}}$。(例如,如果自上次交易以来已过去 200 个槽位,则折扣为 40 个基点。) +- 检查 Pyth 价格是否足够新鲜,即价格延迟不超过 5 秒。 +- 检查两个价格的置信区间是否足够小。也就是说,两个价格的两个拉普拉斯标准差(即 Pyth 价格中的 `conf` 参数)之和,经各自价格水平归一化后,必须小于或等于 30 个基点。 +- 通过动态折扣调整 SOL/2Z 价格,折扣以 Pyth 价格的百分比表示。该折扣是自上次交易以来经过时间的函数。以下公式指定了折扣,假设上次交易在时隙 $s_{\text{last}}$ 进行,当前时隙为 $s_{\text{now}}$。(例如,如果自上次交易以来已过去 200 个时隙,则折扣为 40 个基点。) $$ \text{discount} = \min\{0.00002 \times \left(s_{\text{now}} - s_{\text{last}}\right), 0.01\} $$ -此时,如果交易者提供了足够的 2Z 以在此计算价格(包含折扣)下执行交易,则按此计算价格执行。它会将购买的 SOL 数量和多余的 2Z 返还给交易者。 +此时,如果交易者提供了足够的 2Z 以按此计算价格(含折扣)执行交易,则交易将以此计算价格成交。程序会将购买的 SOL 数量和多余的 2Z 返还给交易者。 -之后该合约在该槽位内不再允许更多交易。这是为了防止在任何给定时间点 Pyth 价格远离真实价格时(现有过滤器未能捕获的情况下),合约支付过高的滑点。 +随后,合约在该时隙内不允许更多交易。这是为了防止合约在任何给定时间点 Pyth 价格远离真实价格时支付过高的滑点,而现有过滤器未能捕获这些问题。 --- ## 无 Gas 原子执行 -本节将详细介绍如何使用 `harvest-dz` 命令。此命令将原子性地执行 2 个操作。 -1. 该命令从 Jupiter 请求报价,并与原生 SOL <> 2Z 转换程序进行对比。 -2. 当 Jupiter 路由的每 SOL 兑换的 2Z 数量多于原生转换程序所需的数量时,`harvest-2z` 执行一笔兑换,将 1 SOL 加上 2Z 差额返回到您的钱包。 +本节将详细说明如何使用 `harvest-dz` 命令。该命令将原子性地执行 2 个操作。 +1. 该命令从 Jupiter 请求报价,并与原生 SOL <> 2Z 转换程序进行比较。 +2. 当 Jupiter 路由提供的每 SOL 兑换 2Z 数量多于原生转换程序所需时,`harvest-2z` 执行交换,将 1 SOL 加上 2Z 差额返还到您的钱包。 -### 收割 2Z +### 收获 2Z 要执行,请运行以下命令: ``` @@ -73,17 +73,17 @@ Simulated harvesting 5.98151278 2Z tokens with 1.000000000 SOL ## 协议转换 -本节讨论如何使用 `doublezero-solana` CLI 检查转换汇率和执行转换。最后,我们讨论与 DoubleZero 兑换合约进行自定义集成的接口。 +本节讨论如何检查转换率以及使用 `doublezero-solana` CLI 执行转换。最后,我们讨论与 DoubleZero 交换合约进行自定义集成的接口。 ### 如何通过 `doublezero-solana` 查看 SOL/2Z 转换价格 -要查看主网 (mainnet-beta) 上的 SOL/2Z 转换汇率,请运行以下命令: +要查找 mainnet-beta 上的 SOL/2Z 转换率,请运行以下命令: ```bash doublezero-solana revenue-distribution fetch sol-conversion ``` -您将看到类似以下的输出: +您看到的输出将类似于: ```bash | field | description | value | note | @@ -93,9 +93,9 @@ doublezero-solana revenue-distribution fetch sol-conversion | Journal Balance | SOL available for conversion | 438.670881289 | | ``` -Journal Balance 告知用户收入分配智能合约中有多少 SOL 流动性。只要 Journal Balance 超过固定交易大小 1 SOL,用户就可以进行交易。 +Journal Balance 告知用户收入分配智能合约中有多少 SOL 流动性。只要 Journal Balance 超过 1 SOL 的固定交易规模,用户就可以进行交易。 -第一行显示通过链下预言机获得的"真实" SOL/2Z 转换价格。第二行是用于链上兑换的转换价格,它只是在真实价格的基础上应用了算法折扣调整。 +第一行显示通过链下预言机获取的"真实" SOL/2Z 转换价格。第二行是链上交换使用的转换价格,它只是根据算法折扣对真实价格进行了调整。 ### 如何通过 `doublezero-solana` 将您的 2Z 转换为 SOL @@ -105,7 +105,7 @@ Journal Balance 告知用户收入分配智能合约中有多少 SOL 流动性 doublezero-solana revenue-distribution convert-2z ``` -默认情况下,如果有足够的 SOL 流动性且您的 ATA 有足够的 2Z 来执行兑换,该交易将会成功。您可以通过指定以下参数来更精细地调整兑换: +默认情况下,如果有足够的 SOL 流动性且您的 ATA 有足够的 2Z 来执行交换,此交易将会成功。您可以通过指定以下参数来更精细地调整交换: ```bash --limit-price Limit price defaults to the current SOL/2Z oracle price @@ -113,17 +113,17 @@ doublezero-solana revenue-distribution convert-2z --checked-sol-amount Explicitly check SOL amount. When specified, this amount will be checked against the fixed fill quantity ``` -指定的限价决定了您在执行 SOL/2Z 转换时愿意接受的最差价格。例如,假设折后 SOL 的 2Z 价格为 800,即 800 个 2Z 代币换 1 SOL。如果您指定限价为 790,您将不愿意执行兑换,因为您要求最多只用 790 个 2Z 代币换 1 SOL。但如果您指定 810,交易将会执行,因为您愿意最多兑换 810 个 2Z 代币(在这种情况下,您在该笔交易中实际只兑换了 800 个 2Z 代币)。 +指定的限价决定了您在执行 SOL/2Z 转换时愿意接受的最差价格。例如,假设折扣后的 2Z 对 SOL 价格为 800,即 800 2Z 代币兑换 1 SOL。如果您指定限价为 790,您将不愿意执行交换,因为您要求最多只用 790 2Z 代币兑换 1 SOL。但如果您指定 810,交易将会成交,因为您愿意最多用 810 2Z 代币兑换(在这种情况下,您在此交易中实际只兑换了 800 2Z 代币)。 -源 2Z 代币账户会覆盖默认的 ATA(使用签名者作为此 2Z ATA 的所有者)。但如果您有另一个代币账户想用于执行兑换,请使用此参数提供其公钥。 +源 2Z 代币账户会覆盖默认的 ATA(默认使用签名者作为此 2Z ATA 的所有者)。但如果您有其他代币账户想用于执行交换,请通过此参数提供其公钥。 -可选地,您可以将已检查的 SOL 数量指定为标准成交大小(启动时设为 1 SOL)。如果它与程序的成交大小不一致,兑换将失败。这降低了程序成交大小发生变化而您未注意到的风险。 +您还可以选择性地将检查的 SOL 数量指定为标准成交规模(启动时设为 1 SOL)。如果该数量与程序的成交规模不一致,交换将失败。这可以降低程序成交规模发生变化而您未注意到的风险。 ### 购买 SOL 的接口 -接口和 `doublezero-solana` CLI 位于[此仓库](https://github.com/malbeclabs/doublezero-offchain)。DoubleZero 兑换合约接口的源代码可在[此处](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)找到。程序 ID 为 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`。 +接口和 `doublezero-solana` CLI 位于[此仓库](https://github.com/malbeclabs/doublezero-offchain)中。DoubleZero 交换合约接口的源代码可在[此处](https://github.com/malbeclabs/doublezero-offchain/tree/b3f606a91326baf64b475a37d612981b63243b09)找到。Program ID 为 `9DRcqsJUCo8CL2xDCXpogwzLEVKRDzSyNtVgXqsXHfDs`。 -生成购买 SOL 指令所需账户的便捷方法是使用 `new` 方法(位于 *instruction/account.rs* 中)。 +生成购买 SOL 指令所需账户的便捷方式是使用 `new` 方法(位于 *instruction/account.rs* 中)。 ```rust pub fn new( @@ -152,7 +152,7 @@ pub struct ProgramState { 或者,您可以通过 Solana RPC 使用其判别器调用 `getProgramAccounts`。但我们建议缓存此公钥,因为它永远不会改变。 -`user_key` 是购买 SOL 指令的签名者,必须是 `user_token_account_key` 的所有者。如上所述,这不需要是 ATA。只要您的 2Z 代币账户由 `user_key` 所有,此指令就会成功。 +`user_key` 是购买 SOL 指令的签名者,且必须是 `user_token_account_key` 的所有者。如上所述,这不需要是 ATA。只要您的 2Z 代币账户由 `user_key` 拥有,此指令就会成功。 `BuySolAccounts` 结构体实现了 `Into>`,因此您可以生成构建指令所需的所有账户元数据。 @@ -165,9 +165,9 @@ pub struct ProgramState { }, ``` -此指令数据经过 Borsh 序列化,并带有 8 字节的 Anchor 选择器,使用 `BorshSerialize::serialize` 时会全部完成序列化。 +此指令数据经过 Borsh 序列化,并带有 8 字节的 Anchor 选择器,使用 `BorshSerialize::serialize` 时会全部被序列化。 -预言机价格数据可以从此公共端点获取:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。该数据可使用 *oracle.rs* 中的 OraclePriceData 结构体进行 serde 反序列化。 +预言机价格数据可从此公共端点获取:[https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate](https://sol-2z-oracle-api-v1.mainnet-beta.doublezero.xyz/swap-rate)。该数据可使用 *oracle.rs* 中的 OraclePriceData 结构体进行 serde 反序列化。 ```rust #[derive(Debug, BorshDeserialize, BorshSerialize, Clone, Default, PartialEq, Eq)] @@ -183,7 +183,7 @@ pub struct OraclePriceData { } ``` -以下是使用 [reqwest crate](https://docs.rs/reqwest/latest/reqwest/) 获取数据的示例: +使用 [reqwest crate](https://docs.rs/reqwest/latest/reqwest/) 获取的示例: ```rust use anyhow::{Context, Result}; @@ -200,4 +200,4 @@ pub async fn try_request_oracle_conversion_price(oracle_endpoint: &str) -> Resul } ``` -有了程序 ID、账户和指令数据,您应该能够构建从 DoubleZero 兑换合约购买 SOL 的指令。 \ No newline at end of file +有了 Program ID、账户和指令数据,您就能够构建从 DoubleZero 交换合约购买 SOL 的指令。 \ No newline at end of file