pub struct Promise { /* private fields */ }
Expand description
A structure representing a result of the scheduled execution on another contract.
Smart contract developers will explicitly use Promise
in two situations:
-
When they need to return
Promise
.In the following code if someone calls method
ContractA::a
they will internally cause an execution of methodContractB::b
ofbob_near
account, and the return value ofContractA::a
will be whatContractB::b
returned.
#[ext_contract]
pub trait ContractB {
fn b(&mut self);
}
#[near_bindgen]
#[derive(Default, BorshDeserialize, BorshSerialize)]
struct ContractA {}
#[near_bindgen]
impl ContractA {
pub fn a(&self) -> Promise {
contract_b::b("bob_near".parse().unwrap(), 0, Gas(1_000))
}
}
- When they need to create a transaction with one or many actions, e.g. the following code schedules a transaction that creates an account, transfers tokens, and assigns a public key:
Promise::new("bob_near".parse().unwrap())
.create_account()
.transfer(1000)
.add_full_access_key(env::signer_account_pk());
Implementations
Create account on which this promise acts.
Deploy a smart contract to the account on which this promise acts.
A low-level interface for making a function call to the account that this promise acts on.
Transfer tokens to the account that this promise acts on.
Stake the account for the given amount of tokens using the given public key.
Add full access key to the given account.
Add full access key to the given account with a provided nonce.
Add an access key that is restricted to only calling a smart contract on some account using
only a restricted set of methods. Here function_names
is a comma separated list of methods,
e.g. "method_a,method_b".to_string()
.
Add an access key with a provided nonce.
Delete access key from the given account.
Delete the given account.
Merge this promise with another promise, so that we can schedule execution of another smart contract right after all merged promises finish.
Note, once the promises are merged it is not possible to add actions to them, e.g. the following code will panic during the execution of the smart contract:
let p1 = Promise::new("bob_near".parse().unwrap()).create_account();
let p2 = Promise::new("carol_near".parse().unwrap()).create_account();
let p3 = p1.and(p2);
// p3.create_account();
Schedules execution of another promise right after the current promise finish executing.
In the following code bob_near
and dave_near
will be created concurrently. carol_near
creation will wait for bob_near
to be created, and eva_near
will wait for both carol_near
and dave_near
to be created first.
let p1 = Promise::new("bob_near".parse().unwrap()).create_account();
let p2 = Promise::new("carol_near".parse().unwrap()).create_account();
let p3 = Promise::new("dave_near".parse().unwrap()).create_account();
let p4 = Promise::new("eva_near".parse().unwrap()).create_account();
p1.then(p2).and(p3).then(p4);
A specialized, relatively low-level API method. Allows to mark the given promise as the one that should be considered as a return value.
In the below code a1
and a2
functions are equivalent.
#[ext_contract]
pub trait ContractB {
fn b(&mut self);
}
#[near_bindgen]
#[derive(Default, BorshDeserialize, BorshSerialize)]
struct ContractA {}
#[near_bindgen]
impl ContractA {
pub fn a1(&self) {
contract_b::b("bob_near".parse().unwrap(), 0, Gas(1_000)).as_return();
}
pub fn a2(&self) -> Promise {
contract_b::b("bob_near".parse().unwrap(), 0, Gas(1_000))
}
}
Trait Implementations
Until we implement strongly typed promises we serialize them as unit struct.
Recursively, using DFS, add type definitions required for this type. For primitive types this is an empty map. Type definition explains how to serialize/deserialize a type. Read more
Get the name of the type without brackets.
fn add_definition(
declaration: String,
definition: Definition,
definitions: &mut HashMap<String, Definition, RandomState>
)
fn add_definition(
declaration: String,
definition: Definition,
definitions: &mut HashMap<String, Definition, RandomState>
)
Helper method to add a single type definition to the map.
Auto Trait Implementations
impl !RefUnwindSafe for Promise
impl !UnwindSafe for Promise
Blanket Implementations
Mutably borrows from an owned value. Read more