casperlabs_contract_utils/
contract_storage.rs1use alloc::vec::Vec;
2use casper_contract::contract_api::runtime;
3use casper_types::system::CallStackElement;
4use once_cell::unsync::OnceCell;
5
6pub trait ContractStorage {
7 fn call_stack(&self) -> &[CallStackElement];
8}
9
10#[derive(Default)]
11pub struct OnChainContractStorage {
12 call_stack: OnceCell<Vec<CallStackElement>>,
13}
14
15impl ContractStorage for OnChainContractStorage {
16 fn call_stack(&self) -> &[CallStackElement] {
17 let call_stack = self.call_stack.get_or_init(runtime::get_call_stack);
18 call_stack.as_slice()
19 }
20}