tx · 8YwTxoUN3NHoT9WWRWe5zHb141dJa7FwQYtMsjGU3PQH

3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua:  -0.01400000 Waves

2021.03.22 18:46 [1449151] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves

{ "type": 13, "id": "8YwTxoUN3NHoT9WWRWe5zHb141dJa7FwQYtMsjGU3PQH", "fee": 1400000, "feeAssetId": null, "timestamp": 1616428006572, "version": 2, "chainId": 84, "sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua", "senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu", "proofs": [ "32QAaAGjsTLGTLvNm8DxzjMg8YdxvYM1sx1PyZEduhdVUFGHmm7cVfcNnGp6L3QxzgjZ2iXRUSv2recyhK8FBVKq" ], "script": "base64:AAIEAAAAAAAAAAYIAhIAEgAAAAAYAAAAABR2ZXJzaW9uU3Rha2VDb250cmFjdAAAAAAAAAAAAQAAAAALaGNTZXBhcmF0b3ICAAAAA19fXwAAAAAHaGNXYXZlcwIAAAAFV0FWRVMAAAAACmtleWRBcHBVUkwCAAAACERBUFBfVVJMAAAAAAtrZXlkQXBwTmFtZQIAAAAJREFQUF9OQU1FAAAAABNrZXlTdGFraW5nV2hpdGVsaXN0AgAAABFTVEFLSU5HX1dISVRFTElTVAAAAAAIa2V5Tm9uY2UCAAAABU5PTkNFAAAAABRrZXlTdGFrZUNvbnRyYWN0TmFtZQIAAAAQU3Rha2VDb250cmFjdE5GVAAAAAATa2V5U3Rha2VSZWNlaXB0TmFtZQIAAAAPU3Rha2VSZWNlaXB0TkZUAAAAAA9rZXlMb2NrZWRBbW91bnQCAAAADkxPQ0tFRF9BTU9VTlRfAAAAABtrZXlUb2tlbkNpcmN1bGF0aW5nU3VwcGxpZXMCAAAAGlRPS0VOX0NJUkNVTEFUSU5HX1NVUFBMSUVTAAAAABtrZXlUb2tlblRvdGFsSXNzdWVkU3VwcGxpZXMCAAAAG1RPS0VOX1RPVEFMX0lTU1VFRF9TVVBQTElFUwAAAAAba2V5VG9rZW5Ub3RhbEJ1cm5lZFN1cHBsaWVzAgAAABtUT0tFTl9UT1RBTF9CVVJORURfU1VQUExJRVMAAAAAGGtleUFzc2V0T25nb2luZ0NvbnRyYWN0cwIAAAAYQVNTRVRfT05HT0lOR19DT05UUkFDVFNfAAAAABdrZXlBc3NldElzc3VlZENvbnRyYWN0cwIAAAAXQVNTRVRfSVNTVUVEX0NPTlRSQUNUU18AAAAAF2tleUFzc2V0QnVybmVkQ29udHJhY3RzAgAAABdBU1NFVF9CVVJORURfQ09OVFJBQ1RTXwAAAAAYa2V5VG90YWxPbmdvaW5nQ29udHJhY3RzAgAAABdUT1RBTF9PTkdPSU5HX0NPTlRSQUNUUwAAAAAXa2V5VG90YWxJc3N1ZWRDb250cmFjdHMCAAAAFlRPVEFMX0lTU1VFRF9DT05UUkFDVFMAAAAAF2tleVRvdGFsQnVybmVkQ29udHJhY3RzAgAAABZUT1RBTF9CVVJORURfQ09OVFJBQ1RTAAAAAAd0b2tlbklkAQAA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AZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAGG5ld0Fzc2V0T25nb2luZ0NvbnRyYWN0cwkAAGQAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEJAAEsAAAAAgUAAAAYa2V5QXNzZXRPbmdvaW5nQ29udHJhY3RzBQAAAAdhc3NldElkAAAAAAAAAAABBAAAABduZXdBc3NldElzc3VlZENvbnRyYWN0cwkAAGQAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEJAAEsAAAAAgUAAAAXa2V5QXNzZXRJc3N1ZWRDb250cmFjdHMFAAAAB2Fzc2V0SWQAAAAAAAAAAAEEAAAAGG5ld1RvdGFsT25nb2luZ0NvbnRyYWN0cwkAAGQAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEFAAAAGGtleVRvdGFsT25nb2luZ0NvbnRyYWN0cwAAAAAAAAAAAQQAAAAXbmV3VG90YWxJc3N1ZWRDb250cmFjdHMJAABkAAAAAgkBAAAAEGdldEludGVnZXJPclplcm8AAAABBQAAABdrZXlUb3RhbElzc3VlZENvbnRyYWN0cwAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAIa2V5Tm9uY2UJAAGRAAAAAgUAAAAFbm9uY2UAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAPa2V5TG9ja2VkQW1vdW50BQAAAAdhc3NldElkBQAAAA9uZXdMb2NrZWRBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAYa2V5QXNzZXRPbmdvaW5nQ29udHJhY3RzBQAAAAdhc3NldElkBQAAABhuZXdBc3NldE9uZ29pbmdDb250cmFjdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAXa2V5QXNzZXRJc3N1ZWRDb250cmFjdHMFAAAAB2Fzc2V0SWQFAAAAF25ld0Fzc2V0SXNzdWVkQ29udHJhY3RzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABhrZXlUb3RhbE9uZ29pbmdDb250cmFjdHMFAAAAGG5ld1RvdGFsT25nb2luZ0NvbnRyYWN0cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAXa2V5VG90YWxJc3N1ZWRDb250cmFjdHMFAAAAF25ld1RvdGFsSXNzdWVkQ29udHJhY3RzCQAETAAAAAIFAAAADWNvbnRyYWN0SXNzdWUJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCAUAAAANY29udHJhY3RJc3N1ZQAAAAhxdWFudGl0eQUAAAAKY29udHJhY3RJZAUAAAADbmlsAAAAAWkBAAAADXdpdGhkcmF3U3Rha2UAAAAAAwkAAAAAAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAAdZEFwcCBjYW4ndCBpbnRlcmFjdCB3aXRoIHNlbGYDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAKk5vdCBhIHZhbGlkIGFtb3VudCBvZiBwYXltZW50cyAocmVxdWlyZSAxKQMJAABmAAAAAgAAAAAAAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CQAAAgAAAAECAAAAG0Nhbid0IHN0YWtlIG5lZ2F0aWYgb3IgemVybwQAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAAMaXNCeXRlVmVjdG9yBQAAAAckbWF0Y2gwBQAAAAxpc0J5dGVWZWN0b3IJAAACAAAAAQIAAAAMTm90IGFuIEFzc2V0BAAAAAxjb250cmFjdEluZm8EAAAAByRtYXRjaDAJAAPsAAAAAQUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAACWlzQW5Bc3NldAUAAAAHJG1hdGNoMAUAAAAJaXNBbkFzc2V0CQAAAgAAAAECAAAAE0NvdWxkbid0IGZpbmQgQXNzZXQDAwMDAwkBAAAAAiE9AAAAAggFAAAADGNvbnRyYWN0SW5mbwAAAAZpc3N1ZXIFAAAABHRoaXMGCQEAAAACIT0AAAACCAUAAAAMY29udHJhY3RJbmZvAAAACGRlY2ltYWxzAAAAAAAAAAAABgkBAAAAAiE9AAAAAggFAAAADGNvbnRyYWN0SW5mbwAAAAhxdWFudGl0eQAAAAAAAAAAAQYJAQAAAAIhPQAAAAIIBQAAAAxjb250cmFjdEluZm8AAAAKcmVpc3N1YWJsZQcGCQEAAAACIT0AAAACCAUAAAAMY29udHJhY3RJbmZvAAAABG5hbWUFAAAAFGtleVN0YWtlQ29udHJhY3ROYW1lCQAAAgAAAAECAAAADk5vdCBhIENvbnRyYWN0BAAAABFjb250cmFjdERlc2NBcnJheQkABLUAAAACCAUAAAAMY29udHJhY3RJbmZvAAAAC2Rlc2NyaXB0aW9uBQAAAAtoY1NlcGFyYXRvcgQAAAAPY29udHJhY3RWZXJzaW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARY29udHJhY3REZXNjQXJyYXkAAAAAAAAAAAAEAAAAFmNvbnRyYWN0U3RhcnRpbmdIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjb250cmFjdERlc2NBcnJheQAAAAAAAAAAAQQAAAAQY29udHJhY3RTdGFrZXJJZAkAAZEAAAACBQAAABFjb250cmFjdERlc2NBcnJheQAAAAAAAAAAAgQAAAANY29udHJhY3RBc3NldAQAAAAHJG1hdGNoMAkAA+wAAAABCQACWQAAAAEJAAGRAAAAAgUAAAARY29udHJhY3REZXNjQXJyYXkAAAAAAAAAAAMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABUFzc2V0BAAAAAlpc0FuQXNzZXQFAAAAByRtYXRjaDAFAAAACWlzQW5Bc3NldAkAAAIAAAABAgAAABVDb250cmFjdCBlcnJvcjogYXNzZXQEAAAAE2NvbnRyYWN0QXNzZXRBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjb250cmFjdERlc2NBcnJheQAAAAAAAAAABAMJAQAAAAIhPQAAAAIJAAGQAAAAAQUAAAARY29udHJhY3REZXNjQXJyYXkAAAAAAAAAAAUJAAACAAAAAQIAAAAZQ29udHJhY3QgZXJyb3I6IGNvcnJ1cHRlZAMJAABmAAAAAgUAAAAPY29udHJhY3RWZXJzaW9uBQAAABR2ZXJzaW9uU3Rha2VDb250cmFjdAkAAAIAAAABAgAAABdDb250cmFjdCBlcnJvcjogdmVyc2lvbgMJAABnAAAAAgUAAAAWY29udHJhY3RTdGFydGluZ0hlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAH0NvbnRyYWN0IGVycm9yOiBzdGFydGluZyBoZWlnaHQDAwkAAGYAAAACAAAAAAAAAAABBQAAABNjb250cmFjdEFzc2V0QW1vdW50BgkAAGYAAAACBQAAABNjb250cmFjdEFzc2V0QW1vdW50CAUAAAANY29udHJhY3RBc3NldAAAAAhxdWFudGl0eQkAAAIAAAABAgAAABhDb250cmFjdCBlcnJvcjogcXVhbnRpdHkDCQAAZgAAAAIFAAAAE2NvbnRyYWN0QXNzZXRBbW91bnQJAAPwAAAAAgUAAAAEdGhpcwgFAAAADWNvbnRyYWN0QXNzZXQAAAACaWQJAAACAAAAAQIAAAAcQ29udHJhY3QgZXJyb3I6IGRBcHAgYmFsYW5jZQQAAAANYXNzZXRJZFN0cmluZwkAAlgAAAABCAUAAAANY29udHJhY3RBc3NldAAAAAJpZAQAAAAKYmxvY2tzQXdheQkAAGUAAAACBQAAAAZoZWlnaHQFAAAAFmNvbnRyYWN0U3RhcnRpbmdIZWlnaHQEAAAAFHVzZXJUb2tlbkVsaWdpYmlsaXR5CQAAaAAAAAIFAAAACmJsb2Nrc0F3YXkFAAAAGHRva2VuRWxpZ2liaWxpdHlQZXJCbG9jawQAAAAYY3VycmVudEFzc2V0TG9ja2VkQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAD2tleUxvY2tlZEFtb3VudAkAAZEAAAACBQAAABFjb250cmFjdERlc2NBcnJheQAAAAAAAAAAAwQAAAAYdXNlclRva2VuQW1vdW50VG9SZWNlaXZlCQAAawAAAAMFAAAAFHVzZXJUb2tlbkVsaWdpYmlsaXR5BQAAABNjb250cmFjdEFzc2V0QW1vdW50BQAAABhjdXJyZW50QXNzZXRMb2NrZWRBbW91bnQEAAAABW5vbmNlCQEAAAALZ2V0TmV3Tm9uY2UAAAAABAAAAAl0b2tlbkluZm8EAAAAByRtYXRjaDAJAAPsAAAAAQUAAAAHdG9rZW5JZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAACWlzQW5Bc3NldAUAAAAHJG1hdGNoMAUAAAAJaXNBbkFzc2V0CQAAAgAAAAECAAAAFlRva2VuIG5vdCBleGlzdGluZyBicm8EAAAAC3JlY2VpcHREZXNjCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAEGNvbnRyYWN0U3Rha2VySWQCAAAADCBoYXMgbG9ja2VkIAkAAaQAAAABBQAAABNjb250cmFjdEFzc2V0QW1vdW50AgAAAAEgCAUAAAANY29udHJhY3RBc3NldAAAAARuYW1lAgAAAAggZHVyaW5nIAkAAaQAAAABBQAAAApibG9ja3NBd2F5AgAAABUgYmxvY2tzIGFuZCByZWNlaXZlZCAJAAGkAAAAAQUAAAAYdXNlclRva2VuQW1vdW50VG9SZWNlaXZlAgAAAAEgCAUAAAAJdG9rZW5JbmZvAAAABG5hbWUEAAAADHJlY2VpcHRJc3N1ZQkABEMAAAAHBQAAABNrZXlTdGFrZVJlY2VpcHROYW1lBQAAAAtyZWNlaXB0RGVzYwAAAAAAAAAAAQAAAAAAAAAAAAcFAAAABHVuaXQJAAGRAAAAAgUAAAAFbm9uY2UAAAAAAAAAAAAEAAAACXJlY2VpcHRJZAkABDgAAAABBQAAAAxyZWNlaXB0SXNzdWUEAAAAD25ld0xvY2tlZEFtb3VudAkAAGUAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAD2tleUxvY2tlZEFtb3VudAkAAZEAAAACBQAAABFjb250cmFjdERlc2NBcnJheQAAAAAAAAAAAwUAAAATY29udHJhY3RBc3NldEFtb3VudAQAAAAWbmV3Q2lyY3VsYXRpbmdTdXBwbGllcwkAAGQAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEFAAAAG2tleVRva2VuQ2lyY3VsYXRpbmdTdXBwbGllcwUAAAAYdXNlclRva2VuQW1vdW50VG9SZWNlaXZlBAAAABZuZXdUb3RhbElzc3VlZFN1cHBsaWVzCQAAZAAAAAIJAQAAABBnZXRJbnRlZ2VyT3JaZXJvAAAAAQUAAAAba2V5VG9rZW5Ub3RhbElzc3VlZFN1cHBsaWVzBQAAABh1c2VyVG9rZW5BbW91bnRUb1JlY2VpdmUEAAAAGG5ld0Fzc2V0T25nb2luZ0NvbnRyYWN0cwkAAGUAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEJAAEsAAAAAgUAAAAYa2V5QXNzZXRPbmdvaW5nQ29udHJhY3RzBQAAAA1hc3NldElkU3RyaW5nAAAAAAAAAAABBAAAABduZXdBc3NldEJ1cm5lZENvbnRyYWN0cwkAAGQAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEJAAEsAAAAAgUAAAAXa2V5QXNzZXRCdXJuZWRDb250cmFjdHMFAAAADWFzc2V0SWRTdHJpbmcAAAAAAAAAAAEEAAAAGG5ld1RvdGFsT25nb2luZ0NvbnRyYWN0cwkAAGUAAAACCQEAAAAQZ2V0SW50ZWdlck9yWmVybwAAAAEFAAAAGGtleVRvdGFsT25nb2luZ0NvbnRyYWN0cwAAAAAAAAAAAQQAAAAXbmV3VG90YWxCdXJuZWRDb250cmFjdHMJAABkAAAAAgkBAAAAEGdldEludGVnZXJPclplcm8AAAABBQAAABdrZXlUb3RhbEJ1cm5lZENvbnRyYWN0cwAAAAAAAAAAAQkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAAB2Fzc2V0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAPa2V5TG9ja2VkQW1vdW50CQABkQAAAAIFAAAAEWNvbnRyYWN0RGVzY0FycmF5AAAAAAAAAAADBQAAAA9uZXdMb2NrZWRBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2tleVRva2VuQ2lyY3VsYXRpbmdTdXBwbGllcwUAAAAWbmV3Q2lyY3VsYXRpbmdTdXBwbGllcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5VG9rZW5Ub3RhbElzc3VlZFN1cHBsaWVzBQAAABZuZXdUb3RhbElzc3VlZFN1cHBsaWVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAGGtleUFzc2V0T25nb2luZ0NvbnRyYWN0cwUAAAANYXNzZXRJZFN0cmluZwUAAAAYbmV3QXNzZXRPbmdvaW5nQ29udHJhY3RzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAF2tleUFzc2V0QnVybmVkQ29udHJhY3RzBQAAAA1hc3NldElkU3RyaW5nBQAAABduZXdBc3NldEJ1cm5lZENvbnRyYWN0cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAYa2V5VG90YWxPbmdvaW5nQ29udHJhY3RzBQAAABhuZXdUb3RhbE9uZ29pbmdDb250cmFjdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAF2tleVRvdGFsQnVybmVkQ29udHJhY3RzBQAAABduZXdUb3RhbEJ1cm5lZENvbnRyYWN0cwkABEwAAAACBQAAAAxyZWNlaXB0SXNzdWUJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCAUAAAAMcmVjZWlwdElzc3VlAAAACHF1YW50aXR5BQAAAAlyZWNlaXB0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABNjb250cmFjdEFzc2V0QW1vdW50CAUAAAANY29udHJhY3RBc3NldAAAAAJpZAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAB3Rva2VuSWQFAAAAGHVzZXJUb2tlbkFtb3VudFRvUmVjZWl2ZQYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABh1c2VyVG9rZW5BbW91bnRUb1JlY2VpdmUFAAAAB3Rva2VuSWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5wTf4Kw==", "height": 1449151, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 361J2E2Exey8agc4m3ABoc6iJtTeCykeYwFCVDLgUT4a Next: BAGnj6tmuFk7V2GezpzPk5gudk6mfu5WitAtwC1cC6x1 Diff:
OldNewDifferences
77
88 let hcWaves = "WAVES"
99
10+let keydAppURL = "DAPP_URL"
11+
12+let keydAppName = "DAPP_NAME"
13+
1014 let keyStakingWhitelist = "STAKING_WHITELIST"
1115
1216 let keyNonce = "NONCE"
1317
1418 let keyStakeContractName = "StakeContractNFT"
19+
20+let keyStakeReceiptName = "StakeReceiptNFT"
1521
1622 let keyLockedAmount = "LOCKED_AMOUNT_"
1723
151157 let userTokenEligibility = (blocksAway * tokenEligibilityPerBlock)
152158 let currentAssetLockedAmount = getIntegerValue(this, (keyLockedAmount + contractDescArray[3]))
153159 let userTokenAmountToReceive = fraction(userTokenEligibility, contractAssetAmount, currentAssetLockedAmount)
160+ let nonce = getNewNonce()
161+ let tokenInfo = match assetInfo(tokenId) {
162+ case isAnAsset: Asset =>
163+ isAnAsset
164+ case _ =>
165+ throw("Token not existing bro")
166+ }
167+ let receiptDesc = ((((((((((contractStakerId + " has locked ") + toString(contractAssetAmount)) + " ") + contractAsset.name) + " during ") + toString(blocksAway)) + " blocks and received ") + toString(userTokenAmountToReceive)) + " ") + tokenInfo.name)
168+ let receiptIssue = Issue(keyStakeReceiptName, receiptDesc, 1, 0, false, unit, nonce[0])
169+ let receiptId = calculateAssetId(receiptIssue)
154170 let newLockedAmount = (getIntegerValue(this, (keyLockedAmount + contractDescArray[3])) - contractAssetAmount)
155171 let newCirculatingSupplies = (getIntegerOrZero(keyTokenCirculatingSupplies) + userTokenAmountToReceive)
156172 let newTotalIssuedSupplies = (getIntegerOrZero(keyTokenTotalIssuedSupplies) + userTokenAmountToReceive)
158174 let newAssetBurnedContracts = (getIntegerOrZero((keyAssetBurnedContracts + assetIdString)) + 1)
159175 let newTotalOngoingContracts = (getIntegerOrZero(keyTotalOngoingContracts) - 1)
160176 let newTotalBurnedContracts = (getIntegerOrZero(keyTotalBurnedContracts) + 1)
161-[Burn(assetId, 1), IntegerEntry((keyLockedAmount + contractDescArray[3]), newLockedAmount), IntegerEntry(keyTokenCirculatingSupplies, newCirculatingSupplies), IntegerEntry(keyTokenTotalIssuedSupplies, newTotalIssuedSupplies), IntegerEntry((keyAssetOngoingContracts + assetIdString), newAssetOngoingContracts), IntegerEntry((keyAssetBurnedContracts + assetIdString), newAssetBurnedContracts), IntegerEntry(keyTotalOngoingContracts, newTotalOngoingContracts), IntegerEntry(keyTotalBurnedContracts, newTotalBurnedContracts), ScriptTransfer(i.caller, contractAssetAmount, contractAsset.id), Reissue(tokenId, userTokenAmountToReceive, true), ScriptTransfer(i.caller, userTokenAmountToReceive, tokenId)]
177+[Burn(assetId, 1), IntegerEntry((keyLockedAmount + contractDescArray[3]), newLockedAmount), IntegerEntry(keyTokenCirculatingSupplies, newCirculatingSupplies), IntegerEntry(keyTokenTotalIssuedSupplies, newTotalIssuedSupplies), IntegerEntry((keyAssetOngoingContracts + assetIdString), newAssetOngoingContracts), IntegerEntry((keyAssetBurnedContracts + assetIdString), newAssetBurnedContracts), IntegerEntry(keyTotalOngoingContracts, newTotalOngoingContracts), IntegerEntry(keyTotalBurnedContracts, newTotalBurnedContracts), receiptIssue, ScriptTransfer(i.caller, receiptIssue.quantity, receiptId), ScriptTransfer(i.caller, contractAssetAmount, contractAsset.id), Reissue(tokenId, userTokenAmountToReceive, true), ScriptTransfer(i.caller, userTokenAmountToReceive, tokenId)]
162178 }
163179 }
164180 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let versionStakeContract = 1
55
66 let hcSeparator = "___"
77
88 let hcWaves = "WAVES"
99
10+let keydAppURL = "DAPP_URL"
11+
12+let keydAppName = "DAPP_NAME"
13+
1014 let keyStakingWhitelist = "STAKING_WHITELIST"
1115
1216 let keyNonce = "NONCE"
1317
1418 let keyStakeContractName = "StakeContractNFT"
19+
20+let keyStakeReceiptName = "StakeReceiptNFT"
1521
1622 let keyLockedAmount = "LOCKED_AMOUNT_"
1723
1824 let keyTokenCirculatingSupplies = "TOKEN_CIRCULATING_SUPPLIES"
1925
2026 let keyTokenTotalIssuedSupplies = "TOKEN_TOTAL_ISSUED_SUPPLIES"
2127
2228 let keyTokenTotalBurnedSupplies = "TOKEN_TOTAL_BURNED_SUPPLIES"
2329
2430 let keyAssetOngoingContracts = "ASSET_ONGOING_CONTRACTS_"
2531
2632 let keyAssetIssuedContracts = "ASSET_ISSUED_CONTRACTS_"
2733
2834 let keyAssetBurnedContracts = "ASSET_BURNED_CONTRACTS_"
2935
3036 let keyTotalOngoingContracts = "TOTAL_ONGOING_CONTRACTS"
3137
3238 let keyTotalIssuedContracts = "TOTAL_ISSUED_CONTRACTS"
3339
3440 let keyTotalBurnedContracts = "TOTAL_BURNED_CONTRACTS"
3541
3642 let tokenId = base58'7J7kaZgCXKkWFxjths5ZuMGsrkpxoawPBUGaFvzpHe7V'
3743
3844 let tokenEligibilityPerBlock = (10 * 100000000)
3945
4046 func getStringOrEmpty (key) = match getString(this, key) {
4147 case dataFound: String =>
4248 dataFound
4349 case _ =>
4450 ""
4551 }
4652
4753
4854 func getIntegerOrZero (key) = match getInteger(this, key) {
4955 case isAnInteger: Int =>
5056 isAnInteger
5157 case _ =>
5258 0
5359 }
5460
5561
5662 func getNewNonce () = {
5763 let incrNonce = (getIntegerOrZero(keyNonce) + 1)
5864 [parseIntValue((toString(incrNonce) + toString(height))), incrNonce]
5965 }
6066
6167
6268 @Callable(i)
6369 func depositToStake () = if ((this == i.caller))
6470 then throw("dApp can't interact with self")
6571 else if ((size(i.payments) != 1))
6672 then throw("Not a valid amount of payments (require 1)")
6773 else if ((1 > i.payments[0].amount))
6874 then throw("Can't stake negatif or zero")
6975 else {
7076 let assetId = match i.payments[0].assetId {
7177 case isAnAsset: ByteVector =>
7278 toBase58String(isAnAsset)
7379 case _ =>
7480 hcWaves
7581 }
7682 if ((contains(getStringOrEmpty(keyStakingWhitelist), assetId) != true))
7783 then throw("Asset not on staking whitelist")
7884 else {
7985 let nonce = getNewNonce()
8086 let contractDesc = ((((((((toString(versionStakeContract) + hcSeparator) + toString(height)) + hcSeparator) + toBase58String(i.caller.bytes)) + hcSeparator) + assetId) + hcSeparator) + toString(i.payments[0].amount))
8187 let contractIssue = Issue(keyStakeContractName, contractDesc, 1, 0, false, unit, nonce[0])
8288 let contractId = calculateAssetId(contractIssue)
8389 let newLockedAmount = (getIntegerOrZero((keyLockedAmount + assetId)) + i.payments[0].amount)
8490 let newAssetOngoingContracts = (getIntegerOrZero((keyAssetOngoingContracts + assetId)) + 1)
8591 let newAssetIssuedContracts = (getIntegerOrZero((keyAssetIssuedContracts + assetId)) + 1)
8692 let newTotalOngoingContracts = (getIntegerOrZero(keyTotalOngoingContracts) + 1)
8793 let newTotalIssuedContracts = (getIntegerOrZero(keyTotalIssuedContracts) + 1)
8894 [IntegerEntry(keyNonce, nonce[1]), IntegerEntry((keyLockedAmount + assetId), newLockedAmount), IntegerEntry((keyAssetOngoingContracts + assetId), newAssetOngoingContracts), IntegerEntry((keyAssetIssuedContracts + assetId), newAssetIssuedContracts), IntegerEntry(keyTotalOngoingContracts, newTotalOngoingContracts), IntegerEntry(keyTotalIssuedContracts, newTotalIssuedContracts), contractIssue, ScriptTransfer(i.caller, contractIssue.quantity, contractId)]
8995 }
9096 }
9197
9298
9399
94100 @Callable(i)
95101 func withdrawStake () = if ((this == i.caller))
96102 then throw("dApp can't interact with self")
97103 else if ((size(i.payments) != 1))
98104 then throw("Not a valid amount of payments (require 1)")
99105 else if ((1 > i.payments[0].amount))
100106 then throw("Can't stake negatif or zero")
101107 else {
102108 let assetId = match i.payments[0].assetId {
103109 case isByteVector: ByteVector =>
104110 isByteVector
105111 case _ =>
106112 throw("Not an Asset")
107113 }
108114 let contractInfo = match assetInfo(assetId) {
109115 case isAnAsset: Asset =>
110116 isAnAsset
111117 case _ =>
112118 throw("Couldn't find Asset")
113119 }
114120 if (if (if (if (if ((contractInfo.issuer != this))
115121 then true
116122 else (contractInfo.decimals != 0))
117123 then true
118124 else (contractInfo.quantity != 1))
119125 then true
120126 else (contractInfo.reissuable != false))
121127 then true
122128 else (contractInfo.name != keyStakeContractName))
123129 then throw("Not a Contract")
124130 else {
125131 let contractDescArray = split(contractInfo.description, hcSeparator)
126132 let contractVersion = parseIntValue(contractDescArray[0])
127133 let contractStartingHeight = parseIntValue(contractDescArray[1])
128134 let contractStakerId = contractDescArray[2]
129135 let contractAsset = match assetInfo(fromBase58String(contractDescArray[3])) {
130136 case isAnAsset: Asset =>
131137 isAnAsset
132138 case _ =>
133139 throw("Contract error: asset")
134140 }
135141 let contractAssetAmount = parseIntValue(contractDescArray[4])
136142 if ((size(contractDescArray) != 5))
137143 then throw("Contract error: corrupted")
138144 else if ((contractVersion > versionStakeContract))
139145 then throw("Contract error: version")
140146 else if ((contractStartingHeight >= height))
141147 then throw("Contract error: starting height")
142148 else if (if ((1 > contractAssetAmount))
143149 then true
144150 else (contractAssetAmount > contractAsset.quantity))
145151 then throw("Contract error: quantity")
146152 else if ((contractAssetAmount > assetBalance(this, contractAsset.id)))
147153 then throw("Contract error: dApp balance")
148154 else {
149155 let assetIdString = toBase58String(contractAsset.id)
150156 let blocksAway = (height - contractStartingHeight)
151157 let userTokenEligibility = (blocksAway * tokenEligibilityPerBlock)
152158 let currentAssetLockedAmount = getIntegerValue(this, (keyLockedAmount + contractDescArray[3]))
153159 let userTokenAmountToReceive = fraction(userTokenEligibility, contractAssetAmount, currentAssetLockedAmount)
160+ let nonce = getNewNonce()
161+ let tokenInfo = match assetInfo(tokenId) {
162+ case isAnAsset: Asset =>
163+ isAnAsset
164+ case _ =>
165+ throw("Token not existing bro")
166+ }
167+ let receiptDesc = ((((((((((contractStakerId + " has locked ") + toString(contractAssetAmount)) + " ") + contractAsset.name) + " during ") + toString(blocksAway)) + " blocks and received ") + toString(userTokenAmountToReceive)) + " ") + tokenInfo.name)
168+ let receiptIssue = Issue(keyStakeReceiptName, receiptDesc, 1, 0, false, unit, nonce[0])
169+ let receiptId = calculateAssetId(receiptIssue)
154170 let newLockedAmount = (getIntegerValue(this, (keyLockedAmount + contractDescArray[3])) - contractAssetAmount)
155171 let newCirculatingSupplies = (getIntegerOrZero(keyTokenCirculatingSupplies) + userTokenAmountToReceive)
156172 let newTotalIssuedSupplies = (getIntegerOrZero(keyTokenTotalIssuedSupplies) + userTokenAmountToReceive)
157173 let newAssetOngoingContracts = (getIntegerOrZero((keyAssetOngoingContracts + assetIdString)) - 1)
158174 let newAssetBurnedContracts = (getIntegerOrZero((keyAssetBurnedContracts + assetIdString)) + 1)
159175 let newTotalOngoingContracts = (getIntegerOrZero(keyTotalOngoingContracts) - 1)
160176 let newTotalBurnedContracts = (getIntegerOrZero(keyTotalBurnedContracts) + 1)
161-[Burn(assetId, 1), IntegerEntry((keyLockedAmount + contractDescArray[3]), newLockedAmount), IntegerEntry(keyTokenCirculatingSupplies, newCirculatingSupplies), IntegerEntry(keyTokenTotalIssuedSupplies, newTotalIssuedSupplies), IntegerEntry((keyAssetOngoingContracts + assetIdString), newAssetOngoingContracts), IntegerEntry((keyAssetBurnedContracts + assetIdString), newAssetBurnedContracts), IntegerEntry(keyTotalOngoingContracts, newTotalOngoingContracts), IntegerEntry(keyTotalBurnedContracts, newTotalBurnedContracts), ScriptTransfer(i.caller, contractAssetAmount, contractAsset.id), Reissue(tokenId, userTokenAmountToReceive, true), ScriptTransfer(i.caller, userTokenAmountToReceive, tokenId)]
177+[Burn(assetId, 1), IntegerEntry((keyLockedAmount + contractDescArray[3]), newLockedAmount), IntegerEntry(keyTokenCirculatingSupplies, newCirculatingSupplies), IntegerEntry(keyTokenTotalIssuedSupplies, newTotalIssuedSupplies), IntegerEntry((keyAssetOngoingContracts + assetIdString), newAssetOngoingContracts), IntegerEntry((keyAssetBurnedContracts + assetIdString), newAssetBurnedContracts), IntegerEntry(keyTotalOngoingContracts, newTotalOngoingContracts), IntegerEntry(keyTotalBurnedContracts, newTotalBurnedContracts), receiptIssue, ScriptTransfer(i.caller, receiptIssue.quantity, receiptId), ScriptTransfer(i.caller, contractAssetAmount, contractAsset.id), Reissue(tokenId, userTokenAmountToReceive, true), ScriptTransfer(i.caller, userTokenAmountToReceive, tokenId)]
162178 }
163179 }
164180 }
165181
166182
167183 @Verifier(tx)
168184 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
169185

github/deemru/w8io/169f3d6 
68.01 ms