Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions test/CleanupPieces.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ contract PDPVerifierCleanupTest is MockFVMTest, PieceHelper {
TestListener listener;
bytes empty = new bytes(0);

receive() external payable {}

function setUp() public override {
super.setUp();
PDPVerifier pdpVerifierImpl = new PDPVerifier(1, CHALLENGE_FINALITY_DELAY);
Expand Down Expand Up @@ -177,6 +175,7 @@ contract PDPVerifierCleanupTest is MockFVMTest, PieceHelper {

// Net cost is zero; the cleanup deposit was returned at delete time
assertEq(balanceBefore, address(this).balance, "net cost is zero");
assertEq(address(pdpVerifier).balance, 0, "Verifier balance is 0 after deposit returned");
assertFalse(pdpVerifier.dataSetLive(setId));
}

Expand All @@ -202,8 +201,11 @@ contract PDPVerifierCleanupTest is MockFVMTest, PieceHelper {
pdpVerifier.cleanupPieces(setId, 10);

// SP succeeds
uint256 balanceBefore = address(this).balance;
bool done = pdpVerifier.cleanupPieces(setId, 10);
assertTrue(done);
assertEq(address(this).balance - balanceBefore, PDPFees.cleanupDeposit(), "SP receives deposit");
assertEq(address(pdpVerifier).balance, 0, "Verifier balance is 0 after cleanup");
assertPieceSlotsCleared(setId, 1);
}

Expand All @@ -221,6 +223,7 @@ contract PDPVerifierCleanupTest is MockFVMTest, PieceHelper {
bool done = pdpVerifier.cleanupPieces(setId, 10);
assertTrue(done);
assertEq(anyone.balance - balanceBefore, PDPFees.cleanupDeposit(), "third party receives deposit");
assertEq(address(pdpVerifier).balance, 0, "Verifier balance is 0 after cleanup");
assertPieceSlotsCleared(setId, 1);
}

Expand All @@ -245,6 +248,7 @@ contract PDPVerifierCleanupTest is MockFVMTest, PieceHelper {

assertTrue(done);
assertEq(address(this).balance - balanceBefore, PDPFees.cleanupDeposit(), "SP receives deposit in same block");
assertEq(address(pdpVerifier).balance, 0, "Verifier balance is 0 after cleanup");
assertPieceSlotsCleared(setId, 2);
}

Expand All @@ -266,6 +270,7 @@ contract PDPVerifierCleanupTest is MockFVMTest, PieceHelper {

assertTrue(done);
assertEq(anyone.balance - balanceBefore, PDPFees.cleanupDeposit(), "deleter collects cleanup deposit");
assertEq(address(pdpVerifier).balance, 0, "Verifier balance is 0 after cleanup");
assertPieceSlotsCleared(setId, 2);
}

Expand Down
30 changes: 21 additions & 9 deletions test/PDPVerifier.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
pragma solidity ^0.8.13;

import {MockFVMTest} from "fvm-solidity/mocks/MockFVMTest.sol";
import {BURN_ADDRESS} from "fvm-solidity/FVMActors.sol";
import {Test} from "forge-std/Test.sol";
import {UUPSUpgradeable} from "../lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol";
import {Cids} from "../src/Cids.sol";
Expand Down Expand Up @@ -62,12 +63,21 @@ contract PDPVerifierDataSetCreateDeleteTest is MockFVMTest, PieceHelper {
}

function testDeleteDataSet() public {
uint256 deposit = PDPFees.cleanupDeposit();
uint256 callerBefore = address(this).balance;

vm.expectEmit(true, true, false, false);
emit IPDPEvents.DataSetCreated(1, address(this));
uint256 setId = pdpVerifier.createDataSet{value: PDPFees.cleanupDeposit()}(address(listener), empty);
uint256 setId = pdpVerifier.createDataSet{value: deposit}(address(listener), empty);
assertEq(address(pdpVerifier).balance, deposit, "Verifier holds deposit after create");

vm.expectEmit(true, true, false, false);
emit IPDPEvents.DataSetDeleted(setId, 0);
pdpVerifier.deleteDataSet(setId, empty);

assertEq(address(pdpVerifier).balance, 0, "Verifier balance is 0 after delete");
assertEq(address(this).balance, callerBefore, "Caller recovered deposit");

vm.expectRevert(PDPVerifier.DataSetNotLive.selector);
pdpVerifier.getDataSetLeafCount(setId);
}
Expand Down Expand Up @@ -139,8 +149,6 @@ contract PDPVerifierDataSetCreateDeleteTest is MockFVMTest, PieceHelper {
assertEq(3, pdpVerifier.getNextDataSetId(), "Next data set ID should be 3");
}

receive() external payable {}

function testDataSetIdsStartFromOne() public {
// Test that data set IDs start from 1, not 0
assertEq(pdpVerifier.getNextDataSetId(), 1, "Next data set ID should start at 1");
Expand Down Expand Up @@ -170,6 +178,7 @@ contract PDPVerifierDataSetCreateDeleteTest is MockFVMTest, PieceHelper {
uint256 finalBalance = address(this).balance;
uint256 refundedAmount = finalBalance - (initialBalance - required - excessAmount);
assertEq(refundedAmount, excessAmount, "Excess amount should be refunded");
assertEq(address(pdpVerifier).balance, required, "Verifier holds exactly the cleanup deposit");

// Additional checks to ensure the data set was created correctly
assertEq(pdpVerifier.getDataSetLeafCount(setId), 0, "Data set leaf count should be 0");
Expand Down Expand Up @@ -338,8 +347,6 @@ contract PDPVerifierDataSetMutateTest is MockFVMTest, PieceHelper {
TestingRecordKeeperService listener;
bytes empty = new bytes(0);

receive() external payable {}

function setUp() public override {
super.setUp();
PDPVerifier pdpVerifierImpl = new PDPVerifier(1, CHALLENGE_FINALITY_DELAY);
Expand Down Expand Up @@ -1984,8 +1991,6 @@ contract PDPVerifierE2ETest is MockFVMTest, ProofBuilderHelper, PieceHelper {
vm.deal(address(pdpVerifierImpl), 100 ether);
}

receive() external payable {}

function testCompleteProvingPeriodE2E() public {
// Step 1: Create a data set
uint256 setId = pdpVerifier.addPieces{value: PDPFees.cleanupDeposit()}(
Expand Down Expand Up @@ -2069,7 +2074,16 @@ contract PDPVerifierE2ETest is MockFVMTest, ProofBuilderHelper, PieceHelper {
pdpVerifier.getNextChallengeEpoch(setId), pdpVerifier.getNextChallengeEpoch(setId)
);

uint256 proofFee = pdpVerifier.calculateProofFee(setId);
uint256 burnBefore = BURN_ADDRESS.balance;
uint256 verifierBefore = address(pdpVerifier).balance;
pdpVerifier.provePossession{value: 1e18}(setId, proofsProofPeriod1);
assertEq(BURN_ADDRESS.balance - burnBefore, proofFee, "Proof fee burned to burn address");
assertEq(
address(pdpVerifier).balance,
verifierBefore,
"Verifier balance unchanged: deposit held, fee burned, overpay refunded"
);

pdpVerifier.nextProvingPeriod(setId, vm.getBlockNumber() + CHALLENGE_FINALITY_DELAY, empty);
// CHECK: leaf counts
Expand Down Expand Up @@ -2237,8 +2251,6 @@ contract PDPVerifierFeeTest is MockFVMTest, PieceHelper, ProofBuilderHelper {
listener = new TestingRecordKeeperService();
}

receive() external payable {}

function testUpdateProofFeeWithDelayAutoApply() public {
uint256 current = pdpVerifier.feePerTiB();
uint256 newFee = current + 1;
Expand Down
22 changes: 20 additions & 2 deletions test/PDPVerifierProofTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
pragma solidity ^0.8.13;

import {MockFVMTest} from "fvm-solidity/mocks/MockFVMTest.sol";
import {BURN_ADDRESS} from "fvm-solidity/FVMActors.sol";
import {Cids} from "../src/Cids.sol";
import {PDPVerifier} from "../src/PDPVerifier.sol";
import {MyERC1967Proxy} from "../src/ERC1967Proxy.sol";
Expand Down Expand Up @@ -51,7 +52,16 @@ contract PDPVerifierProofTest is MockFVMTest, ProofBuilderHelper, PieceHelper {
challenges[i] = IPDPTypes.PieceIdAndOffset(0, 0);
}
emit IPDPEvents.PossessionProven(setId, challenges);
uint256 proofFee = pdpVerifier.calculateProofFee(setId);
uint256 burnBefore = BURN_ADDRESS.balance;
uint256 verifierBefore = address(pdpVerifier).balance;
pdpVerifier.provePossession{value: 1e18}(setId, proofs);
assertEq(BURN_ADDRESS.balance - burnBefore, proofFee, "Proof fee burned to burn address");
assertEq(
address(pdpVerifier).balance,
verifierBefore,
"Verifier balance unchanged: deposit held, fee burned, overpay refunded"
);

// Verify the next challenge is in a subsequent epoch.
// Next challenge unchanged by prove
Expand All @@ -63,8 +73,6 @@ contract PDPVerifierProofTest is MockFVMTest, ProofBuilderHelper, PieceHelper {
assertEq(pdpVerifier.getNextChallengeEpoch(setId), vm.getBlockNumber() + CHALLENGE_FINALITY_DELAY);
}

receive() external payable {}

event Debug(string message, uint256 value);

function testProveWithDifferentFeeAmounts() public {
Expand Down Expand Up @@ -107,7 +115,17 @@ contract PDPVerifierProofTest is MockFVMTest, ProofBuilderHelper, PieceHelper {

// Test 2: Sending more than the required fee
RANDOMNESS_PRECOMPILE.mockBeaconRandomness(challengeEpoch, challengeEpoch);
uint256 burnBefore = BURN_ADDRESS.balance;
uint256 senderBefore = sender.balance;
uint256 verifierBefore = address(pdpVerifier).balance;
pdpVerifier.provePossession{value: correctFee + 1}(setId, proofs);
assertEq(BURN_ADDRESS.balance - burnBefore, correctFee, "Proof fee burned to burn address");
assertEq(senderBefore - sender.balance, correctFee, "Sender net loss equals fee; 1 wei overpay refunded");
assertEq(
address(pdpVerifier).balance,
verifierBefore,
"Verifier balance unchanged: deposit held, fee burned, overpay refunded"
);

// Verify that the proof was accepted
assertEq(
Expand Down
Loading