From c8216bc4a80c94c3e3269726c71668190888411c Mon Sep 17 00:00:00 2001 From: Olga Konstantinova Date: Wed, 20 Dec 2023 22:25:03 +0300 Subject: [PATCH] README.md added --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..6aa40e9 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# Смарт-контракт для ставок на событие +Конракт создаётся под одно событие и даёт возможность множеству игроков сделать +ставку на результат. Используется упрощенная модель события: есть только две +стороны события, одна из которых обязана победить. + +Контракт принимает ставки только до того момента, пока контракт не обновил своё +состояние, запросив у оракула результаты события. +Оракул обращается к внешнему ресурсу и запрашивает у него JSON-документ, +описывающий следующие допустимые состояния события: +* ещё не произошло +* выиграла 1-ая сторона +* выиграла 2-ая сторона + +Чтобы сделать ставку у игрока должно быть необходимое количество газа. + +Игроки имеют возможность обратиться к контракту для получения выигрыша. +Выигрыш распределяется из суммы ставок всех проигравших игроков пропорционально +ставке выигрывшего игрока. При этом, контракт оставляет себе премию в размере +половины суммы всех ставок всех проигравших игроков. + +## Пример использования конракта в приватной сети +Для установки и использования контракта требуется сеть NEO. Например, private network +из воркшопа NeoSPCC. + +Для выполнения команд нужна подключенная к сети нода neo-go. + +### Компиляция +``` +$ ./bin/neo-go contract compile -i ../smart-contract-bets/contract.go -c ../smart-contract-bets/contract.yml -m ../smart-contract-bets/contract.manifest.json +``` + +### Установка +``` +$ ./bin/neo-go contract deploy -i ../smart-contract-bets/contract.nef -manifest ../smart-contract-bets/contract.manifest.json -r http://localhost:20331 -w ../smart-contract-bets/wallet.json + +``` + +### Создание ставки игроком +``` +$ ./bin/neo-go contract invokefunction -r http://localhost:20331 -w ../smart-contract-bets/player_wallet.json <номер контракта> placeBet <сумма ставки> <номер стороны события> NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB -- NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB:CalledByEntry,CustomContracts:0xd2a4cff31913016155e38e474a2c06d08be276cf +``` +`NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB` - пример адреса игрока, от имени которого мы делаем ставку +`NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB:CalledByEntry` - инструкция разрешить контракту действовать +от имени игрока +`CustomContracts:0xd2a4cff31913016155e38e474a2c06d08be276cf` - инструкция разрешить системному +контракту GAS действовать от имени игрока + +### Проверка статуса события +``` +$ ./bin/neo-go contract invokefunction -r http://localhost:20331 -w ../smart-contract-bets/wallet.json <номер контракта> checkEventStatus +``` +Предполагается, что функция вызывается владельцем контракта для обновления состояния контракта. + +Функция обращается к оракулу и, если оракул сообщает, что событие сыграно, то контракт обновляет +своё состояние. Иначе, функцию нужно вызывать до тех пор, пока событие не случится. + +### Получение выигрыша игроком +``` +$ ./bin/neo-go contract invokefunction -r http://localhost:20331 -w ../smart-contract-bets/player_wallet.json <номер контракта> claimWin NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB +``` +`NbrUYaZgyhSkNoRo9ugRyEMdUZxrhkNaWB` - пример адреса игрока, от имени которого мы получаем выигрыш + +Предполагается, что функция вызывается игроком. В случае, если ставка игрока выиграла, +то контракт перечисляет выигрыш игроку, и функция возвращает `true`. + +Если ставка игрока не выиграла, то функция возращает `false` и не производит никаких перечислений. + +Функция, вызванная повторно после получения выигрыша, возвращает `false`. + +Функция, вызванная до факта розыгрыша события, возвращает ошибку.