Struct soroban_sdk::Address
source · 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_string(strkey: &String) -> Self
pub fn from_string(strkey: &String) -> Self
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) -> Self
pub fn from_string_bytes(strkey: &Bytes) -> Self
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 PartialEq for Address
impl PartialEq for Address
source§impl PartialOrd for Address
impl PartialOrd for Address
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl SorobanArbitrary for Address
Available on crate feature testutils
only.
impl SorobanArbitrary for Address
testutils
only.§type Prototype = ArbitraryAddress
type Prototype = ArbitraryAddress
Arbitrary
and can be converted to this
SorobanArbitrary
type.source§impl TryFrom<&Address> for ScVal
impl TryFrom<&Address> for ScVal
§type Error = ConversionError
type Error = ConversionError
source§impl TryFrom<Address> for ScVal
impl TryFrom<Address> for ScVal
§type Error = ConversionError
type Error = ConversionError
source§impl TryFromVal<Env, &Address> for Val
impl TryFromVal<Env, &Address> for Val
type Error = ConversionError
fn try_from_val(_env: &Env, v: &&Address) -> Result<Self, Self::Error>
source§impl TryFromVal<Env, Address> for Val
impl TryFromVal<Env, Address> for Val
type Error = ConversionError
fn try_from_val(_env: &Env, v: &Address) -> Result<Self, Self::Error>
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<Self, Self::Error>
source§impl TryFromVal<Env, ScAddress> for Address
impl TryFromVal<Env, ScAddress> for Address
type Error = ConversionError
fn try_from_val(env: &Env, val: &ScAddress) -> Result<Self, Self::Error>
source§impl TryFromVal<Env, ScVal> for Address
impl TryFromVal<Env, ScVal> for Address
type Error = ConversionError
fn try_from_val(env: &Env, val: &ScVal) -> Result<Self, Self::Error>
source§impl TryFromVal<Env, Val> for Address
impl TryFromVal<Env, Val> for Address
type Error = ConversionError
fn try_from_val(env: &Env, val: &Val) -> Result<Self, Self::Error>
impl Eq for Address
Auto Trait Implementations§
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
§impl<T, U, V, E, C> Compare<(T, U, V)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,
impl<T, U, V, E, C> Compare<(T, U, V)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,
§impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,
impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,
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>
§impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,
impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,
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>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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
.§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
.§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.§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.