別のアカウントに関連付けられたスマート コントラクトがあり、何らかのインターフェイスを実装している場合、(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() /*...*/
})),
);
}
}