2

別のアカウントに関連付けられたスマート コントラクトがあり、何らかのインターフェイスを実装している場合、(Rust で) スマート コントラクトの内部をチェックする方法はありますか?

特に、この関数では、受信者がスマート コントラクトであるかどうか、および必要なメソッドがあるかどうかを確認したいと思います。

trait FTReceiver {
    fn on_nft_receive(&self, sender: AddressID, token: AddressID) -> bool;
}
pub fn transfer(&mut self, recipient: AccountID, reference: String) {
    // note: env::* functions below don't exist!
    if env::has_smart_contract(recipient) && env::ctr_implements(recipient, FTReceiver) {
        Promise::new(token.clone()).function_call(
            "on_ft_receive".into(),
            &serde_json::to_vec(&json!({
                "sender": env::predecessor_account_id() /*...*/
            })),
        );
    }
}
4

2 に答える 2