Skip to content

Commit b21aa92

Browse files
authored
refactor: CDNPaymentRailsToppedUp event (#284)
## Description This pull request modifies the existing `CDNPaymentRailsToppedUp `event by adding two new fields: `cdnAmountAdded `and `cacheMissAmountAdded`. These additions are designed to simplify the tracking of remaining user egress in the off-chain component. ## Motivation Following discussions with @bajtos, we identified the need to modify the `CDNPaymentRailsToppedUp` event signature to streamline our egress accounting process. Our initial approach involved extending the `FilBeamOperator` contract with a `topUpCDNPaymentRails` method and adding authorization to the existing `FilecoinWarmStorageService.topUpCDNPaymentRails` method. However, I opted against this approach since these modifications can be implemented through a contract upgrade instead. ## Changelog - Add `cdnAmountAdded` and `cacheMissAmountAdded` fields to `CDNPaymentRailsToppedUp` event - Refactor tests to match updated event signature ## Related - filbeam/worker#333 - #237
1 parent f67900c commit b21aa92

File tree

3 files changed

+86
-26
lines changed

3 files changed

+86
-26
lines changed

service_contracts/abi/FilecoinWarmStorageService.abi.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,12 +940,24 @@
940940
"indexed": true,
941941
"internalType": "uint256"
942942
},
943+
{
944+
"name": "cdnAmountAdded",
945+
"type": "uint256",
946+
"indexed": false,
947+
"internalType": "uint256"
948+
},
943949
{
944950
"name": "totalCdnLockup",
945951
"type": "uint256",
946952
"indexed": false,
947953
"internalType": "uint256"
948954
},
955+
{
956+
"name": "cacheMissAmountAdded",
957+
"type": "uint256",
958+
"indexed": false,
959+
"internalType": "uint256"
960+
},
949961
{
950962
"name": "totalCacheMissLockup",
951963
"type": "uint256",

service_contracts/src/FilecoinWarmStorageService.sol

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,13 @@ contract FilecoinWarmStorageService is
8585

8686
event ViewContractSet(address indexed viewContract);
8787

88-
event CDNPaymentRailsToppedUp(uint256 indexed dataSetId, uint256 totalCdnLockup, uint256 totalCacheMissLockup);
88+
event CDNPaymentRailsToppedUp(
89+
uint256 indexed dataSetId,
90+
uint256 cdnAmountAdded,
91+
uint256 totalCdnLockup,
92+
uint256 cacheMissAmountAdded,
93+
uint256 totalCacheMissLockup
94+
);
8995

9096
// Events for provider management
9197
event ProviderApproved(uint256 indexed providerId);
@@ -618,7 +624,13 @@ contract FilecoinWarmStorageService is
618624
info.cdnRailId = cdnRailId;
619625
payments.modifyRailLockup(cdnRailId, DEFAULT_LOCKUP_PERIOD, DEFAULT_CDN_LOCKUP_AMOUNT);
620626

621-
emit CDNPaymentRailsToppedUp(dataSetId, DEFAULT_CDN_LOCKUP_AMOUNT, DEFAULT_CACHE_MISS_LOCKUP_AMOUNT);
627+
emit CDNPaymentRailsToppedUp(
628+
dataSetId,
629+
DEFAULT_CDN_LOCKUP_AMOUNT,
630+
DEFAULT_CDN_LOCKUP_AMOUNT,
631+
DEFAULT_CACHE_MISS_LOCKUP_AMOUNT,
632+
DEFAULT_CACHE_MISS_LOCKUP_AMOUNT
633+
);
622634
}
623635

624636
// Emit event for tracking
@@ -1059,7 +1071,9 @@ contract FilecoinWarmStorageService is
10591071
payments.modifyRailLockup(info.cdnRailId, DEFAULT_LOCKUP_PERIOD, totalCdnLockup);
10601072
payments.modifyRailLockup(info.cacheMissRailId, DEFAULT_LOCKUP_PERIOD, totalCacheMissLockup);
10611073

1062-
emit CDNPaymentRailsToppedUp(dataSetId, totalCdnLockup, totalCacheMissLockup);
1074+
emit CDNPaymentRailsToppedUp(
1075+
dataSetId, cdnAmountToAdd, totalCdnLockup, cacheMissAmountToAdd, totalCacheMissLockup
1076+
);
10631077
}
10641078

10651079
function terminateCDNService(uint256 dataSetId) external onlyFilBeamController {

service_contracts/test/FilecoinWarmStorageService.t.sol

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,9 @@ contract FilecoinWarmStorageServiceTest is Test {
568568

569569
// Expect CDNPaymentRailsToppedUp event when creating the data set with CDN enabled
570570
vm.expectEmit(true, false, false, true);
571-
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(1, defaultCDNLockup, defaultCacheMissLockup);
571+
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
572+
1, defaultCDNLockup, defaultCDNLockup, defaultCacheMissLockup, defaultCacheMissLockup
573+
);
572574

573575
// Expect DataSetCreated event when creating the data set (with CDN rails)
574576
vm.expectEmit(true, true, true, true);
@@ -2860,7 +2862,9 @@ contract FilecoinWarmStorageServiceTest is Test {
28602862

28612863
// Expect CDNPaymentRailsToppedUp event when creating the data set with CDN enabled
28622864
vm.expectEmit(true, false, false, true);
2863-
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(1, defaultCDNLockup, defaultCacheMissLockup);
2865+
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
2866+
1, defaultCDNLockup, defaultCDNLockup, defaultCacheMissLockup, defaultCacheMissLockup
2867+
);
28642868

28652869
makeSignaturePass(client);
28662870
vm.startPrank(serviceProvider);
@@ -2910,12 +2914,14 @@ contract FilecoinWarmStorageServiceTest is Test {
29102914
vm.stopPrank();
29112915

29122916
// Expect the CDNPaymentRailsToppedUp event with correct parameters
2913-
// Event signature: CDNPaymentRailsToppedUp(uint256 indexed dataSetId, uint256 totalCdnLockup, uint256 totalCacheMissLockup)
2917+
// Event signature: CDNPaymentRailsToppedUp(uint256 indexed dataSetId, uint256 cdnAmountAdded, uint256 totalCdnLockup, uint256 cacheMissAmountAdded, uint256 totalCacheMissLockup)
29142918
vm.expectEmit(true, false, false, true);
29152919
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
29162920
1, // dataSetId will be 1 (first dataset created)
2917-
defaultCDNLockup, // Should be 0.7 USDFC
2918-
defaultCacheMissLockup // Should be 0.3 USDFC
2921+
defaultCDNLockup, // CDN amount added (0.7 USDFC)
2922+
defaultCDNLockup, // Total CDN lockup (0.7 USDFC)
2923+
defaultCacheMissLockup, // Cache miss amount added (0.3 USDFC)
2924+
defaultCacheMissLockup // Total cache miss lockup (0.3 USDFC)
29192925
);
29202926

29212927
// Create the dataset
@@ -2969,7 +2975,7 @@ contract FilecoinWarmStorageServiceTest is Test {
29692975

29702976
// Check that CDNPaymentRailsToppedUp event was NOT emitted
29712977
Vm.Log[] memory logs = vm.getRecordedLogs();
2972-
bytes32 cdnEventSignature = keccak256("CDNPaymentRailsToppedUp(uint256,uint256,uint256)");
2978+
bytes32 cdnEventSignature = keccak256("CDNPaymentRailsToppedUp(uint256,uint256,uint256,uint256,uint256)");
29732979
for (uint256 i = 0; i < logs.length; i++) {
29742980
assertNotEq(
29752981
logs[i].topics[0], cdnEventSignature, "CDNPaymentRailsToppedUp should not be emitted without CDN"
@@ -2994,7 +3000,11 @@ contract FilecoinWarmStorageServiceTest is Test {
29943000
// Top up the rails first to allow for settlement
29953001
vm.expectEmit(true, false, false, true);
29963002
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
2997-
dataSetId, defaultCDNLockup + cdnAmount, defaultCacheMissLockup + cacheMissAmount
3003+
dataSetId,
3004+
cdnAmount,
3005+
defaultCDNLockup + cdnAmount,
3006+
cacheMissAmount,
3007+
defaultCacheMissLockup + cacheMissAmount
29983008
);
29993009
vm.prank(client);
30003010
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnAmount, cacheMissAmount);
@@ -3030,7 +3040,11 @@ contract FilecoinWarmStorageServiceTest is Test {
30303040
// Top up only the CDN rail
30313041
vm.expectEmit(true, false, false, true);
30323042
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3033-
dataSetId, defaultCDNLockup + cdnAmount, defaultCacheMissLockup + cacheMissAmount
3043+
dataSetId,
3044+
cdnAmount,
3045+
defaultCDNLockup + cdnAmount,
3046+
cacheMissAmount,
3047+
defaultCacheMissLockup + cacheMissAmount
30343048
);
30353049
vm.prank(client);
30363050
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnAmount, cacheMissAmount);
@@ -3059,7 +3073,11 @@ contract FilecoinWarmStorageServiceTest is Test {
30593073
// Top up only the cache miss rail
30603074
vm.expectEmit(true, false, false, true);
30613075
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3062-
dataSetId, defaultCDNLockup + cdnAmount, defaultCacheMissLockup + cacheMissAmount
3076+
dataSetId,
3077+
cdnAmount,
3078+
defaultCDNLockup + cdnAmount,
3079+
cacheMissAmount,
3080+
defaultCacheMissLockup + cacheMissAmount
30633081
);
30643082
vm.prank(client);
30653083
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnAmount, cacheMissAmount);
@@ -3140,7 +3158,11 @@ contract FilecoinWarmStorageServiceTest is Test {
31403158
// Top up the rails first
31413159
vm.expectEmit(true, false, false, true);
31423160
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3143-
dataSetId, defaultCDNLockup + cdnAmount, defaultCacheMissLockup + cacheMissAmount
3161+
dataSetId,
3162+
cdnAmount,
3163+
defaultCDNLockup + cdnAmount,
3164+
cacheMissAmount,
3165+
defaultCacheMissLockup + cacheMissAmount
31443166
);
31453167
vm.prank(client);
31463168
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnAmount, cacheMissAmount);
@@ -3161,7 +3183,11 @@ contract FilecoinWarmStorageServiceTest is Test {
31613183
// Top up the rails first
31623184
vm.expectEmit(true, false, false, true);
31633185
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3164-
dataSetId, defaultCDNLockup + cdnAmount, defaultCacheMissLockup + cacheMissAmount
3186+
dataSetId,
3187+
cdnAmount,
3188+
defaultCDNLockup + cdnAmount,
3189+
cacheMissAmount,
3190+
defaultCacheMissLockup + cacheMissAmount
31653191
);
31663192
vm.prank(client);
31673193
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnAmount, cacheMissAmount);
@@ -3214,7 +3240,11 @@ contract FilecoinWarmStorageServiceTest is Test {
32143240
// Top up the rails first
32153241
vm.expectEmit(true, false, false, true);
32163242
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3217-
dataSetId, defaultCDNLockup + cdnAmount, defaultCacheMissLockup + cacheMissAmount
3243+
dataSetId,
3244+
cdnAmount,
3245+
defaultCDNLockup + cdnAmount,
3246+
cacheMissAmount,
3247+
defaultCacheMissLockup + cacheMissAmount
32183248
);
32193249
vm.prank(client);
32203250
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnAmount, cacheMissAmount);
@@ -3380,7 +3410,7 @@ contract FilecoinWarmStorageServiceTest is Test {
33803410
// Top up the rails
33813411
vm.expectEmit(true, false, false, true);
33823412
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3383-
dataSetId, defaultCDNLockup + cdnTopUp, defaultCacheMissLockup + cacheMissTopUp
3413+
dataSetId, cdnTopUp, defaultCDNLockup + cdnTopUp, cacheMissTopUp, defaultCacheMissLockup + cacheMissTopUp
33843414
);
33853415
vm.prank(client);
33863416
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp, cacheMissTopUp);
@@ -3415,7 +3445,7 @@ contract FilecoinWarmStorageServiceTest is Test {
34153445
// Should work as payer
34163446
vm.expectEmit(true, false, false, true);
34173447
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3418-
dataSetId, defaultCDNLockup + 1000, defaultCacheMissLockup + 1000
3448+
dataSetId, 1000, defaultCDNLockup + 1000, 1000, defaultCacheMissLockup + 1000
34193449
);
34203450
vm.prank(client);
34213451
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, 1000, 1000);
@@ -3441,7 +3471,7 @@ contract FilecoinWarmStorageServiceTest is Test {
34413471
// First top-up
34423472
vm.expectEmit(true, false, false, true);
34433473
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3444-
dataSetId, defaultCDNLockup + 1000, defaultCacheMissLockup + 500
3474+
dataSetId, 1000, defaultCDNLockup + 1000, 500, defaultCacheMissLockup + 500
34453475
);
34463476
vm.prank(client);
34473477
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, 1000, 500);
@@ -3454,7 +3484,7 @@ contract FilecoinWarmStorageServiceTest is Test {
34543484
// Second top-up (should be additive)
34553485
vm.expectEmit(true, false, false, true);
34563486
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3457-
dataSetId, defaultCDNLockup + 3000, defaultCacheMissLockup + 2000
3487+
dataSetId, 2000, defaultCDNLockup + 3000, 1500, defaultCacheMissLockup + 2000
34583488
);
34593489
vm.prank(client);
34603490
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, 2000, 1500);
@@ -3507,7 +3537,7 @@ contract FilecoinWarmStorageServiceTest is Test {
35073537

35083538
vm.expectEmit(true, false, false, true);
35093539
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3510-
dataSetId, defaultCDNLockup + cdnTopUp, defaultCacheMissLockup + cacheMissTopUp
3540+
dataSetId, cdnTopUp, defaultCDNLockup + cdnTopUp, cacheMissTopUp, defaultCacheMissLockup + cacheMissTopUp
35113541
);
35123542
vm.prank(client);
35133543
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp, cacheMissTopUp);
@@ -3533,7 +3563,7 @@ contract FilecoinWarmStorageServiceTest is Test {
35333563

35343564
vm.expectEmit(true, false, false, true);
35353565
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3536-
dataSetId, defaultCDNLockup + cdnTopUp, defaultCacheMissLockup + cacheMissTopUp
3566+
dataSetId, cdnTopUp, defaultCDNLockup + cdnTopUp, cacheMissTopUp, defaultCacheMissLockup + cacheMissTopUp
35373567
);
35383568
vm.prank(client);
35393569
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp, cacheMissTopUp);
@@ -3560,7 +3590,7 @@ contract FilecoinWarmStorageServiceTest is Test {
35603590

35613591
vm.expectEmit(true, false, false, true);
35623592
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3563-
dataSetId, defaultCDNLockup + cdnTopUp, defaultCacheMissLockup + cacheMissTopUp
3593+
dataSetId, cdnTopUp, defaultCDNLockup + cdnTopUp, cacheMissTopUp, defaultCacheMissLockup + cacheMissTopUp
35643594
);
35653595
vm.prank(client);
35663596
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp, cacheMissTopUp);
@@ -3605,28 +3635,32 @@ contract FilecoinWarmStorageServiceTest is Test {
36053635
// First top-up
36063636
vm.expectEmit(true, false, false, true);
36073637
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3608-
dataSetId, defaultCDNLockup + cdnTopUp, defaultCacheMissLockup + cacheMissTopUp
3638+
dataSetId, cdnTopUp, defaultCDNLockup + cdnTopUp, cacheMissTopUp, defaultCacheMissLockup + cacheMissTopUp
36093639
);
36103640
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp, cacheMissTopUp);
36113641

36123642
// Second top-up
36133643
vm.expectEmit(true, false, false, true);
36143644
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3615-
dataSetId, defaultCDNLockup + cdnTopUp * 3, defaultCacheMissLockup + cacheMissTopUp * 3
3645+
dataSetId,
3646+
cdnTopUp * 2,
3647+
defaultCDNLockup + cdnTopUp * 3,
3648+
cacheMissTopUp * 2,
3649+
defaultCacheMissLockup + cacheMissTopUp * 3
36163650
);
36173651
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp * 2, cacheMissTopUp * 2);
36183652

36193653
// Third top-up (only CDN)
36203654
vm.expectEmit(true, false, false, true);
36213655
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3622-
dataSetId, defaultCDNLockup + cdnTopUp * 4, defaultCacheMissLockup + cacheMissTopUp * 3
3656+
dataSetId, cdnTopUp, defaultCDNLockup + cdnTopUp * 4, 0, defaultCacheMissLockup + cacheMissTopUp * 3
36233657
);
36243658
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, cdnTopUp, 0);
36253659

36263660
// Fourth top-up (only cache miss)
36273661
vm.expectEmit(true, false, false, true);
36283662
emit FilecoinWarmStorageService.CDNPaymentRailsToppedUp(
3629-
dataSetId, defaultCDNLockup + cdnTopUp * 4, defaultCacheMissLockup + cacheMissTopUp * 4
3663+
dataSetId, 0, defaultCDNLockup + cdnTopUp * 4, cacheMissTopUp, defaultCacheMissLockup + cacheMissTopUp * 4
36303664
);
36313665
pdpServiceWithPayments.topUpCDNPaymentRails(dataSetId, 0, cacheMissTopUp);
36323666

0 commit comments

Comments
 (0)