tx · Haqc5RMUDfPwWdQ4uMEPigyBdgMeXvpCbefcivCKfhif 3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X: -0.01000000 Waves 2024.03.26 14:15 [4100861] smart account 3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X > SELF 0.00000000 Waves
{ "type": 13, "id": "Haqc5RMUDfPwWdQ4uMEPigyBdgMeXvpCbefcivCKfhif", "fee": 1000000, "feeAssetId": null, "timestamp": 1711451766744, "version": 2, "chainId": 87, "sender": "3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X", "senderPublicKey": "EVAMa5pPNoDnd1p8GoMUWb4A6gjzDXg2tLK2Tu8mie3R", "proofs": [ "3367cEGftXCCGBxKqbJEeBtitbsSn7534LAPUeWzEgDaJYXePYjW1ymiSNMZPNkQ817B3a5JqtgMDsCwKHf39WL3" ], "script": "base64:BgIMCAISAwoBCBIDCgEIFgAQdXNlclN0b3JlQWRkcmVzcwkBB0FkZHJlc3MBARoBV2JwScgGQxUjtOvQa1WtNyBCkVT7fZ2DEQAOdXNlckJhbkFkZHJlc3MJAQdBZGRyZXNzAQEaAVeHOYaIcxLUHVrZcLvPfTZ3nSoJlZSzNNMAEnVzZXJSZXdhcmRzQWRkcmVzcwkBB0FkZHJlc3MBARoBV2o4yTAlb0aZIFVpYfXCCi2qYWdAQxdwnAAEZnVkdAEgQHsMDzhOtNXIuUCwZgK73eR+3cH2sC4MYy5Hn0fVndwABXNjYWxlAIDC1y8AAncxCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8xAB4AAncyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8yABQAAnczCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8zADIBDWdldExpa2VzQ291bnQBCHRhcmdldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEHVzZXJTdG9yZUFkZHJlc3MJAKwCAgIJbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARBnZXREaXNsaWtlc0NvdW50AQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRB1c2VyU3RvcmVBZGRyZXNzCQCsAgICDGRpc2xpa2VzX29mXwUIdGFyZ2V0SWQAAAEYZ2V0QmFuRHVyYXRpb25MaWtlQXV0aG9yAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ51c2VyQmFuQWRkcmVzcwkArAICBQh0YXJnZXRJZAITX2FzX2F1dGhvcl9kdXJhdGlvbgAAARhnZXRCYW5EdXJhdGlvbkxpa2VWaWN0aW0BCHRhcmdldElkCQELdmFsdWVPckVsc2UCCQCaCAIFDnVzZXJCYW5BZGRyZXNzCQCsAgIFCHRhcmdldElkAhNfYXNfdmljdGltX2R1cmF0aW9uAAABDmdldEFkZHJlc3NCeUlkAQh0YXJnZXRJZAkAnQgCBRB1c2VyU3RvcmVBZGRyZXNzCQCsAgICC2FkZHJlc3Nfb2ZfBQh0YXJnZXRJZAEOZ2V0RnVkdEJhbGFuY2UBCHRhcmdldElkBAphZGRyZXNzU3RyCQEOZ2V0QWRkcmVzc0J5SWQBBQh0YXJnZXRJZAMJAQlpc0RlZmluZWQBBQphZGRyZXNzU3RyCQDwBwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFCmFkZHJlc3NTdHIFBGZ1ZHQAAAESZ2V0QXZhaWxhYmxlUmV3YXJkAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ1c2VyUmV3YXJkc0FkZHJlc3MJAKwCAgUIdGFyZ2V0SWQCCl9hdmFpbGFibGUAAAETZ2V0U2VudEZ1ZHRGb3JMaWtlcwEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdXNlclJld2FyZHNBZGRyZXNzCQCsAgICFWZ1ZHRfc2VuZGVkX2xpa2VzX29mXwUIdGFyZ2V0SWQAAAEVZ2V0U2VudEZ1ZHRGb3JEaXNpa2VzAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ1c2VyUmV3YXJkc0FkZHJlc3MJAKwCAgIYZnVkdF9zZW5kZWRfZGlzbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARFnZXRTZW50RnVkdEZvckJhbgEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdXNlckJhbkFkZHJlc3MJAKwCAgUIdGFyZ2V0SWQCD19hc19hdXRob3JfZnVkdAAAARRnZXRCYWRGdWR0Rm9yRGlzaWtlcwEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdXNlclJld2FyZHNBZGRyZXNzCQCsAgICEWZ1ZHRfZGlzbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARBnZXRCYWRGdWR0Rm9yQmFuAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ51c2VyQmFuQWRkcmVzcwkArAICBQh0YXJnZXRJZAIPX2FzX3ZpY3RpbV9mdWR0AAABDWdldFBlcmNlbnRhZ2UCAXABbgQEbmV3UAkAtgIBCQBrAwUBcAUFc2NhbGUAAQQEbmV3TgkAtgIBCQBrAwUBbgUFc2NhbGUAAQMJAAACCQBkAgUBcAUBbgAAAAAECnBlcmNlbnRhZ2UJALwCAwkAuAICCQC8AgMJALcCAgUEbmV3UAkAtgIBAIDRy1sJALYCAQUFc2NhbGUJALcCAgUEbmV3UAUEbmV3TgkAvAIDCQC5AgIJALYCAQCA8rpdCQEKc3FydEJpZ0ludAQJALcCAgkAvAIDCQC5AgIFBG5ld1AFBG5ld04JALYCAQABCQC3AgIFBG5ld1AFBG5ld04JALYCAQDA6OUtAAgACAUHQ0VJTElORwkAtgIBAAEJALcCAgUEbmV3UAUEbmV3TgkAtgIBBQVzY2FsZQkAtwICCQC2AgEAgMLXLwkAvAIDCQC2AgEAgKKXtwEJALYCAQUFc2NhbGUJALcCAgUEbmV3UAUEbmV3TgkAoAMBBQpwZXJjZW50YWdlAQxfZ2V0VXNlckluZm8BCHRhcmdldElkAwkBAiE9AgkAZAIJAGQCBQJ3MQUCdzIFAnczAGQJAAIBAgtiYWQgd2VpZ2h0cwQKbGlrZXNDb3VudAkBDWdldExpa2VzQ291bnQBBQh0YXJnZXRJZAQNZGlzbGlrZXNDb3VudAkBEGdldERpc2xpa2VzQ291bnQBBQh0YXJnZXRJZAQNYmFuTGlrZUF1dGhvcgkBGGdldEJhbkR1cmF0aW9uTGlrZUF1dGhvcgEFCHRhcmdldElkBA1iYW5MaWtlVmljdGltCQEYZ2V0QmFuRHVyYXRpb25MaWtlVmljdGltAQUIdGFyZ2V0SWQEDXJld2FyZHNBbW91bnQJARJnZXRBdmFpbGFibGVSZXdhcmQBBQh0YXJnZXRJZAQKZnVkdEFtb3VudAkAZAIJAGQCCQBkAgkAZAIFDXJld2FyZHNBbW91bnQJARNnZXRTZW50RnVkdEZvckxpa2VzAQUIdGFyZ2V0SWQJARVnZXRTZW50RnVkdEZvckRpc2lrZXMBBQh0YXJnZXRJZAkBEWdldFNlbnRGdWR0Rm9yQmFuAQUIdGFyZ2V0SWQJAQ5nZXRGdWR0QmFsYW5jZQEFCHRhcmdldElkBA1iYWRGdWR0QW1vdW50CQBkAgkBFGdldEJhZEZ1ZHRGb3JEaXNpa2VzAQUIdGFyZ2V0SWQJARBnZXRCYWRGdWR0Rm9yQmFuAQUIdGFyZ2V0SWQEBnJhdGluZwkAZAIJAGQCCQBrAwUCdzEJAQ1nZXRQZXJjZW50YWdlAgUKbGlrZXNDb3VudAUNZGlzbGlrZXNDb3VudABkCQBrAwUCdzIJAQ1nZXRQZXJjZW50YWdlAgUNYmFuTGlrZUF1dGhvcgUNYmFuTGlrZVZpY3RpbQBkCQBrAwUCdzMJAQ1nZXRQZXJjZW50YWdlAgUKZnVkdEFtb3VudAUNYmFkRnVkdEFtb3VudABkCQCUCgIFA25pbAkAmgoIBQZyYXRpbmcFCmxpa2VzQ291bnQFDWRpc2xpa2VzQ291bnQFDWJhbkxpa2VBdXRob3IFDWJhbkxpa2VWaWN0aW0FCmZ1ZHRBbW91bnQFDWJhZEZ1ZHRBbW91bnQFDXJld2FyZHNBbW91bnQCAWkBC2dldFVzZXJJbmZvAQh0YXJnZXRJZAQBcgkBDF9nZXRVc2VySW5mbwEFCHRhcmdldElkBQFyAWkBFGdldFVzZXJJbmZvQnlBZGRyZXNzAQphZGRyZXNzU3RyBAh0YXJnZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFEHVzZXJTdG9yZUFkZHJlc3MJAKwCAgIGaWRfb2ZfBQphZGRyZXNzU3RyAhFhZGRyZXNzIG5vdCBmb3VuZAQBcgkBDF9nZXRVc2VySW5mbwEFCHRhcmdldElkBQFyAOm8ErU=", "height": 4100861, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DqNRjjnY55F6yFFS72SGvSkHNjhsDvbLAd1uDtNa6EGo Next: 3257skMzdVbfQoEexDsBDuT2MGLciNkPbr8u8krduZdf Diff:
Old | New | Differences | |
---|---|---|---|
77 | 77 | let dislikesCount = getDislikesCount(targetId) | |
78 | 78 | let banLikeAuthor = getBanDurationLikeAuthor(targetId) | |
79 | 79 | let banLikeVictim = getBanDurationLikeVictim(targetId) | |
80 | - | let fudtAmount = (((getAvailableReward(targetId) + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) | |
80 | + | let rewardsAmount = getAvailableReward(targetId) | |
81 | + | let fudtAmount = ((((rewardsAmount + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) + getFudtBalance(targetId)) | |
81 | 82 | let badFudtAmount = (getBadFudtForDisikes(targetId) + getBadFudtForBan(targetId)) | |
82 | 83 | let rating = ((fraction(w1, getPercentage(likesCount, dislikesCount), 100) + fraction(w2, getPercentage(banLikeAuthor, banLikeVictim), 100)) + fraction(w3, getPercentage(fudtAmount, badFudtAmount), 100)) | |
83 | - | $Tuple2(nil, $ | |
84 | + | $Tuple2(nil, $Tuple8(rating, likesCount, dislikesCount, banLikeAuthor, banLikeVictim, fudtAmount, badFudtAmount, rewardsAmount)) | |
84 | 85 | } | |
85 | 86 | ||
86 | 87 |
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 | - | let fudtAmount = (((getAvailableReward(targetId) + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) | |
80 | + | let rewardsAmount = getAvailableReward(targetId) | |
81 | + | let fudtAmount = ((((rewardsAmount + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) + getFudtBalance(targetId)) | |
81 | 82 | let badFudtAmount = (getBadFudtForDisikes(targetId) + getBadFudtForBan(targetId)) | |
82 | 83 | let rating = ((fraction(w1, getPercentage(likesCount, dislikesCount), 100) + fraction(w2, getPercentage(banLikeAuthor, banLikeVictim), 100)) + fraction(w3, getPercentage(fudtAmount, badFudtAmount), 100)) | |
83 | - | $Tuple2(nil, $ | |
84 | + | $Tuple2(nil, $Tuple8(rating, likesCount, dislikesCount, banLikeAuthor, banLikeVictim, fudtAmount, badFudtAmount, rewardsAmount)) | |
84 | 85 | } | |
85 | 86 | ||
86 | 87 | ||
87 | 88 | @Callable(i) | |
88 | 89 | func getUserInfo (targetId) = { | |
89 | 90 | let r = _getUserInfo(targetId) | |
90 | 91 | r | |
91 | 92 | } | |
92 | 93 | ||
93 | 94 | ||
94 | 95 | ||
95 | 96 | @Callable(i) | |
96 | 97 | func getUserInfoByAddress (addressStr) = { | |
97 | 98 | let targetId = valueOrErrorMessage(getString(userStoreAddress, ("id_of_" + addressStr)), "address not found") | |
98 | 99 | let r = _getUserInfo(targetId) | |
99 | 100 | r | |
100 | 101 | } | |
101 | 102 | ||
102 | 103 |
github/deemru/w8io/6500d08 32.04 ms ◑