tx · 7UUAG4KdCFj3QfnPkmpnDuben3QeaiCV2sPSE1F8SWma

3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY:  -0.01500000 Waves

2022.10.01 06:22 [2252752] smart account 3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY > SELF 0.00000000 Waves

{ "type": 13, "id": "7UUAG4KdCFj3QfnPkmpnDuben3QeaiCV2sPSE1F8SWma", "fee": 1500000, "feeAssetId": null, "timestamp": 1664594579968, "version": 2, "chainId": 84, "sender": "3MrNa3KKYBiosWiN4NMxJKERRtAWi8Ny9QY", "senderPublicKey": "AcDSZVzDQTVsumAAwEQdT8iWi8xHRjLNJJ53MzYzk4m7", "proofs": [ "3roJJokCjA1b8eXm8av8X5HwsnoRgia6r9hMUccjoEugqEuSCvhB5Y588AmAhUpHAycvDYMLNSTtfYkmfMFAiPmz" ], "script": "base64:AAIFAAAAAAAAAE0IAhIHCgUICAgBARIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSBAoCCAkSBQoDCAgBEgUKAwEIARIECgIIAQAAACUAAAAADGxvY2tpbmdTdG9yZQUAAAAEdGhpcwAAAAAMc3Rha2luZ1N0b3JlAgAAAAhfUmVzZXJ2ZQAAAAARbWluaW11bUxvY2tBbW91bnQCAAAADl9NaW5Mb2NrQW1vdW50AAAAABFtYXhpbXVtTG9ja0Ftb3VudAIAAAAOX01heExvY2tBbW91bnQAAAAACWFzc2V0TGlzdAUAAAADbmlsAAAAABF1bmxvY2tFbGlnaWJpbGl0eQIAAAAgX0VsaWdpYmxlX3RvX3VubG9ja19hdF90aW1lc3RhbXAAAAAADGxvY2tlZEFtb3VudAIAAAAOX0Ftb3VudF9sb2NrZWQAAAAAC2xvY2tlZEFzc2V0AgAAAA1fQXNzZXRfbG9ja2VkAAAAAAR1c2VyAgAAAAVfVXNlcgAAAAAKQVBZX0Ftb3VudAIAAAALX0FQWV9hbW91bnQAAAAAEXRvdGFsTG9ja2VkQU1vdW50AgAAABRfVG90YWxfTG9ja2VkX0Ftb3VudAAAAAANbG9ja2luZ1BlcmlvZAIAAAAMX0RheXNfbG9ja2VkAAAAAAplbnRyeUluZGV4AgAAAAxfRW50cnlfSW5kZXgAAAAADmFscmVhZHlDbGFpbWVkAgAAABBfQWxyZWFkeV9DbGFpbWVkAAAAAAVhZG1pbgIAAAAGYWRtaW5fAAAAAA1taWxpU2VjUGVyRGF5AAAAAAAFJlwAAAAAABFzaXhIb3Vyc0luTWlsaVNlYwAAAAAAAUmXAAAAAAATc2V2ZW5EYXlzTG9ja1BlcmlvZAAAAAAAAAAABwAAAAAWZm91cnRlZW5EYXlzTG9ja1BlcmlvZAAAAAAAAAAADgAAAAAUdGhpcnR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAAB4AAAAAE3NpeHR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAADwAAAAAFG5pbmV0eURheXNMb2NrUGVyaW9kAAAAAAAAAABaAQAAAARnZXRJAAAAAQAAAANrZXkJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAARnZXRTAAAAAQAAAANrZXkJ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AAAABGRhdGEFAAAAByRtYXRjaDAJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAA2tleQUAAAAEZGF0YQkAAAIAAAABAgAAABd1bnN1cHBvcnRlZCBjb25maWcgdHlwZQEAAAATaW5jcmVtZW50RW50cnlJbmRleAAAAAEAAAADa2V5BAAAAAZ1SW5kZXgJAQAAAARnZXRJAAAAAQUAAAADa2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAABnVJbmRleAkAAGQAAAACCQEAAAAFdmFsdWUAAAABBQAAAAZ1SW5kZXgAAAAAAAAAAAEAAAAAAAAAAAAAAAANAAAAAWkBAAAACGFkZEFzc2V0AAAABQAAAAtBc3NldFRpY2tlcgAAAAdBc3NldElEAAAADEFzc2V0UmVzZXJ2ZQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50AAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQEAAAABWNoZWNrCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAFY2hlY2sFAAAABWNoZWNrBAAAAA1hU3Rha2luZ1N0b3JlCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAxzdGFraW5nU3RvcmUEAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWluaW11bUxvY2tBbW91bnQEAAAAEmFNYXhpbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWF4aW11bUxvY2tBbW91bnQEAAAAC2NoZWNrTWluTWF4AwkAAGYAAAACBQAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50CQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWF4aW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQFAAAAA25pbAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWluaW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASYU1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50BQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAdBc3NldElECQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAANYVN0YWtpbmdTdG9yZQUAAAAMQXNzZXRSZXNlcnZlBQAAAANuaWwFAAAAC2NoZWNrTWluTWF4CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtkZWxldGVBc3NldAAAAAEAAAALQXNzZXRUaWNrZXIEAAAABWNoZWNrCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAFY2hlY2sFAAAABWNoZWNrBAAAAAdhc3NldElECQEAAAAOdGhyb3dPclJldHVyblMAAAACCQEAAAAEZ2V0UwAAAAEFAAAAC0Fzc2V0VGlja2VyCQABLAAAAAIJAAEsAAAAAgIAAAASYXNzZXQgd2l0aCB0aWNrZXIgBQAAAAtBc3NldFRpY2tlcgIAAAAKIG5vdCBmb3VuZAMJAAAAAAAAAgUAAAAHYXNzZXRJRAUAAAAHYXNzZXRJRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAtBc3NldFRpY2tlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAABFtaW5pbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAABFtYXhpbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAAC0Fzc2V0VGlja2Vy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AAAGY2FsbGVyBAAAAApvdGhlckFkbWluCQABLAAAAAIFAAAABWFkbWluBQAAAAZjYWxsZXIEAAAAD2NoZWNrT2xkQWRkcmVzcwkBAAAADnRocm93T3JSZXR1cm5TAAAAAgkBAAAABGdldFMAAAABBQAAAApvdGhlckFkbWluAgAAABlubyBwcmV2aW91cyBhZGRyZXNzIGZvdW5kAwkAAAAAAAACBQAAAA9jaGVja09sZEFkZHJlc3MFAAAAD2NoZWNrT2xkQWRkcmVzcwQAAAAKZGVsQWRkcmVzcwkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAKb3RoZXJBZG1pbgMJAAAAAAAAAgUAAAAKZGVsQWRkcmVzcwUAAAAKZGVsQWRkcmVzcwkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAACm90aGVyQWRtaW4JAAQlAAAAAQUAAAAJYWRtaW5BZGRyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAQcmVtb3ZlT3RoZXJBZG1pbgAAAAEAAAAHYWRkcmVzcwQAAAAGY2hlY2tzCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACWFkbWluQWRkcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAB2FkZHJlc3MCAAAAD2ludmFsaWQgYWRkcmVzcwQAAAAMb3RoZXJBZGRyZXNzCQABLAAAAAIFAAAABWFkbWluCQAEJQAAAAEFAAAACWFkbWluQWRkcgQAAAAIZGVsQWRtaW4JAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAADG90aGVyQWRkcmVzcwMJAAAAAAAAAgUAAAAIZGVsQWRtaW4FAAAACGRlbEFkbWluBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVh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ASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWluaW11bUxvY2tBbW91bnQCAAAANWludGVybmFsIGVycm9yOiBtaW5pbXVtIHN0YWNraW5nIGFtb3VudCBub3Qgc3BlY2lmaWVkBAAAAAptYXhUb1N0YWtlCQEAAAAOdGhyb3dPclJldHVybkkAAAACCQEAAAAEZ2V0SQAAAAEJAAEsAAAAAgUAAAALQXNzZXRUaWNrZXIFAAAAEW1heGltdW1Mb2NrQW1vdW50AgAAADRpbnRlcm5hbCBlcnJvcjogbWF4aW11bSBzdGFraW5nIGFtb3VudCBub3Qgc3BlY2lmaWVkBAAAAAZjaGVjazMJAQAAAAd0aHJvd0lmAAAAAgMJAABmAAAAAgUAAAAKbWluVG9TdGFrZQUAAAANYW1vdW50VG9TdGFrZQYJAABmAAAAAgUAAAANYW1vdW50VG9TdGFrZQUAAAAKbWF4VG9TdGFrZQIAAAAec3Rha2luZyBhbW91bnQgaXMgb3V0IG9mIHJhbmdlAwkAAAAAAAACBQAAAAZjaGVjazMFAAAABmNoZWNrMwQAAAAMdVRvdGFsTG9ja2VkCQABLAAAAAIFAAAABnVzZXJJZAUAAAARdG90YWxMb2NrZWRBTW91bnQEAAAACXVTdW1Ub3RhbAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAQAAAAVnZXRJVgAAAAEFAAAADHVUb3RhbExvY2tlZAUAAAANYW1vdW50VG9TdGFrZQkAAGQAAAACBQAAAA1hbW91bnRUb1N0YWtlCQEAAAAFZ2V0SVYAAAABBQAAAAx1VG90YWxMb2NrZWQEAAAABmNoZWNrNAkBAAAAB3Rocm93SWYAAAACCQAAZgAAAAIFAAAACXVTdW1Ub3RhbAUAAAAKbWF4VG9TdGFrZQIAAAAdeW91IGhhdmUgbWF4ZWQgb3V0IHlvdXIgcXVvdGEDCQAAAAAAAAIFAAAABmNoZWNrNAUAAAAGY2hlY2s0BAAAAA51RW50cnlUb1N0cmluZwkAAaQAAAABBQAAAApFbnRyeUluZGV4BAAAAAZ1RW50cnkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAV8FAAAAC0Fzc2V0VGlja2VyAgAAAAFfBQAAAA51RW50cnlUb1N0cmluZwQAAAANdVVzZXJFbnRyeUtleQkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQQAAAAHdVVzZXJJZAkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAAR1c2VyBAAAAAZ1QXNzZXQJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAALbG9ja2VkQXNzZXQEAAAADnVMb2NraW5nUGVyaW9kCQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAADWxvY2tpbmdQZXJpb2QEAAAADXVMb2NrZWRBbW91bnQJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAMbG9ja2VkQW1vdW50BAAAAAR1QVBZCQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAACkFQWV9BbW91bnQEAAAAEnVVbmxvY2tFbGlnaWJpbGl0eQkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAABF1bmxvY2tFbGlnaWJpbGl0eQQAAAAPdUFscmVhZHlDbGFpbWVkCQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAADmFscmVhZHlDbGFpbWVkBAAAAAlTdG9yZWRBUFkJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAVnZXRTVgAAAAEFAAAABWFkbWluAgAAAAxnZXRBUFlBbW91bnQJAARMAAAAAgUAAAAGdXNlcklkCQAETAAAAAIFAAAAC0Fzc2V0VGlja2VyCQAETAAAAAIFAAAACkVudHJ5SW5kZXgFAAAAA25pbAUAAAADbmlsBAAAAANBUFkEAAAAByRtYXRjaDAFAAAACVN0b3JlZEFQWQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFjBQAAAAckbWF0Y2gwBQAAAAFjCQAAAgAAAAEJAAEsAAAAAgIAAAAhY291bGQgbm90IGdldCB0aGUgQVBZIGFtb3VudCBmb3IgBQAAAAZ1c2VySWQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAANdVVzZXJFbnRyeUtleQUAAAAKRW50cnlJbmRleAkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAAB3VVc2VySWQFAAAABnVzZXJJZAkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAABnVBc3NldAUAAAAFYXNzZXQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAAOdUxvY2tpbmdQZXJpb2QFAAAACmxvY2tQZXJpb2QJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAANdUxvY2tlZEFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAADHVUb3RhbExvY2tlZAUAAAAJdVN1bVRvdGFsCQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAEnVVbmxvY2tFbGlnaWJpbGl0eQkBAAAADWRheXNUb01pbGlTZWMAAAABBQAAAApMb2NrUGVyaW9kCQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAABHVBUFkFAAAAA0FQWQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPdUFscmVhZHlDbGFpbWVkBwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAVDbGFpbQAAAAIAAAALQXNzZXRUaWNrZXIAAAAKRW50cnlJbmRleAQAAAALY3VycmVudFRpbWUIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBAAAAAZ1c2VySWQJAAQlAAAAAQgFAAAA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", "height": 2252752, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Cb2NvzHP1JzrBxcjMZHMoa7KAbYr8yKtx5VnGm1p5a6x Next: none Diff:
OldNewDifferences
1111
1212 let assetList = nil
1313
14-let unlockEligibility = "_Eligible_to_unlock_at_block"
14+let unlockEligibility = "_Eligible_to_unlock_at_timestamp"
1515
1616 let lockedAmount = "_Amount_locked"
1717
3232 let admin = "admin_"
3333
3434 let miliSecPerDay = 86400000
35+
36+let sixHoursInMiliSec = 21600000
3537
3638 let sevenDaysLockPeriod = 7
3739
9294 then if ((days != sixtyDaysLockPeriod))
9395 then if ((days != ninetyDaysLockPeriod))
9496 then throw("invalid locking period")
95- else ((days * miliSecPerDay) + lastBlock.timestamp)
96- else ((days * miliSecPerDay) + lastBlock.timestamp)
97- else ((days * miliSecPerDay) + lastBlock.timestamp)
98- else ((days * miliSecPerDay) + lastBlock.timestamp)
99- else ((days * miliSecPerDay) + lastBlock.timestamp)
97+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
98+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
99+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
100+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
101+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
100102
101103
102104 func writeConstString (key,value) = if (!(isDefined(getS(key))))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let lockingStore = this
55
66 let stakingStore = "_Reserve"
77
88 let minimumLockAmount = "_MinLockAmount"
99
1010 let maximumLockAmount = "_MaxLockAmount"
1111
1212 let assetList = nil
1313
14-let unlockEligibility = "_Eligible_to_unlock_at_block"
14+let unlockEligibility = "_Eligible_to_unlock_at_timestamp"
1515
1616 let lockedAmount = "_Amount_locked"
1717
1818 let lockedAsset = "_Asset_locked"
1919
2020 let user = "_User"
2121
2222 let APY_Amount = "_APY_amount"
2323
2424 let totalLockedAMount = "_Total_Locked_Amount"
2525
2626 let lockingPeriod = "_Days_locked"
2727
2828 let entryIndex = "_Entry_Index"
2929
3030 let alreadyClaimed = "_Already_Claimed"
3131
3232 let admin = "admin_"
3333
3434 let miliSecPerDay = 86400000
35+
36+let sixHoursInMiliSec = 21600000
3537
3638 let sevenDaysLockPeriod = 7
3739
3840 let fourteenDaysLockPeriod = 14
3941
4042 let thirtyDaysLockPeriod = 30
4143
4244 let sixtyDaysLockPeriod = 60
4345
4446 let ninetyDaysLockPeriod = 90
4547
4648 func getI (key) = getInteger(this, key)
4749
4850
4951 func getS (key) = getString(this, key)
5052
5153
5254 func getIV (key) = value(getInteger(this, key))
5355
5456
5557 func getSV (key) = value(getString(this, key))
5658
5759
5860 func throwIf (condition,error) = if (condition)
5961 then throw(error)
6062 else true
6163
6264
6365 func throwOrReturnI (val,error) = match val {
6466 case val: Int =>
6567 val
6668 case _ =>
6769 throw(error)
6870 }
6971
7072
7173 func throwOrReturnS (val,error) = match val {
7274 case val: String =>
7375 val
7476 case _ =>
7577 throw(error)
7678 }
7779
7880
7981 func writeInt (key,value) = if ((0 > value))
8082 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
8183 else IntegerEntry(key, value)
8284
8385
8486 func writeStr (key,value) = if ((" " == value))
8587 then throw(("writing an empty string " + value))
8688 else StringEntry(key, value)
8789
8890
8991 func daysToMiliSec (days) = if ((days != sevenDaysLockPeriod))
9092 then if ((days != fourteenDaysLockPeriod))
9193 then if ((days != thirtyDaysLockPeriod))
9294 then if ((days != sixtyDaysLockPeriod))
9395 then if ((days != ninetyDaysLockPeriod))
9496 then throw("invalid locking period")
95- else ((days * miliSecPerDay) + lastBlock.timestamp)
96- else ((days * miliSecPerDay) + lastBlock.timestamp)
97- else ((days * miliSecPerDay) + lastBlock.timestamp)
98- else ((days * miliSecPerDay) + lastBlock.timestamp)
99- else ((days * miliSecPerDay) + lastBlock.timestamp)
97+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
98+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
99+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
100+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
101+ else (((days * miliSecPerDay) + sixHoursInMiliSec) + lastBlock.timestamp)
100102
101103
102104 func writeConstString (key,value) = if (!(isDefined(getS(key))))
103105 then writeStr(key, value)
104106 else throw((" entry already initialized: " + key))
105107
106108
107109 func writeConstInteger (key,value) = if (!(isDefined(getS(key))))
108110 then writeInt(key, value)
109111 else throw((" entry already initialized: " + key))
110112
111113
112114 func adminOnly (i) = {
113115 let inputAddress = toBase58String(i.caller.bytes)
114116 let otherAdmin = (admin + inputAddress)
115117 match getS(admin) {
116118 case a: String =>
117119 if ((inputAddress != getS(admin)))
118120 then throw("unauthorized")
119121 else true
120122 case _ =>
121123 match getS(otherAdmin) {
122124 case b: String =>
123125 if ((inputAddress != getS(otherAdmin)))
124126 then throw("unauthorized")
125127 else true
126128 case _ =>
127129 throw("unauthorizd")
128130 }
129131 }
130132 }
131133
132134
133135 func writeConfigValue (key,data) = match data {
134136 case data: String =>
135137 writeConstString(key, data)
136138 case data: Int =>
137139 writeConstInteger(key, data)
138140 case _ =>
139141 throw("unsupported config type")
140142 }
141143
142144
143145 func incrementEntryIndex (key) = {
144146 let uIndex = getI(key)
145147 if (isDefined(uIndex))
146148 then (value(uIndex) + 1)
147149 else 0
148150 }
149151
150152
151153 @Callable(i)
152154 func addAsset (AssetTicker,AssetID,AssetReserve,AssetMinimumLockAmount,AssetMaximumLockAmount) = {
153155 let check = adminOnly(i)
154156 if ((check == check))
155157 then {
156158 let aStakingStore = (AssetTicker + stakingStore)
157159 let aMinimumLockAmount = (AssetTicker + minimumLockAmount)
158160 let aMaximumLockAmount = (AssetTicker + maximumLockAmount)
159161 let checkMinMax = if ((AssetMaximumLockAmount > AssetMinimumLockAmount))
160162 then [writeConstInteger(aMinimumLockAmount, AssetMinimumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMaximumLockAmount)]
161163 else [writeConstInteger(aMinimumLockAmount, AssetMaximumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMinimumLockAmount)]
162164 ([writeConstString(AssetTicker, AssetID), writeConstString(aStakingStore, AssetReserve)] ++ checkMinMax)
163165 }
164166 else throw("Strict value is not equal to itself.")
165167 }
166168
167169
168170
169171 @Callable(i)
170172 func deleteAsset (AssetTicker) = {
171173 let check = adminOnly(i)
172174 if ((check == check))
173175 then {
174176 let assetID = throwOrReturnS(getS(AssetTicker), (("asset with ticker " + AssetTicker) + " not found"))
175177 if ((assetID == assetID))
176178 then [DeleteEntry(AssetTicker), DeleteEntry((AssetTicker + minimumLockAmount)), DeleteEntry((AssetTicker + maximumLockAmount)), DeleteEntry((AssetTicker + stakingStore))]
177179 else throw("Strict value is not equal to itself.")
178180 }
179181 else throw("Strict value is not equal to itself.")
180182 }
181183
182184
183185
184186 @Callable(i)
185187 func _getAssetIdByTicker (AssetTicker) = {
186188 let check = adminOnly(i)
187189 if ((check == check))
188190 then {
189191 let a = throwOrReturnS(getS(AssetTicker), "asset not found")
190192 $Tuple2(nil, a)
191193 }
192194 else throw("Strict value is not equal to itself.")
193195 }
194196
195197
196198
197199 @Callable(i)
198200 func init (AdminAddress) = {
199201 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
200202 [writeConstString(admin, toString(adminAddr))]
201203 }
202204
203205
204206
205207 @Callable(i)
206208 func _deleteEntry (key) = {
207209 let check = adminOnly(i)
208210 if ((check == check))
209211 then [DeleteEntry(key)]
210212 else throw("Strict value is not equal to itself.")
211213 }
212214
213215
214216
215217 @Callable(i)
216218 func addAdmin (AdminAddress) = {
217219 let check = adminOnly(i)
218220 if ((check == check))
219221 then {
220222 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
221223 let newAdmin = (admin + toString(adminAddr))
222224 [writeConstString(newAdmin, AdminAddress)]
223225 }
224226 else throw("Strict value is not equal to itself.")
225227 }
226228
227229
228230
229231 @Callable(i)
230232 func changeMainAdmin (newAddress) = {
231233 let checks = adminOnly(i)
232234 if ((checks == checks))
233235 then {
234236 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
235237 let del = DeleteEntry(admin)
236238 if ((del == del))
237239 then [writeConstString(admin, toString(adminAddr))]
238240 else throw("Strict value is not equal to itself.")
239241 }
240242 else throw("Strict value is not equal to itself.")
241243 }
242244
243245
244246
245247 @Callable(i)
246248 func updateOtherAdminAddress (newAddress) = {
247249 let checks = adminOnly(i)
248250 if ((checks == checks))
249251 then {
250252 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
251253 let caller = toString(i.caller)
252254 let otherAdmin = (admin + caller)
253255 let checkOldAddress = throwOrReturnS(getS(otherAdmin), "no previous address found")
254256 if ((checkOldAddress == checkOldAddress))
255257 then {
256258 let delAddress = DeleteEntry(otherAdmin)
257259 if ((delAddress == delAddress))
258260 then [writeConstString(otherAdmin, toString(adminAddr))]
259261 else throw("Strict value is not equal to itself.")
260262 }
261263 else throw("Strict value is not equal to itself.")
262264 }
263265 else throw("Strict value is not equal to itself.")
264266 }
265267
266268
267269
268270 @Callable(i)
269271 func removeOtherAdmin (address) = {
270272 let checks = adminOnly(i)
271273 if ((checks == checks))
272274 then {
273275 let adminAddr = valueOrErrorMessage(addressFromString(address), "invalid address")
274276 let otherAddress = (admin + toString(adminAddr))
275277 let delAdmin = DeleteEntry(otherAddress)
276278 if ((delAdmin == delAdmin))
277279 then nil
278280 else throw("Strict value is not equal to itself.")
279281 }
280282 else throw("Strict value is not equal to itself.")
281283 }
282284
283285
284286
285287 @Callable(i)
286288 func updateConfigValue (key,data) = {
287289 let checks = adminOnly(i)
288290 if ((checks == checks))
289291 then {
290292 let del = DeleteEntry(key)
291293 if ((del == del))
292294 then [writeConfigValue(key, data)]
293295 else throw("Strict value is not equal to itself.")
294296 }
295297 else throw("Strict value is not equal to itself.")
296298 }
297299
298300
299301
300302 @Callable(i)
301303 func _getDaysLeftToClaim (userAddress,AssetTicker,EntryIndex) = {
302304 let check0 = adminOnly(i)
303305 if ((check0 == check0))
304306 then {
305307 let check1 = valueOrErrorMessage(addressFromString(userAddress), "invalid address")
306308 if ((check1 == check1))
307309 then {
308310 let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
309311 let uUnlockEligibility = ((userAddress + uEntryIndex) + unlockEligibility)
310312 let uDaysLeft = (valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress)) / 1000)
311313 $Tuple2(nil, uDaysLeft)
312314 }
313315 else throw("Strict value is not equal to itself.")
314316 }
315317 else throw("Strict value is not equal to itself.")
316318 }
317319
318320
319321
320322 @Callable(i)
321323 func Lock (LockPeriod,AssetTicker,EntryIndex) = {
322324 let check1 = throwIf((1 != size(i.payments)), "attach amount you want to lock")
323325 if ((check1 == check1))
324326 then {
325327 let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
326328 let asset = toBase58String(assetValue)
327329 let check2 = throwIf((getS(AssetTicker) != asset), "asset not supported")
328330 if ((check2 == check2))
329331 then {
330332 let lockPeriod = LockPeriod
331333 let userId = toBase58String(i.caller.bytes)
332334 let amountToStake = i.payments[0].amount
333335 let minToStake = throwOrReturnI(getI((AssetTicker + minimumLockAmount)), "internal error: minimum stacking amount not specified")
334336 let maxToStake = throwOrReturnI(getI((AssetTicker + maximumLockAmount)), "internal error: maximum staking amount not specified")
335337 let check3 = throwIf(if ((minToStake > amountToStake))
336338 then true
337339 else (amountToStake > maxToStake), "staking amount is out of range")
338340 if ((check3 == check3))
339341 then {
340342 let uTotalLocked = (userId + totalLockedAMount)
341343 let uSumTotal = if (!(isDefined(getIV(uTotalLocked))))
342344 then amountToStake
343345 else (amountToStake + getIV(uTotalLocked))
344346 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
345347 if ((check4 == check4))
346348 then {
347349 let uEntryToString = toString(EntryIndex)
348350 let uEntry = ((("_" + AssetTicker) + "_") + uEntryToString)
349351 let uUserEntryKey = (userId + uEntry)
350352 let uUserId = ((userId + uEntry) + user)
351353 let uAsset = ((userId + uEntry) + lockedAsset)
352354 let uLockingPeriod = ((userId + uEntry) + lockingPeriod)
353355 let uLockedAmount = ((userId + uEntry) + lockedAmount)
354356 let uAPY = ((userId + uEntry) + APY_Amount)
355357 let uUnlockEligibility = ((userId + uEntry) + unlockEligibility)
356358 let uAlreadyClaimed = ((userId + uEntry) + alreadyClaimed)
357359 let StoredAPY = invoke(Address(fromBase58String(getSV(admin))), "getAPYAmount", [userId, AssetTicker, EntryIndex], nil)
358360 let APY = match StoredAPY {
359361 case c: Int =>
360362 c
361363 case _ =>
362364 throw(("could not get the APY amount for " + userId))
363365 }
364366 [writeConstInteger(uUserEntryKey, EntryIndex), writeConstString(uUserId, userId), writeConstString(uAsset, asset), writeConstInteger(uLockingPeriod, lockPeriod), writeConstInteger(uLockedAmount, i.payments[0].amount), writeConstInteger(uTotalLocked, uSumTotal), writeConstInteger(uUnlockEligibility, daysToMiliSec(LockPeriod)), writeConstInteger(uAPY, APY), BooleanEntry(uAlreadyClaimed, false)]
365367 }
366368 else throw("Strict value is not equal to itself.")
367369 }
368370 else throw("Strict value is not equal to itself.")
369371 }
370372 else throw("Strict value is not equal to itself.")
371373 }
372374 else throw("Strict value is not equal to itself.")
373375 }
374376
375377
376378
377379 @Callable(i)
378380 func Claim (AssetTicker,EntryIndex) = {
379381 let currentTime = lastBlock.timestamp
380382 let userId = toString(i.caller)
381383 let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
382384 if ((asset == asset))
383385 then {
384386 let uEntry = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
385387 let uUserID = valueOrErrorMessage(getS(((userId + uEntry) + user)), ("no entry found for user " + userId))
386388 if ((uUserID == uUserID))
387389 then {
388390 let uLockedAsset = valueOrErrorMessage(getS(((userId + uEntry) + lockedAsset)), "asset not locked by user")
389391 let uAlreadyClaimedKey = ((userId + uEntry) + alreadyClaimed)
390392 let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
391393 if ((check0 == check0))
392394 then {
393395 let uLockedAmount = getIV(((userId + uEntry) + lockedAmount))
394396 let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
395397 let APYAMount = getIV(((userId + uEntry) + APY_Amount))
396398 let period = getIV(((userId + uEntry) + unlockEligibility))
397399 let daysLeft = if ((0 >= (period - currentTime)))
398400 then 0
399401 else (period - currentTime)
400402 let check1 = throwIf((daysLeft > currentTime), (toString((daysLeft / 1000)) + " days left to claim"))
401403 if ((check1 == check1))
402404 then {
403405 let uTotalLocked = (userId + totalLockedAMount)
404406 let sumTotal = (getIV(uTotalLocked) - uLockedAmount)
405407 let sumTotalLeft = if ((0 >= sumTotal))
406408 then 0
407409 else sumTotal
408410 let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, fromBase58String(uLockedAsset)], nil)
409411 if ((transferAPYAmount == transferAPYAmount))
410412 then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, fromBase58String(uLockedAsset)), writeConstInteger(uTotalLocked, sumTotalLeft), BooleanEntry(uAlreadyClaimedKey, true)]
411413 else throw("Strict value is not equal to itself.")
412414 }
413415 else throw("Strict value is not equal to itself.")
414416 }
415417 else throw("Strict value is not equal to itself.")
416418 }
417419 else throw("Strict value is not equal to itself.")
418420 }
419421 else throw("Strict value is not equal to itself.")
420422 }
421423
422424

github/deemru/w8io/873ac7e 
134.72 ms