tx · Cy3hdSkUx6YmxG5dz5XdSYPLpyEd6bHuZtm9A481kpf7

3MvZpvvbmovEt3pvdDZKvhKRjjQxdbUD6Tv:  -0.02500000 Waves

2022.11.02 21:11 [2299831] smart account 3MvZpvvbmovEt3pvdDZKvhKRjjQxdbUD6Tv > SELF 0.00000000 Waves

{ "type": 13, "id": "Cy3hdSkUx6YmxG5dz5XdSYPLpyEd6bHuZtm9A481kpf7", "fee": 2500000, "feeAssetId": null, "timestamp": 1667412702348, "version": 1, "sender": "3MvZpvvbmovEt3pvdDZKvhKRjjQxdbUD6Tv", "senderPublicKey": "39YkRD2qWXTcdNBr4CbDnm8g8SAB2FKVaDeGYahcFHHx", "proofs": [ "3EG7pHEubfavqGxh8ZqMFvUDisEgc8t9hfT11zApTvVXuw6b9uhgovBuKUbKfoqvekwesAqiwSoBw47YVKyFyf7n" ], "script": "base64:AAIFAAAAAAAADkcIAhIJCgcBAQEBAQgBEgASBAoCCAgSBAoCCAgSBAoCCAgSAwoBCBIAIg9nZXRTdHJpbmdPckZhaWwiA2tleSIDU0VQIghCVUZTQ0FMRSIGc2NhbGU4Igh0aHJvd0VyciIDbXNnIh1jb252ZXJ0UHJpY2VBc3NldEludG9JZG9Bc3NldCIQcHJpY2VBc3NldEFtb3VudCIOcHJpY2VBc3NldE1VTFQiBXByaWNlIglwcmljZU1VTFQiDGlkb0Fzc2V0TVVMVCIPYlByaWNlQXNzZXRNVUxUIg1iSWRvQXNzZXRNVUxUIg5iUHJpY2VBc3NldEJVRiIPYkFtb3VudEFzc2V0QlVGIg5JZHhDZmdJZG9TdGFydCIRSWR4Q2ZnSWRvRHVyYXRpb24iEElkeENmZ0NsYWltU3RhcnQiE0lkeENmZ0NsYWltRHVyYXRpb24iC0lkeENmZ1ByaWNlIg9JZHhDZmdQcmljZU11bHQiEElkeENmZ0lkb0Fzc2V0SWQiEklkeENmZ0lkb0Fzc2V0TXVsdCISSWR4Q2ZnUHJpY2VBc3NldElkIhRJZHhDZmdQcmljZUFzc2V0TXVsdCIVSWR4Q2ZnTWluSW52ZXN0QW1vdW50Ig1mcm9tYXRDb25maWdTIghpZG9TdGFydCILaWRvRHVyYXRpb24iCmNsYWltU3RhcnQiDWNsYWltRHVyYXRpb24iCXByaWNlTXVsdCIMaWRvQXNzZXRJZDU4IgxpZG9Bc3NldE11bHQiDnByaWNlQXNzZXRJZDU4Ig5wcmljZUFzc2V0TXVsdCIPbWluSW52ZXN0QW1vdW50IhN0b3RhbElkb0Fzc2V0VG9TZWxsIgxmcm9tYXRDb25maWciEUlkeEludlRvdGFsQW1vdW50IhVJZHhJbnZSZW1haW5pbmdBbW91bnQiHUlkeEludkNsYWltZWRQcmljZUFzc2V0QW1vdW50IhtJZHhJbnZDbGFpbWVkSWRvQXNzZXRBbW91bnQiF0lkeEludkxhc3RDbGFpbWVkSGVpZ2h0Ig9mb3JtYXRJbnZlc3RvclMiC3RvdGFsQW1vdW50Ig9yZW1haW5pbmdBbW91bnQiF2NsYWltZWRQcmljZUFzc2V0QW1vdW50IhVjbGFpbWVkSWRvQXNzZXRBbW91bnQiEWxhc3RDbGFpbWVkSGVpZ2h0Ig5mb3JtYXRJbnZlc3RvciITZm9ybWF0SGlzdG9yeVJlY29yZCIOaWRvQXNzZXRBbW91bnQiCWtleUNvbmZpZyILa2V5SW52ZXN0b3IiC3VzZXJBZGRyZXNzIglrZXlUb3RhbHMiGWtleU9wZXJhdGlvbkhpc3RvcnlSZWNvcmQiBHR5cGUiBnR4SWQ1OCIUa2V5VVNETkNsYWltRGlzYWJsZWQiFWtleVVTRE5DbGFpbUVuZEhlaWdodCIPa2V5UGVyaW9kTGVuZ3RoIhBrZXlDdXJyZW50UGVyaW9kIhRrZXlQZXJpb2RTdGFydEhlaWdodCIJcGVyaW9kTnVtIhJrZXlQZXJpb2RFbmRIZWlnaHQiH2tleVVzZHRQcmljZUFzc2V0QWxsb3dhYmxlUmF0aW8iF2tleVRvdGFsUGVyaW9kQWxsb3dhbmNlIgdhc3NldElkIhZrZXlVc2VyUGVyaW9kQWxsb3dhbmNlIh5rZXlQZXJpb2RUb3RhbEF2YWlsYWJsZVRvQ2xhaW0iHWtleVBlcmlvZFVzZXJBdmFpbGFibGVUb0NsYWltIhtrZXlVc2R0UHJpY2VBc3NldFN0YWJsZVBvb2wiDmtleVVzZHRBc3NldElkIhRrZXlQcmljZUFzc2V0QmFsYW5jZSIHYWRkcmVzcyITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiD3JlYWRDb25maWdBcnJheSIjcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0QnlDdXN0b21LZXkiCWN1c3RvbUtleSIYcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0IhpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdCIXcmVhZEludmVzdG9yQXJyYXlPckZhaWwiFUlkeERpZmZUb3RhbEluY3JlbWVudCIkSWR4RGlmZlJlbWFpbmluZ1ByaWNlQW1vdW50SW5jcmVtZW50IiJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50IiVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50IgtUb3RhbHNFbnRyeSIJb3JpZ0FycmF5Ig1pbmNyZW1lbnREaWZmIhRuZXdMYXN0Q2xhaW1lZEhlaWdodCIObmV3VG90YWxBbW91bnQiEm5ld1JlbWFpbmluZ0Ftb3VudCIabmV3Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQiGG5ld0NsYWltZWRJZG9Bc3NldEFtb3VudCIbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5IgR0eElkIhpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeSINaW50ZXJuYWxDbGFpbSIQY2xhaW1lZEFzc2V0SWQ1OCIIY2ZnQXJyYXkiCGNsYWltRW5kIgppZG9Bc3NldElkIgxwcmljZUFzc2V0SWQiDXVzZXJBZGRyZXNzNTgiD29yaWdJbnZlc3RBcnJheSIRaW52ZXN0VG90YWxBbW91bnQiGmludmVzdExhc3RDbGFpbWVkSGVpZ2h0VE1QIhdpbnZlc3RMYXN0Q2xhaW1lZEhlaWdodCIUbmV3Q2xhaW1QZXJpb2RIZWlnaHQiDmNsYWltaW5nQmxvY2tzIhhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQiFmNsYWltaW5nSWRvQXNzZXRBbW91bnQiBmlzVVNETiITaXNVU0ROQ2xhaW1EaXNhYmxlZCIQaXNVU0ROQ2xhaW1FbmRlZCIHJG1hdGNoMCIDZW5kIgZjaGVja3MiD2ludGVybmFsQ2xhaW1WMiIJb3V0QW1vdW50Ihl0b3RhbFVzZXJBdmFpbGFibGVUb0NsYWltIh50b3RhbFBlcmlvZFByaWNlQXNzZXRBbGxvd2FuY2UiHXVzZXJQZXJpb2RQcmljZUFzc2V0QWxsb3dhbmNlIgxwZXJpb2RMZW5ndGgiDWN1cnJlbnRQZXJpb2QiDSR0MDExOTQ3MTI4NjUiFWxhc3RQZXJpb2RTdGFydEhlaWdodCITbGFzdFBlcmlvZEVuZEhlaWdodCINJHQwMTIyMTUxMjU5NyIUdXBkYXRlZEN1cnJlbnRQZXJpb2QiC3BlcmlvZFN0YXJ0IglwZXJpb2RFbmQiG3BlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIacGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iEXByaWNlQXNzZXRCYWxhbmNlIhlwZXJpb2RNaW5BdmFpbGFibGVUb0NsYWltIhx1c2R0UHJpY2VBc3NldEFsbG93YWJsZVJhdGlvIhtwdXRPbmVUa25WMlByaWNlQXNzZXRBbW91bnQiDSR0MDEzNjIwMTM4NzMiAUAiBWJvbnVzIglmZWVBbW91bnQiCGxwQW1vdW50Igt1c2R0QXNzZXRJZCINJHQwMTM5MzUxNDE1MyIUZ2V0T25lVGtuVjJGZWVBbW91bnQiCnVzZHRBbW91bnQiGmN1cnJlbnRVc2R0UHJpY2VBc3NldFJhdGlvIhNlbmRQZXJpb2RCbG9ja3NMZWZ0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayIGaWRvRW5kIgNwbXQiDGlkb0Fzc2V0SW5mbyIOcHJpY2VBc3NldEluZm8iD29yaWdUb3RhbHNBcnJheSIKdG90YWxzRGlmZiIObWluSXZlc3RBbW91bnQiCnBtdEFzc2V0SWQiCXBtdEFtb3VudCIRb3JpZ0ludmVzdG9yQXJyYXkiE25ld1ByaWNlVG90YWxBbW91bnQiFnJlcXVpcmVkSWRvQXNzZXRBbW91bnQiD2NhbGxlckFkZHJlc3M1OCIQY2xhaW1SZXN1bHRUdXBsZSIKb3V0QXNzZXRJZCIaY2xhaW1lZFByaWNlQW1vdW50RnJvbURpZmYiHWNsYWltZWRJZG9Bc3NldEFtb3VudEZyb21EaWZmIgdlbnRyaWVzIg0kdDAxOTgwOTIwMjUzIiJ1cGRhdGVkUGVyaW9kVG90YWxBdmFpbGFibGVUb0NsYWltIiF1cGRhdGVkUGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iGHVwZGF0ZWRQcmljZUFzc2V0QmFsYW5jZSIVYXZhaWxhYmxlVG9DbGFpbUFycmF5IhthdmFpbGFibGVQcmljZUFtb3VudFRvQ2xhaW0iGWF2YWlsYWJsZUlkb0Ftb3VudFRvQ2xhaW0iDSR0MDI2NDg2MjY4OTgiFmN1cnJlbnRQZXJpb2RFbmRIZWlnaHQiDHJlc3VsdFN0cmluZyIMcGVyaW9kTGVuZ2h0IhN1c2VyUGVyaW9kQWxsb3dhbmNlIhR0b3RhbFBlcmlvZEFsbG93YW5jZSIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVj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", "chainId": 84, "height": 2299831, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 52PxxDhS39AfWmJC3nB4ZjYx541kTmwi7bEfBwrxN2wg Next: 59ScimVV9rdyddhpeKirTdauibTBLhEQFL2usea7BG5p Diff:
OldNewDifferences
439439 let periodEnd = $t01980920253._10
440440 let checks = [if ((periodMinAvailableToClaim > 0))
441441 then true
442- else throwErr("nothing to claim"), if ((periodUserAvailableToClaim > 0))
442+ else throwErr(makeString(["nothing to claim", toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(periodUserAvailableToClaim), toString(totalUserAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft), toString(updatedCurrentPeriod), toString(periodStart), toString(periodEnd)], SEP)), if ((periodUserAvailableToClaim > 0))
443443 then true
444444 else throwErr("unavailable to claim because user period allowance reached"), if ((periodTotalAvailableToClaim > 0))
445445 then true
497497 let availableIdoAmountToClaim = availableToClaimArray[1]
498498 let cfgArray = readConfigArray()
499499 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
500- let $t02602626438 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
501- let periodMinAvailableToClaim = $t02602626438._1
502- let periodTotalAvailableToClaim = $t02602626438._2
503- let periodUserAvailableToClaim = $t02602626438._3
504- let totalUserAvailableToClaim = $t02602626438._4
505- let usdtPriceAssetAllowableRatio = $t02602626438._5
506- let currentUsdtPriceAssetRatio = $t02602626438._6
507- let endPeriodBlocksLeft = $t02602626438._7
508- let updatedCurrentPeriod = $t02602626438._8
509- let periodStart = $t02602626438._9
510- let periodEnd = $t02602626438._10
500+ let $t02648626898 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
501+ let periodMinAvailableToClaim = $t02648626898._1
502+ let periodTotalAvailableToClaim = $t02648626898._2
503+ let periodUserAvailableToClaim = $t02648626898._3
504+ let totalUserAvailableToClaim = $t02648626898._4
505+ let usdtPriceAssetAllowableRatio = $t02648626898._5
506+ let currentUsdtPriceAssetRatio = $t02648626898._6
507+ let endPeriodBlocksLeft = $t02648626898._7
508+ let updatedCurrentPeriod = $t02648626898._8
509+ let periodStart = $t02648626898._9
510+ let periodEnd = $t02648626898._10
511511 let currentPeriodEndHeight = value(getInteger(keyPeriodEndHeight(updatedCurrentPeriod)))
512512 let resultString = if ((height > currentPeriodEndHeight))
513513 then {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
55
66
77 let SEP = "__"
88
99 let BUFSCALE = toBigInt(1000000000000000000)
1010
1111 let scale8 = 100000000
1212
1313 func throwErr (msg) = throw(makeString(["ido.ride:", msg], " "))
1414
1515
1616 func convertPriceAssetIntoIdoAsset (priceAssetAmount,priceAssetMULT,price,priceMULT,idoAssetMULT) = {
1717 let bPriceAssetMULT = toBigInt(priceAssetMULT)
1818 let bIdoAssetMULT = toBigInt(idoAssetMULT)
1919 let bPriceAssetBUF = fraction(toBigInt(priceAssetAmount), BUFSCALE, bPriceAssetMULT)
2020 let bAmountAssetBUF = fraction(bPriceAssetBUF, toBigInt(priceMULT), toBigInt(price))
2121 toInt(fraction(bAmountAssetBUF, toBigInt(idoAssetMULT), BUFSCALE))
2222 }
2323
2424
2525 let IdxCfgIdoStart = 1
2626
2727 let IdxCfgIdoDuration = 2
2828
2929 let IdxCfgClaimStart = 3
3030
3131 let IdxCfgClaimDuration = 4
3232
3333 let IdxCfgPrice = 5
3434
3535 let IdxCfgPriceMult = 6
3636
3737 let IdxCfgIdoAssetId = 7
3838
3939 let IdxCfgIdoAssetMult = 8
4040
4141 let IdxCfgPriceAssetId = 9
4242
4343 let IdxCfgPriceAssetMult = 10
4444
4545 let IdxCfgMinInvestAmount = 11
4646
4747 func fromatConfigS (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount,totalIdoAssetToSell) = makeString(["%d%d%d%d%d%d%s%d%s%d%d%d", idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, totalIdoAssetToSell], SEP)
4848
4949
5050 func fromatConfig (idoStart,idoDuration,claimStart,claimDuration,price,priceMult,idoAssetId58,idoAssetMult,priceAssetId58,priceAssetMult,minInvestAmount,totalIdoAssetToSell) = fromatConfigS(toString(idoStart), toString(idoDuration), toString(claimStart), toString(claimDuration), toString(price), toString(priceMult), idoAssetId58, toString(idoAssetMult), priceAssetId58, toString(priceAssetMult), toString(minInvestAmount), toString(totalIdoAssetToSell))
5151
5252
5353 let IdxInvTotalAmount = 1
5454
5555 let IdxInvRemainingAmount = 2
5656
5757 let IdxInvClaimedPriceAssetAmount = 3
5858
5959 let IdxInvClaimedIdoAssetAmount = 4
6060
6161 let IdxInvLastClaimedHeight = 5
6262
6363 func formatInvestorS (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = makeString(["%d%d%d%d%d", totalAmount, remainingAmount, claimedPriceAssetAmount, claimedIdoAssetAmount, lastClaimedHeight], SEP)
6464
6565
6666 func formatInvestor (totalAmount,remainingAmount,claimedPriceAssetAmount,claimedIdoAssetAmount,lastClaimedHeight) = formatInvestorS(toString(totalAmount), toString(remainingAmount), toString(claimedPriceAssetAmount), toString(claimedIdoAssetAmount), toString(lastClaimedHeight))
6767
6868
6969 func formatHistoryRecord (priceAssetAmount,idoAssetAmount) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(priceAssetAmount), toString(idoAssetAmount)], SEP)
7070
7171
7272 func keyConfig () = "%s__config"
7373
7474
7575 func keyInvestor (userAddress) = ("%s__" + userAddress)
7676
7777
7878 func keyTotals () = "%s__totals"
7979
8080
8181 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
8282
8383
8484 func keyUSDNClaimDisabled () = "%s__usdnClaimDisabled"
8585
8686
8787 func keyUSDNClaimEndHeight () = "%s__usdnClaimEndHeight"
8888
8989
9090 func keyPeriodLength () = makeString(["%s", "periodLength"], SEP)
9191
9292
9393 func keyCurrentPeriod () = makeString(["%s", "currentPeriod"], SEP)
9494
9595
9696 func keyPeriodStartHeight (periodNum) = makeString(["%s%s", "periodStartHeight", toString(periodNum)], SEP)
9797
9898
9999 func keyPeriodEndHeight (periodNum) = makeString(["%s%s", "periodEndHeight", toString(periodNum)], SEP)
100100
101101
102102 func keyUsdtPriceAssetAllowableRatio () = makeString(["%s", "usdtPriceAssetAllowableRatio"], SEP)
103103
104104
105105 func keyTotalPeriodAllowance (assetId) = makeString(["%s%s", "totalPeriodAllowance", assetId], SEP)
106106
107107
108108 func keyUserPeriodAllowance (assetId) = makeString(["%s%s", "userPeriodAllowance", assetId], SEP)
109109
110110
111111 func keyPeriodTotalAvailableToClaim (assetId,periodNum) = makeString(["%s%s%s", "periodTotalAvailableToClaim", assetId, toString(periodNum)], SEP)
112112
113113
114114 func keyPeriodUserAvailableToClaim (assetId,periodNum,userAddress) = makeString(["%s%s%s%s", "periodUserAvailableToClaim", assetId, toString(periodNum), userAddress], SEP)
115115
116116
117117 func keyUsdtPriceAssetStablePool () = makeString(["%s", "usdtPriceAssetStablePool"], SEP)
118118
119119
120120 func keyUsdtAssetId () = makeString(["%s", "usdtAssetId"], SEP)
121121
122122
123123 func keyPriceAssetBalance (address) = makeString(["%s%s", "priceAssetBalance", address], SEP)
124124
125125
126126 func keyManagerPublicKey () = "%s__managerPublicKey"
127127
128128
129129 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
130130
131131
132132 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
133133
134134
135135 func readTotalsArrayOrDefaultByCustomKey (customKey) = split(valueOrElse(getString(customKey), formatInvestorS("0", "0", "0", "0", "0")), SEP)
136136
137137
138138 func readTotalsArrayOrDefault () = readTotalsArrayOrDefaultByCustomKey(keyTotals())
139139
140140
141141 func readInvestorArrayOrDefault (userAddress) = readTotalsArrayOrDefaultByCustomKey(keyInvestor(userAddress))
142142
143143
144144 func readInvestorArrayOrFail (userAddress) = split(getStringOrFail(keyInvestor(userAddress)), SEP)
145145
146146
147147 let IdxDiffTotalIncrement = 0
148148
149149 let IdxDiffRemainingPriceAmountIncrement = 1
150150
151151 let IdxDiffClaimedPriceAmountIncrement = 2
152152
153153 let IdxDiffClaimedIdoAssetAmountIncrement = 3
154154
155155 func TotalsEntry (key,origArray,incrementDiff,newLastClaimedHeight) = {
156156 let totalAmount = parseIntValue(origArray[IdxInvTotalAmount])
157157 let remainingAmount = parseIntValue(origArray[IdxInvRemainingAmount])
158158 let claimedPriceAssetAmount = parseIntValue(origArray[IdxInvClaimedPriceAssetAmount])
159159 let claimedIdoAssetAmount = parseIntValue(origArray[IdxInvClaimedIdoAssetAmount])
160160 let lastClaimedHeight = parseIntValue(origArray[IdxInvLastClaimedHeight])
161161 let newTotalAmount = (totalAmount + incrementDiff[IdxDiffTotalIncrement])
162162 let newRemainingAmount = (remainingAmount + incrementDiff[IdxDiffRemainingPriceAmountIncrement])
163163 let newClaimedPriceAssetAmount = (claimedPriceAssetAmount + incrementDiff[IdxDiffClaimedPriceAmountIncrement])
164164 let newClaimedIdoAssetAmount = (claimedIdoAssetAmount + incrementDiff[IdxDiffClaimedIdoAssetAmountIncrement])
165165 if ((0 > newRemainingAmount))
166166 then throw("invalid math")
167167 else StringEntry(key, formatInvestor(newTotalAmount, newRemainingAmount, newClaimedPriceAssetAmount, newClaimedIdoAssetAmount, newLastClaimedHeight))
168168 }
169169
170170
171171 func InvestOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("invest", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
172172
173173
174174 func ClaimOperationHistoryEntry (userAddress,priceAssetAmount,idoAssetAmount,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(priceAssetAmount, idoAssetAmount))
175175
176176
177177 func internalClaim (claimedAssetId58,userAddress,txId) = {
178178 let cfgArray = readConfigArray()
179179 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
180180 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
181181 let claimEnd = (claimStart + claimDuration)
182182 let price = parseIntValue(cfgArray[IdxCfgPrice])
183183 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
184184 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
185185 let idoAssetId = fromBase58String(idoAssetId58)
186186 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
187187 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
188188 let priceAssetId = fromBase58String(priceAssetId58)
189189 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
190190 let userAddress58 = toString(userAddress)
191191 let origInvestArray = readInvestorArrayOrFail(userAddress58)
192192 let investTotalAmount = parseIntValue(origInvestArray[IdxInvTotalAmount])
193193 let investLastClaimedHeightTMP = parseIntValue(origInvestArray[IdxInvLastClaimedHeight])
194194 let investLastClaimedHeight = if ((claimStart >= investLastClaimedHeightTMP))
195195 then claimStart
196196 else investLastClaimedHeightTMP
197197 let newClaimPeriodHeight = if ((height > claimEnd))
198198 then claimEnd
199199 else if ((claimStart > height))
200200 then claimStart
201201 else height
202202 let claimingBlocks = (newClaimPeriodHeight - investLastClaimedHeight)
203203 let claimingPriceAssetAmount = fraction(investTotalAmount, claimingBlocks, claimDuration)
204204 let claimingIdoAssetAmount = convertPriceAssetIntoIdoAsset(claimingPriceAssetAmount, priceAssetMult, price, priceMult, idoAssetMult)
205205 let isUSDN = (claimedAssetId58 == priceAssetId58)
206206 let isUSDNClaimDisabled = valueOrElse(getBoolean(keyUSDNClaimDisabled()), false)
207207 let isUSDNClaimEnded = match getInteger(keyUSDNClaimEndHeight()) {
208208 case end: Int =>
209209 (height > end)
210210 case _: Unit =>
211211 false
212212 case _ =>
213213 throw("Match error")
214214 }
215215 let checks = [if (!(if (isUSDN)
216216 then isUSDNClaimDisabled
217217 else false))
218218 then true
219219 else throw("USDN claim is disabled"), if (!(if (isUSDN)
220220 then isUSDNClaimEnded
221221 else false))
222222 then true
223223 else throw("USDN claim is ended")]
224224 if ((checks == checks))
225225 then if ((claimedAssetId58 == priceAssetId58))
226226 then $Tuple6([0, -(claimingPriceAssetAmount), claimingPriceAssetAmount, 0], claimingPriceAssetAmount, priceAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
227227 else if ((claimedAssetId58 == idoAssetId58))
228228 then $Tuple6([0, -(claimingPriceAssetAmount), 0, claimingIdoAssetAmount], claimingIdoAssetAmount, idoAssetId, origInvestArray, newClaimPeriodHeight, [claimingPriceAssetAmount, claimingIdoAssetAmount])
229229 else throw(("unsupported assetId: " + claimedAssetId58))
230230 else throw("Strict value is not equal to itself.")
231231 }
232232
233233
234234 func internalClaimV2 (priceAssetId58,userAddress58,outAmount,totalUserAvailableToClaim) = {
235235 let totalPeriodPriceAssetAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
236236 let userPeriodPriceAssetAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58)))
237237 let periodLength = value(getInteger(keyPeriodLength()))
238238 let currentPeriod = valueOrElse(getInteger(keyCurrentPeriod()), 0)
239239 let $t01194712865 = if ((currentPeriod > 0))
240240 then {
241241 let lastPeriodStartHeight = value(getInteger(keyPeriodStartHeight((currentPeriod - 1))))
242242 let lastPeriodEndHeight = value(getInteger(keyPeriodEndHeight((currentPeriod - 1))))
243243 let $t01221512597 = if ((height > lastPeriodEndHeight))
244244 then {
245245 let updatedCurrentPeriod = (currentPeriod + 1)
246246 let periodStart = (lastPeriodEndHeight + 1)
247247 let periodEnd = ((periodStart + periodLength) - 1)
248248 $Tuple3(updatedCurrentPeriod, periodStart, periodEnd)
249249 }
250250 else $Tuple3(currentPeriod, lastPeriodStartHeight, lastPeriodEndHeight)
251251 let updatedCurrentPeriod = $t01221512597._1
252252 let periodStart = $t01221512597._2
253253 let periodEnd = $t01221512597._3
254254 $Tuple3(updatedCurrentPeriod, periodStart, periodEnd)
255255 }
256256 else $Tuple3(currentPeriod, valueOrElse(getInteger(keyPeriodStartHeight(currentPeriod)), height), valueOrElse(getInteger(keyPeriodEndHeight(currentPeriod)), ((height + periodLength) - 1)))
257257 let updatedCurrentPeriod = $t01194712865._1
258258 let periodStart = $t01194712865._2
259259 let periodEnd = $t01194712865._3
260260 let periodTotalAvailableToClaim = valueOrElse(getInteger(keyPeriodTotalAvailableToClaim(priceAssetId58, updatedCurrentPeriod)), totalPeriodPriceAssetAllowance)
261261 let periodUserAvailableToClaim = valueOrElse(getInteger(keyPeriodUserAvailableToClaim(priceAssetId58, updatedCurrentPeriod, userAddress58)), userPeriodPriceAssetAllowance)
262262 let priceAssetBalance = valueOrElse(getInteger(keyPriceAssetBalance(userAddress58)), 0)
263263 let periodMinAvailableToClaim = min([(outAmount + priceAssetBalance), periodTotalAvailableToClaim, periodUserAvailableToClaim])
264264 let usdtPriceAssetAllowableRatio = value(getInteger(keyUsdtPriceAssetAllowableRatio()))
265265 let putOneTknV2PriceAssetAmount = scale8
266266 let $t01362013873 = {
267267 let @ = invoke(addressFromStringValue(value(getString(keyUsdtPriceAssetStablePool()))), "putOneTknV2WithoutTakeFeeREADONLY", [putOneTknV2PriceAssetAmount, priceAssetId58], nil)
268268 if ($isInstanceOf(@, "(Int, Int, Int)"))
269269 then @
270270 else throw("Couldn't cast Any to (Int, Int, Int)")
271271 }
272272 if (($t01362013873 == $t01362013873))
273273 then {
274274 let bonus = $t01362013873._3
275275 let feeAmount = $t01362013873._2
276276 let lpAmount = $t01362013873._1
277277 let usdtAssetId = value(getString(keyUsdtAssetId()))
278278 let $t01393514153 = {
279279 let @ = invoke(addressFromStringValue(value(getString(keyUsdtPriceAssetStablePool()))), "getOneTknV2READONLY", [usdtAssetId, lpAmount], nil)
280280 if ($isInstanceOf(@, "(Int, Int)"))
281281 then @
282282 else throw("Couldn't cast Any to (Int, Int)")
283283 }
284284 if (($t01393514153 == $t01393514153))
285285 then {
286286 let getOneTknV2FeeAmount = $t01393514153._2
287287 let usdtAmount = $t01393514153._1
288288 let currentUsdtPriceAssetRatio = fraction(usdtAmount, putOneTknV2PriceAssetAmount, scale8)
289289 let endPeriodBlocksLeft = (periodEnd - height)
290290 $Tuple10(periodMinAvailableToClaim, periodTotalAvailableToClaim, periodUserAvailableToClaim, totalUserAvailableToClaim, usdtPriceAssetAllowableRatio, currentUsdtPriceAssetRatio, endPeriodBlocksLeft, updatedCurrentPeriod, periodStart, periodEnd)
291291 }
292292 else throw("Strict value is not equal to itself.")
293293 }
294294 else throw("Strict value is not equal to itself.")
295295 }
296296
297297
298298 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
299299 case s: String =>
300300 fromBase58String(s)
301301 case _: Unit =>
302302 unit
303303 case _ =>
304304 throw("Match error")
305305 }
306306
307307
308308 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
309309 case s: String =>
310310 fromBase58String(s)
311311 case _: Unit =>
312312 unit
313313 case _ =>
314314 throw("Match error")
315315 }
316316
317317
318318 func mustManager (i) = {
319319 let pd = throw("Permission denied")
320320 match managerPublicKeyOrUnit() {
321321 case pk: ByteVector =>
322322 if ((i.callerPublicKey == pk))
323323 then true
324324 else pd
325325 case _: Unit =>
326326 if ((i.caller == this))
327327 then true
328328 else pd
329329 case _ =>
330330 throw("Match error")
331331 }
332332 }
333333
334334
335335 @Callable(i)
336336 func constructor (idoStart,idoDuration,claimStart,claimDuration,price,priceAssetId58,minInvestAmount) = {
337337 let priceMult = ((100 * 1000) * 1000)
338338 let idoEnd = (idoStart + idoDuration)
339339 if (isDefined(getString(keyConfig())))
340340 then throw("already initialized")
341341 else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(i.caller)))
342342 then throw("not authorized")
343343 else if ((size(i.payments) != 1))
344344 then throw("exactly 1 payment must be attached")
345345 else if ((idoEnd >= claimStart))
346346 then throw("claimStart must be greater than idoEnd")
347347 else {
348348 let pmt = value(i.payments[0])
349349 let idoAssetId = value(pmt.assetId)
350350 let idoAssetInfo = valueOrErrorMessage(assetInfo(idoAssetId), "fail to load ido asset info")
351351 let idoAssetId58 = toBase58String(idoAssetId)
352352 let idoAssetMult = pow(10, 0, idoAssetInfo.decimals, 0, 0, DOWN)
353353 let priceAssetId = fromBase58String(priceAssetId58)
354354 let priceAssetInfo = valueOrErrorMessage(assetInfo(priceAssetId), "fail to load price asset info")
355355 let priceAssetMult = pow(10, 0, priceAssetInfo.decimals, 0, 0, DOWN)
356356 let origTotalsArray = readTotalsArrayOrDefault()
357357 let totalsDiff = [0, 0, 0, 0]
358358 [StringEntry(keyConfig(), fromatConfig(idoStart, idoDuration, claimStart, claimDuration, price, priceMult, idoAssetId58, idoAssetMult, priceAssetId58, priceAssetMult, minInvestAmount, pmt.amount)), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart)]
359359 }
360360 }
361361
362362
363363
364364 @Callable(i)
365365 func invest () = {
366366 let cfgArray = readConfigArray()
367367 let idoStart = parseIntValue(cfgArray[IdxCfgIdoStart])
368368 let idoDuration = parseIntValue(cfgArray[IdxCfgIdoDuration])
369369 let idoEnd = (idoStart + idoDuration)
370370 let claimStart = parseIntValue(cfgArray[IdxCfgClaimStart])
371371 let claimDuration = parseIntValue(cfgArray[IdxCfgClaimDuration])
372372 let price = parseIntValue(cfgArray[IdxCfgPrice])
373373 let priceMult = parseIntValue(cfgArray[IdxCfgPriceMult])
374374 let idoAssetId58 = cfgArray[IdxCfgIdoAssetId]
375375 let idoAssetId = fromBase58String(idoAssetId58)
376376 let idoAssetMult = parseIntValue(cfgArray[IdxCfgIdoAssetMult])
377377 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
378378 let priceAssetId = fromBase58String(priceAssetId58)
379379 let priceAssetMult = parseIntValue(cfgArray[IdxCfgPriceAssetMult])
380380 let minIvestAmount = parseIntValue(cfgArray[IdxCfgMinInvestAmount])
381381 let userAddress = toString(i.caller)
382382 if ((idoStart > height))
383383 then throw("ido has not been started yet")
384384 else if ((height > idoEnd))
385385 then throw("ido has been already ended")
386386 else if ((size(i.payments) != 1))
387387 then throw("exactly 1 payment is expected")
388388 else {
389389 let pmt = value(i.payments[0])
390390 let pmtAssetId = value(pmt.assetId)
391391 let pmtAmount = pmt.amount
392392 if ((pmtAssetId != priceAssetId))
393393 then throw((("invalid payment asset id: " + toBase58String(pmtAssetId)) + " is expected"))
394394 else {
395395 let origInvestorArray = readInvestorArrayOrDefault(userAddress)
396396 let origTotalsArray = readTotalsArrayOrDefault()
397397 let newPriceTotalAmount = (parseIntValue(origTotalsArray[IdxInvTotalAmount]) + pmtAmount)
398398 let requiredIdoAssetAmount = (newPriceTotalAmount * 100)
399399 if ((requiredIdoAssetAmount > assetBalance(this, idoAssetId)))
400400 then throw("IDO asset has been - sold consider to use smaller payment")
401401 else {
402402 let totalsDiff = [pmtAmount, pmtAmount, 0, 0]
403403 [TotalsEntry(keyInvestor(userAddress), origInvestorArray, totalsDiff, claimStart), TotalsEntry(keyTotals(), origTotalsArray, totalsDiff, claimStart), InvestOperationHistoryEntry(userAddress, pmtAmount, 0, i.transactionId)]
404404 }
405405 }
406406 }
407407 }
408408
409409
410410
411411 @Callable(i)
412412 func claim (claimedAssetId58,userAddress58) = {
413413 let callerAddress58 = toString(i.caller)
414414 if ((userAddress58 != callerAddress58))
415415 then throw("not authorized")
416416 else {
417417 let cfgArray = readConfigArray()
418418 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
419419 let claimResultTuple = internalClaim(claimedAssetId58, i.caller, i.transactionId)
420420 let totalsDiff = claimResultTuple._1
421421 let outAmount = claimResultTuple._2
422422 let outAssetId = claimResultTuple._3
423423 let origInvestArray = claimResultTuple._4
424424 let newClaimPeriodHeight = claimResultTuple._5
425425 let claimedPriceAmountFromDiff = totalsDiff[IdxDiffClaimedPriceAmountIncrement]
426426 let claimedIdoAssetAmountFromDiff = totalsDiff[IdxDiffClaimedIdoAssetAmountIncrement]
427427 let entries = if ((claimedAssetId58 == priceAssetId58))
428428 then {
429429 let $t01980920253 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
430430 let periodMinAvailableToClaim = $t01980920253._1
431431 let periodTotalAvailableToClaim = $t01980920253._2
432432 let periodUserAvailableToClaim = $t01980920253._3
433433 let totalUserAvailableToClaim = $t01980920253._4
434434 let usdtPriceAssetAllowableRatio = $t01980920253._5
435435 let currentUsdtPriceAssetRatio = $t01980920253._6
436436 let endPeriodBlocksLeft = $t01980920253._7
437437 let updatedCurrentPeriod = $t01980920253._8
438438 let periodStart = $t01980920253._9
439439 let periodEnd = $t01980920253._10
440440 let checks = [if ((periodMinAvailableToClaim > 0))
441441 then true
442- else throwErr("nothing to claim"), if ((periodUserAvailableToClaim > 0))
442+ else throwErr(makeString(["nothing to claim", toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(periodUserAvailableToClaim), toString(totalUserAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft), toString(updatedCurrentPeriod), toString(periodStart), toString(periodEnd)], SEP)), if ((periodUserAvailableToClaim > 0))
443443 then true
444444 else throwErr("unavailable to claim because user period allowance reached"), if ((periodTotalAvailableToClaim > 0))
445445 then true
446446 else throwErr("unavailable to claim because total period allowance reached"), if ((usdtPriceAssetAllowableRatio > currentUsdtPriceAssetRatio))
447447 then true
448448 else throwErr("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio")]
449449 if ((checks == checks))
450450 then {
451451 let priceAssetBalance = valueOrElse(getInteger(keyPriceAssetBalance(userAddress58)), 0)
452452 let updatedPeriodTotalAvailableToClaim = (periodTotalAvailableToClaim - periodMinAvailableToClaim)
453453 let updatedPeriodUserAvailableToClaim = (periodUserAvailableToClaim - periodMinAvailableToClaim)
454454 let entries = if ((priceAssetBalance >= periodMinAvailableToClaim))
455455 then [ScriptTransfer(i.caller, periodMinAvailableToClaim, outAssetId), IntegerEntry(keyPriceAssetBalance(userAddress58), (priceAssetBalance - periodMinAvailableToClaim))]
456456 else {
457457 let updatedPriceAssetBalance = ((priceAssetBalance + outAmount) - periodMinAvailableToClaim)
458458 [ScriptTransfer(i.caller, periodMinAvailableToClaim, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), IntegerEntry(keyPriceAssetBalance(userAddress58), updatedPriceAssetBalance)]
459459 }
460460 $Tuple2(([IntegerEntry(keyCurrentPeriod(), updatedCurrentPeriod), IntegerEntry(keyPeriodStartHeight(updatedCurrentPeriod), periodStart), IntegerEntry(keyPeriodEndHeight(updatedCurrentPeriod), periodEnd), IntegerEntry(keyPeriodTotalAvailableToClaim(priceAssetId58, updatedCurrentPeriod), updatedPeriodTotalAvailableToClaim), IntegerEntry(keyPeriodUserAvailableToClaim(priceAssetId58, updatedCurrentPeriod, userAddress58), updatedPeriodUserAvailableToClaim), ClaimOperationHistoryEntry(userAddress58, periodMinAvailableToClaim, claimedIdoAssetAmountFromDiff, i.transactionId)] ++ entries), unit)
461461 }
462462 else throw("Strict value is not equal to itself.")
463463 }
464464 else $Tuple2([ScriptTransfer(i.caller, outAmount, outAssetId), TotalsEntry(keyInvestor(userAddress58), origInvestArray, totalsDiff, newClaimPeriodHeight), TotalsEntry(keyTotals(), readTotalsArrayOrDefault(), totalsDiff, newClaimPeriodHeight), ClaimOperationHistoryEntry(userAddress58, claimedPriceAmountFromDiff, claimedIdoAssetAmountFromDiff, i.transactionId)], unit)
465465 entries
466466 }
467467 }
468468
469469
470470
471471 @Callable(i)
472472 func claimREADONLY (claimedAssetId58,userAddress58) = {
473473 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
474474 let totalsDiff = claimResultTuple._1
475475 let outAmount = claimResultTuple._2
476476 let outAssetId = claimResultTuple._3
477477 let origInvestArray = claimResultTuple._4
478478 let newClaimPeriodHeight = claimResultTuple._5
479479 let availableToClaimArray = claimResultTuple._6
480480 let availablePriceAmountToClaim = availableToClaimArray[0]
481481 let availableIdoAmountToClaim = availableToClaimArray[1]
482482 $Tuple2(nil, makeString(["%s%d%d", userAddress58, toString(availablePriceAmountToClaim), toString(availableIdoAmountToClaim)], SEP))
483483 }
484484
485485
486486
487487 @Callable(i)
488488 func claimV2READONLY (claimedAssetId58,userAddress58) = {
489489 let claimResultTuple = internalClaim(claimedAssetId58, addressFromStringValue(userAddress58), fromBase58String(""))
490490 let totalsDiff = claimResultTuple._1
491491 let outAmount = claimResultTuple._2
492492 let outAssetId = claimResultTuple._3
493493 let origInvestArray = claimResultTuple._4
494494 let newClaimPeriodHeight = claimResultTuple._5
495495 let availableToClaimArray = claimResultTuple._6
496496 let availablePriceAmountToClaim = availableToClaimArray[0]
497497 let availableIdoAmountToClaim = availableToClaimArray[1]
498498 let cfgArray = readConfigArray()
499499 let priceAssetId58 = cfgArray[IdxCfgPriceAssetId]
500- let $t02602626438 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
501- let periodMinAvailableToClaim = $t02602626438._1
502- let periodTotalAvailableToClaim = $t02602626438._2
503- let periodUserAvailableToClaim = $t02602626438._3
504- let totalUserAvailableToClaim = $t02602626438._4
505- let usdtPriceAssetAllowableRatio = $t02602626438._5
506- let currentUsdtPriceAssetRatio = $t02602626438._6
507- let endPeriodBlocksLeft = $t02602626438._7
508- let updatedCurrentPeriod = $t02602626438._8
509- let periodStart = $t02602626438._9
510- let periodEnd = $t02602626438._10
500+ let $t02648626898 = internalClaimV2(priceAssetId58, userAddress58, outAmount, totalsDiff[IdxDiffClaimedPriceAmountIncrement])
501+ let periodMinAvailableToClaim = $t02648626898._1
502+ let periodTotalAvailableToClaim = $t02648626898._2
503+ let periodUserAvailableToClaim = $t02648626898._3
504+ let totalUserAvailableToClaim = $t02648626898._4
505+ let usdtPriceAssetAllowableRatio = $t02648626898._5
506+ let currentUsdtPriceAssetRatio = $t02648626898._6
507+ let endPeriodBlocksLeft = $t02648626898._7
508+ let updatedCurrentPeriod = $t02648626898._8
509+ let periodStart = $t02648626898._9
510+ let periodEnd = $t02648626898._10
511511 let currentPeriodEndHeight = value(getInteger(keyPeriodEndHeight(updatedCurrentPeriod)))
512512 let resultString = if ((height > currentPeriodEndHeight))
513513 then {
514514 let periodLenght = value(getInteger(keyPeriodLength()))
515515 let userPeriodAllowance = value(getInteger(keyUserPeriodAllowance(priceAssetId58)))
516516 let totalPeriodAllowance = value(getInteger(keyTotalPeriodAllowance(priceAssetId58)))
517517 makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(userPeriodAllowance), toString(totalPeriodAllowance), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(periodLenght)], SEP)
518518 }
519519 else makeString(["%d%d%d%d%d%d", toString(availableIdoAmountToClaim), toString(periodMinAvailableToClaim), toString(periodTotalAvailableToClaim), toString(usdtPriceAssetAllowableRatio), toString(currentUsdtPriceAssetRatio), toString(endPeriodBlocksLeft)], SEP)
520520 $Tuple2(nil, resultString)
521521 }
522522
523523
524524
525525 @Callable(i)
526526 func setManager (pendingManagerPublicKey) = {
527527 let checkCaller = mustManager(i)
528528 if ((checkCaller == checkCaller))
529529 then {
530530 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
531531 if ((checkManagerPublicKey == checkManagerPublicKey))
532532 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
533533 else throw("Strict value is not equal to itself.")
534534 }
535535 else throw("Strict value is not equal to itself.")
536536 }
537537
538538
539539
540540 @Callable(i)
541541 func confirmManager () = {
542542 let pm = pendingManagerPublicKeyOrUnit()
543543 let hasPM = if (isDefined(pm))
544544 then true
545545 else throw("No pending manager")
546546 if ((hasPM == hasPM))
547547 then {
548548 let checkPM = if ((i.callerPublicKey == value(pm)))
549549 then true
550550 else throw("You are not pending manager")
551551 if ((checkPM == checkPM))
552552 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
553553 else throw("Strict value is not equal to itself.")
554554 }
555555 else throw("Strict value is not equal to itself.")
556556 }
557557
558558
559559 @Verifier(tx)
560560 func verify () = {
561561 let targetPublicKey = match managerPublicKeyOrUnit() {
562562 case pk: ByteVector =>
563563 pk
564564 case _: Unit =>
565565 tx.senderPublicKey
566566 case _ =>
567567 throw("Match error")
568568 }
569569 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
570570 }
571571

github/deemru/w8io/026f985 
85.70 ms