mirror of
https://github.com/logos-blockchain/lez-programs.git
synced 2026-07-25 08:13:12 +00:00
136 lines
4.2 KiB
C
136 lines
4.2 KiB
C
#ifndef AMM_CLIENT_FFI_H
|
|
#define AMM_CLIENT_FFI_H
|
|
|
|
#pragma once
|
|
|
|
/* Generated by cbindgen. Do not edit. */
|
|
|
|
#include <stdarg.h>
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
/**
|
|
* Heap-allocated buffer of RISC0 instruction words, returned across the C
|
|
* boundary. Free with `amm_client_free_words`.
|
|
*/
|
|
typedef struct AmmWords {
|
|
uint32_t *ptr;
|
|
uintptr_t len;
|
|
bool ok;
|
|
} AmmWords;
|
|
|
|
/**
|
|
* C-ABI representation of `nssa_core::program::ProgramId` (an Image ID),
|
|
* which is itself defined as `[u32; 8]`. Declared as a concrete array here
|
|
* (rather than an alias through `nssa_core::program::ProgramId`) so
|
|
* cbindgen — which only inspects this crate's source, not its
|
|
* dependencies' — can emit a real typedef instead of an opaque,
|
|
* self-referential `ProgramId` in the generated header. Since both are
|
|
* plain type aliases to `[u32; 8]`, they remain interchangeable to rustc.
|
|
*/
|
|
typedef uint32_t ProgramId[8];
|
|
|
|
/**
|
|
* C-ABI mirror of `pool::PoolView`. u128 fields are little-endian bytes.
|
|
*/
|
|
typedef struct FfiPoolView {
|
|
uint8_t def_a[32];
|
|
uint8_t def_b[32];
|
|
uint8_t vault_a[32];
|
|
uint8_t vault_b[32];
|
|
uint8_t reserve_a[16];
|
|
uint8_t reserve_b[16];
|
|
uint8_t liquidity_supply[16];
|
|
uint32_t fees;
|
|
bool ok;
|
|
} FfiPoolView;
|
|
|
|
/**
|
|
* Builds the RISC0 instruction words for a `SwapExactInput`. `amount_in` and
|
|
* `min_out` are little-endian encoded `u128` values (`[u8; 16]`). The
|
|
* returned buffer must be freed with `amm_client_free_words`.
|
|
*
|
|
* # Safety
|
|
* `amount_in` and `min_out` must be valid, non-null pointers to readable
|
|
* memory of the indicated sizes.
|
|
*/
|
|
struct AmmWords amm_client_swap_words(const uint8_t (*amount_in)[16],
|
|
const uint8_t (*min_out)[16],
|
|
uint64_t deadline);
|
|
|
|
/**
|
|
* Frees a buffer previously returned by `amm_client_swap_words`.
|
|
*
|
|
* # Safety
|
|
* `w` must be a value previously returned by `amm_client_swap_words` that
|
|
* has not already been freed.
|
|
*/
|
|
void amm_client_free_words(struct AmmWords w);
|
|
|
|
/**
|
|
* Computes the `ProgramId` (Image ID) of a compiled guest ELF. Returns
|
|
* `false` on an invalid ELF, leaving `out` unwritten.
|
|
*
|
|
* # Safety
|
|
* `elf` must be valid for reads of `elf_len` bytes, and `out` must be a
|
|
* valid, non-null pointer to writable memory for a `ProgramId`.
|
|
*/
|
|
bool amm_client_program_id_from_elf(const uint8_t *elf, uintptr_t elf_len, ProgramId *out);
|
|
|
|
/**
|
|
* Fills `out` with the AMM config PDA.
|
|
*
|
|
* # Safety
|
|
* `amm` must be a valid, non-null pointer to a readable `ProgramId`, and
|
|
* `out` must be a valid, non-null pointer to writable memory.
|
|
*/
|
|
void amm_client_config_pda(const ProgramId *amm, uint8_t (*out)[32]);
|
|
|
|
/**
|
|
* Fills `out` with the pool PDA for the two definition ids.
|
|
*
|
|
* # Safety
|
|
* All pointer arguments must be valid, non-null, and point to readable (or,
|
|
* for `out`, writable) memory of the indicated sizes.
|
|
*/
|
|
void amm_client_pool_pda(const ProgramId *amm,
|
|
const uint8_t (*def_a)[32],
|
|
const uint8_t (*def_b)[32],
|
|
uint8_t (*out)[32]);
|
|
|
|
/**
|
|
* Fills `out` with the vault PDA for a pool + token definition.
|
|
*
|
|
* # Safety
|
|
* All pointer arguments must be valid, non-null, and point to readable (or,
|
|
* for `out`, writable) memory of the indicated sizes.
|
|
*/
|
|
void amm_client_vault_pda(const ProgramId *amm,
|
|
const uint8_t (*pool)[32],
|
|
const uint8_t (*def)[32],
|
|
uint8_t (*out)[32]);
|
|
|
|
/**
|
|
* Fills `out` with the TWAP oracle current-tick PDA for a pool.
|
|
*
|
|
* # Safety
|
|
* All pointer arguments must be valid, non-null, and point to readable (or,
|
|
* for `out`, writable) memory of the indicated sizes.
|
|
*/
|
|
void amm_client_current_tick_pda(const ProgramId *twap,
|
|
const uint8_t (*pool)[32],
|
|
uint8_t (*out)[32]);
|
|
|
|
/**
|
|
* Decodes a `PoolDefinition` account's raw bytes into `out`. Returns `false`
|
|
* on decode failure, leaving `out` unwritten.
|
|
*
|
|
* # Safety
|
|
* `bytes` must be valid for reads of `len` bytes, and `out` must be a
|
|
* valid, non-null pointer to writable memory for a `FfiPoolView`.
|
|
*/
|
|
bool amm_client_decode_pool(const uint8_t *bytes, uintptr_t len, struct FfiPoolView *out);
|
|
|
|
#endif /* AMM_CLIENT_FFI_H */
|