@openzeppelin/upgrades-core 1.18.0 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/levenshtein.d.ts +4 -1
  2. package/dist/levenshtein.d.ts.map +1 -1
  3. package/dist/levenshtein.js +1 -1
  4. package/dist/levenshtein.js.map +1 -1
  5. package/dist/provider.d.ts.map +1 -1
  6. package/dist/provider.js +2 -0
  7. package/dist/provider.js.map +1 -1
  8. package/dist/storage/compare.d.ts +21 -3
  9. package/dist/storage/compare.d.ts.map +1 -1
  10. package/dist/storage/compare.js +80 -17
  11. package/dist/storage/compare.js.map +1 -1
  12. package/dist/storage/gap.d.ts +18 -0
  13. package/dist/storage/gap.d.ts.map +1 -0
  14. package/dist/storage/gap.js +29 -0
  15. package/dist/storage/gap.js.map +1 -0
  16. package/dist/storage/report-gap.test.d.ts +2 -0
  17. package/dist/storage/report-gap.test.d.ts.map +1 -0
  18. package/dist/storage/report-gap.test.js +106 -0
  19. package/dist/storage/report-gap.test.js.map +1 -0
  20. package/dist/storage/report-rename-retype.test.js +24 -0
  21. package/dist/storage/report-rename-retype.test.js.map +1 -1
  22. package/dist/storage/report.d.ts +1 -1
  23. package/dist/storage/report.d.ts.map +1 -1
  24. package/dist/storage/report.js +59 -10
  25. package/dist/storage/report.js.map +1 -1
  26. package/dist/storage.test.js +421 -2
  27. package/dist/storage.test.js.map +1 -1
  28. package/dist/validate/data.js +25 -5
  29. package/dist/validate/data.js.map +1 -1
  30. package/package.json +3 -3
  31. package/src/levenshtein.ts +4 -2
  32. package/src/provider.ts +2 -0
  33. package/src/storage/compare.ts +88 -18
  34. package/src/storage/gap.ts +26 -0
  35. package/src/storage/report-gap.test.ts +119 -0
  36. package/src/storage/report-gap.test.ts.md +59 -0
  37. package/src/storage/report-gap.test.ts.snap +0 -0
  38. package/src/storage/report-rename-retype.test.ts +27 -0
  39. package/src/storage/report-rename-retype.test.ts.md +7 -0
  40. package/src/storage/report-rename-retype.test.ts.snap +0 -0
  41. package/src/storage/report.test.ts.md +1 -4
  42. package/src/storage/report.test.ts.snap +0 -0
  43. package/src/storage/report.ts +83 -12
  44. package/src/storage.test.ts +466 -2
  45. package/src/storage.test.ts.snap +0 -0
  46. package/src/validate/data.ts +1 -1
  47. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +0 -160
@@ -5,9 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.LayoutCompatibilityReport = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
+ const compare_1 = require("./compare");
8
9
  const itemize_1 = require("../utils/itemize");
9
10
  const indent_1 = require("../utils/indent");
10
11
  const assert_1 = require("../utils/assert");
12
+ const gap_1 = require("./gap");
11
13
  class LayoutCompatibilityReport {
12
14
  constructor(ops) {
13
15
  this.ops = ops;
@@ -33,25 +35,61 @@ class LayoutCompatibilityReport {
33
35
  }
34
36
  }
35
37
  exports.LayoutCompatibilityReport = LayoutCompatibilityReport;
38
+ function getExpectedGapSize(original, updated) {
39
+ const origEnd = (0, compare_1.storageFieldEnd)(original);
40
+ const updatedStart = (0, compare_1.storageFieldBegin)(updated);
41
+ const origNumBytes = original.type.item.numberOfBytes;
42
+ const origTail = original.type.tail;
43
+ if (origEnd === undefined || updatedStart === undefined || origNumBytes === undefined || origTail === undefined) {
44
+ return undefined;
45
+ }
46
+ const bytesPerItem = BigInt(origNumBytes) / BigInt(parseInt(origTail, 10));
47
+ const expectedSizeBytes = origEnd - updatedStart;
48
+ return expectedSizeBytes / bytesPerItem;
49
+ }
50
+ function suggestGapSize(original, updated) {
51
+ const expectedSize = getExpectedGapSize(original, updated);
52
+ if (expectedSize !== undefined) {
53
+ return `Set __gap array to size ${expectedSize}`;
54
+ }
55
+ else {
56
+ return '';
57
+ }
58
+ }
36
59
  function explainStorageOperation(op, ctx) {
37
60
  switch (op.kind) {
61
+ case 'shrinkgap':
38
62
  case 'typechange': {
39
- const basic = explainTypeChange(op.change);
63
+ const basic = explainTypeChange(op.change, op.original, op.updated);
40
64
  const details = ctx.kind === 'layout' // explain details for layout only
41
65
  ? new Set(getAllTypeChanges(op.change)
42
66
  .map(explainTypeChangeDetails)
43
67
  .filter((d) => d !== undefined))
44
68
  : [];
45
- return `Upgraded ${label(op.updated)} to an incompatible type\n` + (0, itemize_1.itemize)(basic, ...details);
69
+ const hints = [];
70
+ if ((0, gap_1.isGap)(op.original) && op.change.kind === 'array shrink') {
71
+ hints.push(suggestGapSize(op.original, op.updated));
72
+ }
73
+ return printWithHints({
74
+ title: `Upgraded ${label(op.updated)} to an incompatible type\n` + (0, itemize_1.itemize)(basic, ...details),
75
+ hints,
76
+ });
46
77
  }
78
+ case 'finishgap':
79
+ return `Converted end of storage gap ${label(op.original)} to ${label(op.updated)}`;
47
80
  case 'rename':
48
81
  return `Renamed ${label(op.original)} to ${label(op.updated)}`;
49
82
  case 'replace':
50
83
  return `Replaced ${label(op.original)} with ${label(op.updated)} of incompatible type`;
51
84
  case 'layoutchange': {
52
- return (`Layout ${op.change.uncertain ? 'could have changed' : 'changed'} for ${label(op.updated)} ` +
85
+ const title = `Layout ${op.change.uncertain ? 'could have changed' : 'changed'} for ${label(op.updated)} ` +
53
86
  `(${op.original.type.item.label} -> ${op.updated.type.item.label})\n` +
54
- describeLayoutTransition(op.change)).trimEnd();
87
+ describeLayoutTransition(op.change);
88
+ const hints = [];
89
+ if ((0, gap_1.isGap)(op.original)) {
90
+ hints.push(suggestGapSize(op.original, op.updated));
91
+ }
92
+ return printWithHints({ title, hints });
55
93
  }
56
94
  default: {
57
95
  const title = explainBasicOperation(op, t => t.label);
@@ -76,11 +114,14 @@ function explainStorageOperation(op, ctx) {
76
114
  break;
77
115
  }
78
116
  }
79
- return title + '\n' + (0, itemize_1.itemizeWith)('>', ...hints);
117
+ return printWithHints({ title, hints });
80
118
  }
81
119
  }
82
120
  }
83
- function explainTypeChange(ch) {
121
+ function printWithHints(result) {
122
+ return (result.title + '\n' + (0, itemize_1.itemizeWith)('>', ...result.hints)).trimEnd();
123
+ }
124
+ function explainTypeChange(ch, original, updated) {
84
125
  switch (ch.kind) {
85
126
  case 'visibility change':
86
127
  return `Bad upgrade ${describeTransition(ch.original, ch.updated)}\nDifferent visibility`;
@@ -91,17 +132,25 @@ function explainTypeChange(ch) {
91
132
  case 'enum resize':
92
133
  return `Bad upgrade ${describeTransition(ch.original, ch.updated)}\nDifferent representation sizes`;
93
134
  case 'mapping key':
94
- return `In key of ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner));
135
+ return `In key of ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner, original, updated));
95
136
  case 'mapping value':
96
137
  case 'array value':
97
- return `In ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner));
138
+ return `In ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner, original, updated));
98
139
  case 'array shrink':
99
140
  case 'array grow': {
100
141
  (0, assert_1.assert)(ch.original.tail && ch.updated.tail);
101
142
  const originalSize = parseInt(ch.original.tail, 10);
102
143
  const updatedSize = parseInt(ch.updated.tail, 10);
103
- const note = ch.kind === 'array shrink' ? 'Size cannot decrease' : 'Size cannot increase here';
104
- return `Bad array resize from ${originalSize} to ${updatedSize}\n${note}`;
144
+ if ((0, gap_1.isGap)(original)) {
145
+ const note = ch.kind === 'array shrink'
146
+ ? 'Size decrease must match with corresponding variable inserts'
147
+ : 'Size cannot increase';
148
+ return `Bad storage gap resize from ${originalSize} to ${updatedSize}\n${note}`;
149
+ }
150
+ else {
151
+ const note = ch.kind === 'array shrink' ? 'Size cannot decrease' : 'Size cannot increase here';
152
+ return `Bad array resize from ${originalSize} to ${updatedSize}\n${note}`;
153
+ }
105
154
  }
106
155
  case 'array dynamic': {
107
156
  (0, assert_1.assert)(ch.original.tail && ch.updated.tail);
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ test('storage upgrade delete', t => {
54
54
  const v2 = t.context.extractStorageLayout('StorageUpgrade_Delete_V2');
55
55
  const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
56
56
  t.like(comparison, {
57
- length: 1,
57
+ length: 2,
58
58
  0: {
59
59
  kind: 'delete',
60
60
  original: {
@@ -65,6 +65,23 @@ test('storage upgrade delete', t => {
65
65
  },
66
66
  },
67
67
  },
68
+ 1: {
69
+ kind: 'layoutchange',
70
+ original: {
71
+ label: 'x2',
72
+ type: {
73
+ id: 't_address',
74
+ },
75
+ slot: '1',
76
+ },
77
+ updated: {
78
+ label: 'x2',
79
+ type: {
80
+ id: 't_address',
81
+ },
82
+ slot: '0',
83
+ },
84
+ },
68
85
  });
69
86
  });
70
87
  test('storage upgrade replace', t => {
@@ -160,7 +177,7 @@ test('storage upgrade with structs', t => {
160
177
  change: {
161
178
  kind: 'struct members',
162
179
  ops: {
163
- length: 2,
180
+ length: 3,
164
181
  0: { kind: 'delete' },
165
182
  },
166
183
  },
@@ -429,6 +446,408 @@ test('storage upgrade with embedded enum inside struct type', t => {
429
446
  const v2 = t.context.extractStorageLayout('StorageUpgrade_StructEnum_V2');
430
447
  t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
431
448
  });
449
+ test('storage upgrade with gap', t => {
450
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
451
+ const v2_Ok = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Ok');
452
+ const v2_Bad1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad1');
453
+ const v2_Bad2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad2');
454
+ const v2_Bad3 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad3');
455
+ const v2_Bad4 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad4');
456
+ const v2_Bad5 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad5');
457
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2_Ok), []);
458
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad1), {
459
+ length: 2,
460
+ 0: {
461
+ kind: 'layoutchange',
462
+ change: {
463
+ slot: {
464
+ from: '2',
465
+ to: '3',
466
+ },
467
+ },
468
+ original: { label: '__gap' },
469
+ updated: { label: '__gap' },
470
+ },
471
+ 1: {
472
+ kind: 'layoutchange',
473
+ change: {
474
+ slot: {
475
+ from: '50',
476
+ to: '51',
477
+ },
478
+ },
479
+ original: { label: 'z' },
480
+ updated: { label: 'z' },
481
+ },
482
+ });
483
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad2), {
484
+ length: 2,
485
+ 0: {
486
+ kind: 'delete',
487
+ original: { label: 'b' },
488
+ },
489
+ 1: {
490
+ kind: 'typechange',
491
+ change: { kind: 'array grow' },
492
+ },
493
+ });
494
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad3), {
495
+ length: 2,
496
+ 0: {
497
+ kind: 'typechange',
498
+ change: { kind: 'array shrink' },
499
+ },
500
+ 1: {
501
+ kind: 'layoutchange',
502
+ change: {
503
+ slot: {
504
+ from: '50',
505
+ to: '49',
506
+ },
507
+ },
508
+ original: { label: 'z' },
509
+ updated: { label: 'z' },
510
+ },
511
+ });
512
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad4), {
513
+ length: 2,
514
+ 0: {
515
+ kind: 'typechange',
516
+ change: { kind: 'array shrink' },
517
+ },
518
+ 1: {
519
+ kind: 'layoutchange',
520
+ change: {
521
+ slot: {
522
+ from: '50',
523
+ to: '49',
524
+ },
525
+ },
526
+ original: { label: 'z' },
527
+ updated: { label: 'z' },
528
+ },
529
+ });
530
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad5), {
531
+ length: 2,
532
+ 0: {
533
+ kind: 'typechange',
534
+ change: { kind: 'array shrink' },
535
+ original: { label: '__gap' },
536
+ updated: { label: '__gap' },
537
+ },
538
+ 1: {
539
+ kind: 'layoutchange',
540
+ change: {
541
+ slot: {
542
+ from: '50',
543
+ to: '51',
544
+ },
545
+ },
546
+ original: { label: 'z' },
547
+ updated: { label: 'z' },
548
+ },
549
+ });
550
+ });
551
+ test('storage upgrade with bytes32 gap', t => {
552
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V1');
553
+ const v2_Ok = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V2_Ok');
554
+ const v2_Bad1 = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V2_Bad1');
555
+ const v2_Bad2 = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V2_Bad2');
556
+ const v2_Bad3 = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V2_Bad3');
557
+ const v2_Bad4 = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V2_Bad4');
558
+ const v2_Bad5 = t.context.extractStorageLayout('StorageUpgrade_Bytes32Gap_V2_Bad5');
559
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2_Ok), []);
560
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad1), {
561
+ length: 2,
562
+ 0: {
563
+ kind: 'layoutchange',
564
+ change: {
565
+ slot: {
566
+ from: '2',
567
+ to: '3',
568
+ },
569
+ },
570
+ original: { label: '__gap' },
571
+ updated: { label: '__gap' },
572
+ },
573
+ 1: {
574
+ kind: 'layoutchange',
575
+ change: {
576
+ slot: {
577
+ from: '50',
578
+ to: '51',
579
+ },
580
+ },
581
+ original: { label: 'z' },
582
+ updated: { label: 'z' },
583
+ },
584
+ });
585
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad2), {
586
+ length: 2,
587
+ 0: {
588
+ kind: 'delete',
589
+ original: { label: 'b' },
590
+ },
591
+ 1: {
592
+ kind: 'typechange',
593
+ change: { kind: 'array grow' },
594
+ },
595
+ });
596
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad3), {
597
+ length: 2,
598
+ 0: {
599
+ kind: 'typechange',
600
+ change: { kind: 'array shrink' },
601
+ },
602
+ 1: {
603
+ kind: 'layoutchange',
604
+ change: {
605
+ slot: {
606
+ from: '50',
607
+ to: '49',
608
+ },
609
+ },
610
+ original: { label: 'z' },
611
+ updated: { label: 'z' },
612
+ },
613
+ });
614
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad4), {
615
+ length: 2,
616
+ 0: {
617
+ kind: 'typechange',
618
+ change: { kind: 'array shrink' },
619
+ },
620
+ 1: {
621
+ kind: 'layoutchange',
622
+ change: {
623
+ slot: {
624
+ from: '50',
625
+ to: '49',
626
+ },
627
+ },
628
+ original: { label: 'z' },
629
+ updated: { label: 'z' },
630
+ },
631
+ });
632
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad5), {
633
+ length: 2,
634
+ 0: {
635
+ kind: 'typechange',
636
+ change: { kind: 'array shrink' },
637
+ original: { label: '__gap' },
638
+ updated: { label: '__gap' },
639
+ },
640
+ 1: {
641
+ kind: 'layoutchange',
642
+ change: {
643
+ slot: {
644
+ from: '50',
645
+ to: '51',
646
+ },
647
+ },
648
+ original: { label: 'z' },
649
+ updated: { label: 'z' },
650
+ },
651
+ });
652
+ });
653
+ test('storage upgrade with multiple items consuming a gap', t => {
654
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_MultiConsumeGap_V1');
655
+ const v2_Ok = t.context.extractStorageLayout('StorageUpgrade_MultiConsumeGap_V2_Ok');
656
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2_Ok), []);
657
+ });
658
+ test('storage upgrade that consumes gap and inherited gap', t => {
659
+ const v1a = t.context.extractStorageLayout('StorageUpgrade_EndGap_V1a');
660
+ const v1b = t.context.extractStorageLayout('StorageUpgrade_EndGap_V1b');
661
+ const v1c = t.context.extractStorageLayout('StorageUpgrade_EndGap_V1c');
662
+ const v2a = t.context.extractStorageLayout('StorageUpgrade_EndGap_V2a');
663
+ const v2b = t.context.extractStorageLayout('StorageUpgrade_EndGap_V2b');
664
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1a, v2a), []);
665
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1b, v2a), {
666
+ length: 1,
667
+ 0: {
668
+ kind: 'delete',
669
+ original: { label: '__gap' },
670
+ },
671
+ });
672
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1c, v2a), {
673
+ length: 2,
674
+ 0: {
675
+ kind: 'delete',
676
+ original: { label: '__gap' },
677
+ },
678
+ 1: {
679
+ kind: 'delete',
680
+ original: { label: 'b' },
681
+ },
682
+ });
683
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1b, v2b), []);
684
+ });
685
+ test('storage upgrade that consumes gap and inherited gap with smaller data type', t => {
686
+ const v1a = t.context.extractStorageLayout('StorageUpgrade_EndGap_Uint128_V1a');
687
+ const v1b = t.context.extractStorageLayout('StorageUpgrade_EndGap_Uint128_V1b');
688
+ const v1c = t.context.extractStorageLayout('StorageUpgrade_EndGap_Uint128_V1c');
689
+ const v2a = t.context.extractStorageLayout('StorageUpgrade_EndGap_Uint128_V2a');
690
+ const v2b = t.context.extractStorageLayout('StorageUpgrade_EndGap_Uint128_V2b');
691
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1a, v2a), []);
692
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1b, v2a), {
693
+ length: 1,
694
+ 0: {
695
+ kind: 'delete',
696
+ original: { label: '__gap' },
697
+ },
698
+ });
699
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1c, v2a), {
700
+ length: 2,
701
+ 0: {
702
+ kind: 'delete',
703
+ original: { label: '__gap' },
704
+ },
705
+ 1: {
706
+ kind: 'delete',
707
+ original: { label: 'b' },
708
+ },
709
+ });
710
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1b, v2b), []);
711
+ });
712
+ test('storage upgrade with different typed gaps', t => {
713
+ const uint256gap_address_v1 = t.context.extractStorageLayout('StorageUpgrade_Uint256Gap_Address_V1');
714
+ const uint256gap_address_v2 = t.context.extractStorageLayout('StorageUpgrade_Uint256Gap_Address_V2');
715
+ const address_v1 = t.context.extractStorageLayout('StorageUpgrade_AddressGap_V1');
716
+ const address_v2 = t.context.extractStorageLayout('StorageUpgrade_AddressGap_V2');
717
+ const uint128_v1 = t.context.extractStorageLayout('StorageUpgrade_Uint128Gap_V1');
718
+ const uint128_v2_ok = t.context.extractStorageLayout('StorageUpgrade_Uint128Gap_V2_Ok');
719
+ const uint128_v2b_ok = t.context.extractStorageLayout('StorageUpgrade_Uint128Gap_V2b_Ok');
720
+ const uint128_v2_bad = t.context.extractStorageLayout('StorageUpgrade_Uint128Gap_V2_Bad');
721
+ const bool_v1 = t.context.extractStorageLayout('StorageUpgrade_BoolGap_V1');
722
+ const bool_v2_ok = t.context.extractStorageLayout('StorageUpgrade_BoolGap_V2_Ok');
723
+ const bool_v2_bad = t.context.extractStorageLayout('StorageUpgrade_BoolGap_V2_Bad');
724
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(uint256gap_address_v1, uint256gap_address_v2), []);
725
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(address_v1, address_v2), []);
726
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(uint128_v1, uint128_v2_ok), []);
727
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(uint128_v1, uint128_v2b_ok), []);
728
+ t.like((0, storage_1.getStorageUpgradeErrors)(uint128_v1, uint128_v2_bad), {
729
+ length: 2,
730
+ 0: {
731
+ kind: 'layoutchange',
732
+ change: {
733
+ slot: {
734
+ from: '1',
735
+ to: '2',
736
+ },
737
+ },
738
+ original: { label: '__gap' },
739
+ updated: { label: '__gap' },
740
+ },
741
+ 1: {
742
+ kind: 'layoutchange',
743
+ change: {
744
+ slot: {
745
+ from: '26',
746
+ to: '27',
747
+ },
748
+ },
749
+ original: { label: 'z' },
750
+ updated: { label: 'z' },
751
+ },
752
+ });
753
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(bool_v1, bool_v2_ok), []);
754
+ t.like((0, storage_1.getStorageUpgradeErrors)(bool_v1, bool_v2_bad), {
755
+ length: 2,
756
+ 0: {
757
+ kind: 'typechange',
758
+ change: { kind: 'array shrink' },
759
+ original: { label: '__gap' },
760
+ updated: { label: '__gap' },
761
+ },
762
+ 1: {
763
+ kind: 'typechange',
764
+ change: { kind: 'obvious mismatch' },
765
+ original: { label: 'z' },
766
+ updated: { label: 'z' },
767
+ },
768
+ });
769
+ });
770
+ test('storage upgrade with one element gap', t => {
771
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_One_Element_V1');
772
+ const v2_Ok = t.context.extractStorageLayout('StorageUpgrade_Gap_One_Element_V2_Ok');
773
+ const v2b_Ok = t.context.extractStorageLayout('StorageUpgrade_Gap_One_Element_V2b_Ok');
774
+ const v2_Bad = t.context.extractStorageLayout('StorageUpgrade_Gap_One_Element_V2_Bad');
775
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2_Ok), []);
776
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2b_Ok), []);
777
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad), {
778
+ length: 2,
779
+ 0: {
780
+ kind: 'layoutchange',
781
+ change: {
782
+ slot: {
783
+ from: '2',
784
+ to: '3',
785
+ },
786
+ },
787
+ original: { label: '__gap' },
788
+ updated: { label: '__gap' },
789
+ },
790
+ 1: {
791
+ kind: 'layoutchange',
792
+ change: {
793
+ slot: {
794
+ from: '3',
795
+ to: '4',
796
+ },
797
+ },
798
+ original: { label: 'z' },
799
+ updated: { label: 'z' },
800
+ },
801
+ });
802
+ });
803
+ test('storage upgrade with bool non-array named as __gap', t => {
804
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_Bool_Not_Array_V1');
805
+ const v2_Bad = t.context.extractStorageLayout('StorageUpgrade_Gap_Bool_Not_Array_V2_Bad');
806
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad), {
807
+ length: 1,
808
+ 0: {
809
+ kind: 'rename',
810
+ original: { label: '__gap' },
811
+ updated: { label: 'c' },
812
+ },
813
+ });
814
+ });
815
+ test('storage upgrade with uint256 non-array named as __gap', t => {
816
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_Uint256_Not_Array_V1');
817
+ const v2_Bad = t.context.extractStorageLayout('StorageUpgrade_Gap_Uint256_Not_Array_V2_Bad');
818
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad), {
819
+ length: 1,
820
+ 0: {
821
+ kind: 'rename',
822
+ original: { label: '__gap' },
823
+ updated: { label: 'c' },
824
+ },
825
+ });
826
+ });
827
+ test('storage upgrade with struct gap', t => {
828
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_StructGap_V1');
829
+ const v2_Ok = t.context.extractStorageLayout('StorageUpgrade_StructGap_V2_Ok');
830
+ const v2_Bad = t.context.extractStorageLayout('StorageUpgrade_StructGap_V2_Bad');
831
+ t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2_Ok), []);
832
+ t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2_Bad), {
833
+ length: 3,
834
+ 0: {
835
+ kind: 'typechange',
836
+ original: { label: 'store_mapping' },
837
+ updated: { label: 'store_mapping' },
838
+ },
839
+ 1: {
840
+ kind: 'typechange',
841
+ original: { label: 'store_fixed_array' },
842
+ updated: { label: 'store_fixed_array' },
843
+ },
844
+ 2: {
845
+ kind: 'typechange',
846
+ original: { label: 'store_dynamic_array' },
847
+ updated: { label: 'store_dynamic_array' },
848
+ },
849
+ });
850
+ });
432
851
  function stabilizeStorageLayout(layout) {
433
852
  return {
434
853
  storage: layout.storage.map(s => ({ ...s, type: (0, type_id_1.stabilizeTypeIdentifier)(s.type) })),