Skip to content

Code Reference

Class for accessing PancakeSwap Lottery smart-contract information.

Source code in pancakeswap_lottery/lottery.py
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
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__(provider='https://bsc-dataseed.binance.org:443')

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
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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()

Get prize pool allocation (percent)

Examples:

>>> lottery.get_allocation()
{'1': 50, '2': 20, '3': 10}
Source code in pancakeswap_lottery/lottery.py
246
247
248
249
250
251
252
253
254
255
256
257
258
259
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(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
279
280
281
282
283
284
285
286
287
288
289
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()

Get CAKE contract address

Examples:

>>> lottery.get_cake()
0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82
Source code in pancakeswap_lottery/lottery.py
261
262
263
264
265
266
267
268
def get_cake(self):
    """Get CAKE contract address

    Examples:
        >>> lottery.get_cake()
        0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82
    """
    return self.lottery_contract.functions.cake().call()

get_drawed()

Check if current lottery round is drawed

Examples:

>>> lottery.get_drawed()
False
Source code in pancakeswap_lottery/lottery.py
73
74
75
76
77
78
79
80
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()

Get current lottery round drawing phase

Examples:

>>> lottery.get_drawing_phase()
False
Source code in pancakeswap_lottery/lottery.py
82
83
84
85
86
87
88
89
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(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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
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(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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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()

Get current lottery round id

Examples:

>>> lottery.get_issue_index()
435
Source code in pancakeswap_lottery/lottery.py
180
181
182
183
184
185
186
187
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(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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
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()

Get PLT-token contract address

Examples:

>>> lottery.get_lotteryNFT()
0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1
Source code in pancakeswap_lottery/lottery.py
270
271
272
273
274
275
276
277
def get_lotteryNFT(self):
    """Get PLT-token contract address

    Examples:
        >>> lottery.get_lotteryNFT()
        0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1
    """
    return self.lottery_contract.functions.lotteryNFT().call()

get_lottery_date(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
59
60
61
62
63
64
65
66
67
68
69
70
71
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(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
110
111
112
113
114
115
116
117
118
119
120
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(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
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
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()

Get max number

Examples:

>>> lottery.get_max_number()
14
Source code in pancakeswap_lottery/lottery.py
206
207
208
209
210
211
212
213
def get_max_number(self):
    """Get max number

    Examples:
        >>> lottery.get_max_number()
        14
    """
    return self.lottery_contract.functions.maxNumber().call()

get_min_price()

Get current price of 1 ticket

Examples:

>>> lottery.get_min_price()
1
Source code in pancakeswap_lottery/lottery.py
215
216
217
218
219
220
221
222
223
224
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(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
122
123
124
125
126
127
128
129
130
131
132
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()

Get total addresses

Examples:

>>> lottery.get_total_addresses()
200
Source code in pancakeswap_lottery/lottery.py
226
227
228
229
230
231
232
233
def get_total_addresses(self):
    """Get total addresses

    Examples:
        >>> lottery.get_total_addresses()
        200
    """
    return self.lottery_contract.functions.totalAddresses().call()

get_total_amount()

Get total pot (CAKE) of current lottery round

Examples:

>>> lottery.get_total_amount()
34977.25
Source code in pancakeswap_lottery/lottery.py
235
236
237
238
239
240
241
242
243
244
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(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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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