From 91c54729f0fc94c0f5f2e57792a6c78a64dbcc3e Mon Sep 17 00:00:00 2001 From: Captain Date: Fri, 4 Jan 2019 07:58:54 +0100 Subject: [PATCH] Added lottery.bas Smart Contract example. --- lottery.bas | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 lottery.bas diff --git a/lottery.bas b/lottery.bas new file mode 100644 index 0000000..bc8a20a --- /dev/null +++ b/lottery.bas @@ -0,0 +1,83 @@ +/* Lotter Smart Contract in DVM-BASIC + This lottery smart contract will give lottery wins every xth try. +*/ + + + + Function Lottery(value Uint64) Uint64 + 10 dim deposit_count,winner as Uint64 + 20 LET deposit_count = LOAD("deposit_count")+1 + 25 IF value == 0 THEN GOTO 110 // if deposit amount is 0, simply return + 30 STORE("depositor_address" + (deposit_count-1), SIGNER()) // store address for later on payment + 40 STORE("deposit_total", LOAD("deposit_total") + value ) + 50 STORE("deposit_count",deposit_count) + 60 IF LOAD("lotteryeveryXdeposit") > deposit_count THEN GOTO 110 // we will wait till X players join in + // we are here means all players have joined in, roll the DICE, + 70 LET winner = RANDOM() % deposit_count // we have a winner + 80 SEND_DERO_TO_ADDRESS(LOAD("depositor_address" + winner) , LOAD("lotterygiveback")*LOAD("deposit_total")/10000) + + // re initialize for another round + 90 STORE("deposit_count", 0) // initial players + 100 STORE("deposit_total", 0) // total deposit of all players + 110 RETURN 0 + End Function + + + // this function is used to initialize parameters during install time + Function Initialize() Uint64 + 10 STORE("owner", SIGNER()) // store in DB ["owner"] = address + 20 STORE("lotteryeveryXdeposit", 2) // lottery will reward every X deposits + // how much will lottery giveback in 1/10000 parts, granularity .01 % + 30 STORE("lotterygiveback", 9900) // lottery will give reward 99% of deposits, 1 % is accumulated for owner to withdraw + 33 STORE("deposit_count", 0) // initial players + 34 STORE("deposit_total", 0) // total deposit of all players + 35 printf "Initialize executed" + 40 RETURN 0 + End Function + + + + // used to tune lottery parameters + Function TuneLotteryParameters(input Uint64, lotteryeveryXdeposit Uint64, lotterygiveback Uint64) Uint64 + 10 dim key,stored_owner as String + 20 dim value_uint64 as Uint64 + 30 IF ADDRESS_RAW(LOAD("owner")) == ADDRESS_RAW(SIGNER()) THEN GOTO 100 // check whether owner is real owner + 40 RETURN 1 + + 100 STORE("lotteryeveryXdeposit", lotteryeveryXdeposit) // lottery will reward every X deposits + 130 STORE("lotterygiveback", value_uint64) // how much will lottery giveback in 1/10000 parts, granularity .01 % + 140 RETURN 0 // return success + End Function + + + + // this function is used to change owner + // owner is an string form of address + Function TransferOwnership(newowner String) Uint64 + 10 IF ADDRESS_RAW(LOAD("owner")) == ADDRESS_RAW(SIGNER()) THEN GOTO 30 + 20 RETURN 1 + 30 STORE("tmpowner",newowner) + 40 RETURN 0 + End Function + + // until the new owner claims ownership, existing owner remains owner + Function ClaimOwnership() Uint64 + 10 IF ADDRESS_RAW(LOAD("tmpowner")) == ADDRESS_RAW(SIGNER()) THEN GOTO 30 + 20 RETURN 1 + 30 STORE("owner",SIGNER()) // ownership claim successful + 40 RETURN 0 + End Function + + // if signer is owner, withdraw any requested funds + // if everthing is okay, thety will be showing in signers wallet + Function Withdraw( amount Uint64) Uint64 + 10 IF ADDRESS_RAW(LOAD("owner")) == ADDRESS_RAW(SIGNER()) THEN GOTO 30 + 20 RETURN 1 + 30 SEND_DERO_TO_ADDRESS(SIGNER(),amount) + 40 RETURN 0 + End Function + + + + +