tx · 6z9Cgr8TuTMgUjKTpFiE9G5FZTvs8NxdokNtxJLcx5xA 3MtC32eAy42jhwnHpfYCbUj11iUkXDQdYpt: -0.00400000 Waves 2022.11.18 18:23 [2322731] smart account 3MtC32eAy42jhwnHpfYCbUj11iUkXDQdYpt > SELF 0.00000000 Waves
{ "type": 13, "id": "6z9Cgr8TuTMgUjKTpFiE9G5FZTvs8NxdokNtxJLcx5xA", "fee": 400000, "feeAssetId": null, "timestamp": 1668784997814, "version": 1, "sender": "3MtC32eAy42jhwnHpfYCbUj11iUkXDQdYpt", "senderPublicKey": "3xUNfrYKuaZmnMzb6e9tKC4azGnvWZyLzeKdUgAeFFpV", "proofs": [ "tjhcpwcqUaCKBdmaKxCJvCdvFB361iujenhh1T7AYjRjSHePMYjJAyZC3Aab4rBNpf6A8qRWMBSATrLUx6XHSSM" ], "script": "base64:BgIVCAISAwoBCBIDCgEIEgcKBQgICAEBEwABUwICX18AA0RFQwDAhD0BDGdldEludE9yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQdhZGRyZXNzBQNrZXkJAKwCAgkArAICCQCsAgIJAKUIAQUHYWRkcmVzcwIBLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBDGdldFN0ck9yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAKwCAgkArAICCQCsAgIJAKUIAQUHYWRkcmVzcwIBLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBBmdldEludAMHYWRkcmVzcwNrZXkHZGVmYXVsdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkFB2RlZmF1bHQBBmdldFN0cgMHYWRkcmVzcwNrZXkHZGVmYXVsdAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQdhZGRyZXNzBQNrZXkFB2RlZmF1bHQBEmtleUNmZ1ByaWNlQXNzZXRJZAACFSVzJXNfX2NmZ19fcHJpY2VBc3NldAAGdXNkbklkCQDZBAEJAQZnZXRTdHIDBQR0aGlzCQESa2V5Q2ZnUHJpY2VBc3NldElkAAIsSGV6c2RRdVJEdHprc0FZVXk5N2dmaEt5N1oxTlcydVhZU0hBM2JncWVuTloBCmtleVRlYW1DYXABCHRlYW1Db2RlCQC5CQIJAMwIAgIYJXMlc19fdGVhbUNhcGl0YWxpemF0aW9uCQDMCAIFCHRlYW1Db2RlBQNuaWwFAVMBCmtleVRlYW1Ua24BCHRlYW1Db2RlCQC5CQIJAMwIAgIQJXMlc19fdGVhbVRva2VucwkAzAgCBQh0ZWFtQ29kZQUDbmlsBQFTAQprZXlUZWFtUm5kAQh0ZWFtQ29kZQkAuQkCCQDMCAICDyVzJXNfX3RlYW1Sb3VuZAkAzAgCBQh0ZWFtQ29kZQUDbmlsBQFTAQxrZXlUZWFtUmlza3MBCHRlYW1Db2RlCQC5CQIJAMwIAgIPJXMlc19fdGVhbVJpc2tzCQDMCAIFCHRlYW1Db2RlBQNuaWwFAVMBC2tleVVzZXJUZWFtAgR1c2VyCHRlYW1Db2RlCQC5CQIJAMwIAgIQJXMlcyVzX191c2VyVGVhbQkAzAgCBQh0ZWFtQ29kZQkAzAgCBQR1c2VyBQNuaWwFAVMBDWRhdGFUZWFtUmlza3MEBXJpc2sxBXJpc2syBXJpc2szBXJpc2s0CQC5CQIJAMwIAgIIJWQlZCVkJWQJAMwIAgUFcmlzazEJAMwIAgUFcmlzazIJAMwIAgUFcmlzazMJAMwIAgUFcmlzazQFA25pbAUBUwELcmVhZFRlYW1SbmQBCHRlYW1Db2RlCQEGZ2V0SW50AwUEdGhpcwkBCmtleVRlYW1SbmQBBQh0ZWFtQ29kZQABAQ9jaGVja1NlbGZTZW5kZXIBAWkDCQECIT0CBQR0aGlzCAUBaQZjYWxsZXIJAAIBAgtub3QgYWxsb3dlZAYBCWNhbGNSaXNrcwIFcm91bmQDcG10AwkAAAIFBXJvdW5kAAEJAJYKBAkAaQIFA3BtdAADCQBpAgUDcG10AAMJAGkCBQNwbXQAAwAAAwkAAAIFBXJvdW5kAAIJAJYKBAAACQBpAgUDcG10AAIJAGkCBQNwbXQAAgAAAwkAAAIFBXJvdW5kAAMJAJYKBAAAAAAFA3BtdAAACQCWCgQAAAAAAAAFA3BtdAETdXBkYXRlVGVhbVJpc2tPbkJ1eQIIdGVhbUNvZGUDcG10BAhyaXNrc0tleQkBDGtleVRlYW1SaXNrcwEFCHRlYW1Db2RlBAhyaXNrc1N0cgkBBmdldFN0cgMFBHRoaXMFCHJpc2tzS2V5CQENZGF0YVRlYW1SaXNrcwQCATACATACATACATAECHJpc2tzRGF0CQC1CQIFCHJpc2tzU3RyBQFTBAl0ZWFtUm91bmQJAQtyZWFkVGVhbVJuZAEFCHRlYW1Db2RlBAhwbHVzUmlzawkBCWNhbGNSaXNrcwIFCXRlYW1Sb3VuZAUDcG10BAVyaXNrMQkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHJpc2tzRGF0AAEIBQhwbHVzUmlzawJfMQQFcmlzazIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhyaXNrc0RhdAACCAUIcGx1c1Jpc2sCXzIEBXJpc2szCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcmlza3NEYXQAAwgFCHBsdXNSaXNrAl8zBAVyaXNrNAkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHJpc2tzRGF0AAQIBQhwbHVzUmlzawJfNAkBC1N0cmluZ0VudHJ5AgUIcmlza3NLZXkJAQ1kYXRhVGVhbVJpc2tzBAUFcmlzazEFBXJpc2syBQVyaXNrMwUFcmlzazQBFXVwZGF0ZVVzZXJTaGFyZUluVGVhbQQLdXNlckFkZHJlc3MIdGVhbUNvZGULdGVhbVRrbkRpZmYDcG10BANrZXkJAQtrZXlVc2VyVGVhbQIFC3VzZXJBZGRyZXNzBQh0ZWFtQ29kZQQEZGF0YQkAtQkCCQEGZ2V0U3RyAwUEdGhpcwUDa2V5AgolZCVkX18wX18wBQFTBA10ZWFtVGtuQW10TmV3CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQABBQt0ZWFtVGtuRGlmZgQNaW52ZXN0VXNkbk5ldwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGRhdGEAAgUDcG10CQELU3RyaW5nRW50cnkCBQNrZXkJALkJAgkAzAgCAgQlZCVkCQDMCAIFDXRlYW1Ua25BbXROZXcJAMwIAgUNaW52ZXN0VXNkbk5ldwUDbmlsBQFTAwFpAQRpbml0AQxwcmljZUFzc2V0SWQEBmNoZWNrcwkAzAgCCQEPY2hlY2tTZWxmU2VuZGVyAQUBaQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlDZmdQcmljZUFzc2V0SWQABQxwcmljZUFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdidXlUZWFtAQh0ZWFtQ29kZQQEdXNlcgkApQgBCAUBaQZjYWxsZXIEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZwbXRBbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCAUDcG10B2Fzc2V0SWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhUxIHBheW1lbnQgaXMgZXhwZWN0ZWQDCQECIT0CBQpwbXRBc3NldElkBQZ1c2RuSWQJAAIBAhhpbnZhbGlkIHBheW1lbnQgYXNzZXQgaWQEB3RlYW1DYXAJAQxnZXRJbnRPckZhaWwCBQR0aGlzCQEKa2V5VGVhbUNhcAEFCHRlYW1Db2RlBAd0ZWFtVGtuCQEMZ2V0SW50T3JGYWlsAgUEdGhpcwkBCmtleVRlYW1Ua24BBQh0ZWFtQ29kZQQFcHJpY2UDCQECIT0CBQd0ZWFtVGtuAAAJAGsDBQd0ZWFtQ2FwBQNERUMFB3RlYW1Ua24FA0RFQwQOdGVhbVRrbkZvclVzZXIJAGsDBQZwbXRBbXQFA0RFQwUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlUZWFtQ2FwAQUIdGVhbUNvZGUJAGQCBQd0ZWFtQ2FwBQZwbXRBbXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlUZWFtVGtuAQUIdGVhbUNvZGUJAGQCBQd0ZWFtVGtuBQ50ZWFtVGtuRm9yVXNlcgkAzAgCCQEVdXBkYXRlVXNlclNoYXJlSW5UZWFtBAUEdXNlcgUIdGVhbUNvZGUFDnRlYW1Ua25Gb3JVc2VyBQZwbXRBbXQJAMwIAgkBE3VwZGF0ZVRlYW1SaXNrT25CdXkCBQh0ZWFtQ29kZQUGcG10QW10BQNuaWwBaQEFc2NvcmUFBXJvdW5kDGhvbWVUZWFtQ29kZQxhd2F5VGVhbUNvZGUNaG9tZVRlYW1Hb2Fscw1hd2F5VGVhbUdvYWxzBQNuaWwAYyPMRA==", "chainId": 84, "height": 2322731, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2HihmDocLeyTiR7kShy6wCwEj4Ma5zHWuYAJBtp6FQiF Next: CHAkh6qCam3S3soooSMjRHdYEbMdNS4QFo9dKpHqs5Za Diff:
Old | New | Differences | |
---|---|---|---|
84 | 84 | func init (priceAssetId) = { | |
85 | 85 | let checks = [checkSelfSender(i)] | |
86 | 86 | if ((checks == checks)) | |
87 | - | then [StringEntry( | |
87 | + | then [StringEntry(keyCfgPriceAssetId(), priceAssetId)] | |
88 | 88 | else throw("Strict value is not equal to itself.") | |
89 | 89 | } | |
90 | 90 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let S = "__" | |
5 | 5 | ||
6 | 6 | let DEC = 1000000 | |
7 | 7 | ||
8 | 8 | func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), (((toString(address) + ".") + key) + " is not defined")) | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | func getStrOrFail (address,key) = valueOrErrorMessage(getString(address, key), (((toString(address) + ".") + key) + " is not defined")) | |
12 | 12 | ||
13 | 13 | ||
14 | 14 | func getInt (address,key,default) = valueOrElse(getInteger(address, key), default) | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func getStr (address,key,default) = valueOrElse(getString(address, key), default) | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func keyCfgPriceAssetId () = "%s%s__cfg__priceAsset" | |
21 | 21 | ||
22 | 22 | ||
23 | 23 | let usdnId = fromBase58String(getStr(this, keyCfgPriceAssetId(), "HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ")) | |
24 | 24 | ||
25 | 25 | func keyTeamCap (teamCode) = makeString(["%s%s__teamCapitalization", teamCode], S) | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func keyTeamTkn (teamCode) = makeString(["%s%s__teamTokens", teamCode], S) | |
29 | 29 | ||
30 | 30 | ||
31 | 31 | func keyTeamRnd (teamCode) = makeString(["%s%s__teamRound", teamCode], S) | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func keyTeamRisks (teamCode) = makeString(["%s%s__teamRisks", teamCode], S) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func keyUserTeam (user,teamCode) = makeString(["%s%s%s__userTeam", teamCode, user], S) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func dataTeamRisks (risk1,risk2,risk3,risk4) = makeString(["%d%d%d%d", risk1, risk2, risk3, risk4], S) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func readTeamRnd (teamCode) = getInt(this, keyTeamRnd(teamCode), 1) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func checkSelfSender (i) = if ((this != i.caller)) | |
47 | 47 | then throw("not allowed") | |
48 | 48 | else true | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func calcRisks (round,pmt) = if ((round == 1)) | |
52 | 52 | then $Tuple4((pmt / 3), (pmt / 3), (pmt / 3), 0) | |
53 | 53 | else if ((round == 2)) | |
54 | 54 | then $Tuple4(0, (pmt / 2), (pmt / 2), 0) | |
55 | 55 | else if ((round == 3)) | |
56 | 56 | then $Tuple4(0, 0, pmt, 0) | |
57 | 57 | else $Tuple4(0, 0, 0, pmt) | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func updateTeamRiskOnBuy (teamCode,pmt) = { | |
61 | 61 | let risksKey = keyTeamRisks(teamCode) | |
62 | 62 | let risksStr = getStr(this, risksKey, dataTeamRisks("0", "0", "0", "0")) | |
63 | 63 | let risksDat = split(risksStr, S) | |
64 | 64 | let teamRound = readTeamRnd(teamCode) | |
65 | 65 | let plusRisk = calcRisks(teamRound, pmt) | |
66 | 66 | let risk1 = toString((parseIntValue(risksDat[1]) + plusRisk._1)) | |
67 | 67 | let risk2 = toString((parseIntValue(risksDat[2]) + plusRisk._2)) | |
68 | 68 | let risk3 = toString((parseIntValue(risksDat[3]) + plusRisk._3)) | |
69 | 69 | let risk4 = toString((parseIntValue(risksDat[4]) + plusRisk._4)) | |
70 | 70 | StringEntry(risksKey, dataTeamRisks(risk1, risk2, risk3, risk4)) | |
71 | 71 | } | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func updateUserShareInTeam (userAddress,teamCode,teamTknDiff,pmt) = { | |
75 | 75 | let key = keyUserTeam(userAddress, teamCode) | |
76 | 76 | let data = split(getStr(this, key, "%d%d__0__0"), S) | |
77 | 77 | let teamTknAmtNew = toString((parseIntValue(data[1]) + teamTknDiff)) | |
78 | 78 | let investUsdnNew = toString((parseIntValue(data[2]) + pmt)) | |
79 | 79 | StringEntry(key, makeString(["%d%d", teamTknAmtNew, investUsdnNew], S)) | |
80 | 80 | } | |
81 | 81 | ||
82 | 82 | ||
83 | 83 | @Callable(i) | |
84 | 84 | func init (priceAssetId) = { | |
85 | 85 | let checks = [checkSelfSender(i)] | |
86 | 86 | if ((checks == checks)) | |
87 | - | then [StringEntry( | |
87 | + | then [StringEntry(keyCfgPriceAssetId(), priceAssetId)] | |
88 | 88 | else throw("Strict value is not equal to itself.") | |
89 | 89 | } | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | ||
93 | 93 | @Callable(i) | |
94 | 94 | func buyTeam (teamCode) = { | |
95 | 95 | let user = toString(i.caller) | |
96 | 96 | let pmt = i.payments[0] | |
97 | 97 | let pmtAmt = pmt.amount | |
98 | 98 | let pmtAssetId = pmt.assetId | |
99 | 99 | if ((size(i.payments) != 1)) | |
100 | 100 | then throw("1 payment is expected") | |
101 | 101 | else if ((pmtAssetId != usdnId)) | |
102 | 102 | then throw("invalid payment asset id") | |
103 | 103 | else { | |
104 | 104 | let teamCap = getIntOrFail(this, keyTeamCap(teamCode)) | |
105 | 105 | let teamTkn = getIntOrFail(this, keyTeamTkn(teamCode)) | |
106 | 106 | let price = if ((teamTkn != 0)) | |
107 | 107 | then fraction(teamCap, DEC, teamTkn) | |
108 | 108 | else DEC | |
109 | 109 | let teamTknForUser = fraction(pmtAmt, DEC, price) | |
110 | 110 | [IntegerEntry(keyTeamCap(teamCode), (teamCap + pmtAmt)), IntegerEntry(keyTeamTkn(teamCode), (teamTkn + teamTknForUser)), updateUserShareInTeam(user, teamCode, teamTknForUser, pmtAmt), updateTeamRiskOnBuy(teamCode, pmtAmt)] | |
111 | 111 | } | |
112 | 112 | } | |
113 | 113 | ||
114 | 114 | ||
115 | 115 | ||
116 | 116 | @Callable(i) | |
117 | 117 | func score (round,homeTeamCode,awayTeamCode,homeTeamGoals,awayTeamGoals) = nil | |
118 | 118 | ||
119 | 119 |
github/deemru/w8io/169f3d6 48.02 ms ◑![]()