@@ -50,59 +50,63 @@ contract ColonyNetworkExtensions is ColonyNetworkStorage {
5050 public
5151 stoppable
5252 calledByColony
53+ returns (address )
5354 {
5455 require (resolvers[_extensionId][_version] != address (0x0 ), "colony-network-extension-bad-version " );
55- require (installations[_extensionId][msg .sender ] == address (0x0 ), "colony-network-extension-already-installed " );
5656
5757 EtherRouter extension = new EtherRouter ();
58- installations[_extensionId][ msg . sender ] = address (extension);
58+ multiInstallations[ address (extension)] = msg . sender ;
5959
6060 extension.setResolver (resolvers[_extensionId][_version]);
6161 ColonyExtension (address (extension)).install (msg .sender );
6262
63- emit ExtensionInstalled (_extensionId, msg .sender , _version);
63+ emit ExtensionInstalled (_extensionId, address (extension), msg .sender , _version);
64+
65+ return address (extension);
6466 }
6567
66- function upgradeExtension (bytes32 _extensionId , uint256 _newVersion )
68+ function upgradeExtension (address payable _extension , uint256 _newVersion )
6769 public
6870 stoppable
6971 calledByColony
7072 {
71- require (installations[_extensionId][msg .sender ] != address (0x0 ), "colony-network-extension-not-installed " );
73+ require (multiInstallations[_extension] == msg .sender , "colony-network-extension-not-installed " );
74+
75+ bytes32 extensionId = ColonyExtension (_extension).identifier ();
7276
73- address payable extension = installations[_extensionId][msg .sender ];
74- require (_newVersion == ColonyExtension (extension).version () + 1 , "colony-network-extension-bad-increment " );
75- require (resolvers[_extensionId][_newVersion] != address (0x0 ), "colony-network-extension-bad-version " );
77+ require (_newVersion == ColonyExtension (_extension).version () + 1 , "colony-network-extension-bad-increment " );
78+ require (resolvers[extensionId][_newVersion] != address (0x0 ), "colony-network-extension-bad-version " );
7679
77- EtherRouter (extension).setResolver (resolvers[_extensionId][_newVersion]);
78- ColonyExtension (extension).finishUpgrade ();
79- assert (ColonyExtension (extension).version () == _newVersion);
80+ EtherRouter (_extension).setResolver (resolvers[extensionId][_newVersion]);
81+ ColonyExtension (_extension).finishUpgrade ();
8082
81- emit ExtensionUpgraded (_extensionId, msg .sender , _newVersion);
83+ assert (ColonyExtension (_extension).version () == _newVersion);
84+
85+ emit ExtensionUpgraded (_extension, msg .sender , _newVersion);
8286 }
8387
84- function deprecateExtension (bytes32 _extensionId , bool _deprecated )
88+ function deprecateExtension (address payable _extension , bool _deprecated )
8589 public
8690 stoppable
8791 calledByColony
8892 {
89- ColonyExtension (installations[_extensionId][ msg . sender ] ).deprecate (_deprecated);
93+ ColonyExtension (_extension ).deprecate (_deprecated);
9094
91- emit ExtensionDeprecated (_extensionId , msg .sender , _deprecated);
95+ emit ExtensionDeprecated (_extension , msg .sender , _deprecated);
9296 }
9397
94- function uninstallExtension (bytes32 _extensionId )
98+ function uninstallExtension (address payable _extension )
9599 public
96100 stoppable
97101 calledByColony
98102 {
99- require (installations[_extensionId][msg .sender ] != address (0x0 ), "colony-network-extension-not-installed " );
103+ require (multiInstallations[_extension] == msg .sender , "colony-network-extension-not-installed " );
104+
105+ delete multiInstallations[_extension];
100106
101- ColonyExtension extension = ColonyExtension (installations[_extensionId][msg .sender ]);
102- installations[_extensionId][msg .sender ] = address (0x0 );
103- extension.uninstall ();
107+ ColonyExtension (_extension).uninstall ();
104108
105- emit ExtensionUninstalled (_extensionId , msg .sender );
109+ emit ExtensionUninstalled (_extension , msg .sender );
106110 }
107111
108112 // Public view functions
@@ -115,6 +119,14 @@ contract ColonyNetworkExtensions is ColonyNetworkStorage {
115119 return resolvers[_extensionId][_version];
116120 }
117121
122+ function getExtensionMultiInstallation (address _extension )
123+ public
124+ view
125+ returns (address )
126+ {
127+ return multiInstallations[_extension];
128+ }
129+
118130 function getExtensionInstallation (bytes32 _extensionId , address _colony )
119131 public
120132 view
0 commit comments