-
Notifications
You must be signed in to change notification settings - Fork 257
/
Copy pathlib.rs
32 lines (28 loc) · 937 Bytes
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use near_sdk::env;
use near_sdk::{log, near, PromiseOrValue};
#[derive(Default)]
#[near(contract_state)]
pub struct CrossContract {}
#[near]
impl CrossContract {
pub fn factorial(&self, n: u32) -> PromiseOrValue<u32> {
if n <= 1 {
return PromiseOrValue::Value(1);
}
let account_id = env::current_account_id();
Self::ext(account_id.clone())
.with_unused_gas_weight(6)
.factorial(n - 1)
.then(Self::ext(account_id).factorial_mult(n))
.into()
}
/// Used for callbacks only. Multiplies current factorial result by the next value. Panics if
/// it is not called by the contract itself.
#[private]
pub fn factorial_mult(&self, n: u32, #[callback_unwrap] cur: u32) -> u32 {
log!("Received {:?} and {:?}", n, cur);
let result = n * cur;
log!("Multiplied {:?}", result.clone());
result
}
}