From 0d810affb057f3cfb5fb72121af562ed04caad99 Mon Sep 17 00:00:00 2001 From: Carl Niklas Rydberg Date: Sat, 17 Jan 2026 12:45:13 +0100 Subject: [PATCH] Add ASL index state API stubs --- include/amduat/asl/store.h | 35 ++++++++++++++++++++++ src/near_core/asl/store.c | 59 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/include/amduat/asl/store.h b/include/amduat/asl/store.h index fcba0e4..0125c8f 100644 --- a/include/amduat/asl/store.h +++ b/include/amduat/asl/store.h @@ -25,6 +25,14 @@ typedef enum { AMDUAT_ASL_STORE_ERR_IO = 4 } amduat_asl_store_error_t; +typedef uint64_t amduat_asl_snapshot_id_t; +typedef uint64_t amduat_asl_log_position_t; + +typedef struct { + amduat_asl_snapshot_id_t snapshot_id; + amduat_asl_log_position_t log_position; +} amduat_asl_index_state_t; + typedef struct { amduat_asl_store_error_t (*put)(void *ctx, amduat_artifact_t artifact, @@ -32,6 +40,15 @@ typedef struct { amduat_asl_store_error_t (*get)(void *ctx, amduat_reference_t ref, amduat_artifact_t *out_artifact); + amduat_asl_store_error_t (*put_indexed)(void *ctx, + amduat_artifact_t artifact, + amduat_reference_t *out_ref, + amduat_asl_index_state_t *out_state); + amduat_asl_store_error_t (*get_indexed)(void *ctx, + amduat_reference_t ref, + amduat_asl_index_state_t state, + amduat_artifact_t *out_artifact); + bool (*current_state)(void *ctx, amduat_asl_index_state_t *out_state); amduat_asl_store_error_t (*validate_config)( void *ctx, amduat_asl_store_config_t config); @@ -43,6 +60,9 @@ static inline void amduat_asl_store_ops_init(amduat_asl_store_ops_t *ops) { } ops->put = NULL; ops->get = NULL; + ops->put_indexed = NULL; + ops->get_indexed = NULL; + ops->current_state = NULL; ops->validate_config = NULL; } @@ -65,6 +85,21 @@ amduat_asl_store_error_t amduat_asl_store_get(amduat_asl_store_t *store, amduat_reference_t ref, amduat_artifact_t *out_artifact); +amduat_asl_store_error_t amduat_asl_store_put_indexed( + amduat_asl_store_t *store, + amduat_artifact_t artifact, + amduat_reference_t *out_ref, + amduat_asl_index_state_t *out_state); + +amduat_asl_store_error_t amduat_asl_store_get_indexed( + amduat_asl_store_t *store, + amduat_reference_t ref, + amduat_asl_index_state_t state, + amduat_artifact_t *out_artifact); + +bool amduat_asl_index_current_state(amduat_asl_store_t *store, + amduat_asl_index_state_t *out_state); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/src/near_core/asl/store.c b/src/near_core/asl/store.c index 847988a..88868e0 100644 --- a/src/near_core/asl/store.c +++ b/src/near_core/asl/store.c @@ -60,3 +60,62 @@ amduat_asl_store_error_t amduat_asl_store_get(amduat_asl_store_t *store, } return store->ops.get(store->ctx, ref, out_artifact); } + +amduat_asl_store_error_t amduat_asl_store_put_indexed( + amduat_asl_store_t *store, + amduat_artifact_t artifact, + amduat_reference_t *out_ref, + amduat_asl_index_state_t *out_state) { + amduat_asl_store_error_t cfg_err; + amduat_asl_store_error_t store_err; + + if (store == NULL || store->ops.put_indexed == NULL) { + return AMDUAT_ASL_STORE_ERR_UNSUPPORTED; + } + cfg_err = amduat_asl_store_validate_config(store); + if (cfg_err != AMDUAT_ASL_STORE_OK) { + return cfg_err; + } + store_err = store->ops.put_indexed(store->ctx, artifact, out_ref, out_state); + if (store_err != AMDUAT_ASL_STORE_OK) { + return store_err; + } + if (out_ref != NULL && out_ref->hash_id != store->config.hash_id) { + return AMDUAT_ASL_STORE_ERR_INTEGRITY; + } + return AMDUAT_ASL_STORE_OK; +} + +amduat_asl_store_error_t amduat_asl_store_get_indexed( + amduat_asl_store_t *store, + amduat_reference_t ref, + amduat_asl_index_state_t state, + amduat_artifact_t *out_artifact) { + amduat_asl_store_error_t cfg_err; + + if (store == NULL || store->ops.get_indexed == NULL) { + return AMDUAT_ASL_STORE_ERR_UNSUPPORTED; + } + if (ref.hash_id != store->config.hash_id) { + return AMDUAT_ASL_STORE_ERR_UNSUPPORTED; + } + cfg_err = amduat_asl_store_validate_config(store); + if (cfg_err != AMDUAT_ASL_STORE_OK) { + return cfg_err; + } + return store->ops.get_indexed(store->ctx, ref, state, out_artifact); +} + +bool amduat_asl_index_current_state(amduat_asl_store_t *store, + amduat_asl_index_state_t *out_state) { + amduat_asl_store_error_t cfg_err; + + if (store == NULL || store->ops.current_state == NULL) { + return false; + } + cfg_err = amduat_asl_store_validate_config(store); + if (cfg_err != AMDUAT_ASL_STORE_OK) { + return false; + } + return store->ops.current_state(store->ctx, out_state); +}