Untitled
unknown
plain_text
2 years ago
14 kB
14
Indexable
import json
from web3 import Web3
import pandas as pd
def raffle_ticket_logic(email, wallet_addresses):
emails_wallets_total_balance_raffle_nft = []
try:
# desired block number
block_number = 17773538 # (Jul-25-2023 11:59:59 PM +UTC)
# -------------------------------- web3 provider instance --------------------------------
# Initialize a Web3 provider, such as Infura.
eth_w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/b9cadf0f28404c2ba44283bc9cbd018d'))
pol_w3 = Web3(Web3.HTTPProvider('https://polygon-mainnet.infura.io/v3/b9cadf0f28404c2ba44283bc9cbd018d'))
# -------------------------------- web3 provider instance }}} --------------------------------
# -------------------------------- contract addresses --------------------------------
# Convert contract addresses to checksum format
ads_contract_address = Web3.to_checksum_address("0x3106a0a076bedae847652f42ef07fd58589e001f")
eth_alex_contract_address = Web3.to_checksum_address("0xb2d4F230298Cf68164F6C5DD994068Cbb4C3D335")
pol_mutated_alex_contract_address = Web3.to_checksum_address("0xCe375B8f2b1113d77D89Fd522955C19A2B7f6460")
pol_alexa_contract_address = Web3.to_checksum_address("0xCB0d870CE67Eb99Ec371e6d65c9350748E6E22F8")
lattice_12mths_pool_contract_address = Web3.to_checksum_address("0x79ddc8af1ad063f65cb12639de82fd33495392ae")
# -------------------------------- LOAD THE ABI FILES --------------------------------
# Load the eth_alex NFT contract ABI
with open('raffle_api/api_data/eth_ads_token_abi.json') as eth_ads_f:
eth_ads_contract_abi = json.load(eth_ads_f)
# Load the NFT contract ABI
with open('raffle_api/api_data/eth_alex_sc_abi.json') as eth_alex_f:
eth_alex_contract_abi = json.load(eth_alex_f)
# Load the pol_mutated_alex NFT contract ABI
with open('raffle_api/api_data/polygon_AlkimiMutantAlex.json') as pol_mutated_alex_f:
pol_mutated_alex_contract_abi = json.load(pol_mutated_alex_f)
# Load the pol_alexa NFT contract ABI
with open('raffle_api/api_data/polygon_Alexa.json') as pol_alexa_f:
pol_alexa_contract_abi = json.load(pol_alexa_f)
# Load the lattice_12mths_pool NFT contract ABI
with open('raffle_api/api_data/lattice_12mths_pool_abi.json') as lattice_12mths_pool_f:
lattice_12mths_pool_contract_abi = json.load(lattice_12mths_pool_f)
# -------------------------------- {{{ GET THE CONTRACT INSTANCES --------------------------------
# Get the eth_alex contract instance
eth_ads_contract = eth_w3.eth.contract(
address=ads_contract_address, abi=eth_ads_contract_abi)
# Get the NFT contract instance
eth_alex_contract = eth_w3.eth.contract(
address=eth_alex_contract_address, abi=eth_alex_contract_abi)
# Get the pol_mutated_alex contract instance
pol_mutated_alex_contract = pol_w3.eth.contract(
address=pol_mutated_alex_contract_address, abi=pol_mutated_alex_contract_abi)
# Get the pol_alexa contract instance
pol_alexa_contract = pol_w3.eth.contract(
address=pol_alexa_contract_address, abi=pol_alexa_contract_abi)
# Create a contract instance
lattice_12mths_pool_contract = eth_w3.eth.contract(
address=lattice_12mths_pool_contract_address, abi=lattice_12mths_pool_contract_abi)
# -------------------------------- {{{ Get the wallet list from the alkimi pools --------------------------------
# Read SEP 2022 JSON file
with open("raffle_api/api_data/2022-Sep_AlkimiPool.json", "r") as file:
sep_2022_alkimi_pool_data = json.load(file)
# Create a set of wallets from the user data in the JSON file
sep_2022_alkimi_pool_wallets_list_1 = {data['wallet'] for data in sep_2022_alkimi_pool_data}
sep_2022_alkimi_pool_wallets_list = {Web3.to_checksum_address(wallet) for wallet in
sep_2022_alkimi_pool_wallets_list_1}
# Read OCT 2022 JSON file
with open("raffle_api/api_data/2022-Oct_AlkimiPool.json", "r") as file:
oct_2022_alkimi_pool_data = json.load(file)
# Create a set of wallets from the user data in the JSON file
oct_2022_alkimi_pool_wallets_list_1 = {data['wallet'] for data in oct_2022_alkimi_pool_data}
oct_2022_alkimi_pool_wallets_list = {Web3.to_checksum_address(wallet) for wallet in
oct_2022_alkimi_pool_wallets_list_1}
# Read NOV 2022 JSON file
with open("raffle_api/api_data/2022-Nov_AlkimiPool.json", "r") as file:
nov_2022_alkimi_pool_data = json.load(file)
# Create a set of wallets from the user data in the JSON file
nov_2022_alkimi_pool_wallets_list_1 = {data['wallet'] for data in nov_2022_alkimi_pool_data}
nov_2022_alkimi_pool_wallets_list = {Web3.to_checksum_address(wallet) for wallet in
nov_2022_alkimi_pool_wallets_list_1}
# Read DEC 2022 JSON file
with open("raffle_api/api_data/2022-Dec_AlkimiPool.json", "r") as file:
dec_2022_alkimi_pool_data = json.load(file)
# Create a set of wallets from the user data in the JSON file
dec_2022_alkimi_pool_wallets_list_1 = {data['wallet'] for data in dec_2022_alkimi_pool_data}
dec_2022_alkimi_pool_wallets_list = {Web3.to_checksum_address(wallet) for wallet in
dec_2022_alkimi_pool_wallets_list_1}
# Read Q1 2023 JSON file
with open("raffle_api/api_data/2023-Q1_AlkimiPool.json", "r") as file:
q1_2023_alkimi_pool_data = json.load(file)
# Create a set of wallets from the user data in the JSON file
q1_2023_alkimi_pool_wallets_list_1 = {data['wallet'] for data in q1_2023_alkimi_pool_data}
q1_2023_alkimi_pool_wallets_list = {Web3.to_checksum_address(wallet) for wallet in
q1_2023_alkimi_pool_wallets_list_1}
# Read Q2 2023 JSON file
with open("raffle_api/api_data/2023-Q2_AlkimiPool.json", "r") as file:
q2_2023_alkimi_pool_data = json.load(file)
# Create a set of wallets from the user data in the JSON file
q2_2023_alkimi_pool_wallets_list_1 = {data['wallet'] for data in q2_2023_alkimi_pool_data}
q2_2023_alkimi_pool_wallets_list = {Web3.to_checksum_address(wallet) for wallet in
q2_2023_alkimi_pool_wallets_list_1}
# -------------------------------- {{{ Get the wallet list from the 12 mths Lattice pool --------------------------------
# print("~~~~~~~~~~~~~~~~ LATTICE 12 mths POOL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")
# Get all events related to the contract
events = lattice_12mths_pool_contract.events.Staked.get_logs(
fromBlock=0, toBlock='latest')
# Set to store unique wallet addresses
lattice_12mths_wallet_addresses_1 = set()
# Iterate through each event
for event in events:
# Add the transaction sender wallet address to the set
lattice_12mths_wallet_addresses_1.add(event['args']['user'])
lattice_12mths_wallet_addresses = {Web3.to_checksum_address(wallet) for wallet in
lattice_12mths_wallet_addresses_1}
# print("Total Number of wallets staked in Lattice 12 mths pool : ", len(lattice_12mths_wallet_addresses))
# -------------------------------- Get the wallet list from the 12 mths Lattice pool }}} --------------------------------
# -------------------------------- {{{ Get the wallet list from the 3 mths Lattice pool --------------------------------
# Read the Excel file and create a DataFrame
df = pd.read_excel('raffle_api/api_data/ALKIMI LABS - Lattice 3-month Soft Staking Pool - 2022.xlsx',
header=None, skiprows=2, usecols='A')
# Convert the column to a list
lattice_3mths_wallet_addresses_1 = df[0].tolist()
lattice_3mths_wallet_addresses = {Web3.to_checksum_address(wallet) for wallet in
lattice_3mths_wallet_addresses_1}
# print("Total Number of wallets staked in Lattice 3 mths pool : ", len(lattice_3mths_wallet_addresses))
# print("Total Number of wallets staked in Lattice 3 mths pool : ", len(lattice_3mths_wallet_addresses))
# -------------------------------- Get the wallet list from the 3 mths Lattice pool }}}
# -------------------------------- Create a list to store the emails, wallets, total balance, eligibility flag
# and eth Alex NFT count.
# Iterate over the rows in the CSV file.
# Check if kycVerified is true for the current row.
# if ticket_dt['kycVerified'].lower() == 'true':
# Get the email and wallets from the current row.
# email = ticket_details['email']
# wallet_addresses = ticket_details['wallet'] # Assuming the wallet addresses are in a JSON array.
# Initialize total balance for the user
total_balance = 0
# List to store individual wallet data
wallets_data = []
# Process each wallet address in the user's wallets
for wallet_address in wallet_addresses:
wallet_address_sc = Web3.to_checksum_address(wallet_address)
balance = eth_ads_contract.functions.balanceOf(wallet_address_sc).call(block_identifier=block_number) / (
10 ** 18)
# Get the number of NFTs held
eth_alex_nft_count = eth_alex_contract.functions.balanceOf(wallet_address_sc).call()
pol_mutated_alex_nft_count = pol_mutated_alex_contract.functions.balanceOf(wallet_address_sc).call()
pol_alexa_nft_count = pol_alexa_contract.functions.balanceOf(wallet_address_sc).call()
# check the pools
sep_2022_val = 0;
oct_2022_val = 0;
nov_2022_val = 0;
dec_2022_val = 0;
q1_2023_val = 0;
q2_2023_val = 0
lattice_12mths_val = 0;
lattice_3mths_val = 0
if wallet_address_sc in sep_2022_alkimi_pool_wallets_list:
sep_2022_val = 1
if wallet_address_sc in oct_2022_alkimi_pool_wallets_list:
oct_2022_val = 1
if wallet_address_sc in nov_2022_alkimi_pool_wallets_list:
nov_2022_val = 1
if wallet_address_sc in dec_2022_alkimi_pool_wallets_list:
dec_2022_val = 1
if wallet_address_sc in q1_2023_alkimi_pool_wallets_list:
q1_2023_val = 1
if wallet_address_sc in q2_2023_alkimi_pool_wallets_list:
q2_2023_val = 1
if wallet_address_sc in lattice_12mths_wallet_addresses:
lattice_12mths_val = 1
if wallet_address_sc in lattice_3mths_wallet_addresses:
lattice_3mths_val = 1
total_tickets_nft_pools = eth_alex_nft_count + pol_mutated_alex_nft_count + pol_alexa_nft_count + \
sep_2022_val + oct_2022_val + nov_2022_val + dec_2022_val + q1_2023_val + q2_2023_val + \
lattice_12mths_val + lattice_3mths_val
# assign this for now.... later for the first wallet this will be updated based on the $ADS balance
total_tickets = total_tickets_nft_pools
wallets_data.append({'wallet_id': wallet_address_sc, \
'balance': balance, \
'eligibility': 0, \
'eth_alex_nft_count': eth_alex_nft_count, \
'pol_alexa_nft_count': pol_alexa_nft_count, \
'pol_mutated_alex_nft_count': pol_mutated_alex_nft_count, \
'sep_2022': sep_2022_val, \
'oct_2022': oct_2022_val, \
'nov_2022': nov_2022_val, \
'dec_2022': dec_2022_val, \
'q1_2023': q1_2023_val, \
'q2_2023': q2_2023_val, \
'lattice_12mths': lattice_12mths_val, \
'lattice_3mths': lattice_3mths_val, \
'total_tickets_nft_pools': total_tickets_nft_pools, \
'total_tickets_based_on_balance': 0, \
'total_tickets': total_tickets
})
total_balance += balance
# Determine the eligibility flag based on the total_balance
eligibility_flag = total_balance >= 10000
if total_balance >= 200000:
tickets_based_on_balance = 10
elif total_balance >= 50000:
tickets_based_on_balance = 5
else:
tickets_based_on_balance = 0
# Update total_tickets_based_on_balance for the first wallet
first_wallet = wallets_data[0]
first_wallet['total_tickets_based_on_balance'] = tickets_based_on_balance
if eligibility_flag:
first_wallet['eligibility'] = 1
first_wallet['total_tickets'] = first_wallet['total_tickets_based_on_balance'] + first_wallet[
'total_tickets_nft_pools'] + first_wallet['eligibility']
# Add the total_balance, eligibility flag, NFT ownership flag, NFT count, and individual wallet data to the dictionary and store it in the list.
emails_wallets_total_balance_raffle_nft.append(
{'email': email, 'wallets': wallets_data, 'total_balance': total_balance,
'eligibility_flag': eligibility_flag})
return emails_wallets_total_balance_raffle_nft
except Exception as e:
return str(e)
Editor is loading...