Skip to content

Commit 198ceee

Browse files
committed
instantiation to return version and name
1 parent 6ada120 commit 198ceee

10 files changed

+28
-16
lines changed

.changeset/beige-sloths-learn.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@peeramid-labs/eds": minor
3+
---
4+
5+
instantiation now returns version and name

src/abstracts/CloneDistribution.sol

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ abstract contract CloneDistribution is IDistribution, CodeIndexer {
1010

1111
function sources() internal view virtual returns (address[] memory, bytes32 name, uint256 version);
1212

13-
function instantiate() public virtual returns (address[] memory instances) {
14-
(address[] memory _sources,,) = sources();
13+
function instantiate() public virtual returns (address[] memory instances, bytes32 distributionName, uint256 distributionVersion) {
14+
(address[] memory _sources,bytes32 _distributionName,uint256 _distributionVersion) = sources();
1515
instances = new address[](_sources.length);
1616
for (uint256 i = 0; i < _sources.length; i++) {
1717
address clone = Clones.clone(_sources[i]);
1818
instances[i] = clone;
1919
}
2020
emit Distributed(msg.sender, instances);
21-
return instances;
21+
return (instances, _distributionName, _distributionVersion);
2222
}
2323

2424
function get() public view virtual returns (address[] memory src, bytes32 name, uint256 version) {

src/abstracts/Distributor.sol

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ abstract contract Distributor is IDistributor, CodeIndexer {
3939
emit DistributionRemoved(id);
4040
}
4141

42-
function _instantiate(bytes32 id, bytes calldata args) internal virtual returns (address[] memory instances) {
42+
function _instantiate(bytes32 id, bytes calldata args) internal virtual returns (address[] memory instances, bytes32 distributionName, uint256 distributionVersion) {
4343
ICodeIndex codeIndex = getContractsIndex();
4444
if (!distirbutionsSet.contains(id)) revert DistributionNotFound(id);
45-
instances = IDistribution(codeIndex.get(id)).instantiate();
45+
(instances, distributionName, distributionVersion) = IDistribution(codeIndex.get(id)).instantiate();
4646
bytes4 selector = IInitializer.initialize.selector;
4747
// This ensures instance owner (distributor) performs initialization.
4848
// It is distirbutor responsibility to make sure calldata and initializer are safe to execute
@@ -54,7 +54,7 @@ abstract contract Distributor is IDistributor, CodeIndexer {
5454
require(success, string(result));
5555
}
5656
emit Instantiated(id, args);
57-
return instances;
57+
return (instances, distributionName, distributionVersion);
5858
}
5959

6060
function beforeCall(

src/abstracts/Installer.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ abstract contract Installer is IInstaller {
4040
if (!isDistributor(distributor)) {
4141
revert InvalidDistributor(distributor);
4242
}
43-
address[] memory installation = distributor.instantiate(distributionId, args);
43+
(address[] memory installation,,) = distributor.instantiate(distributionId, args);
4444
instancesNum++;
4545
_instanceEnum[instancesNum] = installation;
4646
for (uint i = 0; i < installation.length; i++) {

src/abstracts/VersionDistributor.sol

+11-4
Original file line numberDiff line numberDiff line change
@@ -51,30 +51,37 @@ abstract contract VersionDistributor is IVersionDistributor, CodeIndexer {
5151
if (oldRequirement != requirement) emit RequirementChanged(repository, oldRequirement, requirement);
5252
}
5353

54-
function _instantiate(IRepository repository, bytes calldata args) internal returns (address[] memory) {
54+
function _instantiate(
55+
IRepository repository,
56+
bytes calldata args
57+
) internal returns (address[] memory, bytes32, uint256) {
5558
if (!_repositories.contains(address(repository))) {
5659
revert InvalidRepository(repository);
5760
}
5861
IRepository.Source memory src = repository.get(
5962
versions[address(repository)],
6063
requirements[address(repository)]
6164
);
62-
address source = getContractsIndex().get(src.sourceId);
63-
address[] memory instances = IDistribution(source).instantiate();
65+
66+
(address[] memory instances, bytes32 _distributionName, uint256 _distributionVersion) = IDistribution(
67+
getContractsIndex().get(src.sourceId)
68+
).instantiate();
6469
bytes4 selector = IInitializer.initialize.selector;
70+
6571
address initializer = address(initializers[address(repository)]);
6672
if (initializer != address(0)) {
6773
(bool success, bytes memory result) = initializer.delegatecall(
6874
abi.encodeWithSelector(selector, instances, args)
6975
);
7076
require(success, string(result));
7177
}
78+
7279
for (uint256 i = 0; i < instances.length; i++) {
7380
instancesDistribution[instances[i]] = address(repository);
7481
instancesVersions[instances[i]] = src.version;
7582
}
7683
emit Instantiated(address(repository), args);
77-
return instances;
84+
return (instances, _distributionName, _distributionVersion);
7885
}
7986

8087
function getVersionedDistributions() public view returns (address[] memory repositories) {

src/distributors/OwnableDistributor.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import "../abstracts/Distributor.sol";
1111
contract OwnableDistributor is Distributor, Ownable {
1212
constructor(address _owner) Ownable(_owner) {}
1313

14-
function instantiate(bytes32 id, bytes calldata args) public returns (address[] memory) {
14+
function instantiate(bytes32 id, bytes calldata args) public returns (address[] memory, bytes32, uint256 ) {
1515
return super._instantiate(id, args);
1616
}
1717

src/distributors/OwnableVersionDistributor.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import "../abstracts/VersionDistributor.sol";
1111
contract OwnableVersionDistributor is VersionDistributor, Ownable {
1212
constructor(address _owner) Ownable(_owner) {}
1313

14-
function instantiate(IRepository repository, bytes calldata args) public returns (address[] memory) {
14+
function instantiate(IRepository repository, bytes calldata args) public returns (address[] memory, bytes32, uint256) {
1515
return super._instantiate(repository, args);
1616
}
1717

src/interfaces/IDistribution.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity =0.8.20;
44
interface IDistribution {
55
event Distributed(address indexed distributor, address[] instances);
66

7-
function instantiate() external returns (address[] memory instances);
7+
function instantiate() external returns (address[] memory instances, bytes32 distributionName, uint256 distributionVersion);
88

99
function get() external view returns (address[] memory sources, bytes32 distributionName, uint256 distributionVersion);
1010

src/interfaces/IDistributor.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ interface IDistributor is ILayer {
1818

1919
function getDistributionURI(bytes32 id) external view returns (string memory);
2020

21-
function instantiate(bytes32 id, bytes calldata args) external returns (address[] memory);
21+
function instantiate(bytes32 id, bytes calldata args) external returns (address[] memory, bytes32 distributionName, uint256 distributionVersion);
2222

2323
function addDistribution(bytes32 id, bytes32 initializer) external;
2424

src/interfaces/IVersionDistributor.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ interface IVersionDistributor is ILayer {
3939

4040
function getVersionedDistributions() external view returns (address[] memory repositories);
4141
function getVersionedDistributionURI(IRepository repository) external view returns (string memory);
42-
function instantiate(IRepository repository, bytes calldata args) external returns (address[] memory);
42+
function instantiate(IRepository repository, bytes calldata args) external returns (address[] memory, bytes32, uint256);
4343
function removeVersionedDistribution(IRepository repository) external;
4444
}

0 commit comments

Comments
 (0)