tx · 7Vc5Xg6YHSsJPUzJBbSmzGyVZEmxY8ua3a5L5Jko35Uh 3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X: -0.01000000 Waves 2024.03.27 17:17 [4102490] smart account 3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X > SELF 0.00000000 Waves
{ "type": 13, "id": "7Vc5Xg6YHSsJPUzJBbSmzGyVZEmxY8ua3a5L5Jko35Uh", "fee": 1000000, "feeAssetId": null, "timestamp": 1711549060666, "version": 2, "chainId": 87, "sender": "3P8ro9dBawKxR2rQPtSX4hVfc1yrUjjCz8X", "senderPublicKey": "EVAMa5pPNoDnd1p8GoMUWb4A6gjzDXg2tLK2Tu8mie3R", "proofs": [ "4ZGXiS6iQNymas8kFegTUk33BYC9uKh4Lsw7rLU34SWRT5nBnsgyBbwjeSd3acHmi3sFEkJFsMy3t3S9LbS2cRXx" ], "script": "base64:BgISCAISAwoBCBIDCgEIEgQKAggIFgAQdXNlclN0b3JlQWRkcmVzcwkBB0FkZHJlc3MBARoBV62ZbAPrIEyFOe9ELwe8cXPAyfNg0GUzfAAOdXNlckJhbkFkZHJlc3MJAQdBZGRyZXNzAQEaAVcUa2cEdYFNzJK/4Jvg+U+oeEnIPpU6a8YAEnVzZXJSZXdhcmRzQWRkcmVzcwkBB0FkZHJlc3MBARoBV2o4yTAlb0aZIFVpYfXCCi2qYWdAQxdwnAAEZnVkdAEgQHsMDzhOtNXIuUCwZgK73eR+3cH2sC4MYy5Hn0fVndwABXNjYWxlAIDC1y8AAncxCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8xAB4AAncyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8yABQAAnczCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCHdlaWdodF8zADIBDWdldExpa2VzQ291bnQBCHRhcmdldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEHVzZXJTdG9yZUFkZHJlc3MJAKwCAgIJbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARBnZXREaXNsaWtlc0NvdW50AQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRB1c2VyU3RvcmVBZGRyZXNzCQCsAgICDGRpc2xpa2VzX29mXwUIdGFyZ2V0SWQAAAEYZ2V0QmFuRHVyYXRpb25MaWtlQXV0aG9yAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ51c2VyQmFuQWRkcmVzcwkArAICBQh0YXJnZXRJZAIfX2FzX3NlbmRlcl9vZl9yZXN0cmljdF9kdXJhdGlvbgAAARhnZXRCYW5EdXJhdGlvbkxpa2VWaWN0aW0BCHRhcmdldElkCQELdmFsdWVPckVsc2UCCQCaCAIFDnVzZXJCYW5BZGRyZXNzCQCsAgIFCHRhcmdldElkAh9fYXNfdGFyZ2V0X29mX3Jlc3RyaWN0X2R1cmF0aW9uAAABDmdldEFkZHJlc3NCeUlkAQh0YXJnZXRJZAkAnQgCBRB1c2VyU3RvcmVBZGRyZXNzCQCsAgICC2FkZHJlc3Nfb2ZfBQh0YXJnZXRJZAEOZ2V0RnVkdEJhbGFuY2UBCHRhcmdldElkBAphZGRyZXNzU3RyCQEOZ2V0QWRkcmVzc0J5SWQBBQh0YXJnZXRJZAMJAQlpc0RlZmluZWQBBQphZGRyZXNzU3RyCQDwBwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFCmFkZHJlc3NTdHIFBGZ1ZHQAAAESZ2V0QXZhaWxhYmxlUmV3YXJkAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ1c2VyUmV3YXJkc0FkZHJlc3MJAKwCAgUIdGFyZ2V0SWQCCl9hdmFpbGFibGUAAAETZ2V0U2VudEZ1ZHRGb3JMaWtlcwEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdXNlclJld2FyZHNBZGRyZXNzCQCsAgICFWZ1ZHRfc2VuZGVkX2xpa2VzX29mXwUIdGFyZ2V0SWQAAAEVZ2V0U2VudEZ1ZHRGb3JEaXNpa2VzAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ1c2VyUmV3YXJkc0FkZHJlc3MJAKwCAgIYZnVkdF9zZW5kZWRfZGlzbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARFnZXRTZW50RnVkdEZvckJhbgEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdXNlckJhbkFkZHJlc3MJAKwCAgUIdGFyZ2V0SWQCG19hc19zZW5kZXJfb2ZfcmVzdHJpY3RfZnVkdAAAARRnZXRCYWRGdWR0Rm9yRGlzaWtlcwEIdGFyZ2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdXNlclJld2FyZHNBZGRyZXNzCQCsAgICEWZ1ZHRfZGlzbGlrZXNfb2ZfBQh0YXJnZXRJZAAAARBnZXRCYWRGdWR0Rm9yQmFuAQh0YXJnZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ51c2VyQmFuQWRkcmVzcwkArAICBQh0YXJnZXRJZAIbX2FzX3RhcmdldF9vZl9yZXN0cmljdF9mdWR0AAABDWdldFBlcmNlbnRhZ2UCAXABbgQEbmV3UAkAtgIBCQBrAwUBcAUFc2NhbGUAAQQEbmV3TgkAtgIBCQBrAwUBbgUFc2NhbGUAAQMJAAACCQBkAgUBcAUBbgAAAAAECnBlcmNlbnRhZ2UJALwCAwkAuAICCQC8AgMJALcCAgUEbmV3UAkAtgIBAIDRy1sJALYCAQUFc2NhbGUJALcCAgUEbmV3UAUEbmV3TgkAvAIDCQC5AgIJALYCAQCA8rpdCQEKc3FydEJpZ0ludAQJALcCAgkAvAIDCQC5AgIFBG5ld1AFBG5ld04JALYCAQABCQC3AgIFBG5ld1AFBG5ld04JALYCAQDA6OUtAAgACAUHQ0VJTElORwkAtgIBAAEJALcCAgUEbmV3UAUEbmV3TgkAtgIBBQVzY2FsZQkAtwICCQC2AgEAgMLXLwkAvAIDCQC2AgEAgKKXtwEJALYCAQUFc2NhbGUJALcCAgUEbmV3UAUEbmV3TgkAoAMBBQpwZXJjZW50YWdlAQxfZ2V0VXNlckluZm8BCHRhcmdldElkAwkBAiE9AgkAZAIJAGQCBQJ3MQUCdzIFAnczAGQJAAIBAgtiYWQgd2VpZ2h0cwQKbGlrZXNDb3VudAkBDWdldExpa2VzQ291bnQBBQh0YXJnZXRJZAQNZGlzbGlrZXNDb3VudAkBEGdldERpc2xpa2VzQ291bnQBBQh0YXJnZXRJZAQNYmFuTGlrZUF1dGhvcgkBGGdldEJhbkR1cmF0aW9uTGlrZUF1dGhvcgEFCHRhcmdldElkBA1iYW5MaWtlVmljdGltCQEYZ2V0QmFuRHVyYXRpb25MaWtlVmljdGltAQUIdGFyZ2V0SWQEDXJld2FyZHNBbW91bnQJARJnZXRBdmFpbGFibGVSZXdhcmQBBQh0YXJnZXRJZAQLZnVkdEJhbGFuY2UJAQ5nZXRGdWR0QmFsYW5jZQEFCHRhcmdldElkBApmdWR0QW1vdW50CQBkAgkAZAIJAGQCCQBkAgULZnVkdEJhbGFuY2UFDXJld2FyZHNBbW91bnQJARNnZXRTZW50RnVkdEZvckxpa2VzAQUIdGFyZ2V0SWQJARVnZXRTZW50RnVkdEZvckRpc2lrZXMBBQh0YXJnZXRJZAkBEWdldFNlbnRGdWR0Rm9yQmFuAQUIdGFyZ2V0SWQEDWJhZEZ1ZHRBbW91bnQJAGQCCQEUZ2V0QmFkRnVkdEZvckRpc2lrZXMBBQh0YXJnZXRJZAkBEGdldEJhZEZ1ZHRGb3JCYW4BBQh0YXJnZXRJZAQGcmF0aW5nCQBkAgkAZAIJAGsDBQJ3MQkBDWdldFBlcmNlbnRhZ2UCBQpsaWtlc0NvdW50BQ1kaXNsaWtlc0NvdW50AGQJAGsDBQJ3MgkBDWdldFBlcmNlbnRhZ2UCBQ1iYW5MaWtlQXV0aG9yBQ1iYW5MaWtlVmljdGltAGQJAGsDBQJ3MwkBDWdldFBlcmNlbnRhZ2UCCQBrAwUKZnVkdEFtb3VudAABBQVzY2FsZQkAawMFDWJhZEZ1ZHRBbW91bnQAAQUFc2NhbGUAZAkAmgoIBQZyYXRpbmcFCmxpa2VzQ291bnQFDWRpc2xpa2VzQ291bnQFDWJhbkxpa2VBdXRob3IFDWJhbkxpa2VWaWN0aW0JAGQCBQtmdWR0QmFsYW5jZQUNcmV3YXJkc0Ftb3VudAUNYmFkRnVkdEFtb3VudAUNcmV3YXJkc0Ftb3VudAMBaQELZ2V0VXNlckluZm8BCHRhcmdldElkBAFyCQEMX2dldFVzZXJJbmZvAQUIdGFyZ2V0SWQJAJQKAgUDbmlsBQFyAWkBFGdldFVzZXJJbmZvQnlBZGRyZXNzAQphZGRyZXNzU3RyBAh0YXJnZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFEHVzZXJTdG9yZUFkZHJlc3MJAKwCAgIGaWRfb2ZfBQphZGRyZXNzU3RyAhFhZGRyZXNzIG5vdCBmb3VuZAQBcgkBDF9nZXRVc2VySW5mbwEFCHRhcmdldElkCQCUCgIFA25pbAUBcgFpAQtjaGVja1JhdGluZwIHY2hhdElkMQdjaGF0SWQyBAdyYXRpbmcxCAkBDF9nZXRVc2VySW5mbwEFB2NoYXRJZDECXzEEB3JhdGluZzIICQEMX2dldFVzZXJJbmZvAQUHY2hhdElkMgJfMQkAlAoCBQNuaWwJAJQKAgUHcmF0aW5nMQUHcmF0aW5nMgBmxsTZ", "height": 4102490, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7V8XWQE6tE532i1sznXB6iRYPFjaAFT7aMrfXndjSEfQ Next: none Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let userStoreAddress = Address(base58' | |
4 | + | let userStoreAddress = Address(base58'3PHkoRNkhpnQQqr6RDx5qsn38M3raALSx6f') | |
5 | 5 | ||
6 | - | let userBanAddress = Address(base58' | |
6 | + | let userBanAddress = Address(base58'3P3nruXtJfDzD8bv7ZwosVXXMYxC5morrwX') | |
7 | 7 | ||
8 | 8 | let userRewardsAddress = Address(base58'3PBcYP8gLKJqoDCVt9oTWaFDCqUppWQr2cK') | |
9 | 9 | ||
23 | 23 | func getDislikesCount (targetId) = valueOrElse(getInteger(userStoreAddress, ("dislikes_of_" + targetId)), 0) | |
24 | 24 | ||
25 | 25 | ||
26 | - | func getBanDurationLikeAuthor (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
26 | + | func getBanDurationLikeAuthor (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_sender_of_restrict_duration")), 0) | |
27 | 27 | ||
28 | 28 | ||
29 | - | func getBanDurationLikeVictim (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
29 | + | func getBanDurationLikeVictim (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_target_of_restrict_duration")), 0) | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func getAddressById (targetId) = getString(userStoreAddress, ("address_of_" + targetId)) | |
49 | 49 | func getSentFudtForDisikes (targetId) = valueOrElse(getInteger(userRewardsAddress, ("fudt_sended_dislikes_of_" + targetId)), 0) | |
50 | 50 | ||
51 | 51 | ||
52 | - | func getSentFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
52 | + | func getSentFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_sender_of_restrict_fudt")), 0) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | func getBadFudtForDisikes (targetId) = valueOrElse(getInteger(userRewardsAddress, ("fudt_dislikes_of_" + targetId)), 0) | |
56 | 56 | ||
57 | 57 | ||
58 | - | func getBadFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
58 | + | func getBadFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_target_of_restrict_fudt")), 0) | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | func getPercentage (p,n) = { |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let userStoreAddress = Address(base58' | |
4 | + | let userStoreAddress = Address(base58'3PHkoRNkhpnQQqr6RDx5qsn38M3raALSx6f') | |
5 | 5 | ||
6 | - | let userBanAddress = Address(base58' | |
6 | + | let userBanAddress = Address(base58'3P3nruXtJfDzD8bv7ZwosVXXMYxC5morrwX') | |
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 | - | func getBanDurationLikeAuthor (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
26 | + | func getBanDurationLikeAuthor (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_sender_of_restrict_duration")), 0) | |
27 | 27 | ||
28 | 28 | ||
29 | - | func getBanDurationLikeVictim (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
29 | + | func getBanDurationLikeVictim (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_target_of_restrict_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 | - | func getSentFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
52 | + | func getSentFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_sender_of_restrict_fudt")), 0) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | func getBadFudtForDisikes (targetId) = valueOrElse(getInteger(userRewardsAddress, ("fudt_dislikes_of_" + targetId)), 0) | |
56 | 56 | ||
57 | 57 | ||
58 | - | func getBadFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_ | |
58 | + | func getBadFudtForBan (targetId) = valueOrElse(getInteger(userBanAddress, (targetId + "_as_target_of_restrict_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 fudtBalance = getFudtBalance(targetId) | |
82 | 82 | let fudtAmount = ((((fudtBalance + rewardsAmount) + getSentFudtForLikes(targetId)) + getSentFudtForDisikes(targetId)) + getSentFudtForBan(targetId)) | |
83 | 83 | let badFudtAmount = (getBadFudtForDisikes(targetId) + getBadFudtForBan(targetId)) | |
84 | 84 | 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)) | |
85 | 85 | $Tuple8(rating, likesCount, dislikesCount, banLikeAuthor, banLikeVictim, (fudtBalance + rewardsAmount), badFudtAmount, rewardsAmount) | |
86 | 86 | } | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | @Callable(i) | |
90 | 90 | func getUserInfo (targetId) = { | |
91 | 91 | let r = _getUserInfo(targetId) | |
92 | 92 | $Tuple2(nil, r) | |
93 | 93 | } | |
94 | 94 | ||
95 | 95 | ||
96 | 96 | ||
97 | 97 | @Callable(i) | |
98 | 98 | func getUserInfoByAddress (addressStr) = { | |
99 | 99 | let targetId = valueOrErrorMessage(getString(userStoreAddress, ("id_of_" + addressStr)), "address not found") | |
100 | 100 | let r = _getUserInfo(targetId) | |
101 | 101 | $Tuple2(nil, r) | |
102 | 102 | } | |
103 | 103 | ||
104 | 104 | ||
105 | 105 | ||
106 | 106 | @Callable(i) | |
107 | 107 | func checkRating (chatId1,chatId2) = { | |
108 | 108 | let rating1 = _getUserInfo(chatId1)._1 | |
109 | 109 | let rating2 = _getUserInfo(chatId2)._1 | |
110 | 110 | $Tuple2(nil, $Tuple2(rating1, rating2)) | |
111 | 111 | } | |
112 | 112 | ||
113 | 113 |
github/deemru/w8io/6500d08 43.08 ms ◑