🔌 WASI-PAEBIRU ABI
A ABI (Application Binary Interface) define o contrato de baixo nível entre o host (nó PAEBIRU) e o guest (módulo WASM/Plasmídeo). Ela estende o padrão WASI para suportar as necessidades específicas de sistemas distribuídos soberanos.
1. Convenções de Memória
- Linear Memory: O guest e o host compartilham um buffer de memória linear.
- Opaque Handles: Referências a recursos complexos (canais de rede, instâncias de banco) são passadas como handles inteiros de 32 bits.
- Zero-Copy: Estruturas grandes são passadas via ponteiro e tamanho, evitando serialização pesada (Dogma 4).
2. Importações de Host (Host Imports)
Funções que o módulo WASM pode invocar:
#![allow(unused)]
fn main() {
// Exemplo de assinatura na Camada 9
extern "C" {
fn paebiru_send_message(target_ptr: *const u8, msg_ptr: *const u8, msg_len: usize) -> i32;
fn paebiru_get_causal_tick() -> u64;
fn paebiru_log_event(level: i32, msg_ptr: *const u8, msg_len: usize);
}
}
3. Exportações de Guest (Guest Exports)
Funções que o nó host invoca no plasmídeo:
paebiru_init(): Chamada ao carregar o plasmídeo.paebiru_process_message(sender_id, msg_id): Chamada para reagir a estímulos da malha.paebiru_shutdown(): Chamada antes de descarregar o módulo.
4. Tratamento de Erros
A ABI utiliza códigos de retorno inteiros:
0: Sucesso.< 0: Erros de sistema (ex:-1= Out of Memory,-2= Permission Denied).> 0: Erros específicos do domínio do plasmídeo.