Trait soroban_env_common::Env
source · pub trait Env: EnvBase {
Show 140 methods
// Required methods
fn log_from_linear_memory(
&self,
msg_pos: U32Val,
msg_len: U32Val,
vals_pos: U32Val,
vals_len: U32Val
) -> Result<Void, Self::Error>;
fn get_invoking_contract(&self) -> Result<AddressObject, Self::Error>;
fn obj_cmp(&self, a: Val, b: Val) -> Result<i64, Self::Error>;
fn contract_event(
&self,
topics: VecObject,
data: Val
) -> Result<Void, Self::Error>;
fn get_ledger_version(&self) -> Result<U32Val, Self::Error>;
fn get_ledger_sequence(&self) -> Result<U32Val, Self::Error>;
fn get_ledger_timestamp(&self) -> Result<U64Val, Self::Error>;
fn get_current_call_stack(&self) -> Result<VecObject, Self::Error>;
fn fail_with_error(&self, error: Error) -> Result<Void, Self::Error>;
fn get_ledger_network_id(&self) -> Result<BytesObject, Self::Error>;
fn get_current_contract_address(&self) -> Result<AddressObject, Self::Error>;
fn obj_from_u64(&self, v: u64) -> Result<U64Object, Self::Error>;
fn obj_to_u64(&self, obj: U64Object) -> Result<u64, Self::Error>;
fn obj_from_i64(&self, v: i64) -> Result<I64Object, Self::Error>;
fn obj_to_i64(&self, obj: I64Object) -> Result<i64, Self::Error>;
fn obj_from_u128_pieces(
&self,
hi: u64,
lo: u64
) -> Result<U128Object, Self::Error>;
fn obj_to_u128_lo64(&self, obj: U128Object) -> Result<u64, Self::Error>;
fn obj_to_u128_hi64(&self, obj: U128Object) -> Result<u64, Self::Error>;
fn obj_from_i128_pieces(
&self,
hi: i64,
lo: u64
) -> Result<I128Object, Self::Error>;
fn obj_to_i128_lo64(&self, obj: I128Object) -> Result<u64, Self::Error>;
fn obj_to_i128_hi64(&self, obj: I128Object) -> Result<i64, Self::Error>;
fn obj_from_u256_pieces(
&self,
hi_hi: u64,
hi_lo: u64,
lo_hi: u64,
lo_lo: u64
) -> Result<U256Object, Self::Error>;
fn u256_val_from_be_bytes(
&self,
bytes: BytesObject
) -> Result<U256Val, Self::Error>;
fn u256_val_to_be_bytes(
&self,
val: U256Val
) -> Result<BytesObject, Self::Error>;
fn obj_to_u256_hi_hi(&self, obj: U256Object) -> Result<u64, Self::Error>;
fn obj_to_u256_hi_lo(&self, obj: U256Object) -> Result<u64, Self::Error>;
fn obj_to_u256_lo_hi(&self, obj: U256Object) -> Result<u64, Self::Error>;
fn obj_to_u256_lo_lo(&self, obj: U256Object) -> Result<u64, Self::Error>;
fn obj_from_i256_pieces(
&self,
hi_hi: i64,
hi_lo: u64,
lo_hi: u64,
lo_lo: u64
) -> Result<I256Object, Self::Error>;
fn i256_val_from_be_bytes(
&self,
bytes: BytesObject
) -> Result<I256Val, Self::Error>;
fn i256_val_to_be_bytes(
&self,
val: I256Val
) -> Result<BytesObject, Self::Error>;
fn obj_to_i256_hi_hi(&self, obj: I256Object) -> Result<i64, Self::Error>;
fn obj_to_i256_hi_lo(&self, obj: I256Object) -> Result<u64, Self::Error>;
fn obj_to_i256_lo_hi(&self, obj: I256Object) -> Result<u64, Self::Error>;
fn obj_to_i256_lo_lo(&self, obj: I256Object) -> Result<u64, Self::Error>;
fn u256_add(
&self,
lhs: U256Val,
rhs: U256Val
) -> Result<U256Val, Self::Error>;
fn u256_sub(
&self,
lhs: U256Val,
rhs: U256Val
) -> Result<U256Val, Self::Error>;
fn u256_mul(
&self,
lhs: U256Val,
rhs: U256Val
) -> Result<U256Val, Self::Error>;
fn u256_div(
&self,
lhs: U256Val,
rhs: U256Val
) -> Result<U256Val, Self::Error>;
fn u256_pow(
&self,
lhs: U256Val,
rhs: U32Val
) -> Result<U256Val, Self::Error>;
fn u256_shl(
&self,
lhs: U256Val,
rhs: U32Val
) -> Result<U256Val, Self::Error>;
fn u256_shr(
&self,
lhs: U256Val,
rhs: U32Val
) -> Result<U256Val, Self::Error>;
fn i256_add(
&self,
lhs: I256Val,
rhs: I256Val
) -> Result<I256Val, Self::Error>;
fn i256_sub(
&self,
lhs: I256Val,
rhs: I256Val
) -> Result<I256Val, Self::Error>;
fn i256_mul(
&self,
lhs: I256Val,
rhs: I256Val
) -> Result<I256Val, Self::Error>;
fn i256_div(
&self,
lhs: I256Val,
rhs: I256Val
) -> Result<I256Val, Self::Error>;
fn i256_pow(
&self,
lhs: I256Val,
rhs: U32Val
) -> Result<I256Val, Self::Error>;
fn i256_shl(
&self,
lhs: I256Val,
rhs: U32Val
) -> Result<I256Val, Self::Error>;
fn i256_shr(
&self,
lhs: I256Val,
rhs: U32Val
) -> Result<I256Val, Self::Error>;
fn timepoint_obj_from_u64(
&self,
v: u64
) -> Result<TimepointObject, Self::Error>;
fn timepoint_obj_to_u64(
&self,
obj: TimepointObject
) -> Result<u64, Self::Error>;
fn duration_obj_from_u64(
&self,
v: u64
) -> Result<DurationObject, Self::Error>;
fn duration_obj_to_u64(
&self,
obj: DurationObject
) -> Result<u64, Self::Error>;
fn map_new(&self) -> Result<MapObject, Self::Error>;
fn map_put(
&self,
m: MapObject,
k: Val,
v: Val
) -> Result<MapObject, Self::Error>;
fn map_get(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>;
fn map_del(&self, m: MapObject, k: Val) -> Result<MapObject, Self::Error>;
fn map_len(&self, m: MapObject) -> Result<U32Val, Self::Error>;
fn map_has(&self, m: MapObject, k: Val) -> Result<Bool, Self::Error>;
fn map_prev_key(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>;
fn map_next_key(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>;
fn map_min_key(&self, m: MapObject) -> Result<Val, Self::Error>;
fn map_max_key(&self, m: MapObject) -> Result<Val, Self::Error>;
fn map_keys(&self, m: MapObject) -> Result<VecObject, Self::Error>;
fn map_values(&self, m: MapObject) -> Result<VecObject, Self::Error>;
fn map_new_from_linear_memory(
&self,
keys_pos: U32Val,
vals_pos: U32Val,
len: U32Val
) -> Result<MapObject, Self::Error>;
fn map_unpack_to_linear_memory(
&self,
map: MapObject,
keys_pos: U32Val,
vals_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>;
fn vec_new(&self, c: Val) -> Result<VecObject, Self::Error>;
fn vec_put(
&self,
v: VecObject,
i: U32Val,
x: Val
) -> Result<VecObject, Self::Error>;
fn vec_get(&self, v: VecObject, i: U32Val) -> Result<Val, Self::Error>;
fn vec_del(&self, v: VecObject, i: U32Val) -> Result<VecObject, Self::Error>;
fn vec_len(&self, v: VecObject) -> Result<U32Val, Self::Error>;
fn vec_push_front(
&self,
v: VecObject,
x: Val
) -> Result<VecObject, Self::Error>;
fn vec_pop_front(&self, v: VecObject) -> Result<VecObject, Self::Error>;
fn vec_push_back(
&self,
v: VecObject,
x: Val
) -> Result<VecObject, Self::Error>;
fn vec_pop_back(&self, v: VecObject) -> Result<VecObject, Self::Error>;
fn vec_front(&self, v: VecObject) -> Result<Val, Self::Error>;
fn vec_back(&self, v: VecObject) -> Result<Val, Self::Error>;
fn vec_insert(
&self,
v: VecObject,
i: U32Val,
x: Val
) -> Result<VecObject, Self::Error>;
fn vec_append(
&self,
v1: VecObject,
v2: VecObject
) -> Result<VecObject, Self::Error>;
fn vec_slice(
&self,
v: VecObject,
start: U32Val,
end: U32Val
) -> Result<VecObject, Self::Error>;
fn vec_first_index_of(
&self,
v: VecObject,
x: Val
) -> Result<Val, Self::Error>;
fn vec_last_index_of(
&self,
v: VecObject,
x: Val
) -> Result<Val, Self::Error>;
fn vec_binary_search(
&self,
v: VecObject,
x: Val
) -> Result<u64, Self::Error>;
fn vec_new_from_linear_memory(
&self,
vals_pos: U32Val,
len: U32Val
) -> Result<VecObject, Self::Error>;
fn vec_unpack_to_linear_memory(
&self,
vec: VecObject,
vals_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>;
fn put_contract_data(
&self,
k: Val,
v: Val,
t: StorageType,
f: Val
) -> Result<Void, Self::Error>;
fn has_contract_data(
&self,
k: Val,
t: StorageType
) -> Result<Bool, Self::Error>;
fn get_contract_data(
&self,
k: Val,
t: StorageType
) -> Result<Val, Self::Error>;
fn del_contract_data(
&self,
k: Val,
t: StorageType
) -> Result<Void, Self::Error>;
fn create_contract(
&self,
deployer: AddressObject,
wasm_hash: BytesObject,
salt: BytesObject
) -> Result<AddressObject, Self::Error>;
fn create_asset_contract(
&self,
serialized_asset: BytesObject
) -> Result<AddressObject, Self::Error>;
fn upload_wasm(&self, wasm: BytesObject) -> Result<BytesObject, Self::Error>;
fn update_current_contract_wasm(
&self,
hash: BytesObject
) -> Result<Void, Self::Error>;
fn bump_contract_data(
&self,
k: Val,
t: StorageType,
min: U32Val
) -> Result<Void, Self::Error>;
fn bump_current_contract_instance_and_code(
&self,
min: U32Val
) -> Result<Void, Self::Error>;
fn get_contract_id(
&self,
deployer: AddressObject,
salt: BytesObject
) -> Result<AddressObject, Self::Error>;
fn get_asset_contract_id(
&self,
serialized_asset: BytesObject
) -> Result<AddressObject, Self::Error>;
fn call(
&self,
contract: AddressObject,
func: Symbol,
args: VecObject
) -> Result<Val, Self::Error>;
fn try_call(
&self,
contract: AddressObject,
func: Symbol,
args: VecObject
) -> Result<Val, Self::Error>;
fn serialize_to_bytes(&self, v: Val) -> Result<BytesObject, Self::Error>;
fn deserialize_from_bytes(&self, b: BytesObject) -> Result<Val, Self::Error>;
fn bytes_copy_to_linear_memory(
&self,
b: BytesObject,
b_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>;
fn bytes_copy_from_linear_memory(
&self,
b: BytesObject,
b_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<BytesObject, Self::Error>;
fn bytes_new_from_linear_memory(
&self,
lm_pos: U32Val,
len: U32Val
) -> Result<BytesObject, Self::Error>;
fn bytes_new(&self) -> Result<BytesObject, Self::Error>;
fn bytes_put(
&self,
b: BytesObject,
i: U32Val,
u: U32Val
) -> Result<BytesObject, Self::Error>;
fn bytes_get(
&self,
b: BytesObject,
i: U32Val
) -> Result<U32Val, Self::Error>;
fn bytes_del(
&self,
b: BytesObject,
i: U32Val
) -> Result<BytesObject, Self::Error>;
fn bytes_len(&self, b: BytesObject) -> Result<U32Val, Self::Error>;
fn bytes_push(
&self,
b: BytesObject,
u: U32Val
) -> Result<BytesObject, Self::Error>;
fn bytes_pop(&self, b: BytesObject) -> Result<BytesObject, Self::Error>;
fn bytes_front(&self, b: BytesObject) -> Result<U32Val, Self::Error>;
fn bytes_back(&self, b: BytesObject) -> Result<U32Val, Self::Error>;
fn bytes_insert(
&self,
b: BytesObject,
i: U32Val,
u: U32Val
) -> Result<BytesObject, Self::Error>;
fn bytes_append(
&self,
b1: BytesObject,
b2: BytesObject
) -> Result<BytesObject, Self::Error>;
fn bytes_slice(
&self,
b: BytesObject,
start: U32Val,
end: U32Val
) -> Result<BytesObject, Self::Error>;
fn string_copy_to_linear_memory(
&self,
s: StringObject,
s_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>;
fn symbol_copy_to_linear_memory(
&self,
s: SymbolObject,
s_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>;
fn string_new_from_linear_memory(
&self,
lm_pos: U32Val,
len: U32Val
) -> Result<StringObject, Self::Error>;
fn symbol_new_from_linear_memory(
&self,
lm_pos: U32Val,
len: U32Val
) -> Result<SymbolObject, Self::Error>;
fn string_len(&self, s: StringObject) -> Result<U32Val, Self::Error>;
fn symbol_len(&self, s: SymbolObject) -> Result<U32Val, Self::Error>;
fn symbol_index_in_linear_memory(
&self,
sym: Symbol,
slices_pos: U32Val,
len: U32Val
) -> Result<U32Val, Self::Error>;
fn compute_hash_sha256(
&self,
x: BytesObject
) -> Result<BytesObject, Self::Error>;
fn verify_sig_ed25519(
&self,
k: BytesObject,
x: BytesObject,
s: BytesObject
) -> Result<Void, Self::Error>;
fn compute_hash_keccak256(
&self,
x: BytesObject
) -> Result<BytesObject, Self::Error>;
fn recover_key_ecdsa_secp256k1(
&self,
msg_digest: BytesObject,
signature: BytesObject,
recovery_id: U32Val
) -> Result<BytesObject, Self::Error>;
fn require_auth_for_args(
&self,
address: AddressObject,
args: VecObject
) -> Result<Void, Self::Error>;
fn require_auth(&self, address: AddressObject) -> Result<Void, Self::Error>;
fn account_public_key_to_address(
&self,
pk_bytes: BytesObject
) -> Result<AddressObject, Self::Error>;
fn contract_id_to_address(
&self,
contract_id_bytes: BytesObject
) -> Result<AddressObject, Self::Error>;
fn address_to_account_public_key(
&self,
address: AddressObject
) -> Result<Val, Self::Error>;
fn address_to_contract_id(
&self,
address: AddressObject
) -> Result<Val, Self::Error>;
fn authorize_as_curr_contract(
&self,
auth_entires: VecObject
) -> Result<Void, Self::Error>;
fn dummy0(&self) -> Result<Val, Self::Error>;
fn prng_reseed(&self, seed: BytesObject) -> Result<Void, Self::Error>;
fn prng_bytes_new(&self, length: U32Val) -> Result<BytesObject, Self::Error>;
fn prng_u64_in_inclusive_range(
&self,
lo: u64,
hi: u64
) -> Result<u64, Self::Error>;
fn prng_vec_shuffle(&self, vec: VecObject) -> Result<VecObject, Self::Error>;
}Expand description
Required Methods§
sourcefn log_from_linear_memory(
&self,
msg_pos: U32Val,
msg_len: U32Val,
vals_pos: U32Val,
vals_len: U32Val
) -> Result<Void, Self::Error>
fn log_from_linear_memory( &self, msg_pos: U32Val, msg_len: U32Val, vals_pos: U32Val, vals_len: U32Val ) -> Result<Void, Self::Error>
Emit a diagnostic event containing a message and sequence of Vals.
sourcefn get_invoking_contract(&self) -> Result<AddressObject, Self::Error>
fn get_invoking_contract(&self) -> Result<AddressObject, Self::Error>
Get the address object of the contract which invoked the running contract. Traps if the running contract was not invoked by a contract.
sourcefn obj_cmp(&self, a: Val, b: Val) -> Result<i64, Self::Error>
fn obj_cmp(&self, a: Val, b: Val) -> Result<i64, Self::Error>
Compare two objects, or at least one object to a non-object, structurally. Returns -1 if a<b, 1 if a>b, or 0 if a==b.
sourcefn contract_event(
&self,
topics: VecObject,
data: Val
) -> Result<Void, Self::Error>
fn contract_event( &self, topics: VecObject, data: Val ) -> Result<Void, Self::Error>
Records a contract event. topics is expected to be a SCVec with length <= 4 that cannot contain Vec, Map, or Bytes with length > 32.
sourcefn get_ledger_version(&self) -> Result<U32Val, Self::Error>
fn get_ledger_version(&self) -> Result<U32Val, Self::Error>
Return the protocol version of the current ledger as a u32.
sourcefn get_ledger_sequence(&self) -> Result<U32Val, Self::Error>
fn get_ledger_sequence(&self) -> Result<U32Val, Self::Error>
Return the sequence number of the current ledger as a u32.
sourcefn get_ledger_timestamp(&self) -> Result<U64Val, Self::Error>
fn get_ledger_timestamp(&self) -> Result<U64Val, Self::Error>
Return the timestamp number of the current ledger as a u64.
sourcefn get_current_call_stack(&self) -> Result<VecObject, Self::Error>
fn get_current_call_stack(&self) -> Result<VecObject, Self::Error>
Returns the full call stack from the first contract call to the current one as a vector of vectors, where the inside vector contains the contract id as Hash, and a function as a Symbol.
sourcefn fail_with_error(&self, error: Error) -> Result<Void, Self::Error>
fn fail_with_error(&self, error: Error) -> Result<Void, Self::Error>
Causes the currently executing contract to fail immediately with a provided error code, which must be of error-type ScErrorType::Contract. Does not actually return.
sourcefn get_ledger_network_id(&self) -> Result<BytesObject, Self::Error>
fn get_ledger_network_id(&self) -> Result<BytesObject, Self::Error>
Return the network id (sha256 hash of network passphrase) of the current ledger as Bytes. The value is always 32 bytes in length.
sourcefn get_current_contract_address(&self) -> Result<AddressObject, Self::Error>
fn get_current_contract_address(&self) -> Result<AddressObject, Self::Error>
Get the Address object for the current contract.
sourcefn obj_from_u64(&self, v: u64) -> Result<U64Object, Self::Error>
fn obj_from_u64(&self, v: u64) -> Result<U64Object, Self::Error>
Convert a u64 to an object containing a u64.
sourcefn obj_to_u64(&self, obj: U64Object) -> Result<u64, Self::Error>
fn obj_to_u64(&self, obj: U64Object) -> Result<u64, Self::Error>
Convert an object containing a u64 to a u64.
sourcefn obj_from_i64(&self, v: i64) -> Result<I64Object, Self::Error>
fn obj_from_i64(&self, v: i64) -> Result<I64Object, Self::Error>
Convert an i64 to an object containing an i64.
sourcefn obj_to_i64(&self, obj: I64Object) -> Result<i64, Self::Error>
fn obj_to_i64(&self, obj: I64Object) -> Result<i64, Self::Error>
Convert an object containing an i64 to an i64.
sourcefn obj_from_u128_pieces(
&self,
hi: u64,
lo: u64
) -> Result<U128Object, Self::Error>
fn obj_from_u128_pieces( &self, hi: u64, lo: u64 ) -> Result<U128Object, Self::Error>
Convert the high and low 64-bit words of a u128 to an object containing a u128.
sourcefn obj_to_u128_lo64(&self, obj: U128Object) -> Result<u64, Self::Error>
fn obj_to_u128_lo64(&self, obj: U128Object) -> Result<u64, Self::Error>
Extract the low 64 bits from an object containing a u128.
sourcefn obj_to_u128_hi64(&self, obj: U128Object) -> Result<u64, Self::Error>
fn obj_to_u128_hi64(&self, obj: U128Object) -> Result<u64, Self::Error>
Extract the high 64 bits from an object containing a u128.
sourcefn obj_from_i128_pieces(
&self,
hi: i64,
lo: u64
) -> Result<I128Object, Self::Error>
fn obj_from_i128_pieces( &self, hi: i64, lo: u64 ) -> Result<I128Object, Self::Error>
Convert the high and low 64-bit words of an i128 to an object containing an i128.
sourcefn obj_to_i128_lo64(&self, obj: I128Object) -> Result<u64, Self::Error>
fn obj_to_i128_lo64(&self, obj: I128Object) -> Result<u64, Self::Error>
Extract the low 64 bits from an object containing an i128.
sourcefn obj_to_i128_hi64(&self, obj: I128Object) -> Result<i64, Self::Error>
fn obj_to_i128_hi64(&self, obj: I128Object) -> Result<i64, Self::Error>
Extract the high 64 bits from an object containing an i128.
sourcefn obj_from_u256_pieces(
&self,
hi_hi: u64,
hi_lo: u64,
lo_hi: u64,
lo_lo: u64
) -> Result<U256Object, Self::Error>
fn obj_from_u256_pieces( &self, hi_hi: u64, hi_lo: u64, lo_hi: u64, lo_lo: u64 ) -> Result<U256Object, Self::Error>
Convert the four 64-bit words of a u256 (big-endian) to an object containing a u256.
sourcefn u256_val_from_be_bytes(
&self,
bytes: BytesObject
) -> Result<U256Val, Self::Error>
fn u256_val_from_be_bytes( &self, bytes: BytesObject ) -> Result<U256Val, Self::Error>
Create a U256 Val from its representation as a byte array in big endian.
sourcefn u256_val_to_be_bytes(&self, val: U256Val) -> Result<BytesObject, Self::Error>
fn u256_val_to_be_bytes(&self, val: U256Val) -> Result<BytesObject, Self::Error>
Return the memory representation of this U256 Val as a byte array in big endian byte order.
sourcefn obj_to_u256_hi_hi(&self, obj: U256Object) -> Result<u64, Self::Error>
fn obj_to_u256_hi_hi(&self, obj: U256Object) -> Result<u64, Self::Error>
Extract the highest 64-bits (bits 192-255) from an object containing a u256.
sourcefn obj_to_u256_hi_lo(&self, obj: U256Object) -> Result<u64, Self::Error>
fn obj_to_u256_hi_lo(&self, obj: U256Object) -> Result<u64, Self::Error>
Extract bits 128-191 from an object containing a u256.
sourcefn obj_to_u256_lo_hi(&self, obj: U256Object) -> Result<u64, Self::Error>
fn obj_to_u256_lo_hi(&self, obj: U256Object) -> Result<u64, Self::Error>
Extract bits 64-127 from an object containing a u256.
sourcefn obj_to_u256_lo_lo(&self, obj: U256Object) -> Result<u64, Self::Error>
fn obj_to_u256_lo_lo(&self, obj: U256Object) -> Result<u64, Self::Error>
Extract the lowest 64-bits (bits 0-63) from an object containing a u256.
sourcefn obj_from_i256_pieces(
&self,
hi_hi: i64,
hi_lo: u64,
lo_hi: u64,
lo_lo: u64
) -> Result<I256Object, Self::Error>
fn obj_from_i256_pieces( &self, hi_hi: i64, hi_lo: u64, lo_hi: u64, lo_lo: u64 ) -> Result<I256Object, Self::Error>
Convert the four 64-bit words of an i256 (big-endian) to an object containing an i256.
sourcefn i256_val_from_be_bytes(
&self,
bytes: BytesObject
) -> Result<I256Val, Self::Error>
fn i256_val_from_be_bytes( &self, bytes: BytesObject ) -> Result<I256Val, Self::Error>
Create a I256 Val from its representation as a byte array in big endian.
sourcefn i256_val_to_be_bytes(&self, val: I256Val) -> Result<BytesObject, Self::Error>
fn i256_val_to_be_bytes(&self, val: I256Val) -> Result<BytesObject, Self::Error>
Return the memory representation of this I256 Val as a byte array in big endian byte order.
sourcefn obj_to_i256_hi_hi(&self, obj: I256Object) -> Result<i64, Self::Error>
fn obj_to_i256_hi_hi(&self, obj: I256Object) -> Result<i64, Self::Error>
Extract the highest 64-bits (bits 192-255) from an object containing an i256.
sourcefn obj_to_i256_hi_lo(&self, obj: I256Object) -> Result<u64, Self::Error>
fn obj_to_i256_hi_lo(&self, obj: I256Object) -> Result<u64, Self::Error>
Extract bits 128-191 from an object containing an i256.
sourcefn obj_to_i256_lo_hi(&self, obj: I256Object) -> Result<u64, Self::Error>
fn obj_to_i256_lo_hi(&self, obj: I256Object) -> Result<u64, Self::Error>
Extract bits 64-127 from an object containing an i256.
sourcefn obj_to_i256_lo_lo(&self, obj: I256Object) -> Result<u64, Self::Error>
fn obj_to_i256_lo_lo(&self, obj: I256Object) -> Result<u64, Self::Error>
Extract the lowest 64-bits (bits 0-63) from an object containing an i256.
sourcefn u256_add(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
fn u256_add(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
Performs checked integer addition. Computes lhs + rhs, returning ScError if overflow occurred.
sourcefn u256_sub(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
fn u256_sub(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
Performs checked integer subtraction. Computes lhs - rhs, returning ScError if overflow occurred.
sourcefn u256_mul(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
fn u256_mul(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
Performs checked integer multiplication. Computes lhs * rhs, returning ScError if overflow occurred.
sourcefn u256_div(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
fn u256_div(&self, lhs: U256Val, rhs: U256Val) -> Result<U256Val, Self::Error>
Performs checked integer division. Computes lhs / rhs, returning ScError if rhs == 0 or overflow occurred.
sourcefn u256_pow(&self, lhs: U256Val, rhs: U32Val) -> Result<U256Val, Self::Error>
fn u256_pow(&self, lhs: U256Val, rhs: U32Val) -> Result<U256Val, Self::Error>
Performs checked exponentiation. Computes lhs.exp(rhs), returning ScError if overflow occurred.
sourcefn u256_shl(&self, lhs: U256Val, rhs: U32Val) -> Result<U256Val, Self::Error>
fn u256_shl(&self, lhs: U256Val, rhs: U32Val) -> Result<U256Val, Self::Error>
Performs checked shift left. Computes lhs << rhs, returning ScError if rhs is larger than or equal to the number of bits in lhs.
sourcefn u256_shr(&self, lhs: U256Val, rhs: U32Val) -> Result<U256Val, Self::Error>
fn u256_shr(&self, lhs: U256Val, rhs: U32Val) -> Result<U256Val, Self::Error>
Performs checked shift right. Computes lhs >> rhs, returning ScError if rhs is larger than or equal to the number of bits in lhs.
sourcefn i256_add(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
fn i256_add(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
Performs checked integer addition. Computes lhs + rhs, returning ScError if overflow occurred.
sourcefn i256_sub(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
fn i256_sub(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
Performs checked integer subtraction. Computes lhs - rhs, returning ScError if overflow occurred.
sourcefn i256_mul(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
fn i256_mul(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
Performs checked integer multiplication. Computes lhs * rhs, returning ScError if overflow occurred.
sourcefn i256_div(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
fn i256_div(&self, lhs: I256Val, rhs: I256Val) -> Result<I256Val, Self::Error>
Performs checked integer division. Computes lhs / rhs, returning ScError if rhs == 0 or overflow occurred.
sourcefn i256_pow(&self, lhs: I256Val, rhs: U32Val) -> Result<I256Val, Self::Error>
fn i256_pow(&self, lhs: I256Val, rhs: U32Val) -> Result<I256Val, Self::Error>
Performs checked exponentiation. Computes lhs.exp(rhs), returning ScError if overflow occurred.
sourcefn i256_shl(&self, lhs: I256Val, rhs: U32Val) -> Result<I256Val, Self::Error>
fn i256_shl(&self, lhs: I256Val, rhs: U32Val) -> Result<I256Val, Self::Error>
Performs checked shift left. Computes lhs << rhs, returning ScError if rhs is larger than or equal to the number of bits in lhs.
sourcefn i256_shr(&self, lhs: I256Val, rhs: U32Val) -> Result<I256Val, Self::Error>
fn i256_shr(&self, lhs: I256Val, rhs: U32Val) -> Result<I256Val, Self::Error>
Performs checked shift right. Computes lhs >> rhs, returning ScError if rhs is larger than or equal to the number of bits in lhs.
sourcefn timepoint_obj_from_u64(&self, v: u64) -> Result<TimepointObject, Self::Error>
fn timepoint_obj_from_u64(&self, v: u64) -> Result<TimepointObject, Self::Error>
Convert a u64 to a Timepoint object.
sourcefn timepoint_obj_to_u64(&self, obj: TimepointObject) -> Result<u64, Self::Error>
fn timepoint_obj_to_u64(&self, obj: TimepointObject) -> Result<u64, Self::Error>
Convert a Timepoint object to a u64.
sourcefn duration_obj_from_u64(&self, v: u64) -> Result<DurationObject, Self::Error>
fn duration_obj_from_u64(&self, v: u64) -> Result<DurationObject, Self::Error>
Convert a u64 to a Duration object.
sourcefn duration_obj_to_u64(&self, obj: DurationObject) -> Result<u64, Self::Error>
fn duration_obj_to_u64(&self, obj: DurationObject) -> Result<u64, Self::Error>
Convert a Duration object a u64.
sourcefn map_put(
&self,
m: MapObject,
k: Val,
v: Val
) -> Result<MapObject, Self::Error>
fn map_put( &self, m: MapObject, k: Val, v: Val ) -> Result<MapObject, Self::Error>
Insert a key/value mapping into an existing map, and return the map object handle. If the map already has a mapping for the given key, the previous value is overwritten.
sourcefn map_get(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>
fn map_get(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>
Get the value for a key from a map. Traps if key is not found.
sourcefn map_del(&self, m: MapObject, k: Val) -> Result<MapObject, Self::Error>
fn map_del(&self, m: MapObject, k: Val) -> Result<MapObject, Self::Error>
Remove a key/value mapping from a map if it exists, traps if doesn’t.
sourcefn map_has(&self, m: MapObject, k: Val) -> Result<Bool, Self::Error>
fn map_has(&self, m: MapObject, k: Val) -> Result<Bool, Self::Error>
Test for the presence of a key in a map. Returns Bool.
sourcefn map_prev_key(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>
fn map_prev_key(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>
Given a key, find the first key less than itself in the map’s sorted order. If such a key does not exist, return an ScError.
sourcefn map_next_key(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>
fn map_next_key(&self, m: MapObject, k: Val) -> Result<Val, Self::Error>
Given a key, find the first key greater than itself in the map’s sorted order. If such a key does not exist, return an ScError.
sourcefn map_min_key(&self, m: MapObject) -> Result<Val, Self::Error>
fn map_min_key(&self, m: MapObject) -> Result<Val, Self::Error>
Find the minimum key from a map. If the map is empty, return an ScError.
sourcefn map_max_key(&self, m: MapObject) -> Result<Val, Self::Error>
fn map_max_key(&self, m: MapObject) -> Result<Val, Self::Error>
Find the maximum key from a map. If the map is empty, return an ScError.
sourcefn map_keys(&self, m: MapObject) -> Result<VecObject, Self::Error>
fn map_keys(&self, m: MapObject) -> Result<VecObject, Self::Error>
Return a new vector containing all the keys in a map. The new vector is ordered in the original map’s key-sorted order.
sourcefn map_values(&self, m: MapObject) -> Result<VecObject, Self::Error>
fn map_values(&self, m: MapObject) -> Result<VecObject, Self::Error>
Return a new vector containing all the values in a map. The new vector is ordered in the original map’s key-sorted order.
sourcefn map_new_from_linear_memory(
&self,
keys_pos: U32Val,
vals_pos: U32Val,
len: U32Val
) -> Result<MapObject, Self::Error>
fn map_new_from_linear_memory( &self, keys_pos: U32Val, vals_pos: U32Val, len: U32Val ) -> Result<MapObject, Self::Error>
Return a new map initialized from a set of input slices given by linear-memory addresses and lengths.
sourcefn map_unpack_to_linear_memory(
&self,
map: MapObject,
keys_pos: U32Val,
vals_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>
fn map_unpack_to_linear_memory( &self, map: MapObject, keys_pos: U32Val, vals_pos: U32Val, len: U32Val ) -> Result<Void, Self::Error>
Copy the Val values of a map, as described by set of input keys, into an array at a given linear-memory address.
sourcefn vec_new(&self, c: Val) -> Result<VecObject, Self::Error>
fn vec_new(&self, c: Val) -> Result<VecObject, Self::Error>
Creates a new vector with an optional capacity hint c. If c is Void, no hint is assumed and the new vector is empty. Otherwise, c is parsed as a u32 that represents the initial capacity of the new vector.
sourcefn vec_put(
&self,
v: VecObject,
i: U32Val,
x: Val
) -> Result<VecObject, Self::Error>
fn vec_put( &self, v: VecObject, i: U32Val, x: Val ) -> Result<VecObject, Self::Error>
Update the value at index i in the vector. Return the new vector. Trap if the index is out of bounds.
sourcefn vec_get(&self, v: VecObject, i: U32Val) -> Result<Val, Self::Error>
fn vec_get(&self, v: VecObject, i: U32Val) -> Result<Val, Self::Error>
Returns the element at index i of the vector. Traps if the index is out of bound.
sourcefn vec_del(&self, v: VecObject, i: U32Val) -> Result<VecObject, Self::Error>
fn vec_del(&self, v: VecObject, i: U32Val) -> Result<VecObject, Self::Error>
Delete an element in a vector at index i, shifting all elements after it to the left. Return the new vector. Traps if the index is out of bound.
sourcefn vec_push_front(&self, v: VecObject, x: Val) -> Result<VecObject, Self::Error>
fn vec_push_front(&self, v: VecObject, x: Val) -> Result<VecObject, Self::Error>
Push a value to the front of a vector.
sourcefn vec_pop_front(&self, v: VecObject) -> Result<VecObject, Self::Error>
fn vec_pop_front(&self, v: VecObject) -> Result<VecObject, Self::Error>
Removes the first element from the vector and returns the new vector. Traps if original vector is empty.
sourcefn vec_push_back(&self, v: VecObject, x: Val) -> Result<VecObject, Self::Error>
fn vec_push_back(&self, v: VecObject, x: Val) -> Result<VecObject, Self::Error>
Appends an element to the back of the vector.
sourcefn vec_pop_back(&self, v: VecObject) -> Result<VecObject, Self::Error>
fn vec_pop_back(&self, v: VecObject) -> Result<VecObject, Self::Error>
Removes the last element from the vector and returns the new vector. Traps if original vector is empty.
sourcefn vec_front(&self, v: VecObject) -> Result<Val, Self::Error>
fn vec_front(&self, v: VecObject) -> Result<Val, Self::Error>
Return the first element in the vector. Traps if the vector is empty
sourcefn vec_back(&self, v: VecObject) -> Result<Val, Self::Error>
fn vec_back(&self, v: VecObject) -> Result<Val, Self::Error>
Return the last element in the vector. Traps if the vector is empty
sourcefn vec_insert(
&self,
v: VecObject,
i: U32Val,
x: Val
) -> Result<VecObject, Self::Error>
fn vec_insert( &self, v: VecObject, i: U32Val, x: Val ) -> Result<VecObject, Self::Error>
Inserts an element at index i within the vector, shifting all elements after it to the right. Traps if the index is out of bound
sourcefn vec_append(
&self,
v1: VecObject,
v2: VecObject
) -> Result<VecObject, Self::Error>
fn vec_append( &self, v1: VecObject, v2: VecObject ) -> Result<VecObject, Self::Error>
Clone the vector v1, then moves all the elements of vector v2 into it. Return the new vector. Traps if number of elements in the vector overflows a u32.
sourcefn vec_slice(
&self,
v: VecObject,
start: U32Val,
end: U32Val
) -> Result<VecObject, Self::Error>
fn vec_slice( &self, v: VecObject, start: U32Val, end: U32Val ) -> Result<VecObject, Self::Error>
Copy the elements from start index until end index, exclusive, in the vector and create a new vector from it. Return the new vector. Traps if the index is out of bound.
sourcefn vec_first_index_of(&self, v: VecObject, x: Val) -> Result<Val, Self::Error>
fn vec_first_index_of(&self, v: VecObject, x: Val) -> Result<Val, Self::Error>
Get the index of the first occurrence of a given element in the vector. Returns the u32 index of the value if it’s there. Otherwise, it returns Void.
sourcefn vec_last_index_of(&self, v: VecObject, x: Val) -> Result<Val, Self::Error>
fn vec_last_index_of(&self, v: VecObject, x: Val) -> Result<Val, Self::Error>
Get the index of the last occurrence of a given element in the vector. Returns the u32 index of the value if it’s there. Otherwise, it returns Void.
sourcefn vec_binary_search(&self, v: VecObject, x: Val) -> Result<u64, Self::Error>
fn vec_binary_search(&self, v: VecObject, x: Val) -> Result<u64, Self::Error>
Binary search a sorted vector for a given element. If it exists, the high-32 bits of the return value is 0x0001 and the low-32 bits contain the u32 index of the element. If it does not exist, the high-32 bits of the return value is 0x0000 and the low-32 bits contain the u32 index at which the element would need to be inserted into the vector to maintain sorted order.
sourcefn vec_new_from_linear_memory(
&self,
vals_pos: U32Val,
len: U32Val
) -> Result<VecObject, Self::Error>
fn vec_new_from_linear_memory( &self, vals_pos: U32Val, len: U32Val ) -> Result<VecObject, Self::Error>
Return a new vec initialized from an input slice of Vals given by a linear-memory address and length.
sourcefn vec_unpack_to_linear_memory(
&self,
vec: VecObject,
vals_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>
fn vec_unpack_to_linear_memory( &self, vec: VecObject, vals_pos: U32Val, len: U32Val ) -> Result<Void, Self::Error>
Copy the Vals of a vec into an array at a given linear-memory address.
sourcefn put_contract_data(
&self,
k: Val,
v: Val,
t: StorageType,
f: Val
) -> Result<Void, Self::Error>
fn put_contract_data( &self, k: Val, v: Val, t: StorageType, f: Val ) -> Result<Void, Self::Error>
If f is Void, then there will be no changes to flags for an existing entry, and none will be set if this is a new entry. Otherwise, f is parsed as a u32. If the value is 0, then all flags are cleared. If it’s not 0, then flags will be set to the passed in value.
sourcefn has_contract_data(&self, k: Val, t: StorageType) -> Result<Bool, Self::Error>
fn has_contract_data(&self, k: Val, t: StorageType) -> Result<Bool, Self::Error>
sourcefn get_contract_data(&self, k: Val, t: StorageType) -> Result<Val, Self::Error>
fn get_contract_data(&self, k: Val, t: StorageType) -> Result<Val, Self::Error>
sourcefn del_contract_data(&self, k: Val, t: StorageType) -> Result<Void, Self::Error>
fn del_contract_data(&self, k: Val, t: StorageType) -> Result<Void, Self::Error>
sourcefn create_contract(
&self,
deployer: AddressObject,
wasm_hash: BytesObject,
salt: BytesObject
) -> Result<AddressObject, Self::Error>
fn create_contract( &self, deployer: AddressObject, wasm_hash: BytesObject, salt: BytesObject ) -> Result<AddressObject, Self::Error>
Creates the contract instance on behalf of deployer. deployer must authorize this call via Soroban auth framework, i.e. this calls deployer.require_auth with respective arguments. wasm_hash must be a hash of the contract code that has already been uploaded on this network. salt is used to create a unique contract id. Returns the address of the created contract.
sourcefn create_asset_contract(
&self,
serialized_asset: BytesObject
) -> Result<AddressObject, Self::Error>
fn create_asset_contract( &self, serialized_asset: BytesObject ) -> Result<AddressObject, Self::Error>
Creates the instance of Stellar Asset contract corresponding to the provided asset. serialized_asset is stellar::Asset XDR serialized to bytes format. Returns the address of the created contract.
sourcefn upload_wasm(&self, wasm: BytesObject) -> Result<BytesObject, Self::Error>
fn upload_wasm(&self, wasm: BytesObject) -> Result<BytesObject, Self::Error>
Uploads provided wasm bytecode to the network and returns its identifier (SHA-256 hash). No-op in case if the same Wasm object already exists.
sourcefn update_current_contract_wasm(
&self,
hash: BytesObject
) -> Result<Void, Self::Error>
fn update_current_contract_wasm( &self, hash: BytesObject ) -> Result<Void, Self::Error>
Replaces the executable of the current contract with the provided Wasm code identified by a hash. Wasm entry corresponding to the hash has to already be present in the ledger. The update happens only after the current contract invocation has successfully finished, so this can be safely called in the middle of a function.
sourcefn bump_contract_data(
&self,
k: Val,
t: StorageType,
min: U32Val
) -> Result<Void, Self::Error>
fn bump_contract_data( &self, k: Val, t: StorageType, min: U32Val ) -> Result<Void, Self::Error>
Bumps the expiration ledger of the key specified so the entry will live for min ledgers from now. If the current expiration ledger is already large enough to live at least min more ledgers, then nothing happens.
sourcefn bump_current_contract_instance_and_code(
&self,
min: U32Val
) -> Result<Void, Self::Error>
fn bump_current_contract_instance_and_code( &self, min: U32Val ) -> Result<Void, Self::Error>
Bumps the expiration ledger the current contract instance and code (if applicable), so they will live for min ledgers from now. If the current expiration ledger is already large enough (>= last closed ledger + min more ledgers), it is untouched.
sourcefn get_contract_id(
&self,
deployer: AddressObject,
salt: BytesObject
) -> Result<AddressObject, Self::Error>
fn get_contract_id( &self, deployer: AddressObject, salt: BytesObject ) -> Result<AddressObject, Self::Error>
Get the id of a contract without creating it. deployer is address of the contract deployer. salt is used to create a unique contract id. Returns the address of the would-be contract.
sourcefn get_asset_contract_id(
&self,
serialized_asset: BytesObject
) -> Result<AddressObject, Self::Error>
fn get_asset_contract_id( &self, serialized_asset: BytesObject ) -> Result<AddressObject, Self::Error>
Get the id of the Stellar Asset contract corresponding to the provided asset without creating the instance. serialized_asset is stellar::Asset XDR serialized to bytes format. Returns the address of the would-be asset contract.
sourcefn call(
&self,
contract: AddressObject,
func: Symbol,
args: VecObject
) -> Result<Val, Self::Error>
fn call( &self, contract: AddressObject, func: Symbol, args: VecObject ) -> Result<Val, Self::Error>
Calls a function in another contract with arguments contained in vector args. If the call is successful, returns the result of the called function. Traps otherwise.
sourcefn try_call(
&self,
contract: AddressObject,
func: Symbol,
args: VecObject
) -> Result<Val, Self::Error>
fn try_call( &self, contract: AddressObject, func: Symbol, args: VecObject ) -> Result<Val, Self::Error>
Calls a function in another contract with arguments contained in vector args, returning either the result of the called function or an ScError if the called function failed.
sourcefn serialize_to_bytes(&self, v: Val) -> Result<BytesObject, Self::Error>
fn serialize_to_bytes(&self, v: Val) -> Result<BytesObject, Self::Error>
Serializes an (SC)Val into XDR opaque Bytes object.
sourcefn deserialize_from_bytes(&self, b: BytesObject) -> Result<Val, Self::Error>
fn deserialize_from_bytes(&self, b: BytesObject) -> Result<Val, Self::Error>
Deserialize a Bytes object to get back the (SC)Val.
sourcefn bytes_copy_to_linear_memory(
&self,
b: BytesObject,
b_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>
fn bytes_copy_to_linear_memory( &self, b: BytesObject, b_pos: U32Val, lm_pos: U32Val, len: U32Val ) -> Result<Void, Self::Error>
Copies a slice of bytes from a Bytes object specified at offset b_pos with length len into the linear memory at position lm_pos. Traps if either the Bytes object or the linear memory doesn’t have enough bytes.
sourcefn bytes_copy_from_linear_memory(
&self,
b: BytesObject,
b_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_copy_from_linear_memory( &self, b: BytesObject, b_pos: U32Val, lm_pos: U32Val, len: U32Val ) -> Result<BytesObject, Self::Error>
Copies a segment of the linear memory specified at position lm_pos with length len, into a Bytes object at offset b_pos. The Bytes object may grow in size to accommodate the new bytes. Traps if the linear memory doesn’t have enough bytes.
sourcefn bytes_new_from_linear_memory(
&self,
lm_pos: U32Val,
len: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_new_from_linear_memory( &self, lm_pos: U32Val, len: U32Val ) -> Result<BytesObject, Self::Error>
Constructs a new Bytes object initialized with bytes copied from a linear memory slice specified at position lm_pos with length len.
sourcefn bytes_new(&self) -> Result<BytesObject, Self::Error>
fn bytes_new(&self) -> Result<BytesObject, Self::Error>
Create an empty new Bytes object.
sourcefn bytes_put(
&self,
b: BytesObject,
i: U32Val,
u: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_put( &self, b: BytesObject, i: U32Val, u: U32Val ) -> Result<BytesObject, Self::Error>
Update the value at index i in the Bytes object. Return the new Bytes. Trap if the index is out of bounds.
sourcefn bytes_get(&self, b: BytesObject, i: U32Val) -> Result<U32Val, Self::Error>
fn bytes_get(&self, b: BytesObject, i: U32Val) -> Result<U32Val, Self::Error>
Returns the element at index i of the Bytes object. Traps if the index is out of bound.
sourcefn bytes_del(
&self,
b: BytesObject,
i: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_del( &self, b: BytesObject, i: U32Val ) -> Result<BytesObject, Self::Error>
Delete an element in a Bytes object at index i, shifting all elements after it to the left. Return the new Bytes. Traps if the index is out of bound.
sourcefn bytes_len(&self, b: BytesObject) -> Result<U32Val, Self::Error>
fn bytes_len(&self, b: BytesObject) -> Result<U32Val, Self::Error>
Returns length of the Bytes object.
sourcefn bytes_push(
&self,
b: BytesObject,
u: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_push( &self, b: BytesObject, u: U32Val ) -> Result<BytesObject, Self::Error>
Appends an element to the back of the Bytes object.
sourcefn bytes_pop(&self, b: BytesObject) -> Result<BytesObject, Self::Error>
fn bytes_pop(&self, b: BytesObject) -> Result<BytesObject, Self::Error>
Removes the last element from the Bytes object and returns the new Bytes. Traps if original Bytes is empty.
sourcefn bytes_front(&self, b: BytesObject) -> Result<U32Val, Self::Error>
fn bytes_front(&self, b: BytesObject) -> Result<U32Val, Self::Error>
Return the first element in the Bytes object. Traps if the Bytes is empty
sourcefn bytes_back(&self, b: BytesObject) -> Result<U32Val, Self::Error>
fn bytes_back(&self, b: BytesObject) -> Result<U32Val, Self::Error>
Return the last element in the Bytes object. Traps if the Bytes is empty
sourcefn bytes_insert(
&self,
b: BytesObject,
i: U32Val,
u: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_insert( &self, b: BytesObject, i: U32Val, u: U32Val ) -> Result<BytesObject, Self::Error>
Inserts an element at index i within the Bytes object, shifting all elements after it to the right. Traps if the index is out of bound
sourcefn bytes_append(
&self,
b1: BytesObject,
b2: BytesObject
) -> Result<BytesObject, Self::Error>
fn bytes_append( &self, b1: BytesObject, b2: BytesObject ) -> Result<BytesObject, Self::Error>
Clone the Bytes object b1, then moves all the elements of Bytes object b2 into it. Return the new Bytes. Traps if its length overflows a u32.
sourcefn bytes_slice(
&self,
b: BytesObject,
start: U32Val,
end: U32Val
) -> Result<BytesObject, Self::Error>
fn bytes_slice( &self, b: BytesObject, start: U32Val, end: U32Val ) -> Result<BytesObject, Self::Error>
Copies the elements from start index until end index, exclusive, in the Bytes object and creates a new Bytes from it. Returns the new Bytes. Traps if the index is out of bound.
sourcefn string_copy_to_linear_memory(
&self,
s: StringObject,
s_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>
fn string_copy_to_linear_memory( &self, s: StringObject, s_pos: U32Val, lm_pos: U32Val, len: U32Val ) -> Result<Void, Self::Error>
Copies a slice of bytes from a String object specified at offset s_pos with length len into the linear memory at position lm_pos. Traps if either the String object or the linear memory doesn’t have enough bytes.
sourcefn symbol_copy_to_linear_memory(
&self,
s: SymbolObject,
s_pos: U32Val,
lm_pos: U32Val,
len: U32Val
) -> Result<Void, Self::Error>
fn symbol_copy_to_linear_memory( &self, s: SymbolObject, s_pos: U32Val, lm_pos: U32Val, len: U32Val ) -> Result<Void, Self::Error>
Copies a slice of bytes from a Symbol object specified at offset s_pos with length len into the linear memory at position lm_pos. Traps if either the String object or the linear memory doesn’t have enough bytes.
sourcefn string_new_from_linear_memory(
&self,
lm_pos: U32Val,
len: U32Val
) -> Result<StringObject, Self::Error>
fn string_new_from_linear_memory( &self, lm_pos: U32Val, len: U32Val ) -> Result<StringObject, Self::Error>
Constructs a new String object initialized with bytes copied from a linear memory slice specified at position lm_pos with length len.
sourcefn symbol_new_from_linear_memory(
&self,
lm_pos: U32Val,
len: U32Val
) -> Result<SymbolObject, Self::Error>
fn symbol_new_from_linear_memory( &self, lm_pos: U32Val, len: U32Val ) -> Result<SymbolObject, Self::Error>
Constructs a new Symbol object initialized with bytes copied from a linear memory slice specified at position lm_pos with length len.
sourcefn string_len(&self, s: StringObject) -> Result<U32Val, Self::Error>
fn string_len(&self, s: StringObject) -> Result<U32Val, Self::Error>
Returns length of the String object.
sourcefn symbol_len(&self, s: SymbolObject) -> Result<U32Val, Self::Error>
fn symbol_len(&self, s: SymbolObject) -> Result<U32Val, Self::Error>
Returns length of the Symbol object.
sourcefn symbol_index_in_linear_memory(
&self,
sym: Symbol,
slices_pos: U32Val,
len: U32Val
) -> Result<U32Val, Self::Error>
fn symbol_index_in_linear_memory( &self, sym: Symbol, slices_pos: U32Val, len: U32Val ) -> Result<U32Val, Self::Error>
Return the index of a Symbol in an array of linear-memory byte-slices, or trap if not found.
sourcefn compute_hash_sha256(
&self,
x: BytesObject
) -> Result<BytesObject, Self::Error>
fn compute_hash_sha256( &self, x: BytesObject ) -> Result<BytesObject, Self::Error>
sourcefn verify_sig_ed25519(
&self,
k: BytesObject,
x: BytesObject,
s: BytesObject
) -> Result<Void, Self::Error>
fn verify_sig_ed25519( &self, k: BytesObject, x: BytesObject, s: BytesObject ) -> Result<Void, Self::Error>
sourcefn compute_hash_keccak256(
&self,
x: BytesObject
) -> Result<BytesObject, Self::Error>
fn compute_hash_keccak256( &self, x: BytesObject ) -> Result<BytesObject, Self::Error>
Returns the keccak256 hash of given input bytes.
sourcefn recover_key_ecdsa_secp256k1(
&self,
msg_digest: BytesObject,
signature: BytesObject,
recovery_id: U32Val
) -> Result<BytesObject, Self::Error>
fn recover_key_ecdsa_secp256k1( &self, msg_digest: BytesObject, signature: BytesObject, recovery_id: U32Val ) -> Result<BytesObject, Self::Error>
Recovers the SEC-1-encoded ECDSA secp256k1 public key that produced a given 64-byte signature over a given 32-byte message digest, for a given recovery_id byte.
sourcefn require_auth_for_args(
&self,
address: AddressObject,
args: VecObject
) -> Result<Void, Self::Error>
fn require_auth_for_args( &self, address: AddressObject, args: VecObject ) -> Result<Void, Self::Error>
Checks if the address has authorized the invocation of the current contract function with the provided arguments. Traps if the invocation hasn’t been authorized.
sourcefn require_auth(&self, address: AddressObject) -> Result<Void, Self::Error>
fn require_auth(&self, address: AddressObject) -> Result<Void, Self::Error>
Checks if the address has authorized the invocation of the current contract function with all the arguments of the invocation. Traps if the invocation hasn’t been authorized.
sourcefn account_public_key_to_address(
&self,
pk_bytes: BytesObject
) -> Result<AddressObject, Self::Error>
fn account_public_key_to_address( &self, pk_bytes: BytesObject ) -> Result<AddressObject, Self::Error>
Converts a provided 32-byte Stellar account public key to the corresponding address. This is only useful in the context of cross-chain interoperability. Prefer directly using the Address objects whenever possible.
sourcefn contract_id_to_address(
&self,
contract_id_bytes: BytesObject
) -> Result<AddressObject, Self::Error>
fn contract_id_to_address( &self, contract_id_bytes: BytesObject ) -> Result<AddressObject, Self::Error>
Converts a provided 32-byte contract identifier to a corresponding Address object.
sourcefn address_to_account_public_key(
&self,
address: AddressObject
) -> Result<Val, Self::Error>
fn address_to_account_public_key( &self, address: AddressObject ) -> Result<Val, Self::Error>
Returns the 32-byte public key of the Stellar account corresponding to the provided Address object. If the Address doesn’t belong to an account, returns Val corresponding to the unit type (()).
sourcefn address_to_contract_id(
&self,
address: AddressObject
) -> Result<Val, Self::Error>
fn address_to_contract_id( &self, address: AddressObject ) -> Result<Val, Self::Error>
Returns the 32-byte contract identifier corresponding to the provided Address object. If the Address doesn’t belong to an account, returns Val corresponding to the unit type (()).
Authorizes sub-contract calls for the next contract call on behalf of the current contract. Every entry in the argument vector corresponds to InvokerContractAuthEntry contract type that authorizes a tree of require_auth calls on behalf of the current contract. The entries must not contain any authorizations for the direct contract call, i.e. if current contract needs to call contract function F1 that calls function F2 both of which require auth, only F2 should be present in auth_entries.
sourcefn dummy0(&self) -> Result<Val, Self::Error>
fn dummy0(&self) -> Result<Val, Self::Error>
A dummy function taking 0 arguments and performs no-op. This function is for test purpose only, for measuring the roundtrip cost of invoking a host function, i.e. host->Vm->host.
sourcefn prng_reseed(&self, seed: BytesObject) -> Result<Void, Self::Error>
fn prng_reseed(&self, seed: BytesObject) -> Result<Void, Self::Error>
Reseed the frame-local PRNG with a given BytesObject, which should be 32 bytes long.
sourcefn prng_bytes_new(&self, length: U32Val) -> Result<BytesObject, Self::Error>
fn prng_bytes_new(&self, length: U32Val) -> Result<BytesObject, Self::Error>
Construct a new BytesObject of the given length filled with bytes drawn from the frame-local PRNG.