tx · GKKKgSDy4i6Z4iNvJXTQP1FMYA3JR5fpQRavgAiZW6YS 3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X: -0.01000000 Waves 2024.03.27 09:32 [4102022] smart account 3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X > SELF 0.00000000 Waves
{ "type": 13, "id": "GKKKgSDy4i6Z4iNvJXTQP1FMYA3JR5fpQRavgAiZW6YS", "fee": 1000000, "feeAssetId": null, "timestamp": 1711521174405, "version": 2, "chainId": 87, "sender": "3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X", "senderPublicKey": "EVAMa5pPNoDnd1p8GoMUWb4A6gjzDXg2tLK2Tu8mie3R", "proofs": [ "4t78RUaXM1iKxTrKEGktFEBPdumMnu7f6vdUPGYaGUux5bn5ko2wJTKv2ShkA5hhy9fDgwBQso6cyq6LX9GaaoVb" ], "script": "base64:BgISCAISAwoBCBIDCgEIEgQKAggIFgAQdXNlclN0b3JlQWRkcmVzcwkBB0FkZHJlc3MBARoBV2JwScgGQxUjtOvQa1WtNyBCkVT7fZ2DEQAOdXNlckJhbkFkZHJlc3MJAQdBZGRyZXNzAQEaAVeHOYaIcxLUHVrZcLvPfTZ3nSoJlZSzNNMAEnVzZXJSZXdhcmRzQWRkcmVzcwkBB0FkZHJlc3MBARoBV2o4yTAlb0aZIFVpYfXCCi2qYWdAQxdwnAAEZnVkdAEgQHsMDzhOtNXIuUCwZgK73eR+3cH2sC4MYy5Hn0fVndwABXNjYWxlAIDC1y8AAncxCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8xAB4AAncyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8yABQAAnczCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8zADIBDWdldExpa2VzQ291bnQBCHRhcmdldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEHVzZXJTdG9yZUFkZHJlc3MJAKwCAgIJbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARBnZXREaXNsaWtlc0NvdW50AQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRB1c2VyU3RvcmVBZGRyZXNzCQCsAgICDGRpc2xpa2VzX29mXwUIdGFyZ2V0SWQAAAEYZ2V0QmFuRHVyYXRpb25MaWtlQXV0aG9yAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ51c2VyQmFuQWRkcmVzcwkArAICBQh0YXJnZXRJZAITX2FzX2F1dGhvcl9kdXJhdGlvbgAAARhnZXRCYW5EdXJhdGlvbkxpa2VWaWN0aW0BCHRhcmdldElkCQELdmFsdWVPckVsc2UCCQCaCAIFDnVzZXJCYW5BZGRyZXNzCQCsAgIFCHRhcmdldElkAhNfYXNfdmljdGltX2R1cmF0aW9uAAABDmdldEFkZHJlc3NCeUlkAQh0YXJnZXRJZAkAnQgCBRB1c2VyU3RvcmVBZGRyZXNzCQCsAgICC2FkZHJlc3Nfb2ZfBQh0YXJnZXRJZAEOZ2V0RnVkdEJhbGFuY2UBCHRhcmdldElkBAphZGRyZXNzU3RyCQEOZ2V0QWRkcmVzc0J5SWQBBQh0YXJnZXRJZAMJAQlpc0RlZmluZWQBBQphZGRyZXNzU3RyCQDwBwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFCmFkZHJlc3NTdHIFBGZ1ZHQAAAESZ2V0QXZhaWxhYmxlUmV3YXJkAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ1c2VyUmV3YXJkc0FkZHJlc3MJAKwCAgUIdGFyZ2V0SWQCCl9hdmFpbGFibGUAAAETZ2V0U2VudEZ1ZHRGb3JMaWtlcwEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdXNlclJld2FyZHNBZGRyZXNzCQCsAgICFWZ1ZHRfc2VuZGVkX2xpa2VzX29mXwUIdGFyZ2V0SWQAAAEVZ2V0U2VudEZ1ZHRGb3JEaXNpa2VzAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ1c2VyUmV3YXJkc0FkZHJlc3MJAKwCAgIYZnVkdF9zZW5kZWRfZGlzbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARFnZXRTZW50RnVkdEZvckJhbgEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdXNlckJhbkFkZHJlc3MJAKwCAgUIdGFyZ2V0SWQCD19hc19hdXRob3JfZnVkdAAAARRnZXRCYWRGdWR0Rm9yRGlzaWtlcwEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdXNlclJld2FyZHNBZGRyZXNzCQCsAgICEWZ1ZHRfZGlzbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARBnZXRCYWRGdWR0Rm9yQmFuAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ51c2VyQmFuQWRkcmVzcwkArAICBQh0YXJnZXRJZAIPX2FzX3ZpY3RpbV9mdWR0AAABDWdldFBlcmNlbnRhZ2UCAXABbgQEbmV3UAkAtgIBCQBrAwUBcAUFc2NhbGUAAQQEbmV3TgkAtgIBCQBrAwUBbgUFc2NhbGUAAQMJAAACCQBkAgUBcAUBbgAAAAAECnBlcmNlbnRhZ2UJALwCAwkAuAICCQC8AgMJALcCAgUEbmV3UAkAtgIBAIDRy1sJALYCAQUFc2NhbGUJALcCAgUEbmV3UAUEbmV3TgkAvAIDCQC5AgIJALYCAQCA8rpdCQEKc3FydEJpZ0ludAQJALcCAgkAvAIDCQC5AgIFBG5ld1AFBG5ld04JALYCAQABCQC3AgIFBG5ld1AFBG5ld04JALYCAQDA6OUtAAgACAUHQ0VJTElORwkAtgIBAAEJALcCAgUEbmV3UAUEbmV3TgkAtgIBBQVzY2FsZQkAtwICCQC2AgEAgMLXLwkAvAIDCQC2AgEAgKKXtwEJALYCAQUFc2NhbGUJALcCAgUEbmV3UAUEbmV3TgkAoAMBBQpwZXJjZW50YWdlAQxfZ2V0VXNlckluZm8BCHRhcmdldElkAwkBAiE9AgkAZAIJAGQCBQJ3MQUCdzIFAnczAGQJAAIBAgtiYWQgd2VpZ2h0cwQKbGlrZXNDb3VudAkBDWdldExpa2VzQ291bnQBBQh0YXJnZXRJZAQNZGlzbGlrZXNDb3VudAkBEGdldERpc2xpa2VzQ291bnQBBQh0YXJnZXRJZAQNYmFuTGlrZUF1dGhvcgkBGGdldEJhbkR1cmF0aW9uTGlrZUF1dGhvcgEFCHRhcmdldElkBA1iYW5MaWtlVmljdGltCQEYZ2V0QmFuRHVyYXRpb25MaWtlVmljdGltAQUIdGFyZ2V0SWQEDXJld2FyZHNBbW91bnQJARJnZXRBdmFpbGFibGVSZXdhcmQBBQh0YXJnZXRJZAQKZnVkdEFtb3VudAkAZAIJAGQCCQBkAgkAZAIFDXJld2FyZHNBbW91bnQJARNnZXRTZW50RnVkdEZvckxpa2VzAQUIdGFyZ2V0SWQJARVnZXRTZW50RnVkdEZvckRpc2lrZXMBBQh0YXJnZXRJZAkBEWdldFNlbnRGdWR0Rm9yQmFuAQUIdGFyZ2V0SWQJAQ5nZXRGdWR0QmFsYW5jZQEFCHRhcmdldElkBA1iYWRGdWR0QW1vdW50CQBkAgkBFGdldEJhZEZ1ZHRGb3JEaXNpa2VzAQUIdGFyZ2V0SWQJARBnZXRCYWRGdWR0Rm9yQmFuAQUIdGFyZ2V0SWQEBnJhdGluZwkAZAIJAGQCCQBrAwUCdzEJAQ1nZXRQZXJjZW50YWdlAgUKbGlrZXNDb3VudAUNZGlzbGlrZXNDb3VudABkCQBrAwUCdzIJAQ1nZXRQZXJjZW50YWdlAgUNYmFuTGlrZUF1dGhvcgUNYmFuTGlrZVZpY3RpbQBkCQBrAwUCdzMJAQ1nZXRQZXJjZW50YWdlAgkAawMFCmZ1ZHRBbW91bnQAAQUFc2NhbGUJAGsDBQ1iYWRGdWR0QW1vdW50AAEFBXNjYWxlAGQJAJoKCAUGcmF0aW5nBQpsaWtlc0NvdW50BQ1kaXNsaWtlc0NvdW50BQ1iYW5MaWtlQXV0aG9yBQ1iYW5MaWtlVmljdGltBQpmdWR0QW1vdW50BQ1iYWRGdWR0QW1vdW50BQ1yZXdhcmRzQW1vdW50AwFpAQtnZXRVc2VySW5mbwEIdGFyZ2V0SWQEAXIJAQxfZ2V0VXNlckluZm8BBQh0YXJnZXRJZAkAlAoCBQNuaWwFAXIBaQEUZ2V0VXNlckluZm9CeUFkZHJlc3MBCmFkZHJlc3NTdHIECHRhcmdldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUQdXNlclN0b3JlQWRkcmVzcwkArAICAgZpZF9vZl8FCmFkZHJlc3NTdHICEWFkZHJlc3Mgbm90IGZvdW5kBAFyCQEMX2dldFVzZXJJbmZvAQUIdGFyZ2V0SWQJAJQKAgUDbmlsBQFyAWkBC2NoZWNrUmF0aW5nAgdjaGF0SWQxB2NoYXRJZDIEB3JhdGluZzEICQEMX2dldFVzZXJJbmZvAQUHY2hhdElkMQJfMQQHcmF0aW5nMggJAQxfZ2V0VXNlckluZm8BBQdjaGF0SWQyAl8xCQCUCgIFA25pbAkAlAoCBQdyYXRpbmcxBQdyYXRpbmcyAKLa5wk=", "height": 4102022, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AcGoJ8gSht4ffr3Pf3YnvrMCNTpJTmsfUPbE2EY1JDVJ Next: 7V8XWQE6tE532i1sznXB6iRYPFjaAFT7aMrfXndjSEfQ Diff:
Old | New | Differences | |
---|---|---|---|
81 | 81 | let fudtAmount = ((((rewardsAmount + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) + getFudtBalance(targetId)) | |
82 | 82 | let badFudtAmount = (getBadFudtForDisikes(targetId) + getBadFudtForBan(targetId)) | |
83 | 83 | let rating = ((fraction(w1, getPercentage(likesCount, dislikesCount), 100) + fraction(w2, getPercentage(banLikeAuthor, banLikeVictim), 100)) + fraction(w3, getPercentage(fraction(fudtAmount, 1, scale), fraction(badFudtAmount, 1, scale)), 100)) | |
84 | - | | |
84 | + | $Tuple8(rating, likesCount, dislikesCount, banLikeAuthor, banLikeVictim, fudtAmount, badFudtAmount, rewardsAmount) | |
85 | 85 | } | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | @Callable(i) | |
89 | 89 | func getUserInfo (targetId) = { | |
90 | 90 | let r = _getUserInfo(targetId) | |
91 | - | r | |
91 | + | $Tuple2(nil, r) | |
92 | 92 | } | |
93 | 93 | ||
94 | 94 | ||
97 | 97 | func getUserInfoByAddress (addressStr) = { | |
98 | 98 | let targetId = valueOrErrorMessage(getString(userStoreAddress, ("id_of_" + addressStr)), "address not found") | |
99 | 99 | let r = _getUserInfo(targetId) | |
100 | - | r | |
100 | + | $Tuple2(nil, r) | |
101 | 101 | } | |
102 | 102 | ||
103 | 103 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let userStoreAddress = Address(base58'3PAuPTy3r9nAszkxnSDLcudYXSAV1J2jKUk') | |
5 | 5 | ||
6 | 6 | let userBanAddress = Address(base58'3PEFts5yWYPixzFimFymb4kqmg93QFgS7hL') | |
7 | 7 | ||
8 | 8 | let userRewardsAddress = Address(base58'3PBcYP8gLKJqoDCVt9oTWaFDCqUppWQr2cK') | |
9 | 9 | ||
10 | 10 | let fudt = base58'5Lhv8uKnvGxA2cjbFXXKZFASk1cAFp9dRWkmLYhULtSX' | |
11 | 11 | ||
12 | 12 | let scale = 100000000 | |
13 | 13 | ||
14 | 14 | let w1 = valueOrElse(getInteger(this, "weight_1"), 30) | |
15 | 15 | ||
16 | 16 | let w2 = valueOrElse(getInteger(this, "weight_2"), 20) | |
17 | 17 | ||
18 | 18 | let w3 = valueOrElse(getInteger(this, "weight_3"), 50) | |
19 | 19 | ||
20 | 20 | func getLikesCount (targetId) = valueOrElse(getInteger(userStoreAddress, ("likes_of_" + targetId)), 0) | |
21 | 21 | ||
22 | 22 | ||
23 | 23 | func getDislikesCount (targetId) = valueOrElse(getInteger(userStoreAddress, ("dislikes_of_" + targetId)), 0) | |
24 | 24 | ||
25 | 25 | ||
26 | 26 | func getBanDurationLikeAuthor (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_author_duration")), 0) | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func getBanDurationLikeVictim (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_victim_duration")), 0) | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func getAddressById (targetId) = getString(userStoreAddress, ("address_of_" + targetId)) | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func getFudtBalance (targetId) = { | |
36 | 36 | let addressStr = getAddressById(targetId) | |
37 | 37 | if (isDefined(addressStr)) | |
38 | 38 | then assetBalance(addressFromStringValue(value(addressStr)), fudt) | |
39 | 39 | else 0 | |
40 | 40 | } | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func getAvailableReward (targetId) = valueOrElse(getInteger(userRewardsAddress, (targetId + "_available")), 0) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func getSentFudtForLikes (targetId) = valueOrElse(getInteger(userRewardsAddress, ("fudt_sended_likes_of_" + targetId)), 0) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func getSentFudtForDisikes (targetId) = valueOrElse(getInteger(userRewardsAddress, ("fudt_sended_dislikes_of_" + targetId)), 0) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func getSentFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_author_fudt")), 0) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | func getBadFudtForDisikes (targetId) = valueOrElse(getInteger(userRewardsAddress, ("fudt_dislikes_of_" + targetId)), 0) | |
56 | 56 | ||
57 | 57 | ||
58 | 58 | func getBadFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_victim_fudt")), 0) | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | func getPercentage (p,n) = { | |
62 | 62 | let newP = toBigInt(fraction(p, scale, 1)) | |
63 | 63 | let newN = toBigInt(fraction(n, scale, 1)) | |
64 | 64 | if (((p + n) == 0)) | |
65 | 65 | then 0 | |
66 | 66 | else { | |
67 | 67 | let percentage = fraction((fraction((newP + toBigInt(192080000)), toBigInt(scale), (newP + newN)) - fraction((toBigInt(196000000) * sqrtBigInt((fraction((newP * newN), toBigInt(1), (newP + newN)) + toBigInt(96040000)), 8, 8, CEILING)), toBigInt(1), (newP + newN))), toBigInt(scale), (toBigInt(100000000) + fraction(toBigInt(384160000), toBigInt(scale), (newP + newN)))) | |
68 | 68 | toInt(percentage) | |
69 | 69 | } | |
70 | 70 | } | |
71 | 71 | ||
72 | 72 | ||
73 | 73 | func _getUserInfo (targetId) = if ((((w1 + w2) + w3) != 100)) | |
74 | 74 | then throw("bad weights") | |
75 | 75 | else { | |
76 | 76 | let likesCount = getLikesCount(targetId) | |
77 | 77 | let dislikesCount = getDislikesCount(targetId) | |
78 | 78 | let banLikeAuthor = getBanDurationLikeAuthor(targetId) | |
79 | 79 | let banLikeVictim = getBanDurationLikeVictim(targetId) | |
80 | 80 | let rewardsAmount = getAvailableReward(targetId) | |
81 | 81 | let fudtAmount = ((((rewardsAmount + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) + getFudtBalance(targetId)) | |
82 | 82 | let badFudtAmount = (getBadFudtForDisikes(targetId) + getBadFudtForBan(targetId)) | |
83 | 83 | let rating = ((fraction(w1, getPercentage(likesCount, dislikesCount), 100) + fraction(w2, getPercentage(banLikeAuthor, banLikeVictim), 100)) + fraction(w3, getPercentage(fraction(fudtAmount, 1, scale), fraction(badFudtAmount, 1, scale)), 100)) | |
84 | - | | |
84 | + | $Tuple8(rating, likesCount, dislikesCount, banLikeAuthor, banLikeVictim, fudtAmount, badFudtAmount, rewardsAmount) | |
85 | 85 | } | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | @Callable(i) | |
89 | 89 | func getUserInfo (targetId) = { | |
90 | 90 | let r = _getUserInfo(targetId) | |
91 | - | r | |
91 | + | $Tuple2(nil, r) | |
92 | 92 | } | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | ||
96 | 96 | @Callable(i) | |
97 | 97 | func getUserInfoByAddress (addressStr) = { | |
98 | 98 | let targetId = valueOrErrorMessage(getString(userStoreAddress, ("id_of_" + addressStr)), "address not found") | |
99 | 99 | let r = _getUserInfo(targetId) | |
100 | - | r | |
100 | + | $Tuple2(nil, r) | |
101 | 101 | } | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | ||
105 | 105 | @Callable(i) | |
106 | 106 | func checkRating (chatId1,chatId2) = { | |
107 | 107 | let rating1 = _getUserInfo(chatId1)._1 | |
108 | 108 | let rating2 = _getUserInfo(chatId2)._1 | |
109 | 109 | $Tuple2(nil, $Tuple2(rating1, rating2)) | |
110 | 110 | } | |
111 | 111 | ||
112 | 112 |
github/deemru/w8io/6500d08 28.72 ms ◑