【发布时间】:2022-09-30 04:07:22
【问题描述】:
-
我想在合同中实例化另一个合同并获取该合同的 AccountId。
-
谁能告诉我该怎么做?
- 在 SampleContract1 的 add_contract 函数中实例化 SampleContract2。
- 我想获取实例化的SampleContract2的AccountId,在列表中管理,稍后使用AccountId可以访问SmapleContract2。
- 以后想增加合约类型,所以想用AccountId,可以通用的,而不是列表的SmapleContract2类型。
-
为什么\"sample_contract_2.env().account_id()\"返回的是SampleContract1的地址?
-- snip --
#[ink(storage)]
pub struct SampleContract1 {
next_id:u128,
account_id_list:Mapping<u128, AccountId>
}
-- snip --
impl SampleContract1 {
#[ink(constructor)]
pub fn new() -> Self {
Self {
account_id_list: Mapping::default(),
next_id:0,
}
}
#[ink(message)]
pub fn add_contract(&mut self ) -> Result<()> {
let sample_contract_2 = SampleContract2::new();
let contract_address = sample_contract_2.env().account_id(); <- ###### Address of SampleContract1 is obtained.
self.token_list.insert(&self.next_id, &contract_address );
self.next_id = self.next_id + 1;
Ok(())
}
谢谢你。