Skip to content

Commit

Permalink
Merge pull request #50 from sense-finance/redemption-rights-sena-alph…
Browse files Browse the repository at this point in the history
…a-03-feb-25

feat: add feb 6 redemption rights calc and tests
  • Loading branch information
jparklev authored Feb 7, 2025
2 parents 1232423 + 15737f5 commit 3a934ff
Show file tree
Hide file tree
Showing 5 changed files with 454 additions and 13 deletions.
2 changes: 1 addition & 1 deletion contracts/script/PointTokenVault.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ contract PointTokenVaultScripts is BatchScript {

// Update merkle root
vm.startBroadcast(MAINNET_MERKLE_UPDATER);
vaultV0_1_0.updateRoot(0xc0ca8b4749c3dbe63b8cc2aae178418a7db0d76c951ca29a9cbe4b0f5d830dfe);
vaultV0_1_0.updateRoot(0xb7fc593b2beeb58536854e23d90c834d18163116f77115b7756723ab4c75cc27);
vm.stopBroadcast();
}

Expand Down
68 changes: 56 additions & 12 deletions contracts/test/SetRedemptionENA4Nov24.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,16 @@ contract SetRedemptionENA4Nov24Test is Test {
}

function test_RedemptionRights1() public {
bytes32[] memory proof = new bytes32[](4);
bytes32[] memory proof = new bytes32[](5);

proof[0] = 0xe0c93f69992755e2a8ff4ba9852d79204f42a82e3517feb32ed3db3ffc0ff0ef;
proof[1] = 0x2edc92e0f7721f84ac287a3d576011980a1c14d2055e9471d23704d678db8f27;
proof[2] = 0x5ac7248cc4f84bfe2aad55418ecd3de62da088a0e5f5467f4cb5bbef25ff5830;
proof[3] = 0x624abde6fe9afe030ebe5563711d71d0d93eb659435f14b21333ff4169089b09;
proof[0] = 0x4e0230e7a7546148f373efe52256490c04ea0019e199f2256a375e75cf2b6b96;
proof[1] = 0xd34225a2c1a481ba0168f312d34ee9de0a88feed77c0e8abea7cf91f3e339457;
proof[2] = 0x293adbeb89d378ab93aa3e1414a8538d16558496f452f97a15b2b35b8f030105;
proof[3] = 0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9;
proof[4] = 0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a;

address USER = 0x25E426b153e74Ab36b2685c3A464272De60888Ae;
uint256 AMOUNT = 36548738436181752113;
uint256 AMOUNT = 40609709373358106059;

vm.prank(USER);
vaultV0_1_0.redeemRewards(PointTokenVault.Claim(pointsId, AMOUNT, AMOUNT, proof), USER);
Expand All @@ -57,15 +58,16 @@ contract SetRedemptionENA4Nov24Test is Test {
}

function test_RedemptionRights1_ClaimTooMuch() public {
bytes32[] memory proof = new bytes32[](4);
bytes32[] memory proof = new bytes32[](5);

proof[0] = 0xe0c93f69992755e2a8ff4ba9852d79204f42a82e3517feb32ed3db3ffc0ff0ef;
proof[1] = 0x2edc92e0f7721f84ac287a3d576011980a1c14d2055e9471d23704d678db8f27;
proof[2] = 0x5ac7248cc4f84bfe2aad55418ecd3de62da088a0e5f5467f4cb5bbef25ff5830;
proof[3] = 0x624abde6fe9afe030ebe5563711d71d0d93eb659435f14b21333ff4169089b09;
proof[0] = 0x4e0230e7a7546148f373efe52256490c04ea0019e199f2256a375e75cf2b6b96;
proof[1] = 0xd34225a2c1a481ba0168f312d34ee9de0a88feed77c0e8abea7cf91f3e339457;
proof[2] = 0x293adbeb89d378ab93aa3e1414a8538d16558496f452f97a15b2b35b8f030105;
proof[3] = 0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9;
proof[4] = 0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a;

address USER = 0x25E426b153e74Ab36b2685c3A464272De60888Ae;
uint256 TOTAL_CLAIMABLE = 36548738436181752113;
uint256 TOTAL_CLAIMABLE = 40609709373358106059;
uint256 CLAIM_AMOUNT = TOTAL_CLAIMABLE + 10;

vm.prank(USER);
Expand Down Expand Up @@ -270,6 +272,48 @@ contract SetRedemptionENA4Nov24Test is Test {
}
}

function test_RedemptionRightsCalculatedAmount_Feb6() public {
uint256 rewardsPerPToken = 63381137368827226;

uint256 originalReceivedTokens = 1324312 * 1e17;
uint256 newTokens = 2546753846 * 1e13 + 2546753846 * 1e13 + 20374030768 * 1e12;
uint256 expectedProportion = originalReceivedTokens * 1e18 / (originalReceivedTokens + newTokens);

uint256 expectedRedemptionRights;
uint256 redemptionRightAmountOriginal;
uint256 redemptionRightAmountJan7;

RedemptionFiles memory rf;
rf.root = vm.projectRoot();
rf.path = string.concat(rf.root, "/js-scripts/generateRedemptionRights/out/merged-distribution.json");
rf.merged = vm.readFile(rf.path);
rf.path = string.concat(rf.root, "/js-scripts/generateRedemptionRights/out/merged-distribution-06Feb25.json");
rf.merged2 = vm.readFile(rf.path);

string[] memory users = vm.parseJsonKeys(rf.merged, string.concat(".redemptionRights"));
for (uint256 i = 0; i < users.length; i++) {
try vm.parseJsonUint(
rf.merged, string.concat(".redemptionRights.", users[i], ".", vm.toString(pointsId), ".amount")
) returns (uint256 amount) {
redemptionRightAmountOriginal = amount;
} catch {
redemptionRightAmountOriginal = 0;
}

try vm.parseJsonUint(
rf.merged2, string.concat(".redemptionRights.", users[i], ".", vm.toString(pointsId), ".amount")
) returns (uint256 amount) {
redemptionRightAmountJan7 = amount;
} catch {
redemptionRightAmountJan7 = 0;
}

uint256 proportion = redemptionRightAmountOriginal * 1e18 / redemptionRightAmountJan7;

assertApproxEqAbs(proportion, expectedProportion, 1e10);
}
}

function stringToAddress(string memory _address) internal returns (address) {
// Remove "0x" prefix if present
bytes memory _addressBytes = bytes(_address);
Expand Down
3 changes: 3 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,11 @@ fs_permissions = [{ access = "read", path = "./js-scripts/generateRedemptionRigh
{ access = "read", path = "./js-scripts/generateRedemptionRights/out/merged-distribution.json" },
{ access = "read", path = "js-scripts/generateRedemptionRights/out/merged-distribution-03Dec24.json" },
{ access = "read", path = "js-scripts/generateRedemptionRights/out/merged-distribution-07Jan25.json" },
{ access = "read", path = "js-scripts/generateRedemptionRights/out/merged-distribution-06Feb25.json" },
{ access = "read", path = "./js-scripts/generateRedemptionRights/out/ptoken-snapshot-kpsats.json" },
{ access = "read", path = "./out/PointTokenVault.sol/PointTokenVault.json" }]
optimize = true
optimizer_runs = 100

[rpc_endpoints]
sepolia = "${SEPOLIA_RPC_URL}"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,261 @@
{
"root": "0xb7fc593b2beeb58536854e23d90c834d18163116f77115b7756723ab4c75cc27",
"redemptionRights": {
"0x25E426b153e74Ab36b2685c3A464272De60888Ae": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "40609709373358106059",
"proof": [
"0x4e0230e7a7546148f373efe52256490c04ea0019e199f2256a375e75cf2b6b96",
"0xd34225a2c1a481ba0168f312d34ee9de0a88feed77c0e8abea7cf91f3e339457",
"0x293adbeb89d378ab93aa3e1414a8538d16558496f452f97a15b2b35b8f030105",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xAF9e4E01525C4856E00Cb0F363AFc34E7decD6a7": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "58984958010612340871383",
"proof": [
"0xeacdc144ac6c5e5552f99b899703349c29730a1252e15c4309754807ed6e2229",
"0x777dfd831aa600c6701f755fcb534f1e5e2d8465058ecf270473c466c5752f1a",
"0x86f7be7a7880df047614c923a1e343e36ad9d69d3a9192d7f0deda297173f013"
]
}
},
"0x028CC8E3Ff248Dc59052eaAD2a1e749F3B835B99": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "21882546167125741776",
"proof": [
"0x7bf20977e7c90c46c38de3a73d199d9b463c33ab5496a500e1e18594a0f5376c",
"0xfaca43636023a73bf06295aa693c262efe0bb3231357a68b8ad7eec7e901c8ef",
"0x04fdf08423ea2533ebeead3afb4e1be313755fe59ade56e2693d33fa1f9b403c",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x6CD72B1E6E300340A48943d6aF34EF5AE07D3577": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "137993291710040908804",
"proof": [
"0xdc6743cb29d00ac8467f33ac244256f40e5d7fc8e8813cfc8d3c0ab87f1df4d2",
"0xc6f15a7cbd986873c6b761e81c98ee8ac4afd1c9885b7d8e0ae4de752040ab12",
"0xbe7420793ee18eb2e160f7049ccc5d9f9df686f28ab109e7492a99d4201e1ac4",
"0x86f7be7a7880df047614c923a1e343e36ad9d69d3a9192d7f0deda297173f013"
]
}
},
"0x1d848bf0dcF1b48f5621c37d062f2696D9d71AC4": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "111620588625197937051803",
"proof": [
"0xdde89b58cb52c5b2902c8b50b3802222e9e975a8006f6f11d5583f732e23998f",
"0x777dfd831aa600c6701f755fcb534f1e5e2d8465058ecf270473c466c5752f1a",
"0x86f7be7a7880df047614c923a1e343e36ad9d69d3a9192d7f0deda297173f013"
]
}
},
"0x76DB9edf1451933711fc0A0c622E013ebD229EaB": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "22037101215348679954480",
"proof": [
"0x191a3f5a1c7f9b1657f56cf44eb79a72b47ad4be40fae5ced80af9e38731e10c",
"0xc592776c4d9fee4a882f21630c99b17ba30c04e77027301cffa84626343d1a01",
"0x69b6adbb54f0c8cd62a02c93ac393e08190d53425ff77a263351f8c54e5e20ac",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xB6462B67fe692223DFFb61C8DC8Ad080CBa180Cc": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "9533936868278384099608",
"proof": [
"0x4169640ec64e945d0e1427bf7d59e350149faa815384948bc1f24869883d119a",
"0x68b3e6d3ca8173af7db289203232acdd75ca32737dad548c26bb2579edcec536",
"0x293adbeb89d378ab93aa3e1414a8538d16558496f452f97a15b2b35b8f030105",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x24C694d193B19119bcDea9D40a3b0bfaFb281E6D": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "7746902357752402164",
"proof": [
"0x78deb65d050ba8aa2fe43ae96177d8cc33d848a2a1fbe9750e973da0c9f401ba",
"0xfaca43636023a73bf06295aa693c262efe0bb3231357a68b8ad7eec7e901c8ef",
"0x04fdf08423ea2533ebeead3afb4e1be313755fe59ade56e2693d33fa1f9b403c",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x44Cb2d713BDa3858001f038645fD05E23E5DE03D": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "1345521453878585634509",
"proof": [
"0x22bd0a3dd00ce6d39746f618e1314a076f69dc34b7f13b915a642b5600e25305",
"0xe159d103c569d42d373ef68df9802b2b4f658495087d0b8c6ccf07f1c4e0f1bd",
"0x69b6adbb54f0c8cd62a02c93ac393e08190d53425ff77a263351f8c54e5e20ac",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xe2C3445a84de723Ef4425922165a58D22AD06e33": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "6396002047482052196",
"proof": [
"0x317c6f5f7976247dcfccf19e913fbbd7860d50c3594c894895d5eccc2b71cd8e",
"0x68b3e6d3ca8173af7db289203232acdd75ca32737dad548c26bb2579edcec536",
"0x293adbeb89d378ab93aa3e1414a8538d16558496f452f97a15b2b35b8f030105",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xD6633c1382896079D3576eC43519d844a8C80B56": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "3573063028308574113",
"proof": [
"0x991fd8976022911aeb40e40bcb5754f9529f2080710f7ec1db8ace85c4f7b7f8",
"0x9fcad9eaad9b566f6c3bbd4cf63e1ecdd1ae8f5ae46730804df189d86fd83fe6",
"0xe0560ae4c81a503729c4cba116c6c7e9fbad976a5a6ab4a57cd9fa4fecc6b991",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
}
},
"pTokens": {
"0x25E426b153e74Ab36b2685c3A464272De60888Ae": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "833020026897918484874",
"proof": [
"0xb605c6d24f4591b726ca75a2244f789388c19ffebedd76217fe0eda994f0a8a4",
"0x1d9bc6b1b89a700e4e4dd4fe69ce88a2bf772ff173b45f30a3c3ce4b20bf5d8e",
"0xbe7420793ee18eb2e160f7049ccc5d9f9df686f28ab109e7492a99d4201e1ac4",
"0x86f7be7a7880df047614c923a1e343e36ad9d69d3a9192d7f0deda297173f013"
]
},
"0x1552756d70656c20506f696e743a205a69726375697408705a49524355495400": {
"amount": "335440188667996950000",
"proof": [
"0x9edee009e8a38592409a0a19964fdf70a20917b6bc8cf0908c7802a22b7d8bc8",
"0x9fcad9eaad9b566f6c3bbd4cf63e1ecdd1ae8f5ae46730804df189d86fd83fe6",
"0xe0560ae4c81a503729c4cba116c6c7e9fbad976a5a6ab4a57cd9fa4fecc6b991",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x24C694d193B19119bcDea9D40a3b0bfaFb281E6D": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "152407798291890457882",
"proof": [
"0x8b788cab342842ae529d8efac9659e1af9367270c13caaf4c8b5ef4c67a51402",
"0x1765bfbf5c943fd336cca418ca85cede631e814975b43b16fcc822ec9d42d205",
"0xe0560ae4c81a503729c4cba116c6c7e9fbad976a5a6ab4a57cd9fa4fecc6b991",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xe2C3445a84de723Ef4425922165a58D22AD06e33": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "131187337543613434191",
"proof": [
"0x2b3dd7a5a5bd16dd868595073eb6b06671bc2ee308a802110c47550f2758ab4a",
"0xe159d103c569d42d373ef68df9802b2b4f658495087d0b8c6ccf07f1c4e0f1bd",
"0x69b6adbb54f0c8cd62a02c93ac393e08190d53425ff77a263351f8c54e5e20ac",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xD6633c1382896079D3576eC43519d844a8C80B56": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "73286503362495655536",
"proof": [
"0xdc8de7adb85950e14f805db6aaaf1b6f79e8d306c56c52b89000e0649bfb1ef3",
"0xc6f15a7cbd986873c6b761e81c98ee8ac4afd1c9885b7d8e0ae4de752040ab12",
"0xbe7420793ee18eb2e160f7049ccc5d9f9df686f28ab109e7492a99d4201e1ac4",
"0x86f7be7a7880df047614c923a1e343e36ad9d69d3a9192d7f0deda297173f013"
]
}
},
"0x028CC8E3Ff248Dc59052eaAD2a1e749F3B835B99": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "4977606283426392328730",
"proof": [
"0xa11fb0c1a4d796bcb6fa408ad7fead1f27c139ee194686098410c137f2d5d224",
"0x1d9bc6b1b89a700e4e4dd4fe69ce88a2bf772ff173b45f30a3c3ce4b20bf5d8e",
"0xbe7420793ee18eb2e160f7049ccc5d9f9df686f28ab109e7492a99d4201e1ac4",
"0x86f7be7a7880df047614c923a1e343e36ad9d69d3a9192d7f0deda297173f013"
]
}
},
"0x6CD72B1E6E300340A48943d6aF34EF5AE07D3577": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "2830357527081490335359",
"proof": [
"0x6258fb3ee01fe8edb76a1ee2cb317cd32b8464c63e31903826acd02863982f31",
"0x2d3612b2d3c4fda5d706b31ea1dead8d963ed2495d7edce1a94551023b51ee71",
"0x04fdf08423ea2533ebeead3afb4e1be313755fe59ade56e2693d33fa1f9b403c",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0xAF9e4E01525C4856E00Cb0F363AFc34E7decD6a7": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "522530241238727636619443",
"proof": [
"0x1a6ff22a61cbe337b27479cdcc2e9d6e85eeac8d48e3061686b7c9ca60a44987",
"0xc592776c4d9fee4a882f21630c99b17ba30c04e77027301cffa84626343d1a01",
"0x69b6adbb54f0c8cd62a02c93ac393e08190d53425ff77a263351f8c54e5e20ac",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x0e7518B332F469a6A2F59E690F225cef5157cca9": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "262106044120029423561824",
"proof": [
"0x5d600b4010a987913edf4ead345def2cc7496dc5d9d41d88c697869aa38cfe4b",
"0xd34225a2c1a481ba0168f312d34ee9de0a88feed77c0e8abea7cf91f3e339457",
"0x293adbeb89d378ab93aa3e1414a8538d16558496f452f97a15b2b35b8f030105",
"0xed5b80c058650c0f5fbb2459e555a3e83132077bc35f3df20b3131a660d3c2e9",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x347ab2e403710583Ade28Ef0871e73581599C8C8": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "988835303595225079157382",
"proof": [
"0x7c1140f479d8f8e1295f0da50f5554de0c77b7b73783022f63b840e186a69c3d",
"0x1765bfbf5c943fd336cca418ca85cede631e814975b43b16fcc822ec9d42d205",
"0xe0560ae4c81a503729c4cba116c6c7e9fbad976a5a6ab4a57cd9fa4fecc6b991",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
},
"0x1d848bf0dcF1b48f5621c37d062f2696D9d71AC4": {
"0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": {
"amount": "2396414216569414059964695",
"proof": [
"0x6a69b863aea1e9a735f460a6fb449a28b7398f958c4792872d7764700936b79d",
"0x2d3612b2d3c4fda5d706b31ea1dead8d963ed2495d7edce1a94551023b51ee71",
"0x04fdf08423ea2533ebeead3afb4e1be313755fe59ade56e2693d33fa1f9b403c",
"0x1c6578f815e3c3e3bb570ca6d330f1e693bc38ae42378ba5aa824b87b9324819",
"0x209013010ef1908570b1143bf8468f383a325131f6475a543c110d5726b2d57a"
]
}
}
}
}
Loading

0 comments on commit 3a934ff

Please sign in to comment.