Solidity
細雨和合約實例
我目前正在 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 函式。