diff --git a/js-scripts/generateRedemptionRights/index.ts b/js-scripts/generateRedemptionRights/index.ts index 72f1810..09e20ce 100644 --- a/js-scripts/generateRedemptionRights/index.ts +++ b/js-scripts/generateRedemptionRights/index.ts @@ -9,11 +9,13 @@ import { Address, zeroAddress, PublicClient, + getContract, + erc20Abi, } from "viem"; import { mainnet } from "viem/chains"; import { MerkleTree } from "merkletreejs"; -// Core types +// Types type PointsBalance = Map<`0x${string}`, bigint>; type RedemptionRightsMap = Map; @@ -48,15 +50,22 @@ interface MerklizedData { } interface PTokenSnapshot { + address: Address; blockNumber: string; balances: { - [address: string]: string; // Using string for BigInt serialization + [address: string]: string; }; } -// TODO: account for LPs +// Overrides +const UNI_POOL_OVERRIDES = { + "0x597a1b0515bbeEe6796B89a6f403c3fD41BB626C": { + "0x24C694d193B19119bcDea9D40a3b0bfaFb281E6D": 6487631537430741114, + "0x44Cb2d713BDa3858001f038645fD05E23E5DE03D": 27597767454066598826095, + }, +}; -// Load config +// Config dotenv.config({ path: "./js-scripts/generateRedemptionRights/.env" }); const config = { rpcUrl: process.env.MAINNET_RPC_URL, @@ -64,16 +73,19 @@ const config = { "," ) as Address[], pointsIds: (process.env.POINTS_IDS as string)?.split(",") as `0x${string}`[], - rewardsPerPToken: process.env.REWARDS_PER_P_TOKEN as string, + rewardsPerPToken: (process.env.REWARDS_PER_P_TOKEN as string)?.split( + "," + ) as string[], }; // Core functions async function calculateRedemptionRights( client: PublicClient, - pTokenAddress: Address + pTokenAddress: Address, + rewardsMultiplier: string ): Promise<[Map, PTokenSnapshot]> { const redemptionRights = new Map(); - const rewardsMultiplier = BigInt(config.rewardsPerPToken); + const rewardsMultiplierBigInt = BigInt(rewardsMultiplier); const blockNumber = await client.getBlockNumber(); const logs = await client.getLogs({ @@ -96,7 +108,7 @@ async function calculateRedemptionRights( redemptionRights.set( from, (redemptionRights.get(from) || 0n) - - (value * rewardsMultiplier) / BigInt(1e18) + (value * rewardsMultiplierBigInt) / BigInt(1e18) ); pTokenBalances.set(from, (pTokenBalances.get(from) || 0n) - value); } @@ -104,14 +116,44 @@ async function calculateRedemptionRights( redemptionRights.set( to, (redemptionRights.get(to) || 0n) + - (value * rewardsMultiplier) / BigInt(1e18) + (value * rewardsMultiplierBigInt) / BigInt(1e18) ); pTokenBalances.set(to, (pTokenBalances.get(to) || 0n) + value); } } + // Apply UNI pool overrides after processing all transfers + for (const [poolAddress, redistributions] of Object.entries( + UNI_POOL_OVERRIDES + )) { + const poolBalance = pTokenBalances.get(poolAddress as Address) || 0n; + if (poolBalance > 0n) { + // Remove balance from pool + pTokenBalances.set(poolAddress as Address, 0n); + redemptionRights.set(poolAddress as Address, 0n); + + // Redistribute to specified addresses + for (const [recipient, amount] of Object.entries(redistributions)) { + const recipientAddress = recipient as Address; + const overrideAmount = BigInt(amount); + + pTokenBalances.set( + recipientAddress, + (pTokenBalances.get(recipientAddress) || 0n) + overrideAmount + ); + + redemptionRights.set( + recipientAddress, + (redemptionRights.get(recipientAddress) || 0n) + + (overrideAmount * rewardsMultiplierBigInt) / BigInt(1e18) + ); + } + } + } + // Create snapshot object const snapshot: PTokenSnapshot = { + address: pTokenAddress, blockNumber: blockNumber.toString(), balances: Object.fromEntries( Array.from(pTokenBalances.entries()) @@ -131,13 +173,13 @@ async function calculateRedemptionRights( } function generateMerkleData( - allRights: RedemptionRightsMap, + allRedemptionRights: RedemptionRightsMap, previousDistribution: AlphaDistributionData ): MerklizedData { const prefix = keccak256(encodePacked(["string"], ["REDEMPTION_RIGHTS"])); - // Generate leaves - const rightsLeaves = Array.from(allRights.entries()).flatMap( + // Generate redemption rights leaves + const rightsLeaves = Array.from(allRedemptionRights.entries()).flatMap( ([address, balances]) => Array.from(balances.entries()).map(([pointsId, balance]) => keccak256( @@ -149,6 +191,7 @@ function generateMerkleData( ) ); + // Generate pTokens leaves const pTokenLeaves = Object.entries(previousDistribution.pTokens).flatMap( ([address, pointsData]) => Object.entries(pointsData).map(([pointsId, data]) => @@ -175,8 +218,8 @@ function generateMerkleData( return { root: tree.getHexRoot() as `0x${string}`, redemptionRights: Object.fromEntries( - Array.from(allRights.entries()).map(([addr, balances]) => [ - addr, + Array.from(allRedemptionRights.entries()).map(([address, balances]) => [ + address, Object.fromEntries( Array.from(balances.entries()).map(([pointsId, balance]) => [ pointsId, @@ -186,7 +229,7 @@ function generateMerkleData( keccak256( encodePacked( ["bytes32", "address", "bytes32", "uint256"], - [prefix, addr, pointsId, balance] + [prefix, address, pointsId, balance] ) ) ) as `0x${string}`[], @@ -196,29 +239,31 @@ function generateMerkleData( ]) ), pTokens: Object.fromEntries( - Object.entries(previousDistribution.pTokens).map(([addr, pointsData]) => [ - addr, - Object.fromEntries( - Object.entries(pointsData).map(([pointsId, data]) => [ - pointsId, - { - amount: data.accumulatingPoints, - proof: tree.getHexProof( - keccak256( - encodePacked( - ["address", "bytes32", "uint256"], - [ - addr as Address, - pointsId as `0x${string}`, - BigInt(data.accumulatingPoints), - ] + Object.entries(previousDistribution.pTokens).map( + ([address, pointsData]) => [ + address, + Object.fromEntries( + Object.entries(pointsData).map(([pointsId, data]) => [ + pointsId, + { + amount: data.accumulatingPoints, + proof: tree.getHexProof( + keccak256( + encodePacked( + ["address", "bytes32", "uint256"], + [ + address as Address, + pointsId as `0x${string}`, + BigInt(data.accumulatingPoints), + ] + ) ) - ) - ) as `0x${string}`[], - }, - ]) - ), - ]) + ) as `0x${string}`[], + }, + ]) + ), + ] + ) ), }; } @@ -230,7 +275,7 @@ async function generateMerkleTree(): Promise { transport: http(config.rpcUrl), }); - // Validate inputs + // Validate config if ( !config.rpcUrl || !config.pTokenAddresses.length || @@ -243,27 +288,46 @@ async function generateMerkleTree(): Promise { console.log(`Processing at block #${await client.getBlockNumber()}`); // Calculate rights for each token - const allRights: RedemptionRightsMap = new Map(); + const allRedemptionRights: RedemptionRightsMap = new Map(); const snapshots: { [address: string]: PTokenSnapshot } = {}; for (let i = 0; i < config.pTokenAddresses.length; i++) { const [rights, snapshot] = await calculateRedemptionRights( client, - config.pTokenAddresses[i] + config.pTokenAddresses[i], + config.rewardsPerPToken[i] ); snapshots[config.pTokenAddresses[i]] = snapshot; for (const [addr, balance] of rights.entries()) { - if (!allRights.has(addr)) allRights.set(addr, new Map()); - allRights.get(addr)!.set(config.pointsIds[i], balance); + if (!allRedemptionRights.has(addr)) + allRedemptionRights.set(addr, new Map()); + allRedemptionRights.get(addr)!.set(config.pointsIds[i], balance); } } - // Save snapshots - fs.writeFileSync( - "js-scripts/generateRedemptionRights/out/ptoken-snapshots.json", - JSON.stringify(snapshots, null, 2) - ); + // Save individual snapshots for each pToken + for (const [pTokenAddress, snapshot] of Object.entries(snapshots)) { + const pTokenContract = getContract({ + address: pTokenAddress as Address, + abi: erc20Abi, + client, + }); + + const symbol = await pTokenContract.read.symbol(); + const fileName = `ptoken-snapshot-${symbol.toLowerCase()}.json`; + + // Add address to the snapshot data + const snapshotWithAddress: PTokenSnapshot = { + address: pTokenAddress as Address, + ...snapshot, + }; + + fs.writeFileSync( + `js-scripts/generateRedemptionRights/out/${fileName}`, + JSON.stringify(snapshotWithAddress, null, 2) + ); + } // Generate merkle data const previousDistribution = JSON.parse( @@ -273,7 +337,10 @@ async function generateMerkleTree(): Promise { ) ) as AlphaDistributionData; - const merklizedData = generateMerkleData(allRights, previousDistribution); + const merklizedData = generateMerkleData( + allRedemptionRights, + previousDistribution + ); console.log("Merkle root:", merklizedData.root); fs.writeFileSync( diff --git a/js-scripts/generateRedemptionRights/out/merged-distribution.json b/js-scripts/generateRedemptionRights/out/merged-distribution.json index cb26a8e..1fae8dc 100644 --- a/js-scripts/generateRedemptionRights/out/merged-distribution.json +++ b/js-scripts/generateRedemptionRights/out/merged-distribution.json @@ -1,24 +1,15 @@ { - "root": "0x602cdd6dd4f1c6f7bb049ce8b23a49e5177dc84830c7f00cc09eb0f11f03d9be", + "root": "0xc6097e6fdabc5c6207fa640553853c9d884cff674602c382f15660914b6d40c7", "redemptionRights": { "0x25E426b153e74Ab36b2685c3A464272De60888Ae": { "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { "amount": "52792622186481736164", "proof": [ "0xc1a70bb7d5c4ddf647114cb36083bca867a80e37e187aa1d6705f3b12357d7cf", - "0x04a635b0e5b8e5ac70059fb9dc2682f5102a3b4a2f8b2c0d6f1ea43b1e04272f", - "0xab802966e4277e85c878dad4c849c7632735a56c3710c197470de81707286069", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" - ] - } - }, - "0x597a1b0515bbeEe6796B89a6f403c3fD41BB626C": { - "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { - "amount": "1749589083544816554749", - "proof": [ - "0xf17cd78fb91097d6d817f63f61884a91c8d5ceedefd3ff761ad4621db6cdb688", - "0xc7cee474205709d43f4e6496b9ac27153bc2588c648cf86cef7dfa86f2c440a1" + "0x9202bdda11a41be9ebfe610247d3e971e65959936bdf2d9186395b70d25d8d84", + "0x17c86983941dc9f87b11f6cd1f6f260f2c76f90e16024ad475204e07d99eedf4", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -28,9 +19,9 @@ "proof": [ "0x0b9dba6343a79836c09a8fe2151dfaeab44a90e1c590e664e142a46c5251c3e4", "0x3aaef79be826edf6d7035f8ece860c534e8fa43b5d7a32581664fd7d9761fe39", - "0x4cd045546ad35fb4ffbe7efabeb3d5e2cfe57317600c887220d3614239de3cdb", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0xd045aba11e229f57f22207671f583c9fd3468713a70ce7237b486653d19d0bc0", + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -38,11 +29,11 @@ "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { "amount": "19621036792277125819", "proof": [ - "0x1b9305567ae250a289d9c9a662f2470db6a5b9396d0358bfebe9250f336348b0", - "0x41ea528f3d329e1491631bb9a5a3a1632f5f1c9b308d70c53c855c7cf90924c3", + "0x33b677140d55397d85f1c789cd35975f28bdbb973fa125c5d895a95c1026266b", + "0x6b5537a4b44653f34378b50792bbe235eef8f48b5456fff6eaae8fdce431b45c", "0xbb77a1bb065bc346c4f39dfaff16a845fb2f151394251a08a942b3aa793b654a", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -50,11 +41,11 @@ "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { "amount": "7377567032082737967061", "proof": [ - "0x33b677140d55397d85f1c789cd35975f28bdbb973fa125c5d895a95c1026266b", - "0x9a562114e5173cb1802e3635ab3bed9c3c56c74532d5f34d57784f005ded3c36", - "0xbb77a1bb065bc346c4f39dfaff16a845fb2f151394251a08a942b3aa793b654a", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x5697b38b5bd873ff3a8132059568adf332a3e70b8a5ca3e14c596b4fc43e6671", + "0x42a2346cc718889c9be2af3a107d12cb3900c221558ef5c0b3631f5c3ae2e5d4", + "0xa014a7c4ba0e9689e0f02bf17bc6eeff5d299ddf9dbd54459a03c318237e8e1b", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -62,8 +53,8 @@ "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { "amount": "28648231580558995600834", "proof": [ - "0xee2c966b96d8429ef64a79f7d8cb46647213dbb723885eb7a7826c0434797d2a", - "0xc7cee474205709d43f4e6496b9ac27153bc2588c648cf86cef7dfa86f2c440a1" + "0x04a635b0e5b8e5ac70059fb9dc2682f5102a3b4a2f8b2c0d6f1ea43b1e04272f", + "0x5eeefedc919f5dec8d28214722f476b6e1a18460f90e03a3fc4889cae667fb44" ] } }, @@ -73,9 +64,33 @@ "proof": [ "0x1aabefcbeb1ba41043ba86b6019b4f0e9eda103bd89334b2dbd385b4b6fd0fb1", "0xb1b1d68fe165491c5e58654565c779c68f1e0909168fb478480f1ebb22479b4d", - "0x4cd045546ad35fb4ffbe7efabeb3d5e2cfe57317600c887220d3614239de3cdb", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0xd045aba11e229f57f22207671f583c9fd3468713a70ce7237b486653d19d0bc0", + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" + ] + } + }, + "0x24C694d193B19119bcDea9D40a3b0bfaFb281E6D": { + "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { + "amount": "411193465672233566", + "proof": [ + "0x3e7e8dbf133ff6472d8567b24ea2be55e0400118c6a72d46442e54bf47351187", + "0x42a2346cc718889c9be2af3a107d12cb3900c221558ef5c0b3631f5c3ae2e5d4", + "0xa014a7c4ba0e9689e0f02bf17bc6eeff5d299ddf9dbd54459a03c318237e8e1b", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" + ] + } + }, + "0x44Cb2d713BDa3858001f038645fD05E23E5DE03D": { + "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { + "amount": "1749177890079144448658", + "proof": [ + "0x1b9305567ae250a289d9c9a662f2470db6a5b9396d0358bfebe9250f336348b0", + "0xdcb5ba69bfb574629504575bbbd60386f2a6fade3778baa3d30c24ed53cc754c", + "0xbb77a1bb065bc346c4f39dfaff16a845fb2f151394251a08a942b3aa793b654a", + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } } @@ -86,10 +101,10 @@ "amount": 833020026897918500000, "proof": [ "0x6ffeeee822b04a5714526489a1b1e6e84d8548d7a8b5cb829fd8d22d86779dde", - "0x9202bdda11a41be9ebfe610247d3e971e65959936bdf2d9186395b70d25d8d84", - "0xfa81e644f935a7f197b15079d105fd9c34398e9f304c0f24a7cdd9a321aa7525", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x8fd22ab3c90380b53854a307ae16e6cc910904eb906e7f9538a6afb1ead790ce", + "0xa014a7c4ba0e9689e0f02bf17bc6eeff5d299ddf9dbd54459a03c318237e8e1b", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] }, "0x1552756d70656c20506f696e743a205a69726375697408705a49524355495400": { @@ -97,9 +112,9 @@ "proof": [ "0x0fcd36341455485e89dbfc035b03be7d9ec5ceb7edfcb4849c51a457f4585ce7", "0xb1b1d68fe165491c5e58654565c779c68f1e0909168fb478480f1ebb22479b4d", - "0x4cd045546ad35fb4ffbe7efabeb3d5e2cfe57317600c887220d3614239de3cdb", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0xd045aba11e229f57f22207671f583c9fd3468713a70ce7237b486653d19d0bc0", + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -108,10 +123,10 @@ "amount": 152407798291890470000, "proof": [ "0x9dd5c63d7a85ebb90ea35dd0f5fb54974ae79d761c86e3c469616d0b2eaeff67", - "0x42a2346cc718889c9be2af3a107d12cb3900c221558ef5c0b3631f5c3ae2e5d4", - "0xfa81e644f935a7f197b15079d105fd9c34398e9f304c0f24a7cdd9a321aa7525", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x403c3bb7b0ff32cb4e934edd9801aa0eec0ff624fe9a0845cb35a7375e02c25d", + "0x17c86983941dc9f87b11f6cd1f6f260f2c76f90e16024ad475204e07d99eedf4", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -120,10 +135,10 @@ "amount": 131187337543613430000, "proof": [ "0x73c25d42a5988fcc27384ecf9fbc2f810c9f862e977db0f73e9cabf68ac9e5b6", - "0x42a2346cc718889c9be2af3a107d12cb3900c221558ef5c0b3631f5c3ae2e5d4", - "0xfa81e644f935a7f197b15079d105fd9c34398e9f304c0f24a7cdd9a321aa7525", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x403c3bb7b0ff32cb4e934edd9801aa0eec0ff624fe9a0845cb35a7375e02c25d", + "0x17c86983941dc9f87b11f6cd1f6f260f2c76f90e16024ad475204e07d99eedf4", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -132,10 +147,10 @@ "amount": 73286503362495650000, "proof": [ "0x6b691008971e9ab0b1581861b6e542943b4ea3ef91df9fd3e3167e16dfe61eab", - "0x9202bdda11a41be9ebfe610247d3e971e65959936bdf2d9186395b70d25d8d84", - "0xfa81e644f935a7f197b15079d105fd9c34398e9f304c0f24a7cdd9a321aa7525", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x8fd22ab3c90380b53854a307ae16e6cc910904eb906e7f9538a6afb1ead790ce", + "0xa014a7c4ba0e9689e0f02bf17bc6eeff5d299ddf9dbd54459a03c318237e8e1b", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -144,10 +159,8 @@ "amount": 4.977606283426392e+21, "proof": [ "0xd1c3a5f261d26002eb7ea89e24b742b91b073fd272fadc4384323899b277f04e", - "0x403c3bb7b0ff32cb4e934edd9801aa0eec0ff624fe9a0845cb35a7375e02c25d", - "0xab802966e4277e85c878dad4c849c7632735a56c3710c197470de81707286069", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0xf17cd78fb91097d6d817f63f61884a91c8d5ceedefd3ff761ad4621db6cdb688", + "0x5eeefedc919f5dec8d28214722f476b6e1a18460f90e03a3fc4889cae667fb44" ] } }, @@ -155,11 +168,11 @@ "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { "amount": 2.8303575270814903e+21, "proof": [ - "0x3e7e8dbf133ff6472d8567b24ea2be55e0400118c6a72d46442e54bf47351187", - "0x9a562114e5173cb1802e3635ab3bed9c3c56c74532d5f34d57784f005ded3c36", + "0x317c7eb5a0fffec11dd2d7b3d0bfd2fe201bf9ff67627a43990ad1ad51714da3", + "0x6b5537a4b44653f34378b50792bbe235eef8f48b5456fff6eaae8fdce431b45c", "0xbb77a1bb065bc346c4f39dfaff16a845fb2f151394251a08a942b3aa793b654a", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -168,10 +181,8 @@ "amount": 5.225302412387277e+23, "proof": [ "0xd6edec91605da1894e0fa3cdbb82e2005d9b05584aacb82d8c407725b9b3641d", - "0x403c3bb7b0ff32cb4e934edd9801aa0eec0ff624fe9a0845cb35a7375e02c25d", - "0xab802966e4277e85c878dad4c849c7632735a56c3710c197470de81707286069", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0xf17cd78fb91097d6d817f63f61884a91c8d5ceedefd3ff761ad4621db6cdb688", + "0x5eeefedc919f5dec8d28214722f476b6e1a18460f90e03a3fc4889cae667fb44" ] } }, @@ -180,10 +191,10 @@ "amount": 2.621060441200294e+23, "proof": [ "0x9f06e030a1a0be00f37013433e8d97e2d1cf5ee1ad68da103114e6e82ab92c5f", - "0x04a635b0e5b8e5ac70059fb9dc2682f5102a3b4a2f8b2c0d6f1ea43b1e04272f", - "0xab802966e4277e85c878dad4c849c7632735a56c3710c197470de81707286069", - "0x7c0bd8bd630d01f1a459f6cd963cfc5f58487dec582339b1d8f29edbbd41d8ab", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x9202bdda11a41be9ebfe610247d3e971e65959936bdf2d9186395b70d25d8d84", + "0x17c86983941dc9f87b11f6cd1f6f260f2c76f90e16024ad475204e07d99eedf4", + "0xf1dd87dc63132095adce8c1a5ad749892d389821e1d1bf28c5eee065e358695d", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -191,11 +202,11 @@ "0x1852756d70656c206b506f696e743a20457468656e61205332066b7053415453": { "amount": 9.888353035952251e+23, "proof": [ - "0x317c7eb5a0fffec11dd2d7b3d0bfd2fe201bf9ff67627a43990ad1ad51714da3", - "0x41ea528f3d329e1491631bb9a5a3a1632f5f1c9b308d70c53c855c7cf90924c3", + "0x2baa966a98f9d55368c9d2f23afeea2683b639aeb56babe41bd7f4d0d727970e", + "0xdcb5ba69bfb574629504575bbbd60386f2a6fade3778baa3d30c24ed53cc754c", "0xbb77a1bb065bc346c4f39dfaff16a845fb2f151394251a08a942b3aa793b654a", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } }, @@ -205,9 +216,9 @@ "proof": [ "0x0d204e0c13988dc6ad8a13ec4b0ed7ad17ab5a668edc8accfcce7f2bfdade628", "0x3aaef79be826edf6d7035f8ece860c534e8fa43b5d7a32581664fd7d9761fe39", - "0x4cd045546ad35fb4ffbe7efabeb3d5e2cfe57317600c887220d3614239de3cdb", - "0xc2a23d2ce2d64e086666994505249bdf18e495b91c1e019ae349a3f6001d6423", - "0x0fe239692610c805880a540ea359a0f3f8314f94bb95cd4ec53d712ae6cdc63d" + "0xd045aba11e229f57f22207671f583c9fd3468713a70ce7237b486653d19d0bc0", + "0x7b0041a106ae3fb142ab4e6da9f6b9958fc667e110122e6e9a7a77c9a574d585", + "0xacbcf9b5c8a4d773b3d3fe2e93390fb4b7cb390fd39511981bb1ceed154456fc" ] } } diff --git a/js-scripts/generateRedemptionRights/out/ptoken-snapshot-kpsats.json b/js-scripts/generateRedemptionRights/out/ptoken-snapshot-kpsats.json new file mode 100644 index 0000000..82c6f4f --- /dev/null +++ b/js-scripts/generateRedemptionRights/out/ptoken-snapshot-kpsats.json @@ -0,0 +1,14 @@ +{ + "address": "0xdFa21ceC8A46386F5d36F4b07E18BcCcA59f425B", + "blockNumber": "21073410", + "balances": { + "0x25E426b153e74Ab36b2685c3A464272De60888Ae": "832939015897918484874", + "0xAF9e4E01525C4856E00Cb0F363AFc34E7decD6a7": "1209830694094345523934847", + "0x6CD72B1E6E300340A48943d6aF34EF5AE07D3577": "309572178834508409860", + "0x1d848bf0dcF1b48f5621c37d062f2696D9d71AC4": "116400041689867972616256", + "0x76DB9edf1451933711fc0A0c622E013ebD229EaB": "451999329293340648396874", + "0xB6462B67fe692223DFFb61C8DC8Ad080CBa180Cc": "195548998385752443216151", + "0x24C694d193B19119bcDea9D40a3b0bfaFb281E6D": "6487631537430740992", + "0x44Cb2d713BDa3858001f038645fD05E23E5DE03D": "27597767454066600837120" + } +} \ No newline at end of file diff --git a/js-scripts/generateRedemptionRights/out/ptoken-snapshots.json b/js-scripts/generateRedemptionRights/out/ptoken-snapshots.json deleted file mode 100644 index f2c350b..0000000 --- a/js-scripts/generateRedemptionRights/out/ptoken-snapshots.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "0xdFa21ceC8A46386F5d36F4b07E18BcCcA59f425B": { - "blockNumber": "21068499", - "balances": { - "0x25E426b153e74Ab36b2685c3A464272De60888Ae": "832939015897918484874", - "0x597a1b0515bbeEe6796B89a6f403c3fD41BB626C": "27604255085604029567224", - "0xAF9e4E01525C4856E00Cb0F363AFc34E7decD6a7": "1209830694094345523934847", - "0x6CD72B1E6E300340A48943d6aF34EF5AE07D3577": "309572178834508409860", - "0x1d848bf0dcF1b48f5621c37d062f2696D9d71AC4": "116400041689867972616256", - "0x76DB9edf1451933711fc0A0c622E013ebD229EaB": "451999329293340648396874", - "0xB6462B67fe692223DFFb61C8DC8Ad080CBa180Cc": "195548998385752443216151" - } - } -} \ No newline at end of file