feat: Clean up a few errant host function signatures

This commit is contained in:
TimothyBanks
2026-08-11 12:03:39 -04:00
parent 97f32869df
commit 0749043d09
5 changed files with 122 additions and 61 deletions

View File

@@ -78,6 +78,17 @@ pub(crate) fn read_borrowed<'a>(
input.read(mem.data(caller))
}
/// Decode a guest `u32` argument — a keylet's sequence number or document id — from
/// its four little-endian bytes, carried on to the host as its `i32` bit pattern.
///
/// The ABI transports these as a 4-byte region rather than a wasm scalar (the guest
/// SDK passes `seq.to_le_bytes()`), so the region must be exactly four bytes;
/// `InvalidParams` otherwise, matching the C-ABI wrapper's `getDataUInt32`.
pub(crate) fn read_u32_arg(bytes: &[u8]) -> HostResult<i32> {
let arr: [u8; 4] = bytes.try_into().map_err(|_| HostError::InvalidParams)?;
Ok(i32::from_le_bytes(arr))
}
/// Service a call whose answer is bytes, written straight into the guest's output
/// region.
///

View File

@@ -1,4 +1,6 @@
use crate::abi::{charged, read_borrowed, write_buffered, write_into, write_mant_exp};
use crate::abi::{
charged, read_borrowed, read_u32_arg, write_buffered, write_into, write_mant_exp,
};
use crate::region::Region;
use crate::vm::VmState;
use wasmi::{Caller, Linker};
@@ -369,15 +371,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::CheckKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.check_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.check_keylet(account, seq, buf)
})
})
},
@@ -481,15 +487,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::EscrowKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.escrow_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.escrow_keylet(account, seq, buf)
})
})
},
@@ -529,15 +539,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::MptokenIssuanceKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let issuer = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.mptoken_issuance_keylet(issuer.read(data)?, seq, buf)
let issuer = issuer.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.mptoken_issuance_keylet(issuer, seq, buf)
})
})
},
@@ -569,15 +583,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::NftokenOfferKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.nftoken_offer_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.nftoken_offer_keylet(account, seq, buf)
})
})
},
@@ -588,15 +606,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::OfferKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.offer_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.offer_keylet(account, seq, buf)
})
})
},
@@ -607,15 +629,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
doc_id: i32,
doc_ptr: i32,
doc_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::OracleKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let doc_id = Region::new(doc_ptr, doc_len);
write_buffered(c, out, |host, data, buf| {
host.oracle_keylet(account.read(data)?, doc_id, buf)
let account = account.read(data)?;
let doc_id = read_u32_arg(doc_id.read(data)?)?;
host.oracle_keylet(account, doc_id, buf)
})
})
},
@@ -628,7 +654,8 @@ pub(crate) fn register_host_functions(
acc_len: i32,
dst_ptr: i32,
dst_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
@@ -636,11 +663,12 @@ pub(crate) fn register_host_functions(
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let destination = Region::new(dst_ptr, dst_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.paychannel_keylet(
account.read(data)?,
destination.read(data)?,
seq,
read_u32_arg(seq.read(data)?)?,
buf,
)
})
@@ -653,7 +681,8 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
@@ -663,8 +692,11 @@ pub(crate) fn register_host_functions(
|c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.permissioned_domain_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.permissioned_domain_keylet(account, seq, buf)
})
},
)
@@ -694,15 +726,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::TicketKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.ticket_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.ticket_keylet(account, seq, buf)
})
})
},
@@ -713,15 +749,19 @@ pub(crate) fn register_host_functions(
|mut caller: Caller<'_, VmState<'_>>,
acc_ptr: i32,
acc_len: i32,
seq: i32,
seq_ptr: i32,
seq_len: i32,
out_ptr: i32,
out_len: i32|
-> Result<i32, wasmi::Error> {
charged(&mut caller, HostFunctionSpec::VaultKeylet, |c| {
let out = Region::new(out_ptr, out_len);
let account = Region::new(acc_ptr, acc_len);
let seq = Region::new(seq_ptr, seq_len);
write_buffered(c, out, |host, data, buf| {
host.vault_keylet(account.read(data)?, seq, buf)
let account = account.read(data)?;
let seq = read_u32_arg(seq.read(data)?)?;
host.vault_keylet(account, seq, buf)
})
})
},

View File

@@ -156,8 +156,8 @@ fn call_for(op: HostFunctionSpec) -> Call {
),
HostFunctionSpec::CheckKeylet => (
import::CHECK_ID,
"(call $check_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $check_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::CredentialKeylet => (
import::CREDENTIAL_ID,
@@ -181,8 +181,8 @@ fn call_for(op: HostFunctionSpec) -> Call {
),
HostFunctionSpec::EscrowKeylet => (
import::ESCROW_ID,
"(call $escrow_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $escrow_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::TrustLineKeylet => (
import::TRUSTLINE_ID,
@@ -191,8 +191,8 @@ fn call_for(op: HostFunctionSpec) -> Call {
),
HostFunctionSpec::MptokenIssuanceKeylet => (
import::MPT_ISSUANCE_ID,
"(call $mpt_issuance_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $mpt_issuance_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::MptokenKeylet => (
import::MPTOKEN_ID,
@@ -201,28 +201,28 @@ fn call_for(op: HostFunctionSpec) -> Call {
),
HostFunctionSpec::NftokenOfferKeylet => (
import::NFT_OFFER_ID,
"(call $nft_offer_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $nft_offer_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::OfferKeylet => (
import::OFFER_ID,
"(call $offer_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $offer_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::OracleKeylet => (
import::ORACLE_ID,
"(call $oracle_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $oracle_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::PaychannelKeylet => (
import::PAYCHAN_ID,
"(call $paychan_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 20) (i32.const 5) (i32.const 40) (i32.const 20))",
7,
"(call $paychan_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 40) (i32.const 20))",
8,
),
HostFunctionSpec::PermissionedDomainKeylet => (
import::PERMISSIONED_DOMAIN_ID,
"(call $permissioned_domain_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $permissioned_domain_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::SignerListKeylet => (
import::SIGNERS_ID,
@@ -231,13 +231,13 @@ fn call_for(op: HostFunctionSpec) -> Call {
),
HostFunctionSpec::TicketKeylet => (
import::TICKET_ID,
"(call $ticket_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $ticket_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::VaultKeylet => (
import::VAULT_ID,
"(call $vault_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 32) (i32.const 32))",
5,
"(call $vault_id (i32.const 0) (i32.const 20) (i32.const 0) (i32.const 4) (i32.const 32) (i32.const 32))",
6,
),
HostFunctionSpec::Sha512Half => (
import::SHA512_HALF,

View File

@@ -425,7 +425,8 @@ fn check_id_reads_the_account_and_seq_and_writes_the_keylet() {
let wat = module(
&[import::CHECK_ID, ONE_PAGE],
"(call $check_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $check_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.check_keylets_asked.borrow(), vec![(account, 5)]);
@@ -536,7 +537,8 @@ fn escrow_id_reads_the_account_and_seq_and_writes_the_keylet() {
let wat = module(
&[import::ESCROW_ID, ONE_PAGE],
"(call $escrow_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $escrow_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.escrow_keylets_asked.borrow(), vec![(account, 5)]);
@@ -583,7 +585,8 @@ fn mpt_issuance_id_reads_the_issuer_and_seq() {
let wat = module(
&[import::MPT_ISSUANCE_ID, ONE_PAGE],
"(call $mpt_issuance_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $mpt_issuance_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.mpt_issuance_keylets_asked.borrow(), vec![(issuer, 5)]);
@@ -621,7 +624,8 @@ fn nft_offer_id_reads_the_account_and_seq() {
let wat = module(
&[import::NFT_OFFER_ID, ONE_PAGE],
"(call $nft_offer_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $nft_offer_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.nft_offer_keylets_asked.borrow(), vec![(account, 5)]);
@@ -637,7 +641,8 @@ fn offer_id_reads_the_account_and_seq() {
let wat = module(
&[import::OFFER_ID, ONE_PAGE],
"(call $offer_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $offer_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.offer_keylets_asked.borrow(), vec![(account, 5)]);
@@ -653,7 +658,8 @@ fn oracle_id_reads_the_account_and_doc_id() {
let wat = module(
&[import::ORACLE_ID, ONE_PAGE],
"(call $oracle_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $oracle_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.oracle_keylets_asked.borrow(), vec![(account, 5)]);
@@ -674,7 +680,8 @@ fn paychan_id_reads_both_accounts_and_the_seq() {
let wat = module(
&[import::PAYCHAN_ID, ONE_PAGE],
"(call $paychan_id (i32.const 0) (i32.const 20) (i32.const 32) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 24) (i32.const 5))
(call $paychan_id (i32.const 0) (i32.const 20) (i32.const 32) (i32.const 20) (i32.const 24) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(
@@ -696,7 +703,8 @@ fn permissioned_domain_id_reads_the_account_and_seq() {
let wat = module(
&[import::PERMISSIONED_DOMAIN_ID, ONE_PAGE],
"(call $permissioned_domain_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $permissioned_domain_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.domain_keylets_asked.borrow(), vec![(account, 5)]);
@@ -727,7 +735,8 @@ fn ticket_id_reads_the_account_and_seq() {
let wat = module(
&[import::TICKET_ID, ONE_PAGE],
"(call $ticket_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $ticket_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.ticket_keylets_asked.borrow(), vec![(account, 5)]);
@@ -742,7 +751,8 @@ fn vault_id_reads_the_account_and_seq() {
let wat = module(
&[import::VAULT_ID, ONE_PAGE],
"(call $vault_id (i32.const 0) (i32.const 20) (i32.const 5) (i32.const 64) (i32.const 64))",
"(i32.store (i32.const 20) (i32.const 5))
(call $vault_id (i32.const 0) (i32.const 20) (i32.const 20) (i32.const 4) (i32.const 64) (i32.const 64))",
);
assert_eq!(status(&wat, &host), 32, "the 32-byte keylet length");
assert_eq!(*host.vault_keylets_asked.borrow(), vec![(account, 5)]);

View File

@@ -1406,24 +1406,24 @@ pub mod import {
pub const CHECK_SIG: &str = r#"(import "host_lib" "check_sig" (func $check_sig (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const ACCOUNTROOT_ID: &str = r#"(import "host_lib" "accountroot_id" (func $accountroot_id (param i32 i32 i32 i32) (result i32)))"#;
pub const AMM_ID: &str = r#"(import "host_lib" "amm_id" (func $amm_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const CHECK_ID: &str = r#"(import "host_lib" "check_id" (func $check_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const CHECK_ID: &str = r#"(import "host_lib" "check_id" (func $check_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const CREDENTIAL_ID: &str = r#"(import "host_lib" "credential_id" (func $credential_id (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const DELEGATE_ID: &str = r#"(import "host_lib" "delegate_id" (func $delegate_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const DEPOSIT_PREAUTH_ID: &str = r#"(import "host_lib" "deposit_preauth_id" (func $deposit_preauth_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const DID_ID: &str =
r#"(import "host_lib" "did_id" (func $did_id (param i32 i32 i32 i32) (result i32)))"#;
pub const ESCROW_ID: &str = r#"(import "host_lib" "escrow_id" (func $escrow_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const ESCROW_ID: &str = r#"(import "host_lib" "escrow_id" (func $escrow_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const TRUSTLINE_ID: &str = r#"(import "host_lib" "trustline_id" (func $trustline_id (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const MPT_ISSUANCE_ID: &str = r#"(import "host_lib" "mpt_issuance_id" (func $mpt_issuance_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const MPT_ISSUANCE_ID: &str = r#"(import "host_lib" "mpt_issuance_id" (func $mpt_issuance_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const MPTOKEN_ID: &str = r#"(import "host_lib" "mptoken_id" (func $mptoken_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const NFT_OFFER_ID: &str = r#"(import "host_lib" "nft_offer_id" (func $nft_offer_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const OFFER_ID: &str = r#"(import "host_lib" "offer_id" (func $offer_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const ORACLE_ID: &str = r#"(import "host_lib" "oracle_id" (func $oracle_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const PAYCHAN_ID: &str = r#"(import "host_lib" "paychan_id" (func $paychan_id (param i32 i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const PERMISSIONED_DOMAIN_ID: &str = r#"(import "host_lib" "permissioned_domain_id" (func $permissioned_domain_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const NFT_OFFER_ID: &str = r#"(import "host_lib" "nft_offer_id" (func $nft_offer_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const OFFER_ID: &str = r#"(import "host_lib" "offer_id" (func $offer_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const ORACLE_ID: &str = r#"(import "host_lib" "oracle_id" (func $oracle_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const PAYCHAN_ID: &str = r#"(import "host_lib" "paychan_id" (func $paychan_id (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const PERMISSIONED_DOMAIN_ID: &str = r#"(import "host_lib" "permissioned_domain_id" (func $permissioned_domain_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const SIGNERS_ID: &str = r#"(import "host_lib" "signers_id" (func $signers_id (param i32 i32 i32 i32) (result i32)))"#;
pub const TICKET_ID: &str = r#"(import "host_lib" "ticket_id" (func $ticket_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const VAULT_ID: &str = r#"(import "host_lib" "vault_id" (func $vault_id (param i32 i32 i32 i32 i32) (result i32)))"#;
pub const TICKET_ID: &str = r#"(import "host_lib" "ticket_id" (func $ticket_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const VAULT_ID: &str = r#"(import "host_lib" "vault_id" (func $vault_id (param i32 i32 i32 i32 i32 i32) (result i32)))"#;
pub const SHA512_HALF: &str = r#"(import "host_lib" "sha512_half" (func $sha512_half (param i32 i32 i32 i32) (result i32)))"#;
pub const TRACE: &str =
r#"(import "host_lib" "trace" (func $trace (param i32 i32 i32 i32 i32) (result i32)))"#;