tx · 7GekvKgUAcvxkb2rMxzca3yj31n2aGNLvhndPgPjpaza 3N9vjdhSVkpJcoa2UAVt4BWxTfZeV71cnan: -0.00500000 Waves 2022.08.01 13:53 [2165344] smart account 3N9vjdhSVkpJcoa2UAVt4BWxTfZeV71cnan > SELF 0.00000000 Waves
{ "type": 13, "id": "7GekvKgUAcvxkb2rMxzca3yj31n2aGNLvhndPgPjpaza", "fee": 500000, "feeAssetId": null, "timestamp": 1659351207429, "version": 2, "chainId": 84, "sender": "3N9vjdhSVkpJcoa2UAVt4BWxTfZeV71cnan", "senderPublicKey": "DFMD24xWTnBgJR3y8Ls92YYq2Zmvx1rbEmDu18bd6nEe", "proofs": [ "2UwkBDpPx9qy4wBSTBZiN7FxUFaKmoxhKf1wGCsHjBgAENkgYaCwsRLpbYCfybSwcqMJBc2W5mLyjRHWK2HWwTQp" ], "script": "base64:AAIFAAAAAAAAABoIAhIFCgMICAgSABIDCgEBEgASBAoCCAESAAAAAA4AAAAAE2tleV9IYXNocmF0ZVRva2VuSWQCAAAAD2hhc2hyYXRlVG9rZW5JZAAAAAAQa2V5X1Byb21vVG9rZW5JZAIAAAAMcHJvbW9Ub2tlbklkAAAAAA9rZXlfU3Rha2luZ0RBcHACAAAADHN0YWtpbmctZGFwcAAAAAANa2V5X0NvbGxlY3RvcgIAAAAJY29sbGVjdG9yAAAAAAtrZXlfUmVzZXJ2ZQIAAAAHcmVzZXJ2ZQAAAAAPa2V5X1Byb21vSXNzdWVkAgAAAAxwcm9tby1pc3N1ZWQAAAAAEmhhc2hyYXRlVG9rZW5JZFN0cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAE2tleV9IYXNocmF0ZVRva2VuSWQCAAAAAAAAAAAPaGFzaHJhdGVUb2tlbklkCQACWQAAAAEFAAAAEmhhc2hyYXRlVG9rZW5JZFN0cgAAAAAPcHJvbW9Ub2tlbklkU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAQa2V5X1Byb21vVG9rZW5JZAIAAAAAAAAAAAxwcm9tb1Rva2VuSWQJAAJZAAAAAQUAAAAPcHJvbW9Ub2tlbklkU3RyAAAAAAtzdGFraW5nREFwcAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAD2tleV9TdGFraW5nREFwcAIAAAAAAAAAAAljb2xsZWN0b3IJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAA1rZXlfQ29sbGVjdG9yAgAAAAAAAAAAB3Jlc2VydmUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAtrZXlfUmVzZXJ2ZQIAAAAAAAAAAAtwcm9tb0lzc3VlZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAD2tleV9Qcm9tb0lzc3VlZAIAAAAAAAAABgAAAANpbnYBAAAABGluaXQAAAADAAAAD2hhc2hyYXRlQXNzZXRJZAAAABJzdGFraW5nREFwcEFkZHJlc3MAAAAQY29sbGVjdG9yQWRkcmVzcwQAAAAQaW5pdEFtb3VudFRvQnVybgAAAAAAAAAAAQQAAAAKaXNzdWVQcm9tbwkABEIAAAAFAgAAAAxSRURTbWJfUHJvbW8CAAAAAAUAAAAQaW5pdEFtb3VudFRvQnVybgAAAAAAAAAACAYEAAAAB3Byb21vSWQJAAQ4AAAAAQUAAAAKaXNzdWVQcm9tbwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlfSGFzaHJhdGVUb2tlbklkCQACWAAAAAEICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAA9oYXNocmF0ZUFzc2V0SWQCAAAAAAAAAAJpZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlfU3Rha2luZ0RBcHAJAAQlAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAEnN0YWtpbmdEQXBwQWRkcmVzcwIAAAAACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtleV9Db2xsZWN0b3IJAAQlAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAEGNvbGxlY3RvckFkZHJlc3MCAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5X1Jlc2VydmUAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tleV9Qcm9tb0lzc3VlZAAAAAAAAAAAAAkABEwAAAACBQAAAAppc3N1ZVByb21vCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAHcHJvbW9JZAUAAAAQaW5pdEFtb3VudFRvQnVybgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABBrZXlfUHJvbW9Ub2tlbklkCQACWAAAAAEFAAAAB3Byb21vSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleV9SZXNlcnZlAAAAAAAAAAAABQAAAANuaWwAAAADaW52AQAAAA9pbmNyZWFzZVJlc2VydmUAAAAAAwkAAAAAAAACCAUAAAADaW52AAAABmNhbGxlcgUAAAAEdGhpcwkBAAAABXRocm93AAAAAAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAQkBAAAABXRocm93AAAAAAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAPaGFzaHJhdGVUb2tlbklkCQEAAAAFdGhyb3cAAAAAAwkAAGcAAAACAAAAAAAAAAAACAkAAZEAAAACCAUAAAADaW52AAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAkBAAAABXRocm93AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5X1Jlc2VydmUJAABkAAAAAgUAAAAHcmVzZXJ2ZQgJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAA25pbAAAAANpbnYBAAAACGJ1eVByb21vAAAAAQAAABNhbW91bnRPZlByb21vVG9rZW5zAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAADaW52AAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAFldBVkVTIHBheW1lbnQgcmVxdWlyZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQgJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkCQAAAgAAAAECAAAAHE9ubHkgV0FWRVMgcGF5bWVudCBhY2NlcHRlZCEDCQAAZwAAAAIAAAAAAAAAAAAICQABkQAAAAIIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CQAAAgAAAAECAAAAH1BheW1lbnQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUDCQAAZgAAAAIFAAAAE2Ftb3VudE9mUHJvbW9Ub2tlbnMJAABlAAAAAgUAAAAHcmVzZXJ2ZQUAAAALcHJvbW9Jc3N1ZWQJAAACAAAAAQIAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rZXlfUHJvbW9Jc3N1ZWQJAABkAAAAAgUAAAALcHJvbW9Jc3N1ZWQFAAAAE2Ftb3VudE9mUHJvbW9Ub2tlbnMJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxwcm9tb1Rva2VuSWQFAAAAE2Ftb3VudE9mUHJvbW9Ub2tlbnMGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcggJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAADaW52AAAABmNhbGxlcgUAAAATYW1vdW50T2ZQcm9tb1Rva2VucwUAAAAMcHJvbW9Ub2tlbklkBQAAAANuaWwAAAADaW52AQAAABNyZWRlZW1IYXNocmF0ZVRva2VuAAAAAAkABEwAAAACCQEAAAAEQnVybgAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAggJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkAgAAAAAICQABkQAAAAIIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcggJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAANpbnYAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAADaW52AAAABmNhbGxlcggJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQFAAAAD2hhc2hyYXRlVG9rZW5JZAUAAAADbmlsAAAAA2ludgEAAAAKc3Rha2VQcm9tbwAAAAIAAAAKcmV3YXJkVHlwZQAAAAh0aW1lbG9jawQAAAAHc3Rha2luZwkAA/wAAAAEBQAAAAtzdGFraW5nREFwcAIAAAAFc3Rha2UJAARMAAAAAgUAAAAKcmV3YXJkVHlwZQkABEwAAAACBQAAAAh0aW1lbG9jawUAAAADbmlsCQAETAAAAAIJAAGRAAAAAggFAAAAA2ludgAAAAhwYXltZW50cwAAAAAAAAAAAAUAAAADbmlsAwkAAAAAAAACBQAAAAdzdGFraW5nBQAAAAdzdGFraW5nBAAAAApzdGFraW5nS2V5CQABLAAAAAIJAAQlAAAAAQgFAAAAA2ludgAAAAZjYWxsZXICAAAAB19zdGFrZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACnN0YWtpbmdLZXkJAABkAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAApzdGFraW5nS2V5AAAAAAAAAAAACAkAAZEAAAACCAUAAAADaW52AAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAADaW52AAAABmNhbGxlcgIAAAABXwkAAlgAAAABCAUAAAADaW52AAAADXRyYW5zYWN0aW9uSWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABCAkAAZEAAAACCAUAAAADaW52AAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAIAAAABLAUAAAAKcmV3YXJkVHlwZQIAAAABLAkAAaQAAAABBQAAAAh0aW1lbG9jawUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAANpbnYBAAAAB3Vuc3Rha2UAAAAABQAAAANuaWwAAAAAbw0D3g==", "height": 2165344, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3G8tkCxjbaqe5da2YmN3bFbn42ubzcExJzDc4no37HBb Next: 2BZdsFd9pwxdoZRmicybdcdhHtEbzzgRZLz3r8uQvcKH Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let | |
4 | + | let key_HashrateTokenId = "hashrateTokenId" | |
5 | 5 | ||
6 | - | let key_ | |
6 | + | let key_PromoTokenId = "promoTokenId" | |
7 | 7 | ||
8 | - | let key_ | |
8 | + | let key_StakingDApp = "staking-dapp" | |
9 | 9 | ||
10 | - | let key_ | |
10 | + | let key_Collector = "collector" | |
11 | 11 | ||
12 | - | let key_ | |
12 | + | let key_Reserve = "reserve" | |
13 | 13 | ||
14 | - | let key_ | |
14 | + | let key_PromoIssued = "promo-issued" | |
15 | 15 | ||
16 | - | let | |
16 | + | let hashrateTokenIdStr = valueOrErrorMessage(getString(this, key_HashrateTokenId), "") | |
17 | 17 | ||
18 | - | let | |
18 | + | let hashrateTokenId = fromBase58String(hashrateTokenIdStr) | |
19 | 19 | ||
20 | - | let | |
20 | + | let promoTokenIdStr = valueOrErrorMessage(getString(this, key_PromoTokenId), "") | |
21 | 21 | ||
22 | - | let | |
22 | + | let promoTokenId = fromBase58String(promoTokenIdStr) | |
23 | 23 | ||
24 | - | let | |
24 | + | let stakingDApp = addressFromStringValue(valueOrErrorMessage(getString(this, key_StakingDApp), "")) | |
25 | 25 | ||
26 | - | ||
26 | + | let collector = addressFromStringValue(valueOrErrorMessage(getString(this, key_Collector), "")) | |
27 | 27 | ||
28 | + | let reserve = valueOrErrorMessage(getInteger(this, key_Reserve), "") | |
28 | 29 | ||
29 | - | let | |
30 | + | let promoIssued = valueOrErrorMessage(getInteger(this, key_PromoIssued), "") | |
30 | 31 | ||
31 | 32 | @Callable(inv) | |
32 | - | func initDApp (redsmbId,priceAssetId,ticketPrice,equality) = { | |
33 | - | let pmt = if ((size(inv.payments) == 1)) | |
34 | - | then inv.payments[0] | |
35 | - | else throw("") | |
36 | - | let redsmb = valueOrErrorMessage(assetInfo(valueOrErrorMessage(fromBase58String(redsmbId), "")), "").id | |
37 | - | let priceAsset = valueOrErrorMessage(assetInfo(valueOrErrorMessage(fromBase58String(priceAssetId), "")), "").id | |
38 | - | let pr = if ((ticketPrice > 0)) | |
39 | - | then ticketPrice | |
40 | - | else throw("") | |
41 | - | let eq = if ((equality > 0)) | |
42 | - | then equality | |
43 | - | else throw("") | |
44 | - | [BinaryEntry(kHashrateTokenId, redsmb)] | |
33 | + | func init (hashrateAssetId,stakingDAppAddress,collectorAddress) = { | |
34 | + | let initAmountToBurn = 1 | |
35 | + | let issuePromo = Issue("REDSmb_Promo", "", initAmountToBurn, 8, true) | |
36 | + | let promoId = calculateAssetId(issuePromo) | |
37 | + | [StringEntry(key_HashrateTokenId, toBase58String(valueOrErrorMessage(assetInfo(fromBase58String(hashrateAssetId)), "").id)), StringEntry(key_StakingDApp, toString(valueOrErrorMessage(addressFromString(stakingDAppAddress), ""))), StringEntry(key_Collector, toString(valueOrErrorMessage(addressFromString(collectorAddress), ""))), IntegerEntry(key_Reserve, 0), IntegerEntry(key_PromoIssued, 0), issuePromo, Burn(promoId, initAmountToBurn), StringEntry(key_PromoTokenId, toBase58String(promoId)), IntegerEntry(key_Reserve, 0)] | |
45 | 38 | } | |
46 | 39 | ||
47 | 40 | ||
48 | 41 | ||
49 | 42 | @Callable(inv) | |
50 | - | func startSale () = nil | |
43 | + | func increaseReserve () = if ((inv.caller == this)) | |
44 | + | then throw() | |
45 | + | else if ((size(inv.payments) != 1)) | |
46 | + | then throw() | |
47 | + | else if ((inv.payments[0].assetId != hashrateTokenId)) | |
48 | + | then throw() | |
49 | + | else if ((0 >= inv.payments[0].amount)) | |
50 | + | then throw() | |
51 | + | else [IntegerEntry(key_Reserve, (reserve + inv.payments[0].amount))] | |
51 | 52 | ||
52 | 53 | ||
53 | 54 | ||
54 | 55 | @Callable(inv) | |
55 | - | func buyTicket (ticketsAmount) = { | |
56 | - | let pmt = inv.payments[0] | |
57 | - | if ((0 >= ticketsAmount)) | |
58 | - | then throw("amount must be positive") | |
59 | - | else if ((size(inv.payments) != 1)) | |
60 | - | then throw("1 payment required") | |
61 | - | else if (if (!(isDefined(pmt.assetId))) | |
62 | - | then true | |
63 | - | else (value(pmt.assetId) != usdnId)) | |
64 | - | then throw("only usdn") | |
65 | - | else if ((0 >= pmt.amount)) | |
66 | - | then throw("payment must be positive") | |
67 | - | else if (((ticketsAmount * ticketPrice) != pmt.amount)) | |
68 | - | then throw("payment amount must be accurate according to the price") | |
69 | - | else [IntegerEntry(kTotalSold, (totalSold + ticketsAmount)), IntegerEntry((toString(inv.caller) + suffix_TicketsPurchasedByUser), (ticketsPurchased(inv.caller) + ticketsAmount))] | |
56 | + | func buyPromo (amountOfPromoTokens) = if ((size(inv.payments) != 1)) | |
57 | + | then throw("WAVES payment required") | |
58 | + | else if (isDefined(inv.payments[0].assetId)) | |
59 | + | then throw("Only WAVES payment accepted!") | |
60 | + | else if ((0 >= inv.payments[0].amount)) | |
61 | + | then throw("Payment amount must be positive") | |
62 | + | else if ((amountOfPromoTokens > (reserve - promoIssued))) | |
63 | + | then throw("") | |
64 | + | else [IntegerEntry(key_PromoIssued, (promoIssued + amountOfPromoTokens)), Reissue(promoTokenId, amountOfPromoTokens, true), ScriptTransfer(collector, inv.payments[0].amount, inv.payments[0].assetId), ScriptTransfer(inv.caller, amountOfPromoTokens, promoTokenId)] | |
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | @Callable(inv) | |
69 | + | func redeemHashrateToken () = [Burn(valueOrErrorMessage(inv.payments[1].assetId, ""), inv.payments[1].amount), ScriptTransfer(collector, inv.payments[0].amount, inv.payments[0].assetId), ScriptTransfer(inv.caller, inv.payments[1].amount, hashrateTokenId)] | |
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | @Callable(inv) | |
74 | + | func stakePromo (rewardType,timelock) = { | |
75 | + | let staking = invoke(stakingDApp, "stake", [rewardType, timelock], [inv.payments[0]]) | |
76 | + | if ((staking == staking)) | |
77 | + | then { | |
78 | + | let stakingKey = (toString(inv.caller) + "_staked") | |
79 | + | [IntegerEntry(stakingKey, (valueOrElse(getInteger(this, stakingKey), 0) + inv.payments[0].amount)), StringEntry(((toString(inv.caller) + "_") + toBase58String(inv.transactionId)), ((((toString(inv.payments[0].amount) + ",") + rewardType) + ",") + toString(timelock)))] | |
80 | + | } | |
81 | + | else throw("Strict value is not equal to itself.") | |
70 | 82 | } | |
71 | 83 | ||
72 | 84 | ||
73 | 85 | ||
74 | 86 | @Callable(inv) | |
75 | - | func buyTicketWithFreeze (freezeType) = nil | |
76 | - | ||
77 | - | ||
78 | - | ||
79 | - | @Callable(inv) | |
80 | - | func finalize () = nil | |
81 | - | ||
82 | - | ||
83 | - | ||
84 | - | @Callable(inv) | |
85 | - | func claim () = nil | |
86 | - | ||
87 | - | ||
88 | - | ||
89 | - | @Callable(inv) | |
90 | - | func claimFrozen () = nil | |
87 | + | func unstake () = nil | |
91 | 88 | ||
92 | 89 |
github/deemru/w8io/169f3d6 38.49 ms ◑