【问题标题】:How to get the AccountId of the contract instantiated in the contract in Substrate ink如何在 Substrate ink 中获取合约中实例化的合约的 AccountId
【发布时间】: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(())
        }

谢谢你。

    标签: substrate rust-ink


    【解决方案1】:

    目前甚至可以从另一个合同实例化合同吗?希望这个问题也能得到解答!

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 2021-07-23
      • 2017-08-19
      • 2022-11-13
      • 2021-04-02
      • 2021-05-17
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多