跳到主要内容

异步合约

Gear 程序之间的异步交互与通常的异步请求类似,在使用await并通过发送消息来实现。

程序入口

如果一个程序使用异步信息,它的主要可执行函数就会改变。

async_init()

如果在程序初始化中存在异步调用,那么我们应该使用 async_init() 而不是 init()

#[gstd::async_init]
async fn init() {
gstd::debug!("Hello world!");
}

main()

对于异步信息也是如此,我们用 main 代替 handlehandle_reply

#[gstd::async_main]
async fn main() {
gstd::debug!("Hello world!");
}
信息

async_init 可以和 async_main 一起使用。但如果使用这个宏,就不能指定 inithandle_reply 函数。

跨程序消息通讯

要向 Gear 程序发送消息,使用函数 send_for_reply(program, payload, value),在这个函数中:

  • program - 发送消息的程序的地址
  • payload - 程序的消息
  • value - 附在消息上的资金
  • reply_deposit - 用于为未来的回复处理提供 gas(如果为零则跳过)
  pub fn send_for_reply_as<E: Encode, D: Decode>(
program: ActorId,
payload: E,
value: u128,
reply_deposit: u64
) -> Result<CodecMessageFuture<D>>