Code Reference¶
Lottery
¶
Class for accessing PancakeSwap Lottery smart-contract information.
Source code in pancakeswap_lottery/lottery.py
class Lottery:
"""Class for accessing PancakeSwap Lottery smart-contract information."""
def __init__(self, provider="https://bsc-dataseed.binance.org:443"):
"""Initialize the object
Attributes:
provider (str): Web3 HTTPProvider.
Defaults to https://bsc-dataseed.binance.org:443
Examples:
lottery = Lottery()
"""
self.w3 = Web3(Web3.HTTPProvider(provider))
contract_addresses = {
"LotteryUpgradeProxy": "0x3C3f2049cc17C136a604bE23cF7E42745edf3b91",
"LotteryNFT": "0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1",
}
self.lottery_contract = self._load_contract(
abi_name="LotteryUpgradeProxy",
address=contract_addresses["LotteryUpgradeProxy"],
)
self.token_contract = self._load_contract(
abi_name="LotteryNFT", address=contract_addresses["LotteryNFT"]
)
self.decimals = 10 ** 18
def _load_contract(self, abi_name, address):
return self.w3.eth.contract(address=address, abi=load_abi(abi_name))
def get_total_rewards(self, issue_index):
"""Get total rewards of lottery round
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_total_rewards(432)
51384.125
"""
total_rewards = self.lottery_contract.functions.getTotalRewards(
issue_index
).call()
return total_rewards / self.decimals
def get_lottery_date(self, issue_index):
"""Get date and time of lottery round
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_lottery_date(432)
2021-03-26 02:00:00+00:00
"""
lottery_date = generate_lottery_date(issue_index)
return lottery_date
def get_drawed(self):
"""Check if current lottery round is drawed
Examples:
>>> lottery.get_drawed()
False
"""
return self.lottery_contract.functions.drawed().call()
def get_drawing_phase(self):
"""Get current lottery round drawing phase
Examples:
>>> lottery.get_drawing_phase()
False
"""
return self.lottery_contract.functions.drawingPhase().call()
def get_matching_reward_amount(self, issue_index, matching_num):
"""Get number of tickets matched a specified number
Args:
issue_index (int): Lottery round
matching_num (int): Number to match
Examples:
>>> lottery.get_matching_reward_amount(432, 3)
34
"""
matching_reward_amount = (
self.lottery_contract.functions.getMatchingRewardAmount(
issue_index, matching_num
).call()
)
return int(matching_reward_amount / self.decimals)
def get_lottery_numbers(self, tokenid):
"""Get lottery numbers for a given ticket
Args:
tokenid (int): Lottery ticket id
Examples:
>>> lottery.get_lottery_numbers(1328060)
[11, 5, 14, 6]
"""
return self.token_contract.functions.getLotteryNumbers(tokenid).call()
def get_reward_view(self, tokenid):
"""Get rewards for a given ticket
Args:
tokenid (int): Lottery ticket id
Examples:
>>> lottery.get_reward_view(1328060)
0
"""
return self.lottery_contract.functions.getRewardView(tokenid).call()
def get_history_numbers(self, issue_index):
"""Get winning numbers of lottery round
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_history_numbers(432)
[2, 13, 7, 3]
"""
history_numbers = []
for i in range(0, 4):
number = self.lottery_contract.functions.historyNumbers(
issue_index, i
).call()
history_numbers.append(number)
return history_numbers
def get_history_amount(self, issue_index):
"""Get numbers of tickets matched
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_history_amount(432)
{'4': 1, '3': 34, '2': 718}
"""
history_amount = {}
for i in range(1, 4):
winner = self.lottery_contract.functions.historyAmount(
issue_index, i
).call()
if i == 1:
history_amount["4"] = int(winner / self.decimals)
elif i == 2:
history_amount["3"] = int(winner / self.decimals)
elif i == 3:
history_amount["2"] = int(winner / self.decimals)
return history_amount
def get_issue_index(self):
"""Get current lottery round id
Examples:
>>> lottery.get_issue_index()
435
"""
return self.lottery_contract.functions.issueIndex().call()
def get_last_timestamp(self, epoch=False):
"""Last updated (timestamp)
Args:
epoch (bool): Return as epoch timestamp?
Examples:
>>> lottery.get_last_timestamp(epoch=False)
2021-03-27 11:38:49
"""
last_timestamp = self.lottery_contract.functions.lastTimestamp().call()
if epoch:
return last_timestamp
else:
return datetime.fromtimestamp(last_timestamp)
def get_max_number(self):
"""Get max number
Examples:
>>> lottery.get_max_number()
14
"""
return self.lottery_contract.functions.maxNumber().call()
def get_min_price(self):
"""Get current price of 1 ticket
Examples:
>>> lottery.get_min_price()
1
"""
min_price = self.lottery_contract.functions.minPrice().call()
return int(min_price / self.decimals)
def get_total_addresses(self):
"""Get total addresses
Examples:
>>> lottery.get_total_addresses()
200
"""
return self.lottery_contract.functions.totalAddresses().call()
def get_total_amount(self):
"""Get total pot (CAKE) of current lottery round
Examples:
>>> lottery.get_total_amount()
34977.25
"""
total_amount = self.lottery_contract.functions.totalAmount().call()
return total_amount / self.decimals
def get_allocation(self):
"""Get prize pool allocation (percent)
Examples:
>>> lottery.get_allocation()
{'1': 50, '2': 20, '3': 10}
"""
allocation = {}
for i in range(0, 3):
alloc = self.lottery_contract.functions.allocation(i).call()
allocation[f"{i + 1}"] = alloc
return allocation
def get_cake(self):
"""Get CAKE contract address
Examples:
>>> lottery.get_cake()
0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82
"""
return self.lottery_contract.functions.cake().call()
def get_lotteryNFT(self):
"""Get PLT-token contract address
Examples:
>>> lottery.get_lotteryNFT()
0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1
"""
return self.lottery_contract.functions.lotteryNFT().call()
def get_balance_of(self, address):
"""Get total number of tickets bought by a given address
Args:
address (str): BSC address
Examples:
>>> lottery.get_balance_of("0xc13456A34305e9265E907F70f76B1BA6E2055c8B")
2673
"""
return self.token_contract.functions.balanceOf(address).call()
__init__(self, provider='https://bsc-dataseed.binance.org:443')
special
¶
Initialize the object
Attributes:
Name | Type | Description |
---|---|---|
provider |
str |
Web3 HTTPProvider. Defaults to https://bsc-dataseed.binance.org:443 |
Examples:
lottery = Lottery()
Source code in pancakeswap_lottery/lottery.py
def __init__(self, provider="https://bsc-dataseed.binance.org:443"):
"""Initialize the object
Attributes:
provider (str): Web3 HTTPProvider.
Defaults to https://bsc-dataseed.binance.org:443
Examples:
lottery = Lottery()
"""
self.w3 = Web3(Web3.HTTPProvider(provider))
contract_addresses = {
"LotteryUpgradeProxy": "0x3C3f2049cc17C136a604bE23cF7E42745edf3b91",
"LotteryNFT": "0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1",
}
self.lottery_contract = self._load_contract(
abi_name="LotteryUpgradeProxy",
address=contract_addresses["LotteryUpgradeProxy"],
)
self.token_contract = self._load_contract(
abi_name="LotteryNFT", address=contract_addresses["LotteryNFT"]
)
self.decimals = 10 ** 18
get_allocation(self)
¶
Get prize pool allocation (percent)
Examples:
>>> lottery.get_allocation()
{'1': 50, '2': 20, '3': 10}
Source code in pancakeswap_lottery/lottery.py
def get_allocation(self):
"""Get prize pool allocation (percent)
Examples:
>>> lottery.get_allocation()
{'1': 50, '2': 20, '3': 10}
"""
allocation = {}
for i in range(0, 3):
alloc = self.lottery_contract.functions.allocation(i).call()
allocation[f"{i + 1}"] = alloc
return allocation
get_balance_of(self, address)
¶
Get total number of tickets bought by a given address
Parameters:
Name | Type | Description | Default |
---|---|---|---|
address |
str |
BSC address |
required |
Examples:
>>> lottery.get_balance_of("0xc13456A34305e9265E907F70f76B1BA6E2055c8B")
2673
Source code in pancakeswap_lottery/lottery.py
def get_balance_of(self, address):
"""Get total number of tickets bought by a given address
Args:
address (str): BSC address
Examples:
>>> lottery.get_balance_of("0xc13456A34305e9265E907F70f76B1BA6E2055c8B")
2673
"""
return self.token_contract.functions.balanceOf(address).call()
get_cake(self)
¶
Get CAKE contract address
Examples:
>>> lottery.get_cake()
0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82
Source code in pancakeswap_lottery/lottery.py
def get_cake(self):
"""Get CAKE contract address
Examples:
>>> lottery.get_cake()
0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82
"""
return self.lottery_contract.functions.cake().call()
get_drawed(self)
¶
Check if current lottery round is drawed
Examples:
>>> lottery.get_drawed()
False
Source code in pancakeswap_lottery/lottery.py
def get_drawed(self):
"""Check if current lottery round is drawed
Examples:
>>> lottery.get_drawed()
False
"""
return self.lottery_contract.functions.drawed().call()
get_drawing_phase(self)
¶
Get current lottery round drawing phase
Examples:
>>> lottery.get_drawing_phase()
False
Source code in pancakeswap_lottery/lottery.py
def get_drawing_phase(self):
"""Get current lottery round drawing phase
Examples:
>>> lottery.get_drawing_phase()
False
"""
return self.lottery_contract.functions.drawingPhase().call()
get_history_amount(self, issue_index)
¶
Get numbers of tickets matched
Parameters:
Name | Type | Description | Default |
---|---|---|---|
issue_index |
int |
Lottery round |
required |
Examples:
>>> lottery.get_history_amount(432)
{'4': 1, '3': 34, '2': 718}
Source code in pancakeswap_lottery/lottery.py
def get_history_amount(self, issue_index):
"""Get numbers of tickets matched
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_history_amount(432)
{'4': 1, '3': 34, '2': 718}
"""
history_amount = {}
for i in range(1, 4):
winner = self.lottery_contract.functions.historyAmount(
issue_index, i
).call()
if i == 1:
history_amount["4"] = int(winner / self.decimals)
elif i == 2:
history_amount["3"] = int(winner / self.decimals)
elif i == 3:
history_amount["2"] = int(winner / self.decimals)
return history_amount
get_history_numbers(self, issue_index)
¶
Get winning numbers of lottery round
Parameters:
Name | Type | Description | Default |
---|---|---|---|
issue_index |
int |
Lottery round |
required |
Examples:
>>> lottery.get_history_numbers(432)
[2, 13, 7, 3]
Source code in pancakeswap_lottery/lottery.py
def get_history_numbers(self, issue_index):
"""Get winning numbers of lottery round
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_history_numbers(432)
[2, 13, 7, 3]
"""
history_numbers = []
for i in range(0, 4):
number = self.lottery_contract.functions.historyNumbers(
issue_index, i
).call()
history_numbers.append(number)
return history_numbers
get_issue_index(self)
¶
Get current lottery round id
Examples:
>>> lottery.get_issue_index()
435
Source code in pancakeswap_lottery/lottery.py
def get_issue_index(self):
"""Get current lottery round id
Examples:
>>> lottery.get_issue_index()
435
"""
return self.lottery_contract.functions.issueIndex().call()
get_last_timestamp(self, epoch=False)
¶
Last updated (timestamp)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
epoch |
bool |
Return as epoch timestamp? |
False |
Examples:
>>> lottery.get_last_timestamp(epoch=False)
2021-03-27 11:38:49
Source code in pancakeswap_lottery/lottery.py
def get_last_timestamp(self, epoch=False):
"""Last updated (timestamp)
Args:
epoch (bool): Return as epoch timestamp?
Examples:
>>> lottery.get_last_timestamp(epoch=False)
2021-03-27 11:38:49
"""
last_timestamp = self.lottery_contract.functions.lastTimestamp().call()
if epoch:
return last_timestamp
else:
return datetime.fromtimestamp(last_timestamp)
get_lotteryNFT(self)
¶
Get PLT-token contract address
Examples:
>>> lottery.get_lotteryNFT()
0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1
Source code in pancakeswap_lottery/lottery.py
def get_lotteryNFT(self):
"""Get PLT-token contract address
Examples:
>>> lottery.get_lotteryNFT()
0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1
"""
return self.lottery_contract.functions.lotteryNFT().call()
get_lottery_date(self, issue_index)
¶
Get date and time of lottery round
Parameters:
Name | Type | Description | Default |
---|---|---|---|
issue_index |
int |
Lottery round |
required |
Examples:
>>> lottery.get_lottery_date(432)
2021-03-26 02:00:00+00:00
Source code in pancakeswap_lottery/lottery.py
def get_lottery_date(self, issue_index):
"""Get date and time of lottery round
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_lottery_date(432)
2021-03-26 02:00:00+00:00
"""
lottery_date = generate_lottery_date(issue_index)
return lottery_date
get_lottery_numbers(self, tokenid)
¶
Get lottery numbers for a given ticket
Parameters:
Name | Type | Description | Default |
---|---|---|---|
tokenid |
int |
Lottery ticket id |
required |
Examples:
>>> lottery.get_lottery_numbers(1328060)
[11, 5, 14, 6]
Source code in pancakeswap_lottery/lottery.py
def get_lottery_numbers(self, tokenid):
"""Get lottery numbers for a given ticket
Args:
tokenid (int): Lottery ticket id
Examples:
>>> lottery.get_lottery_numbers(1328060)
[11, 5, 14, 6]
"""
return self.token_contract.functions.getLotteryNumbers(tokenid).call()
get_matching_reward_amount(self, issue_index, matching_num)
¶
Get number of tickets matched a specified number
Parameters:
Name | Type | Description | Default |
---|---|---|---|
issue_index |
int |
Lottery round |
required |
matching_num |
int |
Number to match |
required |
Examples:
>>> lottery.get_matching_reward_amount(432, 3)
34
Source code in pancakeswap_lottery/lottery.py
def get_matching_reward_amount(self, issue_index, matching_num):
"""Get number of tickets matched a specified number
Args:
issue_index (int): Lottery round
matching_num (int): Number to match
Examples:
>>> lottery.get_matching_reward_amount(432, 3)
34
"""
matching_reward_amount = (
self.lottery_contract.functions.getMatchingRewardAmount(
issue_index, matching_num
).call()
)
return int(matching_reward_amount / self.decimals)
get_max_number(self)
¶
Get max number
Examples:
>>> lottery.get_max_number()
14
Source code in pancakeswap_lottery/lottery.py
def get_max_number(self):
"""Get max number
Examples:
>>> lottery.get_max_number()
14
"""
return self.lottery_contract.functions.maxNumber().call()
get_min_price(self)
¶
Get current price of 1 ticket
Examples:
>>> lottery.get_min_price()
1
Source code in pancakeswap_lottery/lottery.py
def get_min_price(self):
"""Get current price of 1 ticket
Examples:
>>> lottery.get_min_price()
1
"""
min_price = self.lottery_contract.functions.minPrice().call()
return int(min_price / self.decimals)
get_reward_view(self, tokenid)
¶
Get rewards for a given ticket
Parameters:
Name | Type | Description | Default |
---|---|---|---|
tokenid |
int |
Lottery ticket id |
required |
Examples:
>>> lottery.get_reward_view(1328060)
0
Source code in pancakeswap_lottery/lottery.py
def get_reward_view(self, tokenid):
"""Get rewards for a given ticket
Args:
tokenid (int): Lottery ticket id
Examples:
>>> lottery.get_reward_view(1328060)
0
"""
return self.lottery_contract.functions.getRewardView(tokenid).call()
get_total_addresses(self)
¶
Get total addresses
Examples:
>>> lottery.get_total_addresses()
200
Source code in pancakeswap_lottery/lottery.py
def get_total_addresses(self):
"""Get total addresses
Examples:
>>> lottery.get_total_addresses()
200
"""
return self.lottery_contract.functions.totalAddresses().call()
get_total_amount(self)
¶
Get total pot (CAKE) of current lottery round
Examples:
>>> lottery.get_total_amount()
34977.25
Source code in pancakeswap_lottery/lottery.py
def get_total_amount(self):
"""Get total pot (CAKE) of current lottery round
Examples:
>>> lottery.get_total_amount()
34977.25
"""
total_amount = self.lottery_contract.functions.totalAmount().call()
return total_amount / self.decimals
get_total_rewards(self, issue_index)
¶
Get total rewards of lottery round
Parameters:
Name | Type | Description | Default |
---|---|---|---|
issue_index |
int |
Lottery round |
required |
Examples:
>>> lottery.get_total_rewards(432)
51384.125
Source code in pancakeswap_lottery/lottery.py
def get_total_rewards(self, issue_index):
"""Get total rewards of lottery round
Args:
issue_index (int): Lottery round
Examples:
>>> lottery.get_total_rewards(432)
51384.125
"""
total_rewards = self.lottery_contract.functions.getTotalRewards(
issue_index
).call()
return total_rewards / self.decimals