Solidity

細雨和合約實例

  • September 17, 2019

我目前正在 ReactJS 之上開發一個帶有 Drizzle 的 dApp。

我的項目基本上由 8 個 .sol 文件組成。其中 4 個只是抽象合約,包括函式、結構等,以便於人類閱讀,另外 4 個持有合約的邏輯。

我的主要問題是某些契約必須對每個使用者都是唯一的 - 使用者應該能夠根據需要多次創建契約的新實例。

我試圖通過再簽訂一份創建新實例的契約來做到這一點,如下所示:

pragma solidity ^0.5.10;

import './ContractToBeInstanced.sol';
contract newInstance {
 function newInstanceFunc(address _address) public returns(address) {
   ContractToBeInstanced T = new ContractToBeInstanced(_address);
   return T.getAddress(); //returns the address(this) of the contract
 }
}

在 ContractToBeInstanced.sol 我有一個建構子,它設置新實例的所有者:

 constructor(address _owner) public {
   owner = _owner;
   getAddress(); //it also calls the getAddress() to return the address to the parent function
 }

所以,我的主要問題是:

  • 如何通過 Drizzle 創建該實例?例如,我嘗試過:
<Button onClick={ () => this.contracts.newInstance.methods.newInstanceFunc.cacheSend(contractConfig.contractName, {from: this.currentAccount})) }>New Instance</Button>

Metamask 打開,我執行事務,它變得有效,然後什麼都沒有。我也無法在 Ganache 的“契約”菜單中看到契約的新(實例),並且在返回新契約地址的交易中沒有輸出。這一切正常嗎?

  • 當契約的新實例將被創建時,我如何能夠在以後再次訪問它?我懷疑我將不得不使用某種 IPFS 或查看過去的交易?我知道這是一個非常簡單的問題,但我還不確定。

我還想指出的是,我的松露的遷移文件只做:

deployer.deploy(ContractA).then( () => deployer.deploy(ContractB)...);

我認為這是錯誤的,並且 Migrations.sol 沒有受到影響。

在您的工廠契約中,您可以跟踪創建的實例。

pragma solidity ^0.5.10;

import './ContractToBeInstanced.sol';
contract newInstance {

mapping(address=>address) public userContracts;

 function newInstanceFunc(address _address) public returns(address) {
   ContractToBeInstanced T = new ContractToBeInstanced(_address);
   address deployedAddress = address(T);
   userContracts[_address] = deployedAddress;
   return deployedAddress;
 }
}

編輯:我做了一個編輯,可以取消 ContractToBeInstantiated 中的 getAddress 函式。

引用自:https://ethereum.stackexchange.com/questions/74391