Skip to content

Commit 366efcf

Browse files
committed
refactor(contracts): add DstackApp initialize overload and version(), remove KMS backward-compat factory
DstackApp: - Extract shared init logic into _initializeCommon() internal function - Add old 5-param initialize(address,bool,bool,bytes32,bytes32) overload for upgrade compatibility with existing proxies - Keep 6-param initialize with requireTcbUpToDate for new deployments - Add version() pure function returning 2 for capability detection DstackKms: - Remove 5-param deployAndRegisterApp backward-compat overload - Remove _deployAndRegisterApp internal function - Keep only 6-param deployAndRegisterApp with inline logic, callers must explicitly specify requireTcbUpToDate
1 parent bfeaa5b commit 366efcf

6 files changed

Lines changed: 130 additions & 126 deletions

File tree

kms/auth-eth/contracts/DstackApp.sol

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,18 @@ contract DstackApp is
4646
_disableInitializers();
4747
}
4848

49-
// Initialize the contract
49+
// Old initialize — preserved for upgrade compatibility
50+
function initialize(
51+
address initialOwner,
52+
bool _disableUpgrades,
53+
bool _allowAnyDevice,
54+
bytes32 initialDeviceId,
55+
bytes32 initialComposeHash
56+
) public initializer {
57+
_initializeCommon(initialOwner, _disableUpgrades, _allowAnyDevice, initialDeviceId, initialComposeHash);
58+
}
59+
60+
// New initialize — includes requireTcbUpToDate
5061
function initialize(
5162
address initialOwner,
5263
bool _disableUpgrades,
@@ -55,10 +66,20 @@ contract DstackApp is
5566
bytes32 initialDeviceId,
5667
bytes32 initialComposeHash
5768
) public initializer {
69+
requireTcbUpToDate = _requireTcbUpToDate;
70+
_initializeCommon(initialOwner, _disableUpgrades, _allowAnyDevice, initialDeviceId, initialComposeHash);
71+
}
72+
73+
function _initializeCommon(
74+
address initialOwner,
75+
bool _disableUpgrades,
76+
bool _allowAnyDevice,
77+
bytes32 initialDeviceId,
78+
bytes32 initialComposeHash
79+
) internal {
5880
require(initialOwner != address(0), "invalid owner address");
5981

6082
_upgradesDisabled = _disableUpgrades;
61-
requireTcbUpToDate = _requireTcbUpToDate;
6283
allowAnyDevice = _allowAnyDevice;
6384

6485
// Add initial device if provided
@@ -78,6 +99,10 @@ contract DstackApp is
7899
__ERC165_init();
79100
}
80101

102+
function version() public pure returns (uint256) {
103+
return 2;
104+
}
105+
81106
/**
82107
* @dev See {IERC165-supportsInterface}.
83108
* @notice Returns true if this contract implements the interface defined by interfaceId

kms/auth-eth/contracts/DstackKms.sol

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -149,28 +149,9 @@ contract DstackKms is
149149
bytes32 initialDeviceId,
150150
bytes32 initialComposeHash
151151
) external returns (address appId) {
152-
return _deployAndRegisterApp(
153-
initialOwner,
154-
disableUpgrades,
155-
requireTcbUpToDate,
156-
allowAnyDevice,
157-
initialDeviceId,
158-
initialComposeHash
159-
);
160-
}
161-
162-
function _deployAndRegisterApp(
163-
address initialOwner,
164-
bool disableUpgrades,
165-
bool requireTcbUpToDate,
166-
bool allowAnyDevice,
167-
bytes32 initialDeviceId,
168-
bytes32 initialComposeHash
169-
) internal returns (address appId) {
170152
require(appImplementation != address(0), "DstackApp implementation not set");
171153
require(initialOwner != address(0), "Invalid owner address");
172154

173-
// Prepare initialization data
174155
bytes memory initData = abi.encodeWithSelector(
175156
bytes4(keccak256("initialize(address,bool,bool,bool,bytes32,bytes32)")),
176157
initialOwner,
@@ -181,31 +162,11 @@ contract DstackKms is
181162
initialComposeHash
182163
);
183164

184-
// Deploy proxy contract
185165
appId = address(new ERC1967Proxy(appImplementation, initData));
186-
// Register to KMS
187166
registerApp(appId);
188167
emit AppDeployedViaFactory(appId, msg.sender);
189168
}
190169

191-
// Backward compatible factory method (pre TCB requirement flag)
192-
function deployAndRegisterApp(
193-
address initialOwner,
194-
bool disableUpgrades,
195-
bool allowAnyDevice,
196-
bytes32 initialDeviceId,
197-
bytes32 initialComposeHash
198-
) external returns (address appId) {
199-
return _deployAndRegisterApp(
200-
initialOwner,
201-
disableUpgrades,
202-
false, // requireTcbUpToDate (default)
203-
allowAnyDevice,
204-
initialDeviceId,
205-
initialComposeHash
206-
);
207-
}
208-
209170
// Function to register an aggregated MR measurement
210171
function addKmsAggregatedMr(bytes32 mrAggregated) external onlyOwner {
211172
kmsAllowedAggregatedMrs[mrAggregated] = true;

kms/auth-eth/typechain-types/contracts/DstackApp.ts

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ export interface DstackAppInterface extends Interface {
6969
| "allowedComposeHashes"
7070
| "allowedDeviceIds"
7171
| "disableUpgrades"
72-
| "initialize"
72+
| "initialize(address,bool,bool,bytes32,bytes32)"
73+
| "initialize(address,bool,bool,bool,bytes32,bytes32)"
7374
| "isAppAllowed"
7475
| "owner"
7576
| "proxiableUUID"
@@ -82,6 +83,7 @@ export interface DstackAppInterface extends Interface {
8283
| "supportsInterface"
8384
| "transferOwnership"
8485
| "upgradeToAndCall"
86+
| "version"
8587
): FunctionFragment;
8688

8789
getEvent(
@@ -127,7 +129,11 @@ export interface DstackAppInterface extends Interface {
127129
values?: undefined
128130
): string;
129131
encodeFunctionData(
130-
functionFragment: "initialize",
132+
functionFragment: "initialize(address,bool,bool,bytes32,bytes32)",
133+
values: [AddressLike, boolean, boolean, BytesLike, BytesLike]
134+
): string;
135+
encodeFunctionData(
136+
functionFragment: "initialize(address,bool,bool,bool,bytes32,bytes32)",
131137
values: [AddressLike, boolean, boolean, boolean, BytesLike, BytesLike]
132138
): string;
133139
encodeFunctionData(
@@ -175,6 +181,7 @@ export interface DstackAppInterface extends Interface {
175181
functionFragment: "upgradeToAndCall",
176182
values: [AddressLike, BytesLike]
177183
): string;
184+
encodeFunctionData(functionFragment: "version", values?: undefined): string;
178185

179186
decodeFunctionResult(
180187
functionFragment: "UPGRADE_INTERFACE_VERSION",
@@ -201,7 +208,14 @@ export interface DstackAppInterface extends Interface {
201208
functionFragment: "disableUpgrades",
202209
data: BytesLike
203210
): Result;
204-
decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
211+
decodeFunctionResult(
212+
functionFragment: "initialize(address,bool,bool,bytes32,bytes32)",
213+
data: BytesLike
214+
): Result;
215+
decodeFunctionResult(
216+
functionFragment: "initialize(address,bool,bool,bool,bytes32,bytes32)",
217+
data: BytesLike
218+
): Result;
205219
decodeFunctionResult(
206220
functionFragment: "isAppAllowed",
207221
data: BytesLike
@@ -247,6 +261,7 @@ export interface DstackAppInterface extends Interface {
247261
functionFragment: "upgradeToAndCall",
248262
data: BytesLike
249263
): Result;
264+
decodeFunctionResult(functionFragment: "version", data: BytesLike): Result;
250265
}
251266

252267
export namespace AllowAnyDeviceSetEvent {
@@ -433,7 +448,19 @@ export interface DstackApp extends BaseContract {
433448

434449
disableUpgrades: TypedContractMethod<[], [void], "nonpayable">;
435450

436-
initialize: TypedContractMethod<
451+
"initialize(address,bool,bool,bytes32,bytes32)": TypedContractMethod<
452+
[
453+
initialOwner: AddressLike,
454+
_disableUpgrades: boolean,
455+
_allowAnyDevice: boolean,
456+
initialDeviceId: BytesLike,
457+
initialComposeHash: BytesLike
458+
],
459+
[void],
460+
"nonpayable"
461+
>;
462+
463+
"initialize(address,bool,bool,bool,bytes32,bytes32)": TypedContractMethod<
437464
[
438465
initialOwner: AddressLike,
439466
_disableUpgrades: boolean,
@@ -502,6 +529,8 @@ export interface DstackApp extends BaseContract {
502529
"payable"
503530
>;
504531

532+
version: TypedContractMethod<[], [bigint], "view">;
533+
505534
getFunction<T extends ContractMethod = ContractMethod>(
506535
key: string | FunctionFragment
507536
): T;
@@ -528,7 +557,20 @@ export interface DstackApp extends BaseContract {
528557
nameOrSignature: "disableUpgrades"
529558
): TypedContractMethod<[], [void], "nonpayable">;
530559
getFunction(
531-
nameOrSignature: "initialize"
560+
nameOrSignature: "initialize(address,bool,bool,bytes32,bytes32)"
561+
): TypedContractMethod<
562+
[
563+
initialOwner: AddressLike,
564+
_disableUpgrades: boolean,
565+
_allowAnyDevice: boolean,
566+
initialDeviceId: BytesLike,
567+
initialComposeHash: BytesLike
568+
],
569+
[void],
570+
"nonpayable"
571+
>;
572+
getFunction(
573+
nameOrSignature: "initialize(address,bool,bool,bool,bytes32,bytes32)"
532574
): TypedContractMethod<
533575
[
534576
initialOwner: AddressLike,
@@ -585,6 +627,9 @@ export interface DstackApp extends BaseContract {
585627
[void],
586628
"payable"
587629
>;
630+
getFunction(
631+
nameOrSignature: "version"
632+
): TypedContractMethod<[], [bigint], "view">;
588633

589634
getEvent(
590635
key: "AllowAnyDeviceSet"

kms/auth-eth/typechain-types/contracts/DstackKms.ts

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,7 @@ export interface DstackKmsInterface extends Interface {
8484
| "addOsImageHash"
8585
| "allowedOsImages"
8686
| "appImplementation"
87-
| "deployAndRegisterApp(address,bool,bool,bytes32,bytes32)"
88-
| "deployAndRegisterApp(address,bool,bool,bool,bytes32,bytes32)"
87+
| "deployAndRegisterApp"
8988
| "gatewayAppId"
9089
| "initialize"
9190
| "isAppAllowed"
@@ -154,11 +153,7 @@ export interface DstackKmsInterface extends Interface {
154153
values?: undefined
155154
): string;
156155
encodeFunctionData(
157-
functionFragment: "deployAndRegisterApp(address,bool,bool,bytes32,bytes32)",
158-
values: [AddressLike, boolean, boolean, BytesLike, BytesLike]
159-
): string;
160-
encodeFunctionData(
161-
functionFragment: "deployAndRegisterApp(address,bool,bool,bool,bytes32,bytes32)",
156+
functionFragment: "deployAndRegisterApp",
162157
values: [AddressLike, boolean, boolean, boolean, BytesLike, BytesLike]
163158
): string;
164159
encodeFunctionData(
@@ -273,11 +268,7 @@ export interface DstackKmsInterface extends Interface {
273268
data: BytesLike
274269
): Result;
275270
decodeFunctionResult(
276-
functionFragment: "deployAndRegisterApp(address,bool,bool,bytes32,bytes32)",
277-
data: BytesLike
278-
): Result;
279-
decodeFunctionResult(
280-
functionFragment: "deployAndRegisterApp(address,bool,bool,bool,bytes32,bytes32)",
271+
functionFragment: "deployAndRegisterApp",
281272
data: BytesLike
282273
): Result;
283274
decodeFunctionResult(
@@ -599,19 +590,7 @@ export interface DstackKms extends BaseContract {
599590

600591
appImplementation: TypedContractMethod<[], [string], "view">;
601592

602-
"deployAndRegisterApp(address,bool,bool,bytes32,bytes32)": TypedContractMethod<
603-
[
604-
initialOwner: AddressLike,
605-
disableUpgrades: boolean,
606-
allowAnyDevice: boolean,
607-
initialDeviceId: BytesLike,
608-
initialComposeHash: BytesLike
609-
],
610-
[string],
611-
"nonpayable"
612-
>;
613-
614-
"deployAndRegisterApp(address,bool,bool,bool,bytes32,bytes32)": TypedContractMethod<
593+
deployAndRegisterApp: TypedContractMethod<
615594
[
616595
initialOwner: AddressLike,
617596
disableUpgrades: boolean,
@@ -760,20 +739,7 @@ export interface DstackKms extends BaseContract {
760739
nameOrSignature: "appImplementation"
761740
): TypedContractMethod<[], [string], "view">;
762741
getFunction(
763-
nameOrSignature: "deployAndRegisterApp(address,bool,bool,bytes32,bytes32)"
764-
): TypedContractMethod<
765-
[
766-
initialOwner: AddressLike,
767-
disableUpgrades: boolean,
768-
allowAnyDevice: boolean,
769-
initialDeviceId: BytesLike,
770-
initialComposeHash: BytesLike
771-
],
772-
[string],
773-
"nonpayable"
774-
>;
775-
getFunction(
776-
nameOrSignature: "deployAndRegisterApp(address,bool,bool,bool,bytes32,bytes32)"
742+
nameOrSignature: "deployAndRegisterApp"
777743
): TypedContractMethod<
778744
[
779745
initialOwner: AddressLike,

0 commit comments

Comments
 (0)