Examples
Some of the best documentation for creating Candid RPC canisters is currently in the examples directory.
Basic Hello World
import { IDL, query } from 'azle';
export default class {
@query([], IDL.Text)
hello(): string {
return 'Hello World!';
}
}
Counter with State
import { IDL, query, update } from 'azle';
export default class {
counter: number = 0;
@query([], IDL.Nat32)
get(): number {
return this.counter;
}
@update([], IDL.Nat32)
increment(): number {
this.counter += 1;
return this.counter;
}
@update([IDL.Nat32], IDL.Nat32)
set(value: number): number {
this.counter = value;
return this.counter;
}
}
User Management
import { IDL, msgCaller, Principal, query, update } from 'azle';
const User = IDL.Record({
id: IDL.Principal,
name: IDL.Text,
age: IDL.Nat8
});
type User = {
id: Principal;
name: string;
age: number;
};
export default class {
users: Map<string, User> = new Map();
@update([IDL.Text, IDL.Nat8], User)
createUser(name: string, age: number): User {
const caller = msgCaller();
const user: User = {
id: caller,
name,
age
};
this.users.set(caller.toText(), user);
return user;
}
@query([], IDL.Vec(User))
getUsers(): User[] {
return Array.from(this.users.values());
}
@query([IDL.Principal], IDL.Opt(User))
getUser(id: Principal): [User] | [] {
const user = this.users.get(id.toText());
return user !== undefined ? [user] : [];
}
}