@ensuro/core 1.2.5 → 2.0.0-beta1

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 (92) hide show
  1. package/README.md +44 -17
  2. package/build/contracts/EToken.sol/EToken.json +141 -177
  3. package/build/contracts/FlightDelayRiskModule.sol/FlightDelayRiskModule.json +112 -315
  4. package/build/contracts/LPManualWhitelist.sol/LPManualWhitelist.json +34 -2
  5. package/build/contracts/Policy.sol/Policy.json +2 -2
  6. package/build/contracts/PolicyNFT.sol/PolicyNFT.json +16 -3
  7. package/build/contracts/PolicyPool.sol/PolicyPool.json +105 -351
  8. package/build/contracts/PolicyPoolComponent.sol/PolicyPoolComponent.json +32 -0
  9. package/build/contracts/PolicyPoolConfig.sol/PolicyPoolConfig.json +77 -72
  10. package/build/contracts/PremiumsAccount.sol/PremiumsAccount.json +761 -0
  11. package/build/contracts/{BaseAssetManager.sol/BaseAssetManager.json → Reserve.sol/Reserve.json} +23 -191
  12. package/build/contracts/RiskModule.sol/RiskModule.json +94 -302
  13. package/build/contracts/TimeScaled.sol/TimeScaled.json +24 -0
  14. package/build/contracts/TrustfulRiskModule.sol/TrustfulRiskModule.json +142 -325
  15. package/build/contracts/dependencies/ChainlinkClientUpgradeable.sol/ChainlinkClientUpgradeable.json +15 -2
  16. package/build/contracts/dependencies/ERC1967Proxy.sol/ERC1967Proxy.json +64 -0
  17. package/build/{interfaces/IExchange.sol/IExchange.json → contracts/dependencies/IERC20Metadata.sol/IERC20Metadata.json} +83 -79
  18. package/build/{interfaces → contracts/interfaces}/IEToken.sol/IEToken.json +32 -97
  19. package/build/{interfaces → contracts/interfaces}/ILPWhitelist.sol/ILPWhitelist.json +1 -1
  20. package/build/{interfaces → contracts/interfaces}/IPolicyHolder.sol/IPolicyHolder.json +1 -1
  21. package/build/{interfaces → contracts/interfaces}/IPolicyNFT.sol/IPolicyNFT.json +1 -1
  22. package/build/{interfaces → contracts/interfaces}/IPolicyPool.sol/IPolicyPool.json +121 -108
  23. package/build/{interfaces → contracts/interfaces}/IPolicyPoolComponent.sol/IPolicyPoolComponent.json +1 -1
  24. package/build/{interfaces → contracts/interfaces}/IPolicyPoolConfig.sol/IPolicyPoolConfig.json +20 -36
  25. package/build/contracts/interfaces/IPremiumsAccount.sol/IPremiumsAccount.json +302 -0
  26. package/build/{interfaces → contracts/interfaces}/IRiskModule.sol/IRiskModule.json +58 -34
  27. package/build/contracts/mocks/ForwardProxy.sol/ForwardProxy.json +43 -0
  28. package/build/{interfaces/IInsolvencyHook.sol/IInsolvencyHook.json → contracts/mocks/IMintableERC20.sol/IMintableERC20.json} +13 -8
  29. package/build/contracts/mocks/LinkTokenMock.sol/LinkTokenMock.json +370 -0
  30. package/build/contracts/mocks/PolicyHolderMock.sol/PolicyHolderMock.json +202 -0
  31. package/build/contracts/mocks/PolicyPoolComponentMock.sol/PolicyPoolComponentMock.json +35 -0
  32. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMock.json +603 -0
  33. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMockForward.json +92 -0
  34. package/build/contracts/mocks/TestCurrency.sol/TestCurrency.json +343 -0
  35. package/build/contracts/mocks/TestCurrencyUUPS.sol/TestCurrencyUUPS.json +353 -0
  36. package/build/contracts/mocks/TestNFT.sol/TestNFT.json +388 -0
  37. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1.json +16 -3
  38. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1_Upgrade.json +16 -3
  39. package/contracts/EToken.sol +188 -273
  40. package/contracts/FlightDelayRiskModule.sol +30 -21
  41. package/contracts/LPManualWhitelist.sol +3 -3
  42. package/contracts/Policy.sol +48 -44
  43. package/contracts/PolicyNFT.sol +2 -2
  44. package/contracts/PolicyPool.sol +114 -467
  45. package/contracts/PolicyPoolComponent.sol +14 -3
  46. package/contracts/PolicyPoolConfig.sol +30 -73
  47. package/contracts/PremiumsAccount.sol +274 -0
  48. package/contracts/Reserve.sol +34 -0
  49. package/contracts/RiskModule.sol +216 -164
  50. package/contracts/TimeScaled.sol +134 -0
  51. package/contracts/TrustfulRiskModule.sol +23 -21
  52. package/contracts/dependencies/ERC1967Proxy.sol +19 -0
  53. package/contracts/dependencies/IERC20Metadata.sol +19 -0
  54. package/contracts/interfaces/IEToken.sol +172 -0
  55. package/{interfaces → contracts/interfaces}/ILPWhitelist.sol +0 -0
  56. package/{interfaces → contracts/interfaces}/IPolicyHolder.sol +0 -0
  57. package/{interfaces → contracts/interfaces}/IPolicyNFT.sol +0 -0
  58. package/contracts/interfaces/IPolicyPool.sol +138 -0
  59. package/{interfaces → contracts/interfaces}/IPolicyPoolComponent.sol +0 -0
  60. package/{interfaces → contracts/interfaces}/IPolicyPoolConfig.sol +31 -20
  61. package/contracts/interfaces/IPremiumsAccount.sol +71 -0
  62. package/contracts/interfaces/IRiskModule.sol +60 -0
  63. package/contracts/mocks/ForwardProxy.sol +66 -0
  64. package/contracts/mocks/IMintableERC20.sol +13 -0
  65. package/contracts/mocks/LinkTokenMock.sol +30 -0
  66. package/contracts/mocks/PolicyHolderMock.sol +68 -0
  67. package/contracts/mocks/PolicyPoolComponentMock.sol +17 -0
  68. package/contracts/mocks/PolicyPoolMock.sol +122 -0
  69. package/contracts/mocks/TestCurrency.sol +35 -0
  70. package/contracts/mocks/TestNFT.sol +23 -0
  71. package/contracts/upgraded/PolicyNFTv1.sol +1 -1
  72. package/js/test-utils.js +278 -0
  73. package/package.json +2 -2
  74. package/build/contracts/AaveAssetManager.sol/AaveAssetManager.json +0 -723
  75. package/build/contracts/DataTypes.sol/DataTypes.json +0 -10
  76. package/build/contracts/Exchange.sol/Exchange.json +0 -546
  77. package/build/contracts/extras/IPriceRiskModule.sol/IPriceRiskModule.json +0 -253
  78. package/build/contracts/extras/PriceRiskModule.sol/PriceRiskModule.json +0 -1036
  79. package/build/interfaces/IAssetManager.sol/IAssetManager.json +0 -31
  80. package/build/interfaces/IExchange.sol/IPriceOracle.json +0 -30
  81. package/contracts/AaveAssetManager.sol +0 -298
  82. package/contracts/BaseAssetManager.sol +0 -301
  83. package/contracts/DataTypes.sol +0 -287
  84. package/contracts/Exchange.sol +0 -173
  85. package/contracts/extras/IPriceRiskModule.sol +0 -41
  86. package/contracts/extras/PriceRiskModule.sol +0 -243
  87. package/interfaces/IAssetManager.sol +0 -23
  88. package/interfaces/IEToken.sol +0 -48
  89. package/interfaces/IExchange.sol +0 -59
  90. package/interfaces/IInsolvencyHook.sol +0 -27
  91. package/interfaces/IPolicyPool.sol +0 -44
  92. package/interfaces/IRiskModule.sol +0 -29
@@ -44,27 +44,14 @@
44
44
  "name": "action",
45
45
  "type": "uint8"
46
46
  },
47
- {
48
- "indexed": false,
49
- "internalType": "uint256",
50
- "name": "value",
51
- "type": "uint256"
52
- }
53
- ],
54
- "name": "GovernanceAction",
55
- "type": "event"
56
- },
57
- {
58
- "anonymous": false,
59
- "inputs": [
60
47
  {
61
48
  "indexed": false,
62
49
  "internalType": "address",
63
- "name": "account",
50
+ "name": "value",
64
51
  "type": "address"
65
52
  }
66
53
  ],
67
- "name": "Paused",
54
+ "name": "ComponentChanged",
68
55
  "type": "event"
69
56
  },
70
57
  {
@@ -72,74 +59,44 @@
72
59
  "inputs": [
73
60
  {
74
61
  "indexed": true,
75
- "internalType": "bytes32",
76
- "name": "role",
77
- "type": "bytes32"
78
- },
79
- {
80
- "indexed": true,
81
- "internalType": "bytes32",
82
- "name": "previousAdminRole",
83
- "type": "bytes32"
62
+ "internalType": "enum IPolicyPoolConfig.GovernanceActions",
63
+ "name": "action",
64
+ "type": "uint8"
84
65
  },
85
66
  {
86
- "indexed": true,
87
- "internalType": "bytes32",
88
- "name": "newAdminRole",
89
- "type": "bytes32"
67
+ "indexed": false,
68
+ "internalType": "uint256",
69
+ "name": "value",
70
+ "type": "uint256"
90
71
  }
91
72
  ],
92
- "name": "RoleAdminChanged",
73
+ "name": "GovernanceAction",
93
74
  "type": "event"
94
75
  },
95
76
  {
96
77
  "anonymous": false,
97
78
  "inputs": [
98
79
  {
99
- "indexed": true,
100
- "internalType": "bytes32",
101
- "name": "role",
102
- "type": "bytes32"
103
- },
104
- {
105
- "indexed": true,
106
- "internalType": "address",
107
- "name": "account",
108
- "type": "address"
109
- },
110
- {
111
- "indexed": true,
112
- "internalType": "address",
113
- "name": "sender",
114
- "type": "address"
80
+ "indexed": false,
81
+ "internalType": "uint8",
82
+ "name": "version",
83
+ "type": "uint8"
115
84
  }
116
85
  ],
117
- "name": "RoleGranted",
86
+ "name": "Initialized",
118
87
  "type": "event"
119
88
  },
120
89
  {
121
90
  "anonymous": false,
122
91
  "inputs": [
123
92
  {
124
- "indexed": true,
125
- "internalType": "bytes32",
126
- "name": "role",
127
- "type": "bytes32"
128
- },
129
- {
130
- "indexed": true,
93
+ "indexed": false,
131
94
  "internalType": "address",
132
95
  "name": "account",
133
96
  "type": "address"
134
- },
135
- {
136
- "indexed": true,
137
- "internalType": "address",
138
- "name": "sender",
139
- "type": "address"
140
97
  }
141
98
  ],
142
- "name": "RoleRevoked",
99
+ "name": "Paused",
143
100
  "type": "event"
144
101
  },
145
102
  {
@@ -170,7 +127,7 @@
170
127
  },
171
128
  {
172
129
  "inputs": [],
173
- "name": "DEFAULT_ADMIN_ROLE",
130
+ "name": "GUARDIAN_ROLE",
174
131
  "outputs": [
175
132
  {
176
133
  "internalType": "bytes32",
@@ -183,7 +140,7 @@
183
140
  },
184
141
  {
185
142
  "inputs": [],
186
- "name": "GUARDIAN_ROLE",
143
+ "name": "LEVEL1_ROLE",
187
144
  "outputs": [
188
145
  {
189
146
  "internalType": "bytes32",
@@ -196,7 +153,7 @@
196
153
  },
197
154
  {
198
155
  "inputs": [],
199
- "name": "LEVEL1_ROLE",
156
+ "name": "LEVEL2_ROLE",
200
157
  "outputs": [
201
158
  {
202
159
  "internalType": "bytes32",
@@ -209,7 +166,7 @@
209
166
  },
210
167
  {
211
168
  "inputs": [],
212
- "name": "LEVEL2_ROLE",
169
+ "name": "LEVEL3_ROLE",
213
170
  "outputs": [
214
171
  {
215
172
  "internalType": "bytes32",
@@ -222,7 +179,7 @@
222
179
  },
223
180
  {
224
181
  "inputs": [],
225
- "name": "LEVEL3_ROLE",
182
+ "name": "RM_PROVIDER_ROLE",
226
183
  "outputs": [
227
184
  {
228
185
  "internalType": "bytes32",
@@ -235,12 +192,12 @@
235
192
  },
236
193
  {
237
194
  "inputs": [],
238
- "name": "RM_PROVIDER_ROLE",
195
+ "name": "TWEAK_EXPIRATION",
239
196
  "outputs": [
240
197
  {
241
- "internalType": "bytes32",
198
+ "internalType": "uint40",
242
199
  "name": "",
243
- "type": "bytes32"
200
+ "type": "uint40"
244
201
  }
245
202
  ],
246
203
  "stateMutability": "view",
@@ -248,12 +205,12 @@
248
205
  },
249
206
  {
250
207
  "inputs": [],
251
- "name": "TWEAK_EXPIRATION",
208
+ "name": "activeExposure",
252
209
  "outputs": [
253
210
  {
254
- "internalType": "uint40",
211
+ "internalType": "uint256",
255
212
  "name": "",
256
- "type": "uint40"
213
+ "type": "uint256"
257
214
  }
258
215
  ],
259
216
  "stateMutability": "view",
@@ -274,7 +231,7 @@
274
231
  },
275
232
  {
276
233
  "inputs": [],
277
- "name": "ensuroFee",
234
+ "name": "exposureLimit",
278
235
  "outputs": [
279
236
  {
280
237
  "internalType": "uint256",
@@ -314,67 +271,6 @@
314
271
  "stateMutability": "view",
315
272
  "type": "function"
316
273
  },
317
- {
318
- "inputs": [
319
- {
320
- "internalType": "bytes32",
321
- "name": "role",
322
- "type": "bytes32"
323
- }
324
- ],
325
- "name": "getRoleAdmin",
326
- "outputs": [
327
- {
328
- "internalType": "bytes32",
329
- "name": "",
330
- "type": "bytes32"
331
- }
332
- ],
333
- "stateMutability": "view",
334
- "type": "function"
335
- },
336
- {
337
- "inputs": [
338
- {
339
- "internalType": "bytes32",
340
- "name": "role",
341
- "type": "bytes32"
342
- },
343
- {
344
- "internalType": "address",
345
- "name": "account",
346
- "type": "address"
347
- }
348
- ],
349
- "name": "grantRole",
350
- "outputs": [],
351
- "stateMutability": "nonpayable",
352
- "type": "function"
353
- },
354
- {
355
- "inputs": [
356
- {
357
- "internalType": "bytes32",
358
- "name": "role",
359
- "type": "bytes32"
360
- },
361
- {
362
- "internalType": "address",
363
- "name": "account",
364
- "type": "address"
365
- }
366
- ],
367
- "name": "hasRole",
368
- "outputs": [
369
- {
370
- "internalType": "bool",
371
- "name": "",
372
- "type": "bool"
373
- }
374
- ],
375
- "stateMutability": "view",
376
- "type": "function"
377
- },
378
274
  {
379
275
  "inputs": [],
380
276
  "name": "lastTweak",
@@ -395,7 +291,7 @@
395
291
  },
396
292
  {
397
293
  "inputs": [],
398
- "name": "maxScrPerPolicy",
294
+ "name": "maxDuration",
399
295
  "outputs": [
400
296
  {
401
297
  "internalType": "uint256",
@@ -408,7 +304,7 @@
408
304
  },
409
305
  {
410
306
  "inputs": [],
411
- "name": "moc",
307
+ "name": "maxPayoutPerPolicy",
412
308
  "outputs": [
413
309
  {
414
310
  "internalType": "uint256",
@@ -432,6 +328,56 @@
432
328
  "stateMutability": "view",
433
329
  "type": "function"
434
330
  },
331
+ {
332
+ "inputs": [],
333
+ "name": "params",
334
+ "outputs": [
335
+ {
336
+ "components": [
337
+ {
338
+ "internalType": "uint256",
339
+ "name": "moc",
340
+ "type": "uint256"
341
+ },
342
+ {
343
+ "internalType": "uint256",
344
+ "name": "jrCollRatio",
345
+ "type": "uint256"
346
+ },
347
+ {
348
+ "internalType": "uint256",
349
+ "name": "collRatio",
350
+ "type": "uint256"
351
+ },
352
+ {
353
+ "internalType": "uint256",
354
+ "name": "ensuroPpFee",
355
+ "type": "uint256"
356
+ },
357
+ {
358
+ "internalType": "uint256",
359
+ "name": "ensuroCocFee",
360
+ "type": "uint256"
361
+ },
362
+ {
363
+ "internalType": "uint256",
364
+ "name": "jrRoc",
365
+ "type": "uint256"
366
+ },
367
+ {
368
+ "internalType": "uint256",
369
+ "name": "srRoc",
370
+ "type": "uint256"
371
+ }
372
+ ],
373
+ "internalType": "struct IRiskModule.Params",
374
+ "name": "ret",
375
+ "type": "tuple"
376
+ }
377
+ ],
378
+ "stateMutability": "view",
379
+ "type": "function"
380
+ },
435
381
  {
436
382
  "inputs": [],
437
383
  "name": "pause",
@@ -467,100 +413,25 @@
467
413
  },
468
414
  {
469
415
  "inputs": [],
470
- "name": "proxiableUUID",
416
+ "name": "premiumsAccount",
471
417
  "outputs": [
472
418
  {
473
- "internalType": "bytes32",
419
+ "internalType": "contract IPremiumsAccount",
474
420
  "name": "",
475
- "type": "bytes32"
476
- }
477
- ],
478
- "stateMutability": "view",
479
- "type": "function"
480
- },
481
- {
482
- "inputs": [
483
- {
484
- "internalType": "uint256",
485
- "name": "scrAmount",
486
- "type": "uint256"
487
- }
488
- ],
489
- "name": "releaseScr",
490
- "outputs": [],
491
- "stateMutability": "nonpayable",
492
- "type": "function"
493
- },
494
- {
495
- "inputs": [
496
- {
497
- "internalType": "bytes32",
498
- "name": "role",
499
- "type": "bytes32"
500
- },
501
- {
502
- "internalType": "address",
503
- "name": "account",
504
- "type": "address"
505
- }
506
- ],
507
- "name": "renounceRole",
508
- "outputs": [],
509
- "stateMutability": "nonpayable",
510
- "type": "function"
511
- },
512
- {
513
- "inputs": [
514
- {
515
- "internalType": "bytes32",
516
- "name": "role",
517
- "type": "bytes32"
518
- },
519
- {
520
- "internalType": "address",
521
- "name": "account",
522
421
  "type": "address"
523
422
  }
524
423
  ],
525
- "name": "revokeRole",
526
- "outputs": [],
527
- "stateMutability": "nonpayable",
528
- "type": "function"
529
- },
530
- {
531
- "inputs": [],
532
- "name": "scrInterestRate",
533
- "outputs": [
534
- {
535
- "internalType": "uint256",
536
- "name": "",
537
- "type": "uint256"
538
- }
539
- ],
540
- "stateMutability": "view",
541
- "type": "function"
542
- },
543
- {
544
- "inputs": [],
545
- "name": "scrLimit",
546
- "outputs": [
547
- {
548
- "internalType": "uint256",
549
- "name": "",
550
- "type": "uint256"
551
- }
552
- ],
553
424
  "stateMutability": "view",
554
425
  "type": "function"
555
426
  },
556
427
  {
557
428
  "inputs": [],
558
- "name": "scrPercentage",
429
+ "name": "proxiableUUID",
559
430
  "outputs": [
560
431
  {
561
- "internalType": "uint256",
432
+ "internalType": "bytes32",
562
433
  "name": "",
563
- "type": "uint256"
434
+ "type": "bytes32"
564
435
  }
565
436
  ],
566
437
  "stateMutability": "view",
@@ -570,50 +441,11 @@
570
441
  "inputs": [
571
442
  {
572
443
  "internalType": "uint256",
573
- "name": "newEnsuroFee",
574
- "type": "uint256"
575
- }
576
- ],
577
- "name": "setEnsuroFee",
578
- "outputs": [],
579
- "stateMutability": "nonpayable",
580
- "type": "function"
581
- },
582
- {
583
- "inputs": [
584
- {
585
- "internalType": "uint256",
586
- "name": "newMaxScrPerPolicy",
587
- "type": "uint256"
588
- }
589
- ],
590
- "name": "setMaxScrPerPolicy",
591
- "outputs": [],
592
- "stateMutability": "nonpayable",
593
- "type": "function"
594
- },
595
- {
596
- "inputs": [
597
- {
598
- "internalType": "uint256",
599
- "name": "newMoc",
600
- "type": "uint256"
601
- }
602
- ],
603
- "name": "setMoc",
604
- "outputs": [],
605
- "stateMutability": "nonpayable",
606
- "type": "function"
607
- },
608
- {
609
- "inputs": [
610
- {
611
- "internalType": "uint256",
612
- "name": "newScrInterestRate",
444
+ "name": "payout",
613
445
  "type": "uint256"
614
446
  }
615
447
  ],
616
- "name": "setScrInterestRate",
448
+ "name": "releaseExposure",
617
449
  "outputs": [],
618
450
  "stateMutability": "nonpayable",
619
451
  "type": "function"
@@ -621,25 +453,17 @@
621
453
  {
622
454
  "inputs": [
623
455
  {
624
- "internalType": "uint256",
625
- "name": "newScrLimit",
626
- "type": "uint256"
627
- }
628
- ],
629
- "name": "setScrLimit",
630
- "outputs": [],
631
- "stateMutability": "nonpayable",
632
- "type": "function"
633
- },
634
- {
635
- "inputs": [
456
+ "internalType": "enum IRiskModule.Parameter",
457
+ "name": "param",
458
+ "type": "uint8"
459
+ },
636
460
  {
637
461
  "internalType": "uint256",
638
- "name": "newScrPercentage",
462
+ "name": "newValue",
639
463
  "type": "uint256"
640
464
  }
641
465
  ],
642
- "name": "setScrPercentage",
466
+ "name": "setParam",
643
467
  "outputs": [],
644
468
  "stateMutability": "nonpayable",
645
469
  "type": "function"
@@ -657,38 +481,6 @@
657
481
  "stateMutability": "nonpayable",
658
482
  "type": "function"
659
483
  },
660
- {
661
- "inputs": [
662
- {
663
- "internalType": "bytes4",
664
- "name": "interfaceId",
665
- "type": "bytes4"
666
- }
667
- ],
668
- "name": "supportsInterface",
669
- "outputs": [
670
- {
671
- "internalType": "bool",
672
- "name": "",
673
- "type": "bool"
674
- }
675
- ],
676
- "stateMutability": "view",
677
- "type": "function"
678
- },
679
- {
680
- "inputs": [],
681
- "name": "totalScr",
682
- "outputs": [
683
- {
684
- "internalType": "uint256",
685
- "name": "",
686
- "type": "uint256"
687
- }
688
- ],
689
- "stateMutability": "view",
690
- "type": "function"
691
- },
692
484
  {
693
485
  "inputs": [],
694
486
  "name": "unpause",
@@ -0,0 +1,24 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "TimeScaled",
4
+ "sourceName": "contracts/TimeScaled.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "MIN_SCALE",
9
+ "outputs": [
10
+ {
11
+ "internalType": "uint128",
12
+ "name": "",
13
+ "type": "uint128"
14
+ }
15
+ ],
16
+ "stateMutability": "view",
17
+ "type": "function"
18
+ }
19
+ ],
20
+ "bytecode": "0x60a1610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063706ad35d146038575b600080fd5b604667016345785d8a000081565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea26469706673582212208cead7e828e4f994415fca1d3dda81eec6eab85574afadc579c72c913bc7b35964736f6c63430008060033",
21
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063706ad35d146038575b600080fd5b604667016345785d8a000081565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea26469706673582212208cead7e828e4f994415fca1d3dda81eec6eab85574afadc579c72c913bc7b35964736f6c63430008060033",
22
+ "linkReferences": {},
23
+ "deployedLinkReferences": {}
24
+ }