Skip to content

Commit 7228593

Browse files
committed
refactor: Replace assert with if + revert using custom errors
- Replaced all `assert` statements with `if` checks followed by `revert` and custom errors from `Errors.sol` - Implemented specific custom errors: - `InvalidArrayLength(uint256 expected, uint256 actual)` - `InvalidBooleanType()` - `ExpectedMajorByteString()` - `ExpectedNegativeBigNumTag()` - `ExpectedLowValue27()` - Ensured proper import of `Errors.sol` across relevant CBOR modules - Preserved original indentation and code formatting for readability - Improves error handling consistency and prevents `Panic` exceptions This change aligns with Solidity best practices by using custom errors for more efficient and descriptive error handling.
1 parent acf7e81 commit 7228593

File tree

9 files changed

+127
-36
lines changed

9 files changed

+127
-36
lines changed

contracts/v0.8/cbor/AccountCbor.sol

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import "../types/AccountTypes.sol";
2525

2626
import "../utils/CborDecode.sol";
2727
import "../utils/Misc.sol";
28+
import "../utils/Errors.sol";
2829

2930
/// @title This library is a set of functions meant to handle CBOR parameters serialization and return values deserialization for Account actor exported methods.
3031
/// @author Zondax AG
@@ -59,7 +60,10 @@ library AccountCBOR {
5960
uint len;
6061

6162
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
62-
assert(len == 2);
63+
if (!(len == 2)) {
64+
revert Errors.InvalidArrayLength(2, len);
65+
}
66+
6367

6468
(ret.signature, byteIdx) = rawResp.readBytes(byteIdx);
6569
(ret.message, byteIdx) = rawResp.readBytes(byteIdx);

contracts/v0.8/cbor/DataCapCbor.sol

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,10 @@ library DataCapCBOR {
8787
bytes memory tmp;
8888

8989
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
90-
assert(len == 3);
90+
if (!(len == 3)) {
91+
revert Errors.InvalidArrayLength(3, len);
92+
}
93+
9194

9295
(tmp, byteIdx) = rawResp.readBytes(byteIdx);
9396
ret.from_balance = tmp.deserializeBigInt();
@@ -133,7 +136,9 @@ library DataCapCBOR {
133136
bytes memory tmp;
134137

135138
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
136-
assert(len == 4);
139+
if (!(len == 4)) {
140+
revert Errors.InvalidArrayLength(4, len);
141+
}
137142

138143
(tmp, byteIdx) = rawResp.readBytes(byteIdx);
139144
ret.from_balance = tmp.deserializeBigInt();
@@ -217,7 +222,10 @@ library DataCapCBOR {
217222
bytes memory tmp;
218223

219224
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
220-
assert(len == 2);
225+
if (!(len == 2)) {
226+
revert Errors.InvalidArrayLength(2, len);
227+
}
228+
221229

222230
(tmp, byteIdx) = rawResp.readBytes(byteIdx);
223231
ret.balance = tmp.deserializeBigInt();

contracts/v0.8/cbor/FilecoinCbor.sol

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import "@ensdomains/buffer/contracts/Buffer.sol";
2424

2525
import "../utils/CborDecode.sol";
2626
import "../utils/Misc.sol";
27+
import "../utils/Errors.sol";
2728

2829
import "../types/CommonTypes.sol";
2930

@@ -145,7 +146,10 @@ library FilecoinCBOR {
145146
bytes memory tmp;
146147

147148
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
148-
assert(len == 1);
149+
if (!(len == 1)) {
150+
revert Errors.InvalidArrayLength(1, len);
151+
}
152+
149153

150154
(tmp, byteIdx) = rawResp.readBytes(byteIdx);
151155
return tmp.deserializeBigInt();

contracts/v0.8/cbor/MarketCbor.sol

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import "../types/MarketTypes.sol";
2525
import "../types/CommonTypes.sol";
2626

2727
import "../utils/Misc.sol";
28+
import "../utils/Errors.sol";
2829
import "../utils/FilAddresses.sol";
2930
import "../utils/CborDecode.sol";
3031

@@ -69,7 +70,9 @@ library MarketCBOR {
6970
bytes memory tmp;
7071

7172
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
72-
assert(len == 2);
73+
if (!(len == 2)) {
74+
revert Errors.InvalidArrayLength(2, len);
75+
}
7376

7477
(tmp, byteIdx) = rawResp.readBytes(byteIdx);
7578
ret.balance = tmp.deserializeBigInt();
@@ -111,7 +114,9 @@ library MarketCBOR {
111114
uint len;
112115

113116
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
114-
assert(len == 2);
117+
if (!(len == 2)) {
118+
revert Errors.InvalidArrayLength(2, len);
119+
}
115120

116121
(ret.start, byteIdx) = rawResp.readChainEpoch(byteIdx);
117122
(ret.duration, byteIdx) = rawResp.readChainEpoch(byteIdx);
@@ -127,7 +132,9 @@ library MarketCBOR {
127132
uint len;
128133

129134
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
130-
assert(len == 2);
135+
if (!(len == 2)) {
136+
revert Errors.InvalidArrayLength(2, len);
137+
}
131138

132139
(ret.activated, byteIdx) = rawResp.readChainEpoch(byteIdx);
133140
(ret.terminated, byteIdx) = rawResp.readChainEpoch(byteIdx);
@@ -199,7 +206,9 @@ library MarketCBOR {
199206
uint len;
200207

201208
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
202-
assert(len == 2);
209+
if (!(len == 2)) {
210+
revert Errors.InvalidArrayLength(2, len);
211+
}
203212

204213
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
205214
ret.ids = new uint64[](len);
@@ -230,7 +239,9 @@ library MarketCBOR {
230239
uint len;
231240

232241
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
233-
assert(len == 2);
242+
if (!(len == 2)) {
243+
revert Errors.InvalidArrayLength(2, len);
244+
}
234245

235246
(ret.dealProposal, byteIdx) = rawResp.readBytes(byteIdx);
236247
(ret.dealId, byteIdx) = rawResp.readUInt64(byteIdx);
@@ -279,7 +290,9 @@ library MarketCBOR {
279290
bytes memory tmp;
280291

281292
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
282-
assert(len == 11);
293+
if (!(len == 11)) {
294+
revert Errors.InvalidArrayLength(11, len);
295+
}
283296

284297
(ret.piece_cid, byteIdx) = rawResp.readCid(byteIdx);
285298
(ret.piece_size, byteIdx) = rawResp.readUInt64(byteIdx);

contracts/v0.8/cbor/MinerCbor.sol

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import "../types/CommonTypes.sol";
3030

3131
import "../utils/CborDecode.sol";
3232
import "../utils/Misc.sol";
33+
import "../utils/Errors.sol";
3334

3435
/// @title This library is a set of functions meant to handle CBOR parameters serialization and return values deserialization for Miner actor exported methods.
3536
/// @author Zondax AG
@@ -69,7 +70,9 @@ library MinerCBOR {
6970
uint len;
7071

7172
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
72-
assert(len == 2);
73+
if (!(len == 2)) {
74+
revert Errors.InvalidArrayLength(2, len);
75+
}
7376

7477
(ret.owner.data, byteIdx) = rawResp.readBytes(byteIdx);
7578

@@ -91,15 +94,21 @@ library MinerCBOR {
9194
uint len;
9295

9396
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
94-
assert(len == 2);
97+
if (!(len == 2)) {
98+
revert Errors.InvalidArrayLength(2, len);
99+
}
95100

96101
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
97-
assert(len == 2);
102+
if (!(len == 2)) {
103+
revert Errors.InvalidArrayLength(2, len);
104+
}
98105

99106
(ret.active.beneficiary.data, byteIdx) = rawResp.readBytes(byteIdx);
100107

101108
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
102-
assert(len == 3);
109+
if (!(len == 3)) {
110+
revert Errors.InvalidArrayLength(3, len);
111+
}
103112

104113
(tmp, byteIdx) = rawResp.readBytes(byteIdx);
105114
if (tmp.length > 0) {
@@ -119,7 +128,9 @@ library MinerCBOR {
119128

120129
if (!rawResp.isNullNext(byteIdx)) {
121130
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
122-
assert(len == 5);
131+
if (!(len == 5)) {
132+
revert Errors.InvalidArrayLength(5, len);
133+
}
123134

124135
(ret.proposed.new_beneficiary.data, byteIdx) = rawResp.readBytes(byteIdx);
125136

@@ -151,7 +162,9 @@ library MinerCBOR {
151162
uint leni;
152163

153164
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
154-
assert(len == 1);
165+
if (len != 1) {
166+
revert Errors.InvalidArrayLength(1, len);
167+
}
155168

156169
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
157170
vesting_funds = new MinerTypes.VestingFunds[](len);
@@ -229,7 +242,9 @@ library MinerCBOR {
229242
uint len;
230243

231244
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
232-
assert(len == 1);
245+
if (len != 1) {
246+
revert Errors.InvalidArrayLength(1, len);
247+
}
233248

234249
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
235250
multi_addrs = new CommonTypes.FilAddress[](len);

contracts/v0.8/cbor/PowerCbor.sol

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import "../types/CommonTypes.sol";
2525
import "../types/PowerTypes.sol";
2626
import "../utils/CborDecode.sol";
2727
import "../utils/Misc.sol";
28+
import "../utils/Errors.sol";
2829
import "./BigIntCbor.sol";
2930
import "./BytesCbor.sol";
3031

@@ -76,7 +77,9 @@ library PowerCBOR {
7677
uint len;
7778

7879
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
79-
assert(len == 2);
80+
if (!(len == 2)) {
81+
revert Errors.InvalidArrayLength(2, len);
82+
}
8083

8184
(ret.id_address.data, byteIdx) = rawResp.readBytes(byteIdx);
8285
(ret.robust_address.data, byteIdx) = rawResp.readBytes(byteIdx);
@@ -92,7 +95,9 @@ library PowerCBOR {
9295
uint len;
9396

9497
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
95-
assert(len == 2);
98+
if (!(len == 2)) {
99+
revert Errors.InvalidArrayLength(2, len);
100+
}
96101

97102
bytes memory tmp;
98103
(tmp, byteIdx) = rawResp.readBytes(byteIdx);

contracts/v0.8/cbor/VerifRegCbor.sol

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import "../types/VerifRegTypes.sol";
2626

2727
import "../utils/CborDecode.sol";
2828
import "../utils/Misc.sol";
29+
import "../utils/Errors.sol";
2930

3031
import "./BigIntCbor.sol";
3132
import "./FilecoinCbor.sol";
@@ -74,10 +75,14 @@ library VerifRegCBOR {
7475
uint ilen;
7576

7677
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
77-
assert(len == 2);
78+
if (!(len == 2)) {
79+
revert Errors.InvalidArrayLength(2, len);
80+
}
7881

7982
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
80-
assert(len == 2);
83+
if (!(len == 2)) {
84+
revert Errors.InvalidArrayLength(2, len);
85+
}
8186

8287
(ret.batch_info.success_count, byteIdx) = rawResp.readUInt32(byteIdx);
8388

@@ -86,7 +91,9 @@ library VerifRegCBOR {
8691

8792
for (uint i = 0; i < len; i++) {
8893
(ilen, byteIdx) = rawResp.readFixedArray(byteIdx);
89-
assert(ilen == 2);
94+
if (!(len == 2)) {
95+
revert Errors.InvalidArrayLength(2, len);
96+
}
9097

9198
(ret.batch_info.fail_codes[i].idx, byteIdx) = rawResp.readUInt32(byteIdx);
9299
(ret.batch_info.fail_codes[i].code, byteIdx) = rawResp.readUInt32(byteIdx);
@@ -97,7 +104,9 @@ library VerifRegCBOR {
97104

98105
for (uint i = 0; i < len; i++) {
99106
(ilen, byteIdx) = rawResp.readFixedArray(byteIdx);
100-
assert(ilen == 8);
107+
if (!(len == 8)) {
108+
revert Errors.InvalidArrayLength(8, len);
109+
}
101110

102111
(ret.claims[i].provider, byteIdx) = rawResp.readFilActorId(byteIdx);
103112
(ret.claims[i].client, byteIdx) = rawResp.readFilActorId(byteIdx);
@@ -165,7 +174,9 @@ library VerifRegCBOR {
165174
uint ilen;
166175

167176
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
168-
assert(len == 3);
177+
if (!(len == 3)) {
178+
revert Errors.InvalidArrayLength(3, len);
179+
}
169180

170181
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
171182
ret.considered = new CommonTypes.FilActorId[](len);
@@ -175,7 +186,9 @@ library VerifRegCBOR {
175186
}
176187

177188
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
178-
assert(len == 2);
189+
if (!(len == 2)) {
190+
revert Errors.InvalidArrayLength(2, len);
191+
}
179192

180193
(ret.results.success_count, byteIdx) = rawResp.readUInt32(byteIdx);
181194

@@ -184,7 +197,9 @@ library VerifRegCBOR {
184197

185198
for (uint i = 0; i < len; i++) {
186199
(ilen, byteIdx) = rawResp.readFixedArray(byteIdx);
187-
assert(ilen == 2);
200+
if (!(len == 2)) {
201+
revert Errors.InvalidArrayLength(2, len);
202+
}
188203

189204
(ret.results.fail_codes[i].idx, byteIdx) = rawResp.readUInt32(byteIdx);
190205
(ret.results.fail_codes[i].code, byteIdx) = rawResp.readUInt32(byteIdx);
@@ -235,7 +250,9 @@ library VerifRegCBOR {
235250
uint ilen;
236251

237252
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
238-
assert(len == 2);
253+
if (!(len == 2)) {
254+
revert Errors.InvalidArrayLength(2, len);
255+
}
239256

240257
(ret.success_count, byteIdx) = rawResp.readUInt32(byteIdx);
241258

@@ -244,7 +261,9 @@ library VerifRegCBOR {
244261

245262
for (uint i = 0; i < len; i++) {
246263
(ilen, byteIdx) = rawResp.readFixedArray(byteIdx);
247-
assert(ilen == 2);
264+
if (!(len == 2)) {
265+
revert Errors.InvalidArrayLength(2, len);
266+
}
248267

249268
(ret.fail_codes[i].idx, byteIdx) = rawResp.readUInt32(byteIdx);
250269
(ret.fail_codes[i].code, byteIdx) = rawResp.readUInt32(byteIdx);
@@ -287,7 +306,9 @@ library VerifRegCBOR {
287306
uint ilen;
288307

289308
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
290-
assert(len == 2);
309+
if (!(len == 2)) {
310+
revert Errors.InvalidArrayLength(2, len);
311+
}
291312

292313
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
293314
ret.considered = new CommonTypes.FilActorId[](len);
@@ -297,7 +318,9 @@ library VerifRegCBOR {
297318
}
298319

299320
(len, byteIdx) = rawResp.readFixedArray(byteIdx);
300-
assert(len == 2);
321+
if (!(len == 2)) {
322+
revert Errors.InvalidArrayLength(2, len);
323+
}
301324

302325
(ret.results.success_count, byteIdx) = rawResp.readUInt32(byteIdx);
303326

@@ -306,7 +329,9 @@ library VerifRegCBOR {
306329

307330
for (uint i = 0; i < len; i++) {
308331
(ilen, byteIdx) = rawResp.readFixedArray(byteIdx);
309-
assert(ilen == 2);
332+
if (!(len == 2)) {
333+
revert Errors.InvalidArrayLength(2, len);
334+
}
310335

311336
(ret.results.fail_codes[i].idx, byteIdx) = rawResp.readUInt32(byteIdx);
312337
(ret.results.fail_codes[i].code, byteIdx) = rawResp.readUInt32(byteIdx);

0 commit comments

Comments
 (0)