tx · 8v7pPUzpRSdW9TfSFP1QemszYEyeUM21wiCL6ALRqbET

3N1HdGqmcf4nVsUgmWiwB8p6p8ErWBmvQua:  -0.01000000 Waves

2023.11.16 02:33 [2845136] smart account 3N1HdGqmcf4nVsUgmWiwB8p6p8ErWBmvQua > SELF 0.00000000 Waves

{ "type": 13, "id": "8v7pPUzpRSdW9TfSFP1QemszYEyeUM21wiCL6ALRqbET", "fee": 1000000, "feeAssetId": null, "timestamp": 1700091271373, "version": 2, "chainId": 84, "sender": "3N1HdGqmcf4nVsUgmWiwB8p6p8ErWBmvQua", "senderPublicKey": "JAEVvs5E9kGyXWx3YQaivUpUP3vb3pgr2eS6UrYr1A8P", "proofs": [ "2kSpduUzypokthZrgLFv2zULeDhcgCT48azkeipC2Japguj6Q4QNgzwvuxTp1WXSXNYkEvrNWCeXjbV1SzuBLuV4" ], "script": "base64:BgIGCAISABIADgALU1RBS0VfQVNTRVQBIPss+diV/WzAQQQ+1nCaM2epB5cN0dakuic5O0p9U6wiAApFQVJOX0FTU0VUASD7LPnYlf1swEEEPtZwmjNnqQeXDdHWpLonOTtKfVOsIgANVE9LRU5TX1BFUl9NUwABAANTRVACAl9fAAtERU5PTUlOQVRPUgCAgJC7utat8A0BEHVzZXJEZXBvc2l0ZWRLZXkBBHVzZXIJALkJAgkAzAgCAgJ1ZAkAzAgCCQDYBAEIBQR1c2VyBWJ5dGVzBQNuaWwFA1NFUAENdXNlclVwZGF0ZUtleQEEdXNlcgkAuQkCCQDMCAICAnV1CQDMCAIJANgEAQgFBHVzZXIFYnl0ZXMFA25pbAUDU0VQARF0b3RhbERlcG9zaXRlZEtleQACAnRkAQ1sYXN0VXBkYXRlS2V5AAICbHUBF3Jld2FyZFBlclRva2VuU3RvcmVkS2V5AAIEcnB0cwEZdXNlclJld2FyZFBlclRva2VuUGFpZEtleQEEdXNlcgkAuQkCCQDMCAICBHVycGQJAMwIAgkA2AQBCAUEdXNlcgVieXRlcwUDbmlsBQNTRVABC3VzZXJSZXdhcmRzAQR1c2VyCQC5CQIJAMwIAgICdXIJAMwIAgkA2AQBCAUEdXNlcgVieXRlcwUDbmlsBQNTRVABGGNhbGNSZXdhcmRQZXJUb2tlblN0b3JlZAAEDnRvdGFsRGVwb3NpdGVkCQC2AgEEByRtYXRjaDAJAJ8IAQkBEXRvdGFsRGVwb3NpdGVkS2V5AAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQKbGFzdFVwZGF0ZQkAtgIBBAckbWF0Y2gwCQCfCAEJAQ1sYXN0VXBkYXRlS2V5AAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBRyZXdhcmRQZXJUb2tlblN0b3JlZAkApwMBBAckbWF0Y2gwCQCiCAEJARdyZXdhcmRQZXJUb2tlblN0b3JlZEtleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgEwAwkAAAIFDnRvdGFsRGVwb3NpdGVkCQC2AgEAAAUUcmV3YXJkUGVyVG9rZW5TdG9yZWQJALcCAgUUcmV3YXJkUGVyVG9rZW5TdG9yZWQJALoCAgkAuQICCQC5AgIJALYCAQUNVE9LRU5TX1BFUl9NUwkAuAICCQC2AgEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQpsYXN0VXBkYXRlCQC2AgEFC0RFTk9NSU5BVE9SBQ50b3RhbERlcG9zaXRlZAEGZWFybmVkAQR1c2VyBA11c2VyRGVwb3NpdGVkCQC2AgEJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARB1c2VyRGVwb3NpdGVkS2V5AQUEdXNlcgQWdXNlclJld2FyZFBlclRva2VuUGFpZAkAtgIBCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEZdXNlclJld2FyZFBlclRva2VuUGFpZEtleQEFBHVzZXIEB3Jld2FyZHMJALYCAQQHJG1hdGNoMAkAnwgBCQELdXNlclJld2FyZHMBBQR1c2VyAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAACQC3AgIJALwCAwUNdXNlckRlcG9zaXRlZAkAuAICCQEYY2FsY1Jld2FyZFBlclRva2VuU3RvcmVkAAUWdXNlclJld2FyZFBlclRva2VuUGFpZAkAtgIBBQtERU5PTUlOQVRPUgUHcmV3YXJkcwIBaQEHZGVwb3NpdAADAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQtTVEFLRV9BU1NFVAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECGGluY29ycmVjdCBhc3NldCBkZXBvc2l0cwQNdXNlckRlcG9zaXRlZAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBEHVzZXJEZXBvc2l0ZWRLZXkBCAUBaQZjYWxsZXIEDnRvdGFsRGVwb3NpdGVkCQERQGV4dHJOYXRpdmUoMTA1NSkBCQERdG90YWxEZXBvc2l0ZWRLZXkACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQdXNlckRlcG9zaXRlZEtleQEIBQFpBmNhbGxlcgkAZAIFDXVzZXJEZXBvc2l0ZWQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERdG90YWxEZXBvc2l0ZWRLZXkACQBkAgUOdG90YWxEZXBvc2l0ZWQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARdyZXdhcmRQZXJUb2tlblN0b3JlZEtleQAJAKYDAQkBGGNhbGNSZXdhcmRQZXJUb2tlblN0b3JlZAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGXVzZXJSZXdhcmRQZXJUb2tlblBhaWRLZXkBCAUBaQZjYWxsZXIJAKYDAQkBGGNhbGNSZXdhcmRQZXJUb2tlblN0b3JlZAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQt1c2VyUmV3YXJkcwEIBQFpBmNhbGxlcgkAoAMBCQEGZWFybmVkAQgFAWkGY2FsbGVyBQNuaWwBaQEId2l0aGRyYXcABA11c2VyRGVwb3NpdGVkCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEQdXNlckRlcG9zaXRlZEtleQEIBQFpBmNhbGxlcgQOdG90YWxEZXBvc2l0ZWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARF0b3RhbERlcG9zaXRlZEtleQAEDGVhcm5lZFRva2VucwkAoAMBCQEGZWFybmVkAQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQdXNlckRlcG9zaXRlZEtleQEIBQFpBmNhbGxlcgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERdG90YWxEZXBvc2l0ZWRLZXkACQBlAgUOdG90YWxEZXBvc2l0ZWQFDXVzZXJEZXBvc2l0ZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ11c2VyRGVwb3NpdGVkBQtTVEFLRV9BU1NFVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDGVhcm5lZFRva2VucwUKRUFSTl9BU1NFVAkAzAgCCQELU3RyaW5nRW50cnkCCQEXcmV3YXJkUGVyVG9rZW5TdG9yZWRLZXkACQCmAwEJARhjYWxjUmV3YXJkUGVyVG9rZW5TdG9yZWQACQDMCAIJAQtTdHJpbmdFbnRyeQIJARl1c2VyUmV3YXJkUGVyVG9rZW5QYWlkS2V5AQgFAWkGY2FsbGVyCQCmAwEJARhjYWxjUmV3YXJkUGVyVG9rZW5TdG9yZWQACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELdXNlclJld2FyZHMBCAUBaQZjYWxsZXIAAAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleW+BTYo=", "height": 2845136, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 98bi2ziPCX3fj3mTLmamHF8qMQPQ43F26BP1daopfDWs Next: 6rrqcNLHi8wzomVHoMtnw5YmvvGLPnPuPNGM2kx5rY6c Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let STAKE_ASSET = base58'HuV7L2uJ4v2SDS5xqZLWPHhimTUgEMKstmxwfBY17SX3'
5+
6+let EARN_ASSET = base58'HuV7L2uJ4v2SDS5xqZLWPHhimTUgEMKstmxwfBY17SX3'
7+
8+let TOKENS_PER_MS = 1
9+
410 let SEP = "__"
511
6-func nftKey (nftId) = makeString(["nft", toBase58String(nftId)], SEP)
12+let DENOMINATOR = 1000000000000000000
13+
14+func userDepositedKey (user) = makeString(["ud", toBase58String(user.bytes)], SEP)
715
816
9-func nftTypeDescriptionKey (nftTypeId) = makeString(["nft_type", nftTypeId], SEP)
17+func userUpdateKey (user) = makeString(["uu", toBase58String(user.bytes)], SEP)
1018
1119
12-func setNft (nftId,nftTypeId,health,damage) = StringEntry(nftKey(nftId), makeString([nftTypeId, toString(health), toString(damage)], SEP))
20+func totalDepositedKey () = "td"
1321
1422
15-func getNftTypeDescription (nftTypeId) = {
16- let savedString = split( match getString(this, nftTypeDescriptionKey(nftTypeId)) {
17- case s: String =>
18- s
23+func lastUpdateKey () = "lu"
24+
25+
26+func rewardPerTokenStoredKey () = "rpts"
27+
28+
29+func userRewardPerTokenPaidKey (user) = makeString(["urpd", toBase58String(user.bytes)], SEP)
30+
31+
32+func userRewards (user) = makeString(["ur", toBase58String(user.bytes)], SEP)
33+
34+
35+func calcRewardPerTokenStored () = {
36+ let totalDeposited = toBigInt( match getInteger(totalDepositedKey()) {
37+ case a: Int =>
38+ a
1939 case _ =>
20- throw("nft type not found")
21- }, SEP)
22- $Tuple5(savedString[0], parseIntValue(savedString[1]), parseIntValue(savedString[2]), parseIntValue(savedString[3]), parseIntValue(savedString[4]))
40+ 0
41+ })
42+ let lastUpdate = toBigInt( match getInteger(lastUpdateKey()) {
43+ case a: Int =>
44+ a
45+ case _ =>
46+ lastBlock.timestamp
47+ })
48+ let rewardPerTokenStored = parseBigIntValue( match getString(rewardPerTokenStoredKey()) {
49+ case a: String =>
50+ a
51+ case _ =>
52+ "0"
53+ })
54+ if ((totalDeposited == toBigInt(0)))
55+ then rewardPerTokenStored
56+ else (rewardPerTokenStored + (((toBigInt(TOKENS_PER_MS) * (toBigInt(lastBlock.timestamp) - lastUpdate)) * toBigInt(DENOMINATOR)) / totalDeposited))
2357 }
2458
2559
26-func randomizer (inv,salt) = {
27- let rand = (((((salt + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
28- $Tuple2(sha256(rand), rand)
60+func earned (user) = {
61+ let userDeposited = toBigInt(getIntegerValue(userDepositedKey(user)))
62+ let userRewardPerTokenPaid = toBigInt(getIntegerValue(userRewardPerTokenPaidKey(user)))
63+ let rewards = toBigInt( match getInteger(userRewards(user)) {
64+ case a: Int =>
65+ a
66+ case _ =>
67+ 0
68+ })
69+ (fraction(userDeposited, (calcRewardPerTokenStored() - userRewardPerTokenPaid), toBigInt(DENOMINATOR)) + rewards)
2970 }
3071
3172
32-func internalGetNft (address) = match getString(this, nftKey(address)) {
33- case s: String =>
34- let splittedString = split(s, SEP)
35- $Tuple4(toBase58String(address), splittedString[0], parseIntValue(splittedString[1]), parseIntValue(splittedString[2]))
36- case _ =>
37- nil
38-}
39-
40-
41-func map (accum,nextNftAddress) = match internalGetNft(nextNftAddress) {
42- case s: (String, String, Int, Int) =>
43-s :: accum
44- case _ =>
45- accum
46-}
47-
48-
49-func getNfts (address) = $Tuple2(nil, {
50- let $l = address
51- let $s = size($l)
52- let $acc0 = nil
53- func $f0_1 ($a,$i) = if (($i >= $s))
54- then $a
55- else map($a, $l[$i])
56-
57- func $f0_2 ($a,$i) = if (($i >= $s))
58- then $a
59- else throw("List size exceeds 1000")
60-
61- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200), 201), 202), 203), 204), 205), 206), 207), 208), 209), 210), 211), 212), 213), 214), 215), 216), 217), 218), 219), 220), 221), 222), 223), 224), 225), 226), 227), 228), 229), 230), 231), 232), 233), 234), 235), 236), 237), 238), 239), 240), 241), 242), 243), 244), 245), 246), 247), 248), 249), 250), 251), 252), 253), 254), 255), 256), 257), 258), 259), 260), 261), 262), 263), 264), 265), 266), 267), 268), 269), 270), 271), 272), 273), 274), 275), 276), 277), 278), 279), 280), 281), 282), 283), 284), 285), 286), 287), 288), 289), 290), 291), 292), 293), 294), 295), 296), 297), 298), 299), 300), 301), 302), 303), 304), 305), 306), 307), 308), 309), 310), 311), 312), 313), 314), 315), 316), 317), 318), 319), 320), 321), 322), 323), 324), 325), 326), 327), 328), 329), 330), 331), 332), 333), 334), 335), 336), 337), 338), 339), 340), 341), 342), 343), 344), 345), 346), 347), 348), 349), 350), 351), 352), 353), 354), 355), 356), 357), 358), 359), 360), 361), 362), 363), 364), 365), 366), 367), 368), 369), 370), 371), 372), 373), 374), 375), 376), 377), 378), 379), 380), 381), 382), 383), 384), 385), 386), 387), 388), 389), 390), 391), 392), 393), 394), 395), 396), 397), 398), 399), 400), 401), 402), 403), 404), 405), 406), 407), 408), 409), 410), 411), 412), 413), 414), 415), 416), 417), 418), 419), 420), 421), 422), 423), 424), 425), 426), 427), 428), 429), 430), 431), 432), 433), 434), 435), 436), 437), 438), 439), 440), 441), 442), 443), 444), 445), 446), 447), 448), 449), 450), 451), 452), 453), 454), 455), 456), 457), 458), 459), 460), 461), 462), 463), 464), 465), 466), 467), 468), 469), 470), 471), 472), 473), 474), 475), 476), 477), 478), 479), 480), 481), 482), 483), 484), 485), 486), 487), 488), 489), 490), 491), 492), 493), 494), 495), 496), 497), 498), 499), 500), 501), 502), 503), 504), 505), 506), 507), 508), 509), 510), 511), 512), 513), 514), 515), 516), 517), 518), 519), 520), 521), 522), 523), 524), 525), 526), 527), 528), 529), 530), 531), 532), 533), 534), 535), 536), 537), 538), 539), 540), 541), 542), 543), 544), 545), 546), 547), 548), 549), 550), 551), 552), 553), 554), 555), 556), 557), 558), 559), 560), 561), 562), 563), 564), 565), 566), 567), 568), 569), 570), 571), 572), 573), 574), 575), 576), 577), 578), 579), 580), 581), 582), 583), 584), 585), 586), 587), 588), 589), 590), 591), 592), 593), 594), 595), 596), 597), 598), 599), 600), 601), 602), 603), 604), 605), 606), 607), 608), 609), 610), 611), 612), 613), 614), 615), 616), 617), 618), 619), 620), 621), 622), 623), 624), 625), 626), 627), 628), 629), 630), 631), 632), 633), 634), 635), 636), 637), 638), 639), 640), 641), 642), 643), 644), 645), 646), 647), 648), 649), 650), 651), 652), 653), 654), 655), 656), 657), 658), 659), 660), 661), 662), 663), 664), 665), 666), 667), 668), 669), 670), 671), 672), 673), 674), 675), 676), 677), 678), 679), 680), 681), 682), 683), 684), 685), 686), 687), 688), 689), 690), 691), 692), 693), 694), 695), 696), 697), 698), 699), 700), 701), 702), 703), 704), 705), 706), 707), 708), 709), 710), 711), 712), 713), 714), 715), 716), 717), 718), 719), 720), 721), 722), 723), 724), 725), 726), 727), 728), 729), 730), 731), 732), 733), 734), 735), 736), 737), 738), 739), 740), 741), 742), 743), 744), 745), 746), 747), 748), 749), 750), 751), 752), 753), 754), 755), 756), 757), 758), 759), 760), 761), 762), 763), 764), 765), 766), 767), 768), 769), 770), 771), 772), 773), 774), 775), 776), 777), 778), 779), 780), 781), 782), 783), 784), 785), 786), 787), 788), 789), 790), 791), 792), 793), 794), 795), 796), 797), 798), 799), 800), 801), 802), 803), 804), 805), 806), 807), 808), 809), 810), 811), 812), 813), 814), 815), 816), 817), 818), 819), 820), 821), 822), 823), 824), 825), 826), 827), 828), 829), 830), 831), 832), 833), 834), 835), 836), 837), 838), 839), 840), 841), 842), 843), 844), 845), 846), 847), 848), 849), 850), 851), 852), 853), 854), 855), 856), 857), 858), 859), 860), 861), 862), 863), 864), 865), 866), 867), 868), 869), 870), 871), 872), 873), 874), 875), 876), 877), 878), 879), 880), 881), 882), 883), 884), 885), 886), 887), 888), 889), 890), 891), 892), 893), 894), 895), 896), 897), 898), 899), 900), 901), 902), 903), 904), 905), 906), 907), 908), 909), 910), 911), 912), 913), 914), 915), 916), 917), 918), 919), 920), 921), 922), 923), 924), 925), 926), 927), 928), 929), 930), 931), 932), 933), 934), 935), 936), 937), 938), 939), 940), 941), 942), 943), 944), 945), 946), 947), 948), 949), 950), 951), 952), 953), 954), 955), 956), 957), 958), 959), 960), 961), 962), 963), 964), 965), 966), 967), 968), 969), 970), 971), 972), 973), 974), 975), 976), 977), 978), 979), 980), 981), 982), 983), 984), 985), 986), 987), 988), 989), 990), 991), 992), 993), 994), 995), 996), 997), 998), 999), 1000)
62- })
63-
64-
6573 @Callable(i)
66-func getNft (address) = $Tuple2(nil, internalGetNft(address))
74+func deposit () = if (if ((i.payments[0].assetId != STAKE_ASSET))
75+ then true
76+ else (size(i.payments) != 1))
77+ then throw("incorrect asset deposits")
78+ else {
79+ let userDeposited = getIntegerValue(userDepositedKey(i.caller))
80+ let totalDeposited = getIntegerValue(totalDepositedKey())
81+[IntegerEntry(userDepositedKey(i.caller), (userDeposited + i.payments[0].amount)), IntegerEntry(totalDepositedKey(), (totalDeposited + i.payments[0].amount)), StringEntry(rewardPerTokenStoredKey(), toString(calcRewardPerTokenStored())), StringEntry(userRewardPerTokenPaidKey(i.caller), toString(calcRewardPerTokenStored())), IntegerEntry(userRewards(i.caller), toInt(earned(i.caller)))]
82+ }
6783
6884
6985
7086 @Callable(i)
71-func setNftTypeDescription (nftTypeId,img,minHealth,maxHealth,minDamage,maxDamage) = [StringEntry(nftTypeDescriptionKey(nftTypeId), makeString([img, toString(minHealth), toString(maxHealth), toString(minDamage), toString(maxDamage)], SEP))]
72-
73-
74-
75-@Callable(i)
76-func mint (nftTypeId,to) = {
77- let typeDescription = getNftTypeDescription(nftTypeId)
78- let healthT = randomizer(i, base58'')
79- let damageT = randomizer(i, healthT._2)
80- let health = if (((typeDescription._3 - typeDescription._2) == 0))
81- then typeDescription._3
82- else (typeDescription._3 + (toInt(healthT._1) % (typeDescription._3 - typeDescription._2)))
83- let damage = if (((typeDescription._5 - typeDescription._4) == 0))
84- then typeDescription._5
85- else (typeDescription._4 + (toInt(damageT._1) % (typeDescription._5 - typeDescription._4)))
86- let description = (((("{\"initHealth\": \"" + toString(health)) + "\", \"initDamage\": ") + toString(damage)) + "}")
87- let asset = Issue(nftTypeId, description, 1, 0, false)
88- let assetId = calculateAssetId(asset)
89- $Tuple2([setNft(assetId, nftTypeId, health, damage), asset, ScriptTransfer(value(addressFromString(to)), 1, assetId)], toBase58String(assetId))
87+func withdraw () = {
88+ let userDeposited = getIntegerValue(userDepositedKey(i.caller))
89+ let totalDeposited = getIntegerValue(totalDepositedKey())
90+ let earnedTokens = toInt(earned(i.caller))
91+[IntegerEntry(userDepositedKey(i.caller), 0), IntegerEntry(totalDepositedKey(), (totalDeposited - userDeposited)), ScriptTransfer(i.caller, userDeposited, STAKE_ASSET), ScriptTransfer(i.caller, earnedTokens, EARN_ASSET), StringEntry(rewardPerTokenStoredKey(), toString(calcRewardPerTokenStored())), StringEntry(userRewardPerTokenPaidKey(i.caller), toString(calcRewardPerTokenStored())), IntegerEntry(userRewards(i.caller), 0)]
9092 }
9193
9294
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let STAKE_ASSET = base58'HuV7L2uJ4v2SDS5xqZLWPHhimTUgEMKstmxwfBY17SX3'
5+
6+let EARN_ASSET = base58'HuV7L2uJ4v2SDS5xqZLWPHhimTUgEMKstmxwfBY17SX3'
7+
8+let TOKENS_PER_MS = 1
9+
410 let SEP = "__"
511
6-func nftKey (nftId) = makeString(["nft", toBase58String(nftId)], SEP)
12+let DENOMINATOR = 1000000000000000000
13+
14+func userDepositedKey (user) = makeString(["ud", toBase58String(user.bytes)], SEP)
715
816
9-func nftTypeDescriptionKey (nftTypeId) = makeString(["nft_type", nftTypeId], SEP)
17+func userUpdateKey (user) = makeString(["uu", toBase58String(user.bytes)], SEP)
1018
1119
12-func setNft (nftId,nftTypeId,health,damage) = StringEntry(nftKey(nftId), makeString([nftTypeId, toString(health), toString(damage)], SEP))
20+func totalDepositedKey () = "td"
1321
1422
15-func getNftTypeDescription (nftTypeId) = {
16- let savedString = split( match getString(this, nftTypeDescriptionKey(nftTypeId)) {
17- case s: String =>
18- s
23+func lastUpdateKey () = "lu"
24+
25+
26+func rewardPerTokenStoredKey () = "rpts"
27+
28+
29+func userRewardPerTokenPaidKey (user) = makeString(["urpd", toBase58String(user.bytes)], SEP)
30+
31+
32+func userRewards (user) = makeString(["ur", toBase58String(user.bytes)], SEP)
33+
34+
35+func calcRewardPerTokenStored () = {
36+ let totalDeposited = toBigInt( match getInteger(totalDepositedKey()) {
37+ case a: Int =>
38+ a
1939 case _ =>
20- throw("nft type not found")
21- }, SEP)
22- $Tuple5(savedString[0], parseIntValue(savedString[1]), parseIntValue(savedString[2]), parseIntValue(savedString[3]), parseIntValue(savedString[4]))
40+ 0
41+ })
42+ let lastUpdate = toBigInt( match getInteger(lastUpdateKey()) {
43+ case a: Int =>
44+ a
45+ case _ =>
46+ lastBlock.timestamp
47+ })
48+ let rewardPerTokenStored = parseBigIntValue( match getString(rewardPerTokenStoredKey()) {
49+ case a: String =>
50+ a
51+ case _ =>
52+ "0"
53+ })
54+ if ((totalDeposited == toBigInt(0)))
55+ then rewardPerTokenStored
56+ else (rewardPerTokenStored + (((toBigInt(TOKENS_PER_MS) * (toBigInt(lastBlock.timestamp) - lastUpdate)) * toBigInt(DENOMINATOR)) / totalDeposited))
2357 }
2458
2559
26-func randomizer (inv,salt) = {
27- let rand = (((((salt + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
28- $Tuple2(sha256(rand), rand)
60+func earned (user) = {
61+ let userDeposited = toBigInt(getIntegerValue(userDepositedKey(user)))
62+ let userRewardPerTokenPaid = toBigInt(getIntegerValue(userRewardPerTokenPaidKey(user)))
63+ let rewards = toBigInt( match getInteger(userRewards(user)) {
64+ case a: Int =>
65+ a
66+ case _ =>
67+ 0
68+ })
69+ (fraction(userDeposited, (calcRewardPerTokenStored() - userRewardPerTokenPaid), toBigInt(DENOMINATOR)) + rewards)
2970 }
3071
3172
32-func internalGetNft (address) = match getString(this, nftKey(address)) {
33- case s: String =>
34- let splittedString = split(s, SEP)
35- $Tuple4(toBase58String(address), splittedString[0], parseIntValue(splittedString[1]), parseIntValue(splittedString[2]))
36- case _ =>
37- nil
38-}
39-
40-
41-func map (accum,nextNftAddress) = match internalGetNft(nextNftAddress) {
42- case s: (String, String, Int, Int) =>
43-s :: accum
44- case _ =>
45- accum
46-}
47-
48-
49-func getNfts (address) = $Tuple2(nil, {
50- let $l = address
51- let $s = size($l)
52- let $acc0 = nil
53- func $f0_1 ($a,$i) = if (($i >= $s))
54- then $a
55- else map($a, $l[$i])
56-
57- func $f0_2 ($a,$i) = if (($i >= $s))
58- then $a
59- else throw("List size exceeds 1000")
60-
61- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200), 201), 202), 203), 204), 205), 206), 207), 208), 209), 210), 211), 212), 213), 214), 215), 216), 217), 218), 219), 220), 221), 222), 223), 224), 225), 226), 227), 228), 229), 230), 231), 232), 233), 234), 235), 236), 237), 238), 239), 240), 241), 242), 243), 244), 245), 246), 247), 248), 249), 250), 251), 252), 253), 254), 255), 256), 257), 258), 259), 260), 261), 262), 263), 264), 265), 266), 267), 268), 269), 270), 271), 272), 273), 274), 275), 276), 277), 278), 279), 280), 281), 282), 283), 284), 285), 286), 287), 288), 289), 290), 291), 292), 293), 294), 295), 296), 297), 298), 299), 300), 301), 302), 303), 304), 305), 306), 307), 308), 309), 310), 311), 312), 313), 314), 315), 316), 317), 318), 319), 320), 321), 322), 323), 324), 325), 326), 327), 328), 329), 330), 331), 332), 333), 334), 335), 336), 337), 338), 339), 340), 341), 342), 343), 344), 345), 346), 347), 348), 349), 350), 351), 352), 353), 354), 355), 356), 357), 358), 359), 360), 361), 362), 363), 364), 365), 366), 367), 368), 369), 370), 371), 372), 373), 374), 375), 376), 377), 378), 379), 380), 381), 382), 383), 384), 385), 386), 387), 388), 389), 390), 391), 392), 393), 394), 395), 396), 397), 398), 399), 400), 401), 402), 403), 404), 405), 406), 407), 408), 409), 410), 411), 412), 413), 414), 415), 416), 417), 418), 419), 420), 421), 422), 423), 424), 425), 426), 427), 428), 429), 430), 431), 432), 433), 434), 435), 436), 437), 438), 439), 440), 441), 442), 443), 444), 445), 446), 447), 448), 449), 450), 451), 452), 453), 454), 455), 456), 457), 458), 459), 460), 461), 462), 463), 464), 465), 466), 467), 468), 469), 470), 471), 472), 473), 474), 475), 476), 477), 478), 479), 480), 481), 482), 483), 484), 485), 486), 487), 488), 489), 490), 491), 492), 493), 494), 495), 496), 497), 498), 499), 500), 501), 502), 503), 504), 505), 506), 507), 508), 509), 510), 511), 512), 513), 514), 515), 516), 517), 518), 519), 520), 521), 522), 523), 524), 525), 526), 527), 528), 529), 530), 531), 532), 533), 534), 535), 536), 537), 538), 539), 540), 541), 542), 543), 544), 545), 546), 547), 548), 549), 550), 551), 552), 553), 554), 555), 556), 557), 558), 559), 560), 561), 562), 563), 564), 565), 566), 567), 568), 569), 570), 571), 572), 573), 574), 575), 576), 577), 578), 579), 580), 581), 582), 583), 584), 585), 586), 587), 588), 589), 590), 591), 592), 593), 594), 595), 596), 597), 598), 599), 600), 601), 602), 603), 604), 605), 606), 607), 608), 609), 610), 611), 612), 613), 614), 615), 616), 617), 618), 619), 620), 621), 622), 623), 624), 625), 626), 627), 628), 629), 630), 631), 632), 633), 634), 635), 636), 637), 638), 639), 640), 641), 642), 643), 644), 645), 646), 647), 648), 649), 650), 651), 652), 653), 654), 655), 656), 657), 658), 659), 660), 661), 662), 663), 664), 665), 666), 667), 668), 669), 670), 671), 672), 673), 674), 675), 676), 677), 678), 679), 680), 681), 682), 683), 684), 685), 686), 687), 688), 689), 690), 691), 692), 693), 694), 695), 696), 697), 698), 699), 700), 701), 702), 703), 704), 705), 706), 707), 708), 709), 710), 711), 712), 713), 714), 715), 716), 717), 718), 719), 720), 721), 722), 723), 724), 725), 726), 727), 728), 729), 730), 731), 732), 733), 734), 735), 736), 737), 738), 739), 740), 741), 742), 743), 744), 745), 746), 747), 748), 749), 750), 751), 752), 753), 754), 755), 756), 757), 758), 759), 760), 761), 762), 763), 764), 765), 766), 767), 768), 769), 770), 771), 772), 773), 774), 775), 776), 777), 778), 779), 780), 781), 782), 783), 784), 785), 786), 787), 788), 789), 790), 791), 792), 793), 794), 795), 796), 797), 798), 799), 800), 801), 802), 803), 804), 805), 806), 807), 808), 809), 810), 811), 812), 813), 814), 815), 816), 817), 818), 819), 820), 821), 822), 823), 824), 825), 826), 827), 828), 829), 830), 831), 832), 833), 834), 835), 836), 837), 838), 839), 840), 841), 842), 843), 844), 845), 846), 847), 848), 849), 850), 851), 852), 853), 854), 855), 856), 857), 858), 859), 860), 861), 862), 863), 864), 865), 866), 867), 868), 869), 870), 871), 872), 873), 874), 875), 876), 877), 878), 879), 880), 881), 882), 883), 884), 885), 886), 887), 888), 889), 890), 891), 892), 893), 894), 895), 896), 897), 898), 899), 900), 901), 902), 903), 904), 905), 906), 907), 908), 909), 910), 911), 912), 913), 914), 915), 916), 917), 918), 919), 920), 921), 922), 923), 924), 925), 926), 927), 928), 929), 930), 931), 932), 933), 934), 935), 936), 937), 938), 939), 940), 941), 942), 943), 944), 945), 946), 947), 948), 949), 950), 951), 952), 953), 954), 955), 956), 957), 958), 959), 960), 961), 962), 963), 964), 965), 966), 967), 968), 969), 970), 971), 972), 973), 974), 975), 976), 977), 978), 979), 980), 981), 982), 983), 984), 985), 986), 987), 988), 989), 990), 991), 992), 993), 994), 995), 996), 997), 998), 999), 1000)
62- })
63-
64-
6573 @Callable(i)
66-func getNft (address) = $Tuple2(nil, internalGetNft(address))
74+func deposit () = if (if ((i.payments[0].assetId != STAKE_ASSET))
75+ then true
76+ else (size(i.payments) != 1))
77+ then throw("incorrect asset deposits")
78+ else {
79+ let userDeposited = getIntegerValue(userDepositedKey(i.caller))
80+ let totalDeposited = getIntegerValue(totalDepositedKey())
81+[IntegerEntry(userDepositedKey(i.caller), (userDeposited + i.payments[0].amount)), IntegerEntry(totalDepositedKey(), (totalDeposited + i.payments[0].amount)), StringEntry(rewardPerTokenStoredKey(), toString(calcRewardPerTokenStored())), StringEntry(userRewardPerTokenPaidKey(i.caller), toString(calcRewardPerTokenStored())), IntegerEntry(userRewards(i.caller), toInt(earned(i.caller)))]
82+ }
6783
6884
6985
7086 @Callable(i)
71-func setNftTypeDescription (nftTypeId,img,minHealth,maxHealth,minDamage,maxDamage) = [StringEntry(nftTypeDescriptionKey(nftTypeId), makeString([img, toString(minHealth), toString(maxHealth), toString(minDamage), toString(maxDamage)], SEP))]
72-
73-
74-
75-@Callable(i)
76-func mint (nftTypeId,to) = {
77- let typeDescription = getNftTypeDescription(nftTypeId)
78- let healthT = randomizer(i, base58'')
79- let damageT = randomizer(i, healthT._2)
80- let health = if (((typeDescription._3 - typeDescription._2) == 0))
81- then typeDescription._3
82- else (typeDescription._3 + (toInt(healthT._1) % (typeDescription._3 - typeDescription._2)))
83- let damage = if (((typeDescription._5 - typeDescription._4) == 0))
84- then typeDescription._5
85- else (typeDescription._4 + (toInt(damageT._1) % (typeDescription._5 - typeDescription._4)))
86- let description = (((("{\"initHealth\": \"" + toString(health)) + "\", \"initDamage\": ") + toString(damage)) + "}")
87- let asset = Issue(nftTypeId, description, 1, 0, false)
88- let assetId = calculateAssetId(asset)
89- $Tuple2([setNft(assetId, nftTypeId, health, damage), asset, ScriptTransfer(value(addressFromString(to)), 1, assetId)], toBase58String(assetId))
87+func withdraw () = {
88+ let userDeposited = getIntegerValue(userDepositedKey(i.caller))
89+ let totalDeposited = getIntegerValue(totalDepositedKey())
90+ let earnedTokens = toInt(earned(i.caller))
91+[IntegerEntry(userDepositedKey(i.caller), 0), IntegerEntry(totalDepositedKey(), (totalDeposited - userDeposited)), ScriptTransfer(i.caller, userDeposited, STAKE_ASSET), ScriptTransfer(i.caller, earnedTokens, EARN_ASSET), StringEntry(rewardPerTokenStoredKey(), toString(calcRewardPerTokenStored())), StringEntry(userRewardPerTokenPaidKey(i.caller), toString(calcRewardPerTokenStored())), IntegerEntry(userRewards(i.caller), 0)]
9092 }
9193
9294
9395 @Verifier(tx)
9496 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
9597

github/deemru/w8io/6500d08 
116.06 ms