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::random()
.
Implementations§
source§impl Address
impl Address
sourcepub fn require_auth_for_args(&self, args: Vec<RawVal>)
pub fn require_auth_for_args(&self, args: Vec<RawVal>)
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.
When called in the tests, the require_auth
calls are just recorded and
no signatures are required. In order to make sure that the contract
has indeed called require_auth
for this Address with expected arguments
use env.verify_top_authorization
.
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_contract_id(env: &Env, contract_id: &BytesN<32>) -> Self
pub fn from_contract_id(env: &Env, contract_id: &BytesN<32>) -> Self
Creates an Address
corresponding to the provided contract identifier.
Prefer using the Address
directly as input or output argument. Only
use this in special cases, for example to get an Address of a freshly
deployed contract.
sourcepub fn from_account_id(env: &Env, account_pk: &BytesN<32>) -> Self
pub fn from_account_id(env: &Env, account_pk: &BytesN<32>) -> Self
Creates an Address
corresponding to the provided Stellar account
32-byte identifier (public key).
Prefer using the Address
directly as input or output argument. Only
use this in special cases, like for cross-chain interoperability.
sourcepub fn contract_id(&self) -> Option<BytesN<32>>
pub fn contract_id(&self) -> Option<BytesN<32>>
Returns 32-byte contract identifier corresponding to this Address
.
Returns None
when this Address
does not belong to a contract.
Avoid using the returned contract identifier for authorization purposes
and prefer using Address
directly whenever possible. This is only
useful in special cases, for example, to be able to invoke a contract
given its Address
.
sourcepub fn account_id(&self) -> Option<BytesN<32>>
pub fn account_id(&self) -> Option<BytesN<32>>
Returns 32-byte Stellar account identifier (public key) corresponding
to this Address
.
Returns None
when this Address
does not belong to an account.
Avoid using the returned account identifier for authorization purposes
and prefer using Address
directly whenever possible. This is only
useful in special cases, like for cross-chain interoperability.
pub fn env(&self) -> &Env
pub fn as_raw(&self) -> &RawVal
pub fn to_raw(&self) -> RawVal
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<Address> for Address
impl PartialEq<Address> for Address
source§impl PartialOrd<Address> for Address
impl PartialOrd<Address> 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 TryFromVal<Env, &Address> for RawVal
impl TryFromVal<Env, &Address> for RawVal
type Error = ConversionError
fn try_from_val(_env: &Env, v: &&Address) -> Result<Self, Self::Error>
source§impl TryFromVal<Env, Address> for RawVal
impl TryFromVal<Env, Address> for RawVal
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, RawVal> for Address
impl TryFromVal<Env, RawVal> for Address
type Error = ConversionError
fn try_from_val(env: &Env, val: &RawVal) -> 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>
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§
§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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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 + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
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.