Due to the snapshot constrains Snapshot constrains we are forced to use hash table model for faster access, also we calculate the points before snapshot strategy and store it on immutableDB with the proof of how it has been calculated. Also, we store the mapping between Eth wallets and gatewayID to not invoke the Gateway site as it will take time and adds another dependency to our strategy. Current dependancies are Uniswap Graphql and Arweave.

{
    PDASnapshot: {
        "GatewayID1": {
            "Citizen": {
                Point: SUM(PDAs.filterDuplicateSubTypes().points)
                PDAs: [
                    PoktDaoQuest // with expration date: Feb 2024
                    PoktDaoQuest // with expration date: Dec 2024
                    poktDnaQuest
                ]
            },
            "Builder": {
								// if points > 10 then 10 else points
                Point: SUM(PDAs.filterDuplicateSubTypesOfSamePoint().points)
                PDAs:[
                    BuilderSocketPDAsubTypeAPoint1, // exp date: Feb 2024
                    BuilderSocketPDAsubTypeAPoint1, // exp date: Dec 2024
                    BuilderSocketPDAsubTypeAPoint8, // exp date: Jan 2024
                    BuilderSocketPDAsubTypeBPoint8, // exp date: May 2024
                    BuilderSocketPDAsubTypeCPoint5
                ]
            },
            "Staker": {
                PointValidator: SQRT(SUM(
                        PDAs.subtype(Validator).filterInactiveStatus().points
                    )
                ), 
                PointGateway: SUM(PDAs.subtype(Gateway).points),
                PDAs:[
                    NonCustodianValidatorPDAForServiceDomainC0d3r,
                    NonCustodianValidatorPDAForServiceDomainPoktPool,
                    CustodianValidatorPDAForWalletXXXXXXXX,
                    CustodianValidatorPDAForWalletYYYYYYY,
                    GatewayPDAForGatewayGrove
                ]
            }
        },
        "GatewayID2": {
            ...
        },
        "GatewayID3": {
						...
        }
    }
    mapping:{
        ethWallet1: GatewayID1,
        ethwallet2: GatewayID2,
        ethwallet3: GatewayID2,
        ethwallet4: GatewayID2,
        ethwallet5: GatewayID3,
				/*
				voting_eth_wallet -> GatewayIDX 
				POKT-eth-stake-wallet-1 -> GatewayIDX
				POKT-eth-stake-wallet-2 -> GatewayIDX
				POKT-eth-stake-wallet-3 -> GatewayIDX
				*/
    }

}