README.md added
This commit is contained in:
parent
f668685d59
commit
c8216bc4a8
1 changed files with 70 additions and 0 deletions
70
README.md
Normal file
70
README.md
Normal file
|
@ -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`.
|
||||||
|
|
||||||
|
Функция, вызванная до факта розыгрыша события, возвращает ошибку.
|
Loading…
Reference in a new issue