-
Any account can buy "Tickets" to take part in the lottery, with the rate of 1 NEAR = 10 Tickets. the more tickets you have, the more chance you have to win the pot.
- to buy tickets:
near call <contractName> buyTickets --accountId=<your_account.testnet> --amount=<amount in NEAR you want to buy>
- to buy tickets:
-
Everytime someone buys tickets, the amount of NEAR they used to buy gets added to the "pool", the winner of the lottery will receive 95% of this pool, 5% to the host (contract account).
-
There's a special rule: top 5% accounts with lowest tickets in balance will not be able to take part in the lottery, and that amount of tickets will be sent to the top #1 account with highest tickets in balance as a bonus. In case there's no one holding less than 5% of the total tickets in circulation, the account holding lowest tickets will not be able to take part in the lottery, and its tickets will be sent to the #1 account. So you should not be in the top lowest tickets balance accounts if you want a chance to win the lottery.
-
To start the lottery, call the
play()
function in the smart contract:near call <contractName> play --accountId=<your_account.testnet>
yarn deploy
- deploy contract to
lottery.timthang.testnet
- deploy contract to
- start buying some tickets
- start the lottery and get the winner, send 95% pool to the winner and reset the lottery:
- note: set
--gas
tag to 300000000000000 to access more blockchain storage - this dApp currently only has CLI version, the frontend is not available as of now.
- note: set
To run this project locally:
- Prerequisites: Make sure you've installed Node.js ≥ 12
- Install dependencies:
yarn install
- Run the local development server:
yarn dev
(seepackage.json
for a full list ofscripts
you can run withyarn
)
Now you'll have a local development environment backed by the NEAR TestNet!
Go ahead and play with the app and the code. As you make code changes, the app will automatically reload.
- The "backend" code lives in the
/contract
folder. See the README there for more info. - The frontend code lives in the
/src
folder./src/index.html
is a great place to start exploring. Note that it loads in/src/index.js
, where you can learn how the frontend connects to the NEAR blockchain. - Tests: there are different kinds of tests for the frontend and the smart
contract. See
contract/README
for info about how it's tested. The frontend code gets tested with jest. You can run both of these at once withyarn run test
.
Every smart contract in NEAR has its own associated account. When you run yarn dev
, your smart contract gets deployed to the live NEAR TestNet with a throwaway account. When you're ready to make it permanent, here's how.
near-cli is a command line interface (CLI) for interacting with the NEAR blockchain. It was installed to the local node_modules
folder when you ran yarn install
, but for best ergonomics you may want to install it globally:
yarn install --global near-cli
Or, if you'd rather use the locally-installed version, you can prefix all near
commands with npx
Ensure that it's installed with near --version
(or npx near --version
)
Each account on NEAR can have at most one contract deployed to it. If you've already created an account such as your-name.testnet
, you can deploy your contract to advanced-lottery.your-name.testnet
. Assuming you've already created an account on NEAR Wallet, here's how to create advanced-lottery.your-name.testnet
:
-
Authorize NEAR CLI, following the commands it gives you:
near login
-
Create a subaccount (replace
YOUR-NAME
below with your actual account name):near create-account advanced-lottery.YOUR-NAME.testnet --masterAccount YOUR-NAME.testnet
Modify the line in src/config.js
that sets the account name of the contract. Set it to the account id you used above.
const CONTRACT_NAME = process.env.CONTRACT_NAME || 'advanced-lottery.YOUR-NAME.testnet'
One command:
yarn deploy
As you can see in package.json
, this does two things:
- builds & deploys smart contract to NEAR TestNet
- builds & deploys frontend code to GitHub using gh-pages. This will only work if the project already has a repository set up on GitHub. Feel free to modify the
deploy
script inpackage.json
to deploy elsewhere.