tx · BkfyGK3pZkEeWk3LYDiZeTbQtcZqCtekwit6mzWuE4WK

3MyBtJnMg6n7m1sDczbrijVyosLnRh4FFbc:  -0.01000000 Waves

2022.05.25 13:47 [2067116] smart account 3MyBtJnMg6n7m1sDczbrijVyosLnRh4FFbc > SELF 0.00000000 Waves

{ "type": 13, "id": "BkfyGK3pZkEeWk3LYDiZeTbQtcZqCtekwit6mzWuE4WK", "fee": 1000000, "feeAssetId": null, "timestamp": 1653475679383, "version": 2, "chainId": 84, "sender": "3MyBtJnMg6n7m1sDczbrijVyosLnRh4FFbc", "senderPublicKey": "H3EzJ6fSm7jHKo92xYdNTXaaQYKj9z5q2DJFovRDLJpf", "proofs": [ "ubEjJCsJRCU93V5E8U6bn2ofXr1GphjB2cBucX9UjveaveJ4ZB3fGCCvn1kzr4P92tCGXSSZJUmhpVf42AQzjDo" ], "script": "base64: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", "height": 2067116, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6RABzX8ZBZnt2GEAkhKeJyjr5xuoutocqmmVhA3a5VSz Next: D1sBqEz4jSZqNar2sbrEN6Q5orehz8TFVYsYP9nHYJjt Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
6-let MULT6 = 1000000
7-
8-let MULT8 = 100000000
9-
10-let WAVESIDSTR = "WAVES"
11-
12-let WAVESID = fromBase58String(WAVESIDSTR)
13-
14-func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("Mandatory this." + key) + " is not defined"))
6+func keyControlAddress () = "%s%s__config__controlAddress"
157
168
17-func getStrOrElse (key,defaultVal) = valueOrElse(getString(this, key), defaultVal)
9+func keyRestAddress () = "%s%s__config__restAddress"
1810
1911
20-func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
12+func getStrOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
2113
2214
23-func getAddressOrFail (key) = valueOrErrorMessage(addressFromString(getStringOrFail(key)), (("Fail to convert this." + key) + " value into Address"))
15+func getAddressOrFail (key) = valueOrErrorMessage(addressFromString(getStrOrFail(key)), ("fail to parse address for this." + key))
2416
2517
26-func validateAddressOrFail (addressStr) = {
27- let address = valueOrErrorMessage(addressFromString(addressStr), ("fail to convert into address " + addressStr))
28- if ((0 > wavesBalance(address).available))
29- then throw()
30- else addressStr
18+func asString (val) = match val {
19+ case valStr: String =>
20+ valStr
21+ case _ =>
22+ throw("fail to cast into String")
23+}
24+
25+
26+func produceJson (strMap) = {
27+ let indexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
28+ let length = size(strMap)
29+ if (((length % 2) != 0))
30+ then throw("only even args size is accepeted")
31+ else if ((length > size(indexes)))
32+ then throw(("strMap length is greater then " + toString(size(indexes))))
33+ else {
34+ func produceJson (jsonAccum,nextIdx) = if (if (((nextIdx % 2) == 0))
35+ then (length >= (nextIdx + 1))
36+ else false)
37+ then (((((jsonAccum + "
38+\"") + strMap[nextIdx]) + "\": \"") + strMap[(nextIdx + 1)]) + "\",")
39+ else jsonAccum
40+
41+ let preJsonResult = {
42+ let $l = indexes
43+ let $s = size($l)
44+ let $acc0 = ""
45+ func $f0_1 ($a,$i) = if (($i >= $s))
46+ then $a
47+ else produceJson($a, $l[$i])
48+
49+ func $f0_2 ($a,$i) = if (($i >= $s))
50+ then $a
51+ else throw("List size exceeds 20")
52+
53+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
54+ }
55+ (("{" + dropRight(preJsonResult, 1)) + "}")
56+ }
3157 }
3258
3359
34-func keyNodeRegistry (address) = ("%s__" + address)
60+let controlAcc = getAddressOrFail(keyControlAddress())
3561
36-
37-func keyNodeRewardsTotals (address) = ("%s%s__totals__" + address)
38-
39-
40-func keyDepositAmount () = "%s%s__cfg__depositAmount"
41-
42-
43-func keyNeutrinoAddressStr () = "%s%s__cfg__neutrinoAddress"
44-
45-
46-func keyMasterNodeAddressStr () = "%s%s__cfg__mainNeutrinoNodeAddress"
47-
48-
49-func keyProtocolPartX6 () = "%s%s__cfg__protocolPartX6"
50-
51-
52-func keyBenificaryPartX6 () = "%s%s__cfg__benificaryPartX6"
53-
54-
55-func formatDepositRecord (txIdStr,depositAmount,remainingDepositAmount) = makeString(["%s%d%d%d%d", txIdStr, toString(lastBlock.height), toString(lastBlock.timestamp), toString(depositAmount), toString(remainingDepositAmount)], SEP)
56-
57-
58-func keyRewardHistory (nodeAddress,txId) = makeString(["%s%s%s", "history", toString(nodeAddress), toBase58String(txId)], SEP)
59-
60-
61-func dataRewardHistory (wavesAmountTotal,beneficiaryAmt,protocolAmt,protocolAmtPart1,protocolAmtPart2) = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(wavesAmountTotal), toString(beneficiaryAmt), toString(protocolAmt), toString(protocolAmtPart1), toString(protocolAmtPart2)], SEP)
62-
63-
64-func RewardHistoryEntry (nodeAddress,txId,minedAmt,beneficiaryAmt,protocolAmt,protocolAmt1,protocolAmt2) = StringEntry(keyRewardHistory(nodeAddress, txId), dataRewardHistory(minedAmt, beneficiaryAmt, protocolAmt, protocolAmt1, protocolAmt2))
65-
66-
67-func dataRewardTotals (minedAmt,beneficiaryAmt,protocolAmt,protocolAmtPart1,protocolAmtPart2) = makeString(["%d%d%d%d%d", toString(minedAmt), toString(beneficiaryAmt), toString(protocolAmt), toString(protocolAmtPart1), toString(protocolAmtPart2)], SEP)
68-
69-
70-func RewardTotalsEntry (miner,minedAmt,beneficiaryAmt,protocolAmt,protocolAmtPart1,protocolAmtPart2) = {
71- let nodeRewardsTotalsKEY = keyNodeRewardsTotals(toString(miner))
72- let nodeRewardsArray = split(getStrOrElse(nodeRewardsTotalsKEY, dataRewardTotals(0, 0, 0, 0, 0)), SEP)
73- let newMinedAmt = (parseIntValue(nodeRewardsArray[1]) + minedAmt)
74- let newBeneficiaryAmt = (parseIntValue(nodeRewardsArray[2]) + beneficiaryAmt)
75- let newProtocolAmt = (parseIntValue(nodeRewardsArray[3]) + protocolAmt)
76- let newProtocolAmtPart1 = (parseIntValue(nodeRewardsArray[4]) + protocolAmtPart1)
77- let newProtocolAmtPart2 = (parseIntValue(nodeRewardsArray[5]) + protocolAmtPart2)
78- StringEntry(nodeRewardsTotalsKEY, dataRewardTotals(newMinedAmt, newBeneficiaryAmt, newProtocolAmt, newProtocolAmtPart1, newProtocolAmtPart2))
79- }
80-
62+let restAcc = getAddressOrFail(keyRestAddress())
8163
8264 @Callable(i)
83-func constructor (depositAmount,neutrinoAddressStr,masterNodeAddressStr,protocolPartX6,benificaryPartX6) = if ((i.caller != this))
84- then throw("permissions denied")
85- else if ((0 > depositAmount))
86- then throw("depositAmount less then zero")
87- else if ((0 > protocolPartX6))
88- then throw("protocolPartX6 less then zero")
89- else if ((0 > benificaryPartX6))
90- then throw("benificaryPartX6 less then zero")
91- else if (((protocolPartX6 + benificaryPartX6) != MULT6))
92- then throw("parts sum must be 1")
93- else [IntegerEntry(keyDepositAmount(), depositAmount), StringEntry(keyNeutrinoAddressStr(), validateAddressOrFail(neutrinoAddressStr)), StringEntry(keyMasterNodeAddressStr(), validateAddressOrFail(masterNodeAddressStr)), IntegerEntry(keyProtocolPartX6(), protocolPartX6), IntegerEntry(keyBenificaryPartX6(), benificaryPartX6)]
65+func constructor (controlAddress58,restAddress58) = if ((i.caller != this))
66+ then throw("not authorized")
67+ else [StringEntry(keyControlAddress(), controlAddress58), StringEntry(keyRestAddress(), restAddress58)]
9468
9569
9670
9771 @Callable(i)
98-func wouldLikeToBeNeutrinoNode () = if ((size(i.payments) != 1))
99- then throw("exact 1 payment must be attached")
100- else if ((i.caller != i.originCaller))
101- then throw("dapp to dapp calls are not allowed")
102- else {
103- let pmt = i.payments[0]
104- let deposit = pmt.amount
105- let pmtAssetId = valueOrElse(pmt.assetId, WAVESID)
106- let expectedDepositAmount = getIntOrFail(keyDepositAmount())
107- let txId = toBase58String(i.transactionId)
108- let nodeAddress = toString(i.caller)
109- let nodeRegistryKEY = keyNodeRegistry(nodeAddress)
110- if ((pmtAssetId != WAVESID))
111- then throw("only Waves can be used for deposit")
112- else if ((deposit != expectedDepositAmount))
113- then throw((("exactly " + toString(expectedDepositAmount)) + " Wavelets are expected"))
114- else if ((getStrOrElse(nodeRegistryKEY, "") != ""))
115- then throw("your node already registered")
116- else [StringEntry(nodeRegistryKEY, formatDepositRecord(txId, deposit, deposit))]
117- }
72+func stakeNsbtPageREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
73+ let gnsbtInfo = asString(invoke(restAcc, "gnsbtInfoREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
74+ let swapInfo = asString(invoke(restAcc, "swapInfoREADONLY", [userAddressStrOpt], nil))
75+ $Tuple2(nil, produceJson(["gnsbtInfoREADONLY", gnsbtInfo, "swapInfoREADONLY", swapInfo]))
76+ }
11877
11978
12079
12180 @Callable(i)
122-func distibuteMinerReward (benificaryAddressStr) = if ((size(i.payments) != 1))
123- then throw("exact 1 payment must be attached")
124- else if ((i.caller != i.originCaller))
125- then throw("dapp to dapp calls are not allowed")
126- else {
127- let pmt = i.payments[0]
128- let minedAmt = pmt.amount
129- let pmtAssetId = valueOrElse(pmt.assetId, WAVESID)
130- if ((pmtAssetId != WAVESID))
131- then throw("only Waves can be used")
132- else {
133- let neutrinoAddress = getAddressOrFail(keyNeutrinoAddressStr())
134- let masterNodeAddress = getAddressOrFail(keyMasterNodeAddressStr())
135- let minerAddress = i.caller
136- let benificaryAddress = addressFromStringValue(benificaryAddressStr)
137- let protocolPart = getIntOrFail(keyProtocolPartX6())
138- let benificaryPart = getIntOrFail(keyBenificaryPartX6())
139- if ((wavesBalance(minerAddress).available != 0))
140- then throw("all Waves must be sent from Node")
141- else {
142- let benificaryAmt = fraction(minedAmt, benificaryPart, MULT6)
143- let protocolAmt = (minedAmt - benificaryAmt)
144- let protocolAmt1 = (protocolAmt / 2)
145- let protocolAmt2 = (protocolAmt - protocolAmt1)
146-[ScriptTransfer(benificaryAddress, benificaryAmt, unit), ScriptTransfer(neutrinoAddress, protocolAmt1, unit), ScriptTransfer(masterNodeAddress, protocolAmt2, unit), RewardHistoryEntry(minerAddress, i.transactionId, minedAmt, benificaryAmt, protocolAmt, protocolAmt1, protocolAmt2), RewardTotalsEntry(minerAddress, minedAmt, benificaryAmt, protocolAmt, protocolAmt1, protocolAmt2)]
147- }
148- }
149- }
81+func buyNsbtPageREADONLY (userAddressStrOpt) = {
82+ let gnsbtInfo = asString(invoke(restAcc, "gnsbtInfoREADONLY", [userAddressStrOpt, 0], nil))
83+ let neutrinoStats = asString(invoke(restAcc, "neutrinoStatsREADONLY", nil, nil))
84+ $Tuple2(nil, produceJson(["gnsbtInfoREADONLY", gnsbtInfo, "neutrinoStatsREADONLY", neutrinoStats]))
85+ }
15086
15187
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
6-let MULT6 = 1000000
7-
8-let MULT8 = 100000000
9-
10-let WAVESIDSTR = "WAVES"
11-
12-let WAVESID = fromBase58String(WAVESIDSTR)
13-
14-func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (("Mandatory this." + key) + " is not defined"))
6+func keyControlAddress () = "%s%s__config__controlAddress"
157
168
17-func getStrOrElse (key,defaultVal) = valueOrElse(getString(this, key), defaultVal)
9+func keyRestAddress () = "%s%s__config__restAddress"
1810
1911
20-func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
12+func getStrOrFail (key) = valueOrErrorMessage(getString(this, key), (("Mandatory this." + key) + " is not defined"))
2113
2214
23-func getAddressOrFail (key) = valueOrErrorMessage(addressFromString(getStringOrFail(key)), (("Fail to convert this." + key) + " value into Address"))
15+func getAddressOrFail (key) = valueOrErrorMessage(addressFromString(getStrOrFail(key)), ("fail to parse address for this." + key))
2416
2517
26-func validateAddressOrFail (addressStr) = {
27- let address = valueOrErrorMessage(addressFromString(addressStr), ("fail to convert into address " + addressStr))
28- if ((0 > wavesBalance(address).available))
29- then throw()
30- else addressStr
18+func asString (val) = match val {
19+ case valStr: String =>
20+ valStr
21+ case _ =>
22+ throw("fail to cast into String")
23+}
24+
25+
26+func produceJson (strMap) = {
27+ let indexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
28+ let length = size(strMap)
29+ if (((length % 2) != 0))
30+ then throw("only even args size is accepeted")
31+ else if ((length > size(indexes)))
32+ then throw(("strMap length is greater then " + toString(size(indexes))))
33+ else {
34+ func produceJson (jsonAccum,nextIdx) = if (if (((nextIdx % 2) == 0))
35+ then (length >= (nextIdx + 1))
36+ else false)
37+ then (((((jsonAccum + "
38+\"") + strMap[nextIdx]) + "\": \"") + strMap[(nextIdx + 1)]) + "\",")
39+ else jsonAccum
40+
41+ let preJsonResult = {
42+ let $l = indexes
43+ let $s = size($l)
44+ let $acc0 = ""
45+ func $f0_1 ($a,$i) = if (($i >= $s))
46+ then $a
47+ else produceJson($a, $l[$i])
48+
49+ func $f0_2 ($a,$i) = if (($i >= $s))
50+ then $a
51+ else throw("List size exceeds 20")
52+
53+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
54+ }
55+ (("{" + dropRight(preJsonResult, 1)) + "}")
56+ }
3157 }
3258
3359
34-func keyNodeRegistry (address) = ("%s__" + address)
60+let controlAcc = getAddressOrFail(keyControlAddress())
3561
36-
37-func keyNodeRewardsTotals (address) = ("%s%s__totals__" + address)
38-
39-
40-func keyDepositAmount () = "%s%s__cfg__depositAmount"
41-
42-
43-func keyNeutrinoAddressStr () = "%s%s__cfg__neutrinoAddress"
44-
45-
46-func keyMasterNodeAddressStr () = "%s%s__cfg__mainNeutrinoNodeAddress"
47-
48-
49-func keyProtocolPartX6 () = "%s%s__cfg__protocolPartX6"
50-
51-
52-func keyBenificaryPartX6 () = "%s%s__cfg__benificaryPartX6"
53-
54-
55-func formatDepositRecord (txIdStr,depositAmount,remainingDepositAmount) = makeString(["%s%d%d%d%d", txIdStr, toString(lastBlock.height), toString(lastBlock.timestamp), toString(depositAmount), toString(remainingDepositAmount)], SEP)
56-
57-
58-func keyRewardHistory (nodeAddress,txId) = makeString(["%s%s%s", "history", toString(nodeAddress), toBase58String(txId)], SEP)
59-
60-
61-func dataRewardHistory (wavesAmountTotal,beneficiaryAmt,protocolAmt,protocolAmtPart1,protocolAmtPart2) = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(wavesAmountTotal), toString(beneficiaryAmt), toString(protocolAmt), toString(protocolAmtPart1), toString(protocolAmtPart2)], SEP)
62-
63-
64-func RewardHistoryEntry (nodeAddress,txId,minedAmt,beneficiaryAmt,protocolAmt,protocolAmt1,protocolAmt2) = StringEntry(keyRewardHistory(nodeAddress, txId), dataRewardHistory(minedAmt, beneficiaryAmt, protocolAmt, protocolAmt1, protocolAmt2))
65-
66-
67-func dataRewardTotals (minedAmt,beneficiaryAmt,protocolAmt,protocolAmtPart1,protocolAmtPart2) = makeString(["%d%d%d%d%d", toString(minedAmt), toString(beneficiaryAmt), toString(protocolAmt), toString(protocolAmtPart1), toString(protocolAmtPart2)], SEP)
68-
69-
70-func RewardTotalsEntry (miner,minedAmt,beneficiaryAmt,protocolAmt,protocolAmtPart1,protocolAmtPart2) = {
71- let nodeRewardsTotalsKEY = keyNodeRewardsTotals(toString(miner))
72- let nodeRewardsArray = split(getStrOrElse(nodeRewardsTotalsKEY, dataRewardTotals(0, 0, 0, 0, 0)), SEP)
73- let newMinedAmt = (parseIntValue(nodeRewardsArray[1]) + minedAmt)
74- let newBeneficiaryAmt = (parseIntValue(nodeRewardsArray[2]) + beneficiaryAmt)
75- let newProtocolAmt = (parseIntValue(nodeRewardsArray[3]) + protocolAmt)
76- let newProtocolAmtPart1 = (parseIntValue(nodeRewardsArray[4]) + protocolAmtPart1)
77- let newProtocolAmtPart2 = (parseIntValue(nodeRewardsArray[5]) + protocolAmtPart2)
78- StringEntry(nodeRewardsTotalsKEY, dataRewardTotals(newMinedAmt, newBeneficiaryAmt, newProtocolAmt, newProtocolAmtPart1, newProtocolAmtPart2))
79- }
80-
62+let restAcc = getAddressOrFail(keyRestAddress())
8163
8264 @Callable(i)
83-func constructor (depositAmount,neutrinoAddressStr,masterNodeAddressStr,protocolPartX6,benificaryPartX6) = if ((i.caller != this))
84- then throw("permissions denied")
85- else if ((0 > depositAmount))
86- then throw("depositAmount less then zero")
87- else if ((0 > protocolPartX6))
88- then throw("protocolPartX6 less then zero")
89- else if ((0 > benificaryPartX6))
90- then throw("benificaryPartX6 less then zero")
91- else if (((protocolPartX6 + benificaryPartX6) != MULT6))
92- then throw("parts sum must be 1")
93- else [IntegerEntry(keyDepositAmount(), depositAmount), StringEntry(keyNeutrinoAddressStr(), validateAddressOrFail(neutrinoAddressStr)), StringEntry(keyMasterNodeAddressStr(), validateAddressOrFail(masterNodeAddressStr)), IntegerEntry(keyProtocolPartX6(), protocolPartX6), IntegerEntry(keyBenificaryPartX6(), benificaryPartX6)]
65+func constructor (controlAddress58,restAddress58) = if ((i.caller != this))
66+ then throw("not authorized")
67+ else [StringEntry(keyControlAddress(), controlAddress58), StringEntry(keyRestAddress(), restAddress58)]
9468
9569
9670
9771 @Callable(i)
98-func wouldLikeToBeNeutrinoNode () = if ((size(i.payments) != 1))
99- then throw("exact 1 payment must be attached")
100- else if ((i.caller != i.originCaller))
101- then throw("dapp to dapp calls are not allowed")
102- else {
103- let pmt = i.payments[0]
104- let deposit = pmt.amount
105- let pmtAssetId = valueOrElse(pmt.assetId, WAVESID)
106- let expectedDepositAmount = getIntOrFail(keyDepositAmount())
107- let txId = toBase58String(i.transactionId)
108- let nodeAddress = toString(i.caller)
109- let nodeRegistryKEY = keyNodeRegistry(nodeAddress)
110- if ((pmtAssetId != WAVESID))
111- then throw("only Waves can be used for deposit")
112- else if ((deposit != expectedDepositAmount))
113- then throw((("exactly " + toString(expectedDepositAmount)) + " Wavelets are expected"))
114- else if ((getStrOrElse(nodeRegistryKEY, "") != ""))
115- then throw("your node already registered")
116- else [StringEntry(nodeRegistryKEY, formatDepositRecord(txId, deposit, deposit))]
117- }
72+func stakeNsbtPageREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
73+ let gnsbtInfo = asString(invoke(restAcc, "gnsbtInfoREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
74+ let swapInfo = asString(invoke(restAcc, "swapInfoREADONLY", [userAddressStrOpt], nil))
75+ $Tuple2(nil, produceJson(["gnsbtInfoREADONLY", gnsbtInfo, "swapInfoREADONLY", swapInfo]))
76+ }
11877
11978
12079
12180 @Callable(i)
122-func distibuteMinerReward (benificaryAddressStr) = if ((size(i.payments) != 1))
123- then throw("exact 1 payment must be attached")
124- else if ((i.caller != i.originCaller))
125- then throw("dapp to dapp calls are not allowed")
126- else {
127- let pmt = i.payments[0]
128- let minedAmt = pmt.amount
129- let pmtAssetId = valueOrElse(pmt.assetId, WAVESID)
130- if ((pmtAssetId != WAVESID))
131- then throw("only Waves can be used")
132- else {
133- let neutrinoAddress = getAddressOrFail(keyNeutrinoAddressStr())
134- let masterNodeAddress = getAddressOrFail(keyMasterNodeAddressStr())
135- let minerAddress = i.caller
136- let benificaryAddress = addressFromStringValue(benificaryAddressStr)
137- let protocolPart = getIntOrFail(keyProtocolPartX6())
138- let benificaryPart = getIntOrFail(keyBenificaryPartX6())
139- if ((wavesBalance(minerAddress).available != 0))
140- then throw("all Waves must be sent from Node")
141- else {
142- let benificaryAmt = fraction(minedAmt, benificaryPart, MULT6)
143- let protocolAmt = (minedAmt - benificaryAmt)
144- let protocolAmt1 = (protocolAmt / 2)
145- let protocolAmt2 = (protocolAmt - protocolAmt1)
146-[ScriptTransfer(benificaryAddress, benificaryAmt, unit), ScriptTransfer(neutrinoAddress, protocolAmt1, unit), ScriptTransfer(masterNodeAddress, protocolAmt2, unit), RewardHistoryEntry(minerAddress, i.transactionId, minedAmt, benificaryAmt, protocolAmt, protocolAmt1, protocolAmt2), RewardTotalsEntry(minerAddress, minedAmt, benificaryAmt, protocolAmt, protocolAmt1, protocolAmt2)]
147- }
148- }
149- }
81+func buyNsbtPageREADONLY (userAddressStrOpt) = {
82+ let gnsbtInfo = asString(invoke(restAcc, "gnsbtInfoREADONLY", [userAddressStrOpt, 0], nil))
83+ let neutrinoStats = asString(invoke(restAcc, "neutrinoStatsREADONLY", nil, nil))
84+ $Tuple2(nil, produceJson(["gnsbtInfoREADONLY", gnsbtInfo, "neutrinoStatsREADONLY", neutrinoStats]))
85+ }
15086
15187

github/deemru/w8io/873ac7e 
43.41 ms