# Приватный аукцион на Aleo **Published by:** [310-340-7892.eth](https://paragraph.com/@310-340-7892/) **Published on:** 2023-01-17 **URL:** https://paragraph.com/@310-340-7892/aleo ## Content Краткое вступлениеАукцион с закрытой ставкой по первой цене (или слепой аукцион) - это тип аукциона, в котором каждый участник подает заявку, не зная о заявках других участников. Участник с наивысшей ставкой выигрывает аукцион. В этой модели есть две стороны: аукционист и участники аукциона. Участник аукциона: Участник аукциона. Аукционист: Сторона, ответственная за проведение аукциона. Мы делаем следующие предположения об аукционе: Аукционист честен. То есть аукционист будет рассматривать все заявки в порядке их поступления. Аукционист не будет подтасовывать заявки. Количество заявок не ограничено. Аукционист знает личности всех участников аукциона, но участники аукциона не обязательно знают личности других участников. В рамках этой модели мы требуем, чтобы: Участники аукциона не узнают никакой информации о стоимости других предложений.Порядок проведения аукционаАукцион проводится в несколько этапов. Торги: На этапе торгов участники подают ставки аукционисту. Для этого они вызывают функцию place_bid. Разрешение: На этапе разрешения аукционист разрешает заявки в порядке их поступления. Аукционист делает это, вызывая функцию resolve. В результате процесса разрешения выдается единственная выигравшая заявка. Завершение: На этом этапе аукционист завершает аукцион, вызывая функцию finish. Эта функция возвращает победную ставку участнику аукциона, которую он может использовать для получения товара.Шаг 0: Инициализация аукционаВнесите закрытый ключ и адрес первого участника торгов в файл program.json. { "program": "auction.aleo", "version": "0.0.0", "description": "A sealed bid auction", "development": { "private_key": "APrivateKey1zkpG9Af9z5Ha4ejVyMCqVFXRKknSm8L1ELEwcc4htk9YhVK", "address": "aleo1yzlta2q5h8t0fqe0v6dyh9mtv4aggd53fgzr068jvplqhvqszq7pj2ke" }, "license": "MIT" }Шаг 1: Первое предложениеПусть первый участник торгов сделает ставку 10. // Returns a new bid. // - `bidder` : The address of the account that placed the bid. // - `amount` : The amount of the bid. // Requires that `bidder` matches the function caller. // The owner of the record is set to the entity responsible for running the auction (auction runner). // The address of the auction runner is aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xxxzh. transition place_bid(bidder: address, amount: u64) -> Bid { // Ensure the caller is the auction bidder. console.assert_eq(self.caller, bidder); // Return a new 'Bid' record for the auction bidder. return Bid { owner: aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xxxzh, gates: 0u64, bidder: bidder, amount: amount, is_winner: false, }; } Вызовите функцию place_bid bidder 1 с аргументами 10u64. leo run place_bid aleo1yzlta2q5h8t0fqe0v6dyh9mtv4aggd53fgzr068jvplqhvqsnvzq7pj2ke 10u64Шаг 2: Второе предложениеПусть второй участник торгов сделает ставку 90. Внесите закрытый ключ и адрес второго участника торгов в файл program.json. Вызовите функцию place_bid bidder 2 с аргументами 90u64. leo run place_bid aleo1esqchvevwn7n5p84e735w4dtwt2hdtu4dpguwgwy94tsxm2p7qpqmlrta4 90u64Шаг 3: Выберите победителяПопросите аукциониста выбрать выигрышную ставку. // Returns the winning bid. // - `first` : The first bid. // - `second` : The second bid. // Requires that the function caller is the auction runner. // Assumes that the function is invoked only after the bidding period has ended. // In the event of a tie, the first bid is selected. transition resolve(first: Bid, second: Bid) -> Bid { // Ensure the caller is the auctioneer. console.assert_eq(self.caller, aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xzh); // Resolve the winner of the auction. if (first.amount >= second.amount) { return first; } else { return second; } } Внесите закрытый ключ и адрес аукциониста в файл program.json. Предоставьте две записи о торгах в качестве входных данных для функции resolve transition.Шаг 4: Завершить аукционПопросите аукциониста закончить аукцион. // Returns ownership of the bid to bidder. // - `bid` : The winning bid. // Requires that the function caller is the auction runner. // Assumes that the function is invoked only after all bids have been resolved. transition finish(bid: Bid) -> Bid { // Ensure the caller is the auctioneer. console.assert_eq(self.caller, aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xzh); // Return 'is_winner' as 'true' in the winning 'Bid'. return Bid { owner: bid.bidder, gates: bid.gates, bidder: bid.bidder, amount: bid.amount, is_winner: true, }; } Внесите закрытый ключ и адрес аукциониста в файл program.json. Вызовите функцию перехода к завершению с записью выигравшего предложения. ## Publication Information - [310-340-7892.eth](https://paragraph.com/@310-340-7892/): Publication homepage - [All Posts](https://paragraph.com/@310-340-7892/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@310-340-7892): Subscribe to updates