Pool (v1)

Contrato inteligente Pool v1 de STON.fi: implementación de pool AMM con fórmula de producto constante

Métodos get fuera de la cadena

get_pool_data

Devuelve el estado actual del pool: reservas de tokens Jetton, direcciones de billetera Jetton y parámetros de comisiones.

(int, int, slice, slice, int, int, int, slice, int, int) get_pool_data() method_id;

Argumentos

Ninguno

Resultado

Devuelve el estado actual de la Pool

Estructura de resultado

Clave
Tipo
Índice
Descripción

reserve0

coins

0

Cantidad del primer token (en unidades básicas del token)

reserve1

coins

1

Cantidad del segundo token (en unidades básicas del token)

token0_wallet_address

dirección

2

Dirección del primer token Jetton

token1_wallet_address

dirección

3

Dirección del segundo token Jetton

lp_fee

uint8

4

Valor de la comisión del pool de liquidez

protocol_fee

uint8

5

Comisión del protocolo

ref_fee

uint8

6

Comisión del referidor

protocol_fee_address

dirección

7

Dirección para recibir las comisiones del protocolo

collected_token0_protocol_fee

coins

8

Cantidad de comisiones de protocolo acumuladas del primer token (en unidades básicas del token)

collected_token1_protocol_fee

coins

9

Cantidad de comisiones de protocolo acumuladas del segundo token (en unidades básicas del token)

Notas:

  • la proporción de la comisión es el valor de la comisión dividido por FEE_DIVIDER (10000); por lo tanto, una comisión del 1% tiene un valor de 100

get_expected_outputs

Estima el resultado esperado de la amount de jettonWallet intercambio de tokens por el otro tipo de tokens del pool.

Argumentos

Nombre
Tipo
Descripción

amount

coins

Cantidad de tokens a intercambiar (en unidades básicas del token)

token_wallet

dirección

Dirección Jetton del token (debe ser igual a una de las direcciones Jetton del pool)

Resultado

Devuelve el resultado esperado de un intercambio de tokens

Estructura de resultado

Clave
Tipo
Índice
Descripción

jetton_to_receive

coins

0

Cantidad de tokens recibidos (en unidades básicas del token)

protocol_fee_paid

coins

1

Cantidad de tokens pagados por comisiones del protocolo (en unidades básicas del token)

ref_fee_paid

coins

2

Cantidad de tokens pagados por comisiones de referidor (en unidades básicas del token)

get_expected_tokens

Estimar una cantidad esperada de tokens LP acuñados al proporcionar liquidez.

Argumentos

Clave
Tipo
Descripción

amount0

coins

Cantidad de tokens para el primer Jetton (en unidades básicas del token)

amount1

coins

Cantidad de tokens para el segundo Jetton (en unidades básicas del token)

Resultado

Devuelve una cantidad estimada de tokens de liquidez a acuñar

get_expected_liquidity

Estimar la liquidez esperada liberada al quemar tokens de liquidez.

Argumentos

Clave
Tipo
Descripción

jetton_amount

coins

Cantidad de tokens de liquidez (en unidades básicas del token)

Resultado

Devuelve la liquidez liberada esperada

Estructura de retorno

Clave
Tipo
Índice
Descripción

amount0

coins

0

Cantidad de tokens para el primer Jetton (en unidades básicas del token)

amount1

coins

1

Cantidad de tokens para el segundo Jetton (en unidades básicas del token)

get_lp_account_address

Obtiene la dirección de la cuenta LP de un usuario

Argumentos

Clave
Tipo
Descripción

owner_address

dirección

Dirección de un usuario

Resultado

Función de la dirección de la cuenta lp de un usuario

get_jetton_data

Métodos estándar 'get' de jetton de TonWeb JettonMinter.

Argumentos

Ninguno

Resultado

Devuelve una estructura con los datos de Jetton

Estructura de retorno

Clave
Tipo
Índice
Descripción

total_supply

coins

0

Suministro total de tokens (en unidades básicas del token)

is_mintable

bool

1

Si se pueden acuñar nuevos tokens

admin_address

dirección

2

Dirección del administrador

jetton_content_uri

string

3

URI fuera de la cadena con datos de Jetton

jetton_wallet_code

cell

4

Código de la billetera Jetton LP

get_wallet_address

Obtiene la dirección de la wallet LP de un usuario.

Argumentos

Nombre
Tipo
Descripción

owner_address

dirección

Dirección de un usuario

Resultado

Devuelve la dirección calculada de la billetera lp de un usuario

Consultas en la cadena

Contrapartes en la cadena de los métodos getter.

Tabla de operaciones

Nombre
Valor
Descripción

getter_pool_data

0x43c034e6

Envía un mensaje con el estado actual del pool

getter_expected_outputs

0xed4d8b67

Envía un mensaje con un resultado estimado del intercambio de tokens

getter_lp_account_address

0x9163a98a

Envía un mensaje con la dirección de la cuenta LP de un usuario

getter_expected_tokens

0x9ce632c5

Envía un mensaje con una cantidad estimada de tokens lp acuñados al proporcionar liquidez

getter_expected_liquidity

0x8751801f

Envía un mensaje con la liquidez estimada liberada al quemar tokens de liquidez

provide_wallet_address

0x2c76b973

Envía un mensaje con la dirección de la wallet LP de un usuario

getter_pool_data (0x43c034e6)

Envía un mensaje con el estado actual del pool. Equivalente en cadena de get_pool_data.

TL-B

Cuerpo del mensaje

Ninguno

Mensajes salientes

Envía un mensaje con los datos actuales del pool a la sender_address

Cuerpo del mensaje de respuesta

Nombre
Tipo
Descripción

op

uint32

El código de operación es igual a getter_pool_data

query_id

uint64

ID de consulta

reserve0

coins

Cantidad del primer token (en unidades básicas del token)

reserve1

coins

Cantidad del segundo token (en unidades básicas del token)

token0_address

dirección

Dirección del primer token Jetton

token1_address

dirección

Dirección del segundo token Jetton

ref_fee_data

cell

Celda con datos de comisiones

ref_fee_data body

Nombre
Tipo
Descripción

lp_fee

uint8

Valor de la comisión del pool de liquidez

protocol_fee

uint8

Comisión del protocolo

ref_fee

uint8

Comisión del referidor

protocol_fee_address

dirección

Dirección para recibir las comisiones del protocolo

collected_token0_protocol_fee

coins

Cantidad de comisiones de protocolo acumuladas del primer token (en unidades básicas del token)

collected_token1_protocol_fee

coins

Cantidad de comisiones de protocolo acumuladas del segundo token (en unidades básicas del token)

getter_expected_outputs (0xed4d8b67)

Envía un mensaje con un resultado estimado del intercambio de tokens. Equivalente en cadena de get_expected_outputs.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

amount

coins

Cantidad de tokens (en unidades básicas del token)

token_wallet

dirección

Dirección Jetton del token

Mensajes salientes

Envía un mensaje con un resultado estimado del intercambio de tokens a sender_address

Cuerpo del mensaje de respuesta

Nombre
Tipo
Descripción

op

uint32

El código de operación es igual a getter_expected_outputs

query_id

uint64

ID de consulta

out

coins

Cantidad de tokens a recibir (en unidades básicas del token)

protocol_fee_out

coins

Cantidad de tokens pagados por comisiones del protocolo (en unidades básicas del token)

ref_fee_out

coins

Cantidad de tokens pagados por comisiones de referidor (en unidades básicas del token)

getter_lp_account_address (0x9163a98a)

Envía un mensaje con la dirección de la cuenta LP de un usuario. Equivalente en cadena de get_lp_account_address.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

user_address

dirección

Dirección de un usuario

Mensajes salientes

Envía un mensaje con la dirección de la cuenta LP de un usuario a sender_address

Cuerpo del mensaje de respuesta

Nombre
Tipo
Descripción

op

uint32

El código de operación es igual a getter_expected_outputs

query_id

uint64

ID de consulta

lp_account_address

dirección

dirección de la cuenta LP de un usuario

Notas:

  • la versión actual del contrato devuelve un mensaje con getter_expected_outputs código de operación en lugar de getter_lp_account_address por lo que el usuario debe diferenciar esos mensajes por algún otro medio

getter_expected_tokens (0x9ce632c5)

Envía un mensaje con una cantidad estimada de tokens lp acuñados al proporcionar liquidez. Equivalente en cadena de get_expected_tokens

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

user_address

dirección

Dirección del usuario (no utilizada)

amount0

coins

Cantidad de tokens para el primer Jetton (en unidades básicas del token)

amount1

coins

Cantidad de tokens para el segundo Jetton (en unidades básicas del token)

Mensajes salientes

Envía un mensaje con una cantidad estimada de tokens de liquidez que se acuñarán a sender_address

Cuerpo del mensaje de respuesta

Nombre
Tipo
Descripción

op

uint32

El código de operación es igual a getter_expected_tokens

query_id

uint64

ID de consulta

liquidez

coins

Cantidad esperada de tokens de liquidez (en unidades básicas del token)

getter_expected_liquidity (0x8751801f)

Envía un mensaje con la liquidez estimada liberada al quemar tokens de liquidez. Equivalente en cadena de get_expected_liquidity.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

jetton_amount

coins

Cantidad de tokens de liquidez a quemar (en unidades básicas del token)

Mensajes salientes

Envía un mensaje con liquidez estimada a sender_address

Cuerpo del mensaje de respuesta

Nombre
Tipo
Descripción

op

uint32

El código de operación es igual a getter_expected_tokens

query_id

uint64

ID de consulta

amount0_out

coins

Cantidad de tokens para el primer Jetton (en unidades básicas del token)

amount1_out

coins

Cantidad de tokens para el segundo Jetton (en unidades básicas del token)

provide_wallet_address (0x2c76b973)

Envía un mensaje con la dirección de la wallet LP de un usuario. Equivalente en cadena de get_wallet_address.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

owner_address

dirección

Dirección de un usuario

include_address?

uint1

Incluye la dirección del usuario en el mensaje de respuesta

Mensajes salientes

Envía un mensaje de vuelta al remitente con la dirección calculada de la wallet LP de un usuario

Cuerpo del mensaje de respuesta

Nombre
Tipo
Descripción

op

uint32

El código de operación es igual a take_wallet_address (0xd1735400)

query_id

uint64

ID de consulta

lp_wallet_address

dirección

Dirección calculada de la wallet LP

ref_address

cell | null

Celda con datos si include_address? se evalúa a true

ref_address body

Nombre
Tipo
Descripción

included_address

dirección

Dirección de un usuario

Manejadores de Jetton

Gestiona las operaciones enviadas desde una wallet Jetton.

Tabla de operaciones

Nombre
Valor
Descripción

burn_notification

0x7bdd97de

Enviado por la wallet LP después de quemar jettons LP para liberar liquidez

burn_notification (0x7bdd97de)

Enviado por la billetera LP después de quemar jettons LP para liberar liquidez.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

jetton_amount

coins

Cantidad de tokens de liquidez a quemar (en unidades básicas del token)

from_address

dirección

Dirección del usuario

response_address

dirección

Dirección para un mensaje de respuesta

Mensajes salientes

Envía un mensaje con op excesses (0xd53276db) a response_address

Envía un mensaje con una cantidad liberada de ambos tokens para que el usuario la reciba como resultado de la operación de quema al router, que inicia pay_to operación a from_address

Manejadores de mensajes internos del router

Gestiona mensajes del router.

Tabla de operaciones

Nombre
Valor
Descripción

swap

0x25938561

Intercambiar tokens

provide_lp

0xfcf9e58f

Proporcionar liquidez

reset_gas

0x42a0fb43

Reiniciar gas

collect_fees

0x1fcb7d3d

Cobrar comisiones

set_fees

0x355423e5

Establecer nuevos parámetros de comisión

swap (0x25938561)

Intercambia tokens. Este mensaje se recibe del router cuando el usuario inicia un intercambio de tokens.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

from_user_address

dirección

Dirección del usuario

token_wallet

dirección

Dirección de la billetera Jetton entrante

amount

coins

Cantidad de tokens entrantes (en unidades básicas del token)

min_out

coins

Cantidad mínima de tokens recibidos (en unidades básicas del token)

has_ref

uint1

Si hay referencia

ref_bodycell

cell

Celda con datos

Notas:

  • el intercambio fallará si un usuario debe recibir menos de min_out de tokens como resultado

ref_bodycell body

Nombre
Tipo
Descripción

from_real_user

dirección

Quién inicializó el intercambio

ref_address

dirección

Dirección de referidos; presente solo si has_ref es 1

Mensajes salientes

Envía un mensaje con una cantidad de los otros tokens a recibir por un usuario como resultado del intercambio al router, que inicia pay_to operación

Además, puede enviar un mensaje con las comisiones de referido al router, que inicia pay_to operación a ref_address

provide_lp (0xfcf9e58f)

Proporciona liquidez al pool. Un usuario debe enviar una cantidad de ambos tokens para recibir tokens LP y agregar nueva liquidez a un pool. Este mensaje se enruta a la cuenta del pool de liquidez con add_liquidity código de operación.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

owner_addr

dirección

Dirección del usuario

min_lp_out

coins

Cantidad mínima de tokens de liquidez recibidos (en unidades básicas del token)

amount0

coins

Cantidad del primer token Jetton (en unidades básicas del token)

amount1

coins

Cantidad del segundo token Jetton (en unidades básicas del token)

Mensajes salientes

Envía un mensaje a la cuenta del pool de liquidez con add_liquidity código de operación.

reset_gas (0x42a0fb43)

Actualiza la cantidad de $TON (en nanoTons) en el pool a REQUIRED_TON_RESERVE (10000000) del pool. La cantidad restante de $TON se enviará de vuelta al router.

TL-B

Cuerpo del mensaje

Ninguno

Mensajes salientes

Envía un mensaje vacío de vuelta al router con el $TON restante

collect_fees (0x1fcb7d3d)

Cobrar las comisiones del protocolo, que se enviarán a protocol_fee_address. Un usuario que inicia esta operación recibe una recompensa igual a 1/1000 de la cantidad cobrada de ambos tokens.

TL-B

Cuerpo del mensaje

Ninguno

Mensajes salientes

Envía un mensaje con las comisiones cobradas (menos la recompensa) a protocol_fee_address

Envía un mensaje con una cantidad de tokens que se entregará a un usuario como recompensa (igual a las comisiones cobradas divididas entre 1000) al router, que inicia pay_to operación

set_fees (0x355423e5)

Establece nuevos valores de comisiones, incluidas las comisiones del pool de liquidez, las comisiones del protocolo y las comisiones del referidor, así como una dirección para recibir las comisiones del protocolo cobradas.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

new_lp_fee

uint8

Nuevo ratio de comisión del pool de liquidez (multiplicado por FEE_DIVIDER)

new_protocol_fee

uint8

Nuevo ratio de comisión del protocolo (multiplicado por FEE_DIVIDER)

new_ref_fee

uint8

Nuevo ratio de comisión del referidor (multiplicado por FEE_DIVIDER)

new_protocol_fee_address

dirección

Dirección para recibir las comisiones del protocolo

Notas:

  • la proporción de la comisión es el valor de la comisión dividido por FEE_DIVIDER (10000); así que para fijar una comisión del 1% el valor debe ser 100

  • las comisiones deben estar entre MIN_FEE (0) y MAX_FEE (100)

Mensajes salientes

Ninguno


Manejadores de mensajes internos de la cuenta LP

Gestiona mensajes de una cuenta LP.

Tabla de operaciones

Nombre
Valor
Descripción

cb_add_liquidity

0x56dfeb8a

Enviado por la cuenta LP del usuario después de agregar liquidez

cb_refund_me

0x89446a42

Enviado por la cuenta LP del usuario después de agregar liquidez

cb_add_liquidity (0x56dfeb8a)

Añade nueva liquidez al pool. Enviado por la cuenta lp del usuario después de que un usuario envíe una cantidad apropiada (mayor que 1000) de ambos tokens Jetton. La liquidez añadida resultante debe ser mayor que min_lp_out para que la operación tenga éxito.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

tot_am0

coins

Cantidad del primer token Jetton (en unidades básicas del token)

tot_am1

coins

Cantidad del segundo token Jetton (en unidades básicas del token)

user_address

dirección

Dirección del usuario

min_lp_out

coins

Cantidad mínima de tokens de liquidez recibidos (en unidades básicas del token)

Notas:

  • la adición de liquidez fallará si un usuario debe recibir menos de min_lp_out tokens LP como resultado

  • no se puede agregar liquidez si el suministro de cualquiera de los tokens llega a ser mayor que MAX_COINS (2^120 - 1)

Mensajes salientes

Envía un mensaje con internal_transfer código de operación (0x178d4519) a la wallet LP de user_address con tokens de liquidez acuñados; en la adición inicial de liquidez los tokens se acuñan a addr_none

cb_refund_me (0x89446a42)

Enviado por la cuenta LP del usuario después de que un usuario inicia refund_me operación para cancelar la adición de nueva liquidez. La cantidad de tokens almacenados previamente se enviará de vuelta al usuario.

TL-B

Cuerpo del mensaje

Nombre
Tipo
Descripción

tot_am0

coins

Cantidad del primer token Jetton (en unidades básicas del token)

tot_am1

coins

Cantidad del segundo token Jetton (en unidades básicas del token)

user_address

dirección

Dirección del usuario

Mensajes salientes

Envía un mensaje con tot_am0 del primer token y tot_am1 del segundo token al router, que inicia pay_to operación


Manejadores de mensajes del usuario

Gestiona mensajes directos de un usuario.

Tabla de operaciones

Nombre
Valor
Descripción

collect_fees

0x1fcb7d3d

Llamado por cualquiera; cobra comisiones; el llamador recibe una recompensa

collect_fees (0x1fcb7d3d)

Cobrar las comisiones del protocolo, que se enviarán a protocol_fee_address. Un usuario que inicia esta operación recibe una recompensa igual a 1/1000 de la cantidad cobrada de ambos tokens.

TL-B

Cuerpo del mensaje

Ninguno

Mensajes salientes

Envía un mensaje con las comisiones cobradas (menos la recompensa) a protocol_fee_address

Envía un mensaje con una cantidad de tokens que se entregará a un usuario como recompensa (igual a las comisiones cobradas divididas entre 1000) al router, que inicia pay_to operación


Constantes

Nombre
Valor
Descripción

WORKCHAIN

0

Id de workchain

REQUIRED_TON_RESERVE

10000000

Cantidad de $TON (en nanoTons) que se dejará en el contrato del pool como gas

REQUIRED_MIN_LIQUIDITY

1000

Cantidad mínima de liquidez requerida

REQUIRED_MIN_COLLECT_FEES

1000000

Cantidad mínima de tokens (en unidades básicas del token) cobrados como comisiones

MAX_COINS

2^120 - 1

Cantidad máxima de tokens (en unidades básicas del token) almacenados como liquidez

PROVIDE_ADD_GAS_CONSUMPTION

10000000

Gas adicional (en nanoTONs) para proporcionar una wallet

FEE_DIVIDER

10000

Los valores de las comisiones se dividen por este valor

MIN_FEE

0

Comisión mínima permitida

MAX_FEE

100

Comisión máxima permitida


Última actualización