PaySwap
日本語
日本語
  • ペイスワップの紹介
    • 始めましょう
      • ウォレットを作成する
      • トークンを取得する
      • 集中型取引所を使用しない PaySwap の使用
      • ウォレットを PaySwap に接続する
      • ネイティブトークンの販売/購入
    • ヘルプについてはここをクリックしてください
      • エラーのトラブルシューティング
      • 承認トランザクションとは何ですか?
      • MetaMask でスタックした保留中のトランザクションを修正する
  • 🐲リヴァイアサン
    • 👚アパレル・美容・化粧品 リヴァイアサン
    • 🚰飲み物リヴァイアサン
    • 🎥文化とエンターテイメント リヴァイアサン
    • 🔌エネルギーリヴァイアサン
    • 🥕食品リヴァイアサン
    • 😷ヘルスケア リヴァイアサン
    • 🪖法と秩序のリヴァイアサン
    • 🪓リヴァイアサンの採掘
    • 😈NSFW リヴァイアサン
    • 🏠不動産リヴァイアサン
    • 💻ソフトウェア、通信会社、その他の Leviathan
    • 🚌交通機関 リヴァイアサン
    • 🏦マネーバンク
    • NWO
  • 製品
    • 🌉ARPs
      • 手動ARP
        • 会社の給与計算の設定
        • トンチンの準備
        • 資産の株式を売却する
      • パーセンテージベースのARP
        • 一緒に請求書を支払うルームメイト
      • 自動ARP
      • メモの鋳造と請求
    • 🟪監査役
      • 天然資源の監査
      • SSID監査
      • 不動産のトークン化
      • 個人所有物のトークン化
      • 自然トークン
      • バウンティハンター
    • 🔮賭博契約
      • アルファベットエンコーディングを使用しないベット
      • アルファベットエンコーディングによるベット
      • パートナーベッティングイベント
    • 💧請求書
      • 税金
      • 簿記
      • 銀行口座
      • 資産の株式を売却する
    • 🖼️CanCan
      • 製品とサービス
        • 製品/サービスのリスト
        • 製品/サービスの購入
          • お財布で買う
          • 株式市場を通じて購入する
          • ステーク市場を通じて販売する
          • バリュープール/DAO を介した購入
      • 記事
        • 記事の一覧表示
        • 投げ銭ライター
      • ペイウォール
        • ペイウォールのリスト化
        • ペイウォールにアイテムを追加する
        • ペイウォールからアイテムを削除する
        • ペイウォールとの提携
        • ペイウォール サブスクリプションの購入
        • ペイウォールサブスクリプションのアクティブ化
      • NFTickets
      • 割引とキャッシュバック
        • 割引
        • キャッシュバック
        • 手動報酬
      • パートナーのバリュープールをリストする
      • お知らせ
      • レビュー
      • ダイナミックプライシング
      • パートナーシップ
      • メンバーシップ
      • アイデンティティ要件
      • スポンサーシップ
      • オークションと入札
      • ドロップ
      • 投票
    • 🧑‍⚖️dRamps
      • トークンマーケットの追加
      • 追加トークンの展開と追加
      • トークン市場の活性化
      • トークン市場の価格を更新する
      • 自動誘導ランプ
        • tFIAT トークンの鋳造
        • tFIAT トークンの書き込み
      • 手動スロープ
        • tFIAT トークンの鋳造
        • tFIAT トークンの書き込み
      • スポンサーランプ
      • ランプスバリュープール
      • パートナーシップ
      • ネイティブトークンの販売/購入
      • ブートストラッピング
      • トークンマーケットの販売
      • 使用例
        • 授業料の支払い
        • 製品/サービスの支払い
        • 送金
        • 外国為替
        • ブロックチェーンブリッジ
        • 価値の保存
    • 🖼️eCollectibles
      • デフォルトのミンター
      • カスタムミンター
      • 事前に作成されたNFTのリスト
    • 🔄交換
      • Token Swaps
      • How to Trade
      • Fees and Routes
      • Liquidity Pools
      • How to Add/Remove Liquidity
      • FAQ
    • 🧈将来の担保
    • 🎮ゲーム
      • ゲームオブジェクト
      • ゲーム奨学金
    • 🎟️宝くじ
      • 宝くじの遊び方
      • 宝くじに関するよくある質問
      • マーケットプレイスの宝くじ
      • FT宝くじ
      • NFT宝くじ
    • 💳ペイカード
      • マーケットプレイスでの購入
    • 🐞プロフィール
      • ソーシャル グラフを構築する
      • 送金
      • 信用報告書
      • セキュリティとその他
    • 💹収益分配
      • アクセル
      • ビジネス
      • 貢献者
      • 紹介
    • 🍯スポンサー
    • 🍏SSI
      • データの作成
      • SSIDの作成
      • 固有のプロファイルの作成
    • 📈StakeMarket
      • リストに掲載されている商品を購入する
      • 入札募集
      • 担保ローン
      • ステークの申し込み
      • 訴訟
    • 🖥️TrustBounties
      • FTの報奨金
      • NFTの報奨金
      • 承認
    • 🌐ValuePools/DAOs
      • NFTトークンの鋳造
      • バリュープールのスポンサーになる
      • バリュープールでのショッピング
      • バリュープールによる融資と投資
      • 提案書の作成
    • 👾遺言書
      • 遺言書の作成
      • 遺言書を保管に使用する
    • 🛍️世界
      • レッド・ピル・ワールド
      • ブルー ピル ワールド
      • グリーンワールド
  • 使用例
    • CanCan
      • アイテムマーケットプレイス: Amazon
      • アイテムマーケットプレイス: レンタル
      • タレントマーケットプレイス
      • AirBnB
      • 配車サービス
      • 配信アプリ
      • Rent The Runway
      • サブスクリプションアプリ
      • 出会い系アプリ
      • Friend.tech
      • 遠隔医療
      • 製品リミックス
    • Valuepools
      • BNPLアプリ
      • グループ投資アプリ
      • 保険アプリ
      • マーケティングアプリ
      • 貯金アプリ
    • ARPs
      • Budgetting
      • Group Vacation Planning
      • 代理投資
      • Spend Management
      • Loan Management
      • Rent Management
      • Tipping
      • Play & Earn Loan Management
    • 請求書
      • Flexible Loan Management
      • Bill Payment
      • Taxes
      • 代理投資
    • Auditors
      • Address Verification
      • Identity Verification
      • Luxury Item Authentication
      • Awards & Trophees
      • Credit Wothiness
    • Games
      • Play To Earn For Your Game
      • Play To Earn For Tripe A Game
      • Betting
    • Betting
      • Stock Market
      • Sports
      • General
      • Companies
      • Swaps
    • Lottery
      • Data Collection
      • Sale Incentive
    • SSI
      • Supply Chain
      • Medical Records
      • Zero Knowledge Proofs
      • Background Checks
      • シングル・サインオン
    • StakeMarket
      • プレセール
      • Construction Contract
      • Collateralized Employment Contract
    • TrustBounty
      • ボラティリティヘッジ
  • ガバナンスとトケノミクス
  • 文化とビジョン
  • ロードマップ
  • 開発者
    • Smart Contracts (EVM)
      • PaySwap Exchange
        • v3 contracts
          • PancakeV3Factory
          • SmartRouterV3
            • V3SwapRouter
            • V2SwapRouter
            • StableSwapRouter
          • NonfungiblePositionManager
          • PancakeV3Pool
      • MasterChef
        • MasterChef V3
      • dRamps
        • dRamp Contract
      • Lottery
        • Lottery Contract
  • チーム
  • お問い合わせ
    • 顧客サポート
    • ソーシャルアカウントとコミュニティ
Powered by GitBook
On this page
  • Contract info
  • Audits
  • Lottery Status states
  • Read/View functions
  • viewCurrentLotteryId
  • viewLottery
  • viewNumbersAndStatusesForTicketIds
  • viewRewardsForTicketId
  • viewUserInfoForLotteryId
  • calculateRewardsForTicketId
  • calculateTotalPriceForBulkTickets
  • Write functions (users)
  • buyTickets
  • claimTickets
  • Write functions (operator/admin)
  • closeLottery
  • drawFinalNumberAndMakeLotteryClaimable
  • changeRandomNumberGenerator
  • injectFunds
  • startLottery
  • recoverWrongTokens
  • setMinAndMaxTicketPriceInCake
  • setMaxNumberTicketsPerBuy
  • setOperatorAndTreasuryAndInjectorAddress
  • Events (User)
  • TicketsPurchase
  • TicketsClaim
  • Events (admin)
  • AdminTokenRecovery
  • LotteryClose
  • LotteryInjection
  • LotteryOpen
  • LotteryNumberDrawn
  • NewOperatorAndTreasuryAndInjectorAddresses
  • NewRandomNumberGenerator

Was this helpful?

  1. 開発者
  2. Smart Contracts (EVM)

Lottery

v2

PreviousdRamp ContractNextLottery Contract

Last updated 1 year ago

Was this helpful?

Contract info

Contract name: PancakeSwapLottery Contract address: 0x5aF6D33DE2ccEC94efb1bDF8f92Bd58085432d2c Random number generator address: 0x8c6375Aab6e5B26a30bF241EBBf29AD6e6c503c2 (Random number generator contract must be deployed first)

View .

View the .

Audits

The PancakeSwap Lottery V2 has been audited twice so far. View the results below:

Lottery Status states

The lottery has four Status states, Pending, Open, Close, and Claimable, that determine which actions can and cannot be taken at a given time.

Read/View functions

viewCurrentLotteryId

function viewCurrentLotteryId() external view override returns (uint256);

Returns the Id# of the current Lottery round as an integer. Round Id#s correlate to round number, and are incremental, e.g. the ninth round of Lottery will be 9.

viewLottery

function viewLottery(uint256 _lotteryId) external view returns (Lottery memory);

Returns information on specified Lottery round as tuple (see Lottery structure below).

        uint256 startTime;
        uint256 endTime;
        uint256 priceTicketInCake;
        uint256 discountDivisor;
        uint256[6] rewardsBreakdown; // 0: 1 matching number // 5: 6 matching numbers
        uint256 treasuryFee; // 500: 5% // 200: 2% // 50: 0.5%
        uint256[6] cakePerBracket;
        uint256[6] countWinnersPerBracket;
        uint256 firstTicketId;
        uint256 firstTicketIdNextLottery;
        uint256 amountCollectedInCake;
        uint32 finalNumber;
Name
Type
Description

startTime

uint256

Starting block for Lottery round.

endTime

uint256

Ending block for Lottery round (approximately 12 hours after a round begins).

priceTicketInCake

uint256

The price of a ticket in CAKE (approximately $5 USD).

discountDivisor

uint256

The divisor used to calculate bulk ticket discount.

rewardsBreakdown

uint256[6]

The division of rewards across brackets (total must add up to 10,000).

treasuryFee

uint256

Amount taken from funds raised per round that's moved to treasury address (maximum 3000).

cakePerBracket

uint256[6]

The amount of CAKE to distribute to winners of each bracket.

countWinnersPerBracket

uint256[6]

Moves through brackets, starting from the highest, accounting for winners when value > 0.

firstTicketId

uint256

Id of the first ticket, set with the opening of the Lottery round, that determines the range of eligible tickets for the current round.

firstTicketIdNextLottery

uint256

Id of the first ticket, set at the closing of current round, that determines the range of eligible tickets for the current round.

amountCollectedInCake

uint256

The amount of CAKE collected through ticket sales for the Lottery round.

finalNumber

uint32

viewNumbersAndStatusesForTicketIds

function viewNumbersAndStatusesForTicketIds(uint256[] calldata _ticketIds)
    external
    view
    returns (uint32[] memory, bool[] memory);

Returns the corresponding numbers and the statuses of ticketIds array of tickets defined by their ticketId.

viewRewardsForTicketId

function viewRewardsForTicketId(
    uint256 _lotteryId,
    uint256 _ticketId,
    uint32 _bracket;
Name
Type
Description

lotteryId

uint256

The id of the Lottery.

ticketId

uint256

The id of the ticket.

bracket

uint32

Bracket for the ticketId to verify the claim and calculate rewards.

viewUserInfoForLotteryId

    function viewUserInfoForLottery(
        address _user,
        uint256 _lotteryId,
        uint256 _cursor,
        uint256 _size
    )
        external
        view
        returns (
            uint256[] memory,
            uint32[] memory,
            bool[] memory,
            uint256
        )

Returns user lotteryTicketIds, ticketNumbers, and ticketStatuses of a user for a given Lottery (defined by lotteryID).

Name
Type
Description

user

address

The address of the user.

lotteryId

uint256

The id of the Lottery.

cursor

uint256

Cursor to start where to retrieve the tickets.

size

uint256

The number of tickets to retrieve.

calculateRewardsForTicketId

    function _calculateRewardsForTicketId(
        uint256 _lotteryId,
        uint256 _ticketId,
        uint32 _bracket
    ) internal view returns (uint256);

Calculates rewards for a ticket after draw given the lotteryId, ticketId, and bracket.

Name
Type
Description

lotteryId

uint256

The id of the Lottery.

ticketId

uint256

The id of the ticket.

bracket

uint32

Bracket for the ticketId to verify the claim and calculate rewards.

calculateTotalPriceForBulkTickets

    function calculateTotalPriceForBulkTickets(
        uint256 _discountDivisor,
        uint256 _priceTicket,
        uint256 _numberTickets
    ) external pure returns (uint256);

Calculates the price for a set of tickets accounting for bulk discount.

discountDivisor:

totalPriceForBulkTickets=priceSingleTicket⋅numberTickets⋅(discountDivisor+1−numberTickets)discountDivisortotalPriceForBulkTickets = priceSingleTicket \cdot numberTickets \cdot \frac{(discountDivisor + 1 - numberTickets)}{discountDivisor}totalPriceForBulkTickets=priceSingleTicket⋅numberTickets⋅discountDivisor(discountDivisor+1−numberTickets)​

Filling and querying will provide a link to detailed price information on BscScan.

Name
Type
Description

discountDivisor

uint256

The divisor for the discount.

priceTickets

uint256

The price of a ticket in CAKE.

numberTickets

uint256

The number of tickets to buy.

Write functions (users)

buyTickets

function buyTickets(uint256 _lotteryId, uint32[] calldata _ticketNumbers) external override notContract nonReentrant;

Buy tickets for the current Open Lottery round (between 1 and 100 per purchase). Calculates the price per ticket using calculateTotalPriceForBulkTickets.

Name
Type
Description

lotteryId

uint256

The id of the lottery.

ticketNumbers

uint32

Array of ticket numbers between 1,000,000 and 1,999,999.

claimTickets

    function claimTickets(
        uint256 _lotteryId,
        uint256[] calldata _ticketIds,
        uint32[] calldata _brackets
    ) external override notContract nonReentrant;

Claim a set of winning tickets for a Claimable Lottery round. Checks lotteryId to determine if round is claimable, ownership of ticketId, eligibility of ticket (ticketId falls between firstTicketId and firstTicketIdNextLottery), and whether ticketId falls within eligible prize bracket (between 0 and 5).

Name
Type
Description

lotteryId

uint256

The id of the Lottery.

ticketIds

uint32

Array of ticketIds.

brackets

uint32

Array of brackets for the ticket ids.

Write functions (operator/admin)

closeLottery

function closeLottery(uint256 _lotteryId) external override onlyOperator;

Closes the Open Lottery to Close state. Emits LotteryClose event.

Name
Type
Description

lotteryId

uint256

The id of the Lottery.

drawFinalNumberAndMakeLotteryClaimable

    function drawFinalNumberAndMakeLotteryClaimable(uint256 _lotteryId, bool _autoInjection) external override onlyOperator nonReentrant;

Lottery must be in Close state. Draws the final Lottery number for results from randomResult, calculates the rewards for brackets after accounting for treasury fee, makes Lottery state Claimable, and transfers treasury fee to treasury address.

Name
Type
Description

lotteryId

uint256

The id of the Lottery.

autoInjection

bool

Automatic injection status.

changeRandomNumberGenerator

    function changeRandomGenerator(address _randomGeneratorAddress) external onlyOwner;

Changes the random number generator contract address. Lottery must be Claimable.

Name
Type
Description

randomGeneratorAddress

address

The random generator address.

injectFunds

function injectFunds(uint256 _lotteryId, uint256 _amount) external override onlyOwner;

Inject funds into a Lottery. Lottery must be Open.

Name
Type
Description

lotteryId

uint256

The id of the Lottery.

amount

uint256

Amount, in CAKE token, to inject.

startLottery

    function startLottery(
        uint256 _endTime,
        uint256 _priceTicketInCake,
        uint256 _discountDivisor,
        uint256[6] calldata _rewardsBreakdown,
        uint256 _treasuryFee
    ) external override onlyOperator;

Starts the Lottery, setting it to Open state. Status must be Claimable.

Name
Type
Description

endTime

uint256

End time of the Lottery.

priceTicketInCake

uint256

Price of a ticket in CAKE.

discountDivisor

uint256

The divisor to calculate the discount magnitude for bulks.

rewardsBreakdown

uint256[6]

Breakdown of rewards per bracket (must sum to 10,000).

trasuryFee

uint256

Treasury fee (10,000 = 100%, 100 = 1%).

recoverWrongTokens

function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner;

Allows admin to recover incorrect tokens sent to address mistakenly. Cannot be CAKE tokens.

Name
Type
Description

tokenAddress

address

The address of the token to withdraw.

tokenAmount

uint256

The number of tokens to withdraw.

setMinAndMaxTicketPriceInCake

function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner;

Allows admin to set upper and lower limit of ticket price in CAKE value. Minimum price must be lower than maximum price.

Name
Type
Description

minPriceTicketInCake

uint256

The minimum price in CAKE.

maxPriceTicketInCake

uint256

The maximum price in CAKE.

setMaxNumberTicketsPerBuy

function setMaxNumberTicketsPerBuy(uint256 _maxNumberTicketsPerBuy) external onlyOwner;

Set max number of tickets purchasable at a time (presently 100). Max number of tickets must be higher than 0.

Name
Type
Description

maxNumberTicketsPerBuy

uint256

Max number of tickets in one purchase.

setOperatorAndTreasuryAndInjectorAddress

function setOperatorAndTreasuryAddresses(address _operatorAddress, address _treasuryAddress) external onlyOwner;

Sets the address of the Lottery operator.

Name
Type
Description

operatorAddress

address

The address of the operator.

treasuryAddress

address

The address of the treasury.

injectorAddress

address

The address of the injector.

Events (User)

TicketsPurchase

TicketsPurchase(address indexed buyer, uint256 indexed lotteryId, uint256 numberTickets);

Lottery tickets are purchased.

TicketsClaim

TicketsClaim(address indexed claimer, uint256 amount, uint256 indexed lotteryId, uint256 numberTickets);

Lottery tickets are claimed post-draw.

Events (admin)

AdminTokenRecovery

AdminTokenRecovery(address token, uint256 amount);

Admin recovers incorrect tokens from Lottery address.

LotteryClose

LotteryClose(uint256 indexed lotteryId, uint256 firstTicketIdNextLottery);

The Lottery is closed. lotteryId is indexed and firstTicketIdNextLottery is determined by currentTicketId.

LotteryInjection

LotteryInjection(uint256 indexed lotteryId, uint256 amount);

Funds are injected into Lottery.

LotteryOpen

LotteryOpen(
        uint256 indexed lotteryId,
        uint256 startTime,
        uint256 endTime,
        uint256 priceTicketInCake,
        uint256 firstTicketId
    );

The Lottery is opened. firstTicketId is set from currentTicketId,

LotteryNumberDrawn

LotteryNumberDrawn(uint256 indexed lotteryId, uint256 finalNumber, uint256 countWinningTickets);

Lottery numbers are drawn for Lottery round.

NewOperatorAndTreasuryAndInjectorAddresses

NewOperatorAndTreasuryAndInjectorAddresses(address operator, address treasury);

New operator address is set.

NewRandomNumberGenerator

NewRandomGenerator(address indexed randomGenerator);

New random number generator address is set.

The final number determined by randomResult obtained from the number generator contract () using Chainlink VRF.

Calculates rewards for a ticket after draw given the lotteryId, ticketId, and bracket. Filling and querying will provide a link to detailed price information on .

Emitter: buyTickets

Emitter: claimTickets

Emitter: recoverWrongTokens

Emitter: closeLottery

Emitter: injectFunds

Emitter: startLottery

Emitter: drawFinalNumberAndMakeLotteryClaimable go to

Emitter: setOperatorAndTreasuryAndInjectorAddresses

Emitter: changeRandomGenerator

PancakeSwapLottery.sol on BscScan
PancakeSwap: Lottery contract on BscScan
Peckshield's Lottery V2 Audit
Slowmist's Lottery V2 Audit
BscScan
go to buyTickets
go to claimTickets
go to recoverWrongTokens
go to closeLottery
go to injectFunds
go to startLottery
drawFinalNumberAndMakeLotteryClaimable
go to setOperatorAndTreasuryAndInjectorAddresses
go to changeRandomGenerator
RandomNumberGenerator.sol