service
Values created by the CandidType
function Canister
correspond to the Candid service type, are inferred to be TypeScript Object
s, and will be decoded into JavaScript Objects at runtime.
The properties of this object that match the keys of the service's query
and update
methods can be passed into ic.call
and ic.notify
to perform cross-canister calls.
TypeScript or JavaScript:
import {
bool,
Canister,
ic,
Principal,
query,
text,
update
} from 'azle/experimental';
const SomeCanister = Canister({
query1: query([], bool),
update1: update([], text)
});
export default Canister({
getService: query([], SomeCanister, () => {
return SomeCanister(Principal.fromText('aaaaa-aa'));
}),
callService: update([SomeCanister], text, (service) => {
return ic.call(service.update1);
})
});
Candid:
type ManualReply = variant { Ok : text; Err : text };
service : () -> {
callService : (
service { query1 : () -> (bool) query; update1 : () -> (text) },
) -> (ManualReply);
getService : () -> (
service { query1 : () -> (bool) query; update1 : () -> (text) },
) query;
}
dfx:
dfx canister call candid_canister getService
(service "aaaaa-aa")