pub struct Address { /* private fields */ }Expand description
Address is a universal opaque identifier to use in contracts.
Address can be used as an input argument (for example, to identify the payment recipient), as a data key (for example, to store the balance), as the authentication & authorization source (for example, to authorize the token transfer) etc.
See require_auth documentation for more details on using Address for
authorization.
Internally, Address may represent a Stellar account or a contract. Contract address may be used to identify the account contracts - special contracts that allow customizing authentication logic and adding custom authorization rules.
In tests Addresses should be generated via Address::generate().
Implementations§
Source§impl Address
impl Address
Sourcepub fn require_auth_for_args(&self, args: Vec<Val>)
pub fn require_auth_for_args(&self, args: Vec<Val>)
Ensures that this Address has authorized invocation of the current contract with the provided arguments.
During the on-chain execution the Soroban host will perform the needed authentication (verify the signatures) and ensure the replay prevention. The contracts don’t need to perform this tasks.
The arguments don’t have to match the arguments of the contract
invocation. However, it’s considered the best practice to have a
well-defined, deterministic and ledger-state-independent mapping between
the contract invocation arguments and require_auth arguments. This
will allow the contract callers to easily build the required signature
payloads and prevent potential authorization failures.
§Panics
If the invocation is not authorized.
Sourcepub fn require_auth(&self)
pub fn require_auth(&self)
Ensures that this Address has authorized invocation of the current contract with all the invocation arguments
This works exactly in the same fashion as require_auth_for_args, but
arguments are automatically inferred from the current contract
invocation.
This is useful when there is only a single Address that needs to authorize the contract invocation and there are no dynamic arguments that don’t need authorization.
§Panics
If the invocation is not authorized.
Sourcepub fn from_str(env: &Env, strkey: &str) -> Address
pub fn from_str(env: &Env, strkey: &str) -> Address
Creates an Address corresponding to the provided Stellar strkey.
The only supported strkey types are account keys (G...) and contract keys (C...). Any
other valid or invalid strkey will cause this to panic.
Prefer using the Address directly as input or output argument. Only
use this in special cases when addresses need to be shared between
different environments (e.g. different chains).
Sourcepub fn from_string(strkey: &String) -> Address
pub fn from_string(strkey: &String) -> Address
Creates an Address corresponding to the provided Stellar strkey.
The only supported strkey types are account keys (G...) and contract keys (C...). Any
other valid or invalid strkey will cause this to panic.
Prefer using the Address directly as input or output argument. Only
use this in special cases when addresses need to be shared between
different environments (e.g. different chains).
Sourcepub fn from_string_bytes(strkey: &Bytes) -> Address
pub fn from_string_bytes(strkey: &Bytes) -> Address
Creates an Address corresponding to the provided Stellar strkey bytes.
This behaves exactly in the same fashion as from_strkey, i.e. the bytes should contain
exactly the same contents as String would (i.e. base-32 ASCII string).
The only supported strkey types are account keys (G...) and contract keys (C...). Any
other valid or invalid strkey will cause this to panic.
Prefer using the Address directly as input or output argument. Only
use this in special cases when addresses need to be shared between
different environments (e.g. different chains).
pub fn to_string(&self) -> String
pub fn env(&self) -> &Env
pub fn as_val(&self) -> &Val
pub fn to_val(&self) -> Val
pub fn as_object(&self) -> &AddressObject
pub fn to_object(&self) -> AddressObject
Trait Implementations§
Source§impl Ord for Address
impl Ord for Address
Source§impl PartialOrd for Address
impl PartialOrd for Address
Source§impl SorobanArbitrary for Address
impl SorobanArbitrary for Address
Source§type Prototype = ArbitraryAddress
type Prototype = ArbitraryAddress
Arbitrary and can be converted to this
SorobanArbitrary type.Source§impl TryFromVal<Env, AddressObject> for Address
impl TryFromVal<Env, AddressObject> for Address
type Error = Infallible
fn try_from_val( env: &Env, val: &AddressObject, ) -> Result<Address, <Address as TryFromVal<Env, AddressObject>>::Error>
Source§impl TryFromVal<Env, ArbitraryAddress> for Address
impl TryFromVal<Env, ArbitraryAddress> for Address
type Error = ConversionError
fn try_from_val( env: &Env, v: &ArbitraryAddress, ) -> Result<Address, <Address as TryFromVal<Env, ArbitraryAddress>>::Error>
impl Eq for Address
Auto Trait Implementations§
impl Freeze for Address
impl !RefUnwindSafe for Address
impl !Send for Address
impl !Sync for Address
impl Unpin for Address
impl !UnwindSafe for Address
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W), b: &(T, U, V, W), ) -> Result<Ordering, <C as Compare<(T, U, V, W)>>::Error>
Source§impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W, X), b: &(T, U, V, W, X), ) -> Result<Ordering, <C as Compare<(T, U, V, W, X)>>::Error>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<E, T, U> FromVal<E, T> for Uwhere
E: Env,
U: TryFromVal<E, T>,
impl<E, T, U> FromVal<E, T> for Uwhere
E: Env,
U: TryFromVal<E, T>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more