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