tx · FWvrcnQr966wcUvd7mFgieYb8t4XZSeuj8aMUcaxV2eA

3PR87TwfWio6HVUScSaHGMnFYkGyaVdFeqT:  -0.01400000 Waves

2021.10.18 14:51 [2816647] smart account 3PR87TwfWio6HVUScSaHGMnFYkGyaVdFeqT > SELF 0.00000000 Waves

{ "type": 13, "id": "FWvrcnQr966wcUvd7mFgieYb8t4XZSeuj8aMUcaxV2eA", "fee": 1400000, "feeAssetId": null, "timestamp": 1634557891504, "version": 2, "chainId": 87, "sender": "3PR87TwfWio6HVUScSaHGMnFYkGyaVdFeqT", "senderPublicKey": "DvzM1HgWkv7KTs8nozoqi2VnCgL56k1kFNgpTCYNqt9S", "proofs": [ "3ykohVmc3GFBDGSojwgWnZnxRj66gQW3jbkx4ePvcmZHuCDPYFSPYL83MmKnmwCVoFL2w9UczhxitLJPoHaW14ta" ], "script": "base64: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bnRsZU5GVAkABEIAAAAFAgAAAA1EVUNLLU1BTlRMRS0wAgAAACBbQXJ0ZWZhY3RdIE1hbnRsZSBORlQgZm9yIEplZHVjawAAAAAAAAAAAQAAAAAAAAAAAAcEAAAAC21hbnRsZU5mdElkCQAEOAAAAAEFAAAADmlzc3VlTWFudGxlTkZUBAAAAAxrTWFudGxlTGV2ZWwJAQAAABBrZXlBcnRlZmFjdExldmVsAAAAAwUAAAAKTUFOVExFTkFNRQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAC21hbnRsZU5mdElkBAAAAA1rTWFudGxlRXhpc3RzCQEAAAARa2V5QXJ0ZWZhY3RFeGlzdHMAAAACBQAAAApNQU5UTEVOQU1FBQAAAAttYW50bGVOZnRJZAQAAAAMa01hbnRsZU93bmVyCQEAAAAQa2V5QXJ0ZWZhY3RPd25lcgAAAAIFAAAACk1BTlRMRU5BTUUFAAAAC21hbnRsZU5mdElkBAAAAA1rTWFudGxlU3RhdHVzCQEAAAARa2V5QXJ0ZWZhY3RTdGF0dXMAAAACBQAAAApNQU5UTEVOQU1FBQAAAAttYW50bGVOZnRJZAQAAAANa0FydGVmYWN0VHlwZQkBAAAAD2tleUFydGVmYWN0VHlwZQAAAAEFAAAAC21hbnRsZU5mdElkBAAAAA9rTWFudGxlSW52ZXN0ZWQJAQAAABNrZXlBcnRlZmFjdEludmVzdGVkAAAAAgUAAAAKTUFOVExFTkFNRQkAAlgAAAABBQAAAAttYW50bGVOZnRJZAQAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMJAQAAABlrZXlBcnRlZmFjdE93bmVyQW5kU3RhdHVzAAAAAwUAAAAKTUFOVExFTkFNRQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAC21hbnRsZU5mdElkBAAAABJrT25seUFydGVmYWN0TGV2ZWwJAQAAABRrZXlPbmx5QXJ0ZWZhY3RMZXZlbAAAAAEFAAAAC21hbnRsZU5mdElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrTWFudGxlTGV2ZWwAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tNYW50bGVJbnZlc3RlZAUAAAALTUFOVExFUFJJQ0UJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAADWtNYW50bGVFeGlzdHMGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADGtNYW50bGVPd25lcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa01hbnRsZVN0YXR1cwUAAAAKU1RBVFVTRlJFRQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rQXJ0ZWZhY3RUeXBlBQAAAApNQU5UTEVOQU1FCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAF2tBcnRlZmFjdE93bmVyQW5kU3RhdHVzBQAAAApTVEFUVVNGUkVFCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrT25seUFydGVmYWN0TGV2ZWwAAAAAAAAAAAEFAAAAA25pbAAAAAFpAQAAAA11cGdyYWRlTWFudGxlAAAAAQAAAAphcnRlZmFjdElkBAAAABF1cGdyYWRlUG9pbnRQcmljZQAAAAAAAA9CQAQAAAAMZmlyc3RQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkBQAAAAplZ2dBc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAA8WW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQACWAAAAAEFAAAACmVnZ0Fzc2V0SWQDCQAAZgAAAAIFAAAAEXVwZ3JhZGVQb2ludFByaWNlCAUAAAAMZmlyc3RQYXltZW50AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAKU1pbmltYWwgcGF5bWVudCBmb3IgdXBncmFkaW5nIG1hbnRsZSBpczogCQABpAAAAAEFAAAAEXVwZ3JhZGVQb2ludFByaWNlBAAAAA1rTWFudGxlRXhpc3RzCQEAAAARa2V5QXJ0ZWZhY3RFeGlzdHMAAAACBQAAAApNQU5UTEVOQU1FCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADGtNYW50bGVPd25lcgkBAAAAEGtleUFydGVmYWN0T3duZXIAAAACBQAAAApNQU5UTEVOQU1FCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADG1hbnRsZUV4aXN0cwkBAAAAEUBleHRyTmF0aXZlKDEwNTYpAAAAAQUAAAANa01hbnRsZUV4aXN0cwQAAAALbWFudGxlT3duZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAADGtNYW50bGVPd25lcgMJAQAAAAEhAAAAAQUAAAAMbWFudGxlRXhpc3RzCQAAAgAAAAECAAAAJU1hbnRsZSB3aXRoIHN1Y2ggYW4gSUQgZG9lcyBub3QgZXhpc3QDCQEAAAACIT0AAAACBQAAAAttYW50bGVPd25lcgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAAACAAAAAQIAAAAhWW91J3JlIG5vdCBhbiBvd25lciBvZiB0aGUgbWFudGxlBAAAAA9rTWFudGxlSW52ZXN0ZWQJAQAAABNrZXlBcnRlZmFjdEludmVzdGVkAAAAAgUAAAAKTUFOVExFTkFNRQUAAAAKYXJ0ZWZhY3RJZAQAAAAVbWFudGxlQWxyZWFkeUludmVzdGVkCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAAA9rTWFudGxlSW52ZXN0ZWQEAAAADGtNYW50bGVMZXZlbAkBAAAAEGtleUFydGVmYWN0TGV2ZWwAAAADBQAAAApNQU5UTEVOQU1FCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkAAlkAAAABBQAAAAphcnRlZmFjdElkBAAAABJrT25seUFydGVmYWN0TGV2ZWwJAQAAABRrZXlPbmx5QXJ0ZWZhY3RMZXZlbAAAAAEJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAANdG90YWxJbnZlc3RlZAkAAGQAAAACBQAAABVtYW50bGVBbHJlYWR5SW52ZXN0ZWQIBQAAAAxmaXJzdFBheW1lbnQAAAAGYW1vdW50BAAAAAhuZXdMZXZlbAkAAGkAAAACCQAAZAAAAAIJAABoAAAAAgAAAAAAAAAACgkAAGwAAAAGBQAAAA10b3RhbEludmVzdGVkAAAAAAAAAAAIAAAAAAAAAAAGAAAAAAAAAAABAAAAAAAAAAAIBQAAAAZIQUxGVVAAAAAAAAX14QAAAAAAAAX14QAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtNYW50bGVMZXZlbAUAAAAIbmV3TGV2ZWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tNYW50bGVJbnZlc3RlZAUAAAANdG90YWxJbnZlc3RlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa09ubHlBcnRlZmFjdExldmVsBQAAAAhuZXdMZXZlbAUAAAADbmlsAAAAAWkBAAAADXB1dE9uQXJ0ZWZhY3QAAAABAAAACmFydGVmYWN0SWQEAAAADGZpcnN0UGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAARYXR0YWNoZWRBc3NldEluZm8JAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAwMJAQAAAAIhPQAAAAIICAUAAAARYXR0YWNoZWRBc3NldEluZm8AAAAGaXNzdWVyAAAABWJ5dGVzBQAAABFpbmN1YmF0b3JDb250cmFjdAkBAAAAAiE9AAAAAggIBQAAABFhdHRhY2hlZEFzc2V0SW5mbwAAAAZpc3N1ZXIAAAAFYnl0ZXMFAAAAD2JyZWVkZXJDb250cmFjdAcJAAACAAAAAQIAAAA5WW91IGNhbiBhdHRhY2ggb25seSBEVUNLcyBpc3N1ZWQgYnkgaW5jdWJhdG9yIG9yIGJyZWVkZXIgBAAAAA1rTWFudGxlRXhpc3RzCQEAAAARa2V5QXJ0ZWZhY3RFeGlzdHMAAAACBQAAAApNQU5UTEVOQU1FCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADGtNYW50bGVPd25lcgkBAAAAEGtleUFydGVmYWN0T3duZXIAAAACBQAAAApNQU5UTEVOQU1FCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADWtNYW50bGVTdGF0dXMJAQAAABFrZXlBcnRlZmFjdFN0YXR1cwAAAAIFAAAACk1BTlRMRU5BTUUJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMJAQAAABlrZXlBcnRlZmFjdE93bmVyQW5kU3RhdHVzAAAAAwUAAAAKTUFOVExFTkFNRQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAAJa0R1Y2tMb2NrCQEAAAALa2V5RHVja0xvY2sAAAACCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAAMZmlyc3RQYXltZW50AAAAB2Fzc2V0SWQEAAAADG1hbnRsZUV4aXN0cwkBAAAAEUBleHRyTmF0aXZlKDEwNTYpAAAAAQUAAAANa01hbnRsZUV4aXN0cwQAAAALbWFudGxlT3duZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAADGtNYW50bGVPd25lcgQAAAAMbWFudGxlU3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABBQAAAA1rTWFudGxlU3RhdHVzBAAAABFrQXJ0ZWZhY3RJZEJ5VHlwZQkBAAAAGmtleUFydGVmYWN0SWRCeUR1Y2tBbmRUeXBlAAAAAgUAAAAKTUFOVExFTkFNRQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAwkBAAAAASEAAAABBQAAAAxtYW50bGVFeGlzdHMJAAACAAAAAQIAAAAlTWFudGxlIHdpdGggc3VjaCBhbiBJRCBkb2VzIG5vdCBleGlzdAMJAQAAAAIhPQAAAAIFAAAAC21hbnRsZU93bmVyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkAAAIAAAABAgAAACFZb3UncmUgbm90IGFuIG93bmVyIG9mIHRoZSBtYW50bGUDCQEAAAACIT0AAAACBQAAAAxtYW50bGVTdGF0dXMFAAAAClNUQVRVU0ZSRUUJAAACAAAAAQIAAAAXTWFudGxlIGlzIGFscmVhZHkgdXNlZCEEAAAADmtQdXRPbkFydGVmYWN0CQEAAAAQa2V5UHV0T25BcnRlZmFjdAAAAAQFAAAACk1BTlRMRU5BTUUJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAxmaXJzdFBheW1lbnQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphcnRlZmFjdElkCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA5rUHV0T25BcnRlZmFjdAYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa01hbnRsZVN0YXR1cwUAAAAOU1RBVFVTT0NDVVBJRUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMFAAAADlNUQVRVU09DQ1VQSUVECQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrRHVja0xvY2sGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEWtBcnRlZmFjdElkQnlUeXBlBQAAAAphcnRlZmFjdElkBQAAAANuaWwAAAABaQEAAAAPdGFrZU9mZkFydGVmYWN0AAAAAgAAAAZkdWNrSWQAAAAMYXJ0ZWZhY3RUeXBlBAAAABhrQXJ0ZWZhY3RJZEJ5VHlwZUFuZER1Y2sJAQAAABprZXlBcnRlZmFjdElkQnlEdWNrQW5kVHlwZQAAAAIFAAAADGFydGVmYWN0VHlwZQkAAlkAAAABBQAAAAZkdWNrSWQEAAAACmFydGVmYWN0SWQJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAAGGtBcnRlZmFjdElkQnlUeXBlQW5kRHVjawQAAAANa0FydGVmYWN0VHlwZQkBAAAAD2tleUFydGVmYWN0VHlwZQAAAAEJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAAOa1B1dE9uQXJ0ZWZhY3QJAQAAABBrZXlQdXRPbkFydGVmYWN0AAAABAUAAAAMYXJ0ZWZhY3RUeXBlCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAAGZHVja0lkCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAAFGtQdXRPbkFydGVmYWN0U3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1NikAAAABBQAAAA5rUHV0T25BcnRlZmFjdAQAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMJAQAAABlrZXlBcnRlZmFjdE93bmVyQW5kU3RhdHVzAAAAAwUAAAAMYXJ0ZWZhY3RUeXBlCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkAAlkAAAABBQAAAAphcnRlZmFjdElkBAAAAAlrRHVja0xvY2sJAQAAAAtrZXlEdWNrTG9jawAAAAIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBQAAAAZkdWNrSWQEAAAADWtNYW50bGVTdGF0dXMJAQAAABFrZXlBcnRlZmFjdFN0YXR1cwAAAAIFAAAADGFydGVmYWN0VHlwZQkAAlkAAAABBQAAAAphcnRlZmFjdElkAwkBAAAAAiE9AAAAAgUAAAAUa1B1dE9uQXJ0ZWZhY3RTdGF0dXMGCQAAAgAAAAECAAAAJlRoZXJlIGlzIG5vIGR1Y2sgd2l0aCBzdWNoIHBhcmFtZXRlcmVzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAADmtQdXRPbkFydGVmYWN0CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAGGtBcnRlZmFjdElkQnlUeXBlQW5kRHVjawkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAlrRHVja0xvY2sJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa01hbnRsZVN0YXR1cwUAAAAKU1RBVFVTRlJFRQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABdrQXJ0ZWZhY3RPd25lckFuZFN0YXR1cwUAAAAKU1RBVFVTRlJFRQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIAAAAAAAAAAAEJAAJZAAAAAQUAAAAGZHVja0lkBQAAAANuaWwAAAABaQEAAAAQdW5sb2NrTmZ0Rm9yV2FycwAAAAEAAAAEa2V5cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQEAAAAgD3csaoTE7s0q+LUFTqhxhL0WVCTh231y++NV3LUuGBIJAAACAAAAAQIAAAAXQ2Fubm90IGNhbGwgdGhpcyBtZXRob2QEAAAACGtleXNMaXN0CQAEtQAAAAIFAAAABGtleXMCAAAAATsDCQAAZgAAAAIJAAGQAAAAAQUAAAAIa2V5c0xpc3QAAAAAAAAAAAoJAAACAAAAAQIAAAA3WW91IGNhbm5vdCB1bmxvY2sgbW9yZSB0aGFuIDEwIGR1Y2tzIGluIG9uZSB0cmFuc2FjdGlvbgoBAAAAE2hhbmRsZVVubG9ja09uZUR1Y2sAAAACAAAABWFjY3VtAAAAA2tleQQAAAAJa0R1Y2tMb2NrCQAEtQAAAAIFAAAAA2tleQIAAAABXwkABE4AAAACBQAAAAVhY2N1bQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAANrZXkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAABXZhbHVlAAAAAQkAAZEAAAACBQAAAAlrRHVja0xvY2sAAAAAAAAAAAEAAAAAAAAAAAEJAAJZAAAAAQkBAAAABXZhbHVlAAAAAQkAAZEAAAACBQAAAAlrRHVja0xvY2sAAAAAAAAAAAMFAAAAA25pbAoAAAAAAiRsBQAAAAhrZXlzTGlzdAoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAAATEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAATaGFuZGxlVW5sb2NrT25lRHVjawAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAAATIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAABMgAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQvAQGA=", "height": 2816647, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B8TZKnnnYgzvq3mu8LbBC3MBLLnuez6nbZxsDXbcXAW7 Next: 4upyY3bhk9de1fu6BSGkbYphdfb4gDBHVkmHiebuyH9T Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let breederContract = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
4+let breederContract = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y'
55
6-let incubatorContract = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
6+let incubatorContract = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM'
7+
8+let eggAssetId = base58'3v7zGkeHS6KrsvmTRzEzvCxm5cdzkCtM7z5cM6efcjCB'
9+
10+let MANTLENAME = "mantle"
11+
12+let STATUSFREE = "FREE"
13+
14+let STATUSOCCUPIED = "OCCUPIED"
715
816 func keyDuckLock (callerAddress,duckId) = (((("address_" + callerAddress) + "_duck_") + duckId) + "_status")
917
1018
19+func keyInvestor (callerAddress) = (("address_" + callerAddress) + "_amount")
20+
21+
22+func keyArtefactInvested (type,artefactId) = (((("artefact_" + type) + "_artefactId_") + artefactId) + "_invested")
23+
24+
25+func keyOnlyArtefactLevel (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_level")
26+
27+
28+func keyArtefactIdByDuckAndType (type,duckId) = (((("artefact_ " + type) + "_duck_") + toBase58String(duckId)) + "_artefactId")
29+
30+
31+func keyArtefactOwner (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_owner")
32+
33+
34+func keyArtefactOwnerAndStatus (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status")
35+
36+
37+func keyArtefactStatus (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_status")
38+
39+
40+func keyArtefactType (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_type")
41+
42+
43+func keyArtefactLevel (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_level")
44+
45+
46+func keyPutOnArtefact (type,owner,duckId,artefactId) = (((((((("address_" + owner) + "_duck_") + duckId) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status")
47+
48+
49+func keyArtefactExists (type,artefactId) = ((("artefact_" + type) + "_artefactId_") + toBase58String(artefactId))
50+
51+
1152 @Callable(i)
12-func lockNftForWars () = {
13- func handlePayment (accum,payment) = {
14- let assetId = value(payment.assetId)
15- let nft = valueOrErrorMessage(assetInfo(assetId), ("There is not asset with such an id " + toBase58String(assetId)))
16- if (if ((nft.issuer != Address(breederContract)))
17- then (nft.issuer != Address(incubatorContract))
18- else false)
19- then throw("NFT was NOT issued by WavesDucks contracts")
20- else {
21- let kDuckLock = keyDuckLock(toString(i.originCaller), toBase58String(assetId))
22- (accum ++ [BooleanEntry(kDuckLock, true)])
23- }
53+func buyArtefact (type) = if ((type != MANTLENAME))
54+ then throw("You can buy only mantles now")
55+ else {
56+ let MANTLEPRICE = 1000000
57+ let firstPayment = value(i.payments[0])
58+ if ((firstPayment.assetId != eggAssetId))
59+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggAssetId)))
60+ else if ((firstPayment.amount != MANTLEPRICE))
61+ then throw(("To buy a mantle you currently need the following amount of EGGlets: " + toString(MANTLEPRICE)))
62+ else {
63+ let issueMantleNFT = Issue("DUCK-MANTLE-0", "[Artefact] Mantle NFT for Jeduck", 1, 0, false)
64+ let mantleNftId = calculateAssetId(issueMantleNFT)
65+ let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.caller), mantleNftId)
66+ let kMantleExists = keyArtefactExists(MANTLENAME, mantleNftId)
67+ let kMantleOwner = keyArtefactOwner(MANTLENAME, mantleNftId)
68+ let kMantleStatus = keyArtefactStatus(MANTLENAME, mantleNftId)
69+ let kArtefactType = keyArtefactType(mantleNftId)
70+ let kMantleInvested = keyArtefactInvested(MANTLENAME, toBase58String(mantleNftId))
71+ let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.caller), mantleNftId)
72+ let kOnlyArtefactLevel = keyOnlyArtefactLevel(mantleNftId)
73+[IntegerEntry(kMantleLevel, 1), IntegerEntry(kMantleInvested, MANTLEPRICE), BooleanEntry(kMantleExists, true), StringEntry(kMantleOwner, toString(i.caller)), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactType, MANTLENAME), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), IntegerEntry(kOnlyArtefactLevel, 1)]
74+ }
2475 }
2576
26- let $l = i.payments
27- let $s = size($l)
28- let $acc0 = nil
29- func 1 ($a,$i) = if (($i >= $s))
30- then $a
31- else handlePayment($a, $l[$i])
3277
33- func 2 ($a,$i) = if (($i >= $s))
34- then $a
35- else throw("List size exceeds 10")
3678
37- 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
79+@Callable(i)
80+func upgradeMantle (artefactId) = {
81+ let upgradePointPrice = 1000000
82+ let firstPayment = value(i.payments[0])
83+ if ((firstPayment.assetId != eggAssetId))
84+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggAssetId)))
85+ else if ((upgradePointPrice > firstPayment.amount))
86+ then throw(("Minimal payment for upgrading mantle is: " + toString(upgradePointPrice)))
87+ else {
88+ let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId))
89+ let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId))
90+ let mantleExists = getBooleanValue(kMantleExists)
91+ let mantleOwner = getStringValue(kMantleOwner)
92+ if (!(mantleExists))
93+ then throw("Mantle with such an ID does not exist")
94+ else if ((mantleOwner != toString(i.originCaller)))
95+ then throw("You're not an owner of the mantle")
96+ else {
97+ let kMantleInvested = keyArtefactInvested(MANTLENAME, artefactId)
98+ let mantleAlreadyInvested = getIntegerValue(kMantleInvested)
99+ let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId))
100+ let kOnlyArtefactLevel = keyOnlyArtefactLevel(fromBase58String(artefactId))
101+ let totalInvested = (mantleAlreadyInvested + firstPayment.amount)
102+ let newLevel = (((10 * pow(totalInvested, 8, 6, 1, 8, HALFUP)) + 100000000) / 100000000)
103+[IntegerEntry(kMantleLevel, newLevel), IntegerEntry(kMantleInvested, totalInvested), IntegerEntry(kOnlyArtefactLevel, newLevel)]
104+ }
105+ }
38106 }
39107
40108
41109
42110 @Callable(i)
43-func unlockNftForWars (duckIds) = {
44- let duckIdsList = split(duckIds, ";")
45- if ((size(duckIdsList) > 10))
46- then throw("You cannot unlock more than 10 ducks in one transaction")
111+func putOnArtefact (artefactId) = {
112+ let firstPayment = value(i.payments[0])
113+ let attachedAssetInfo = value(assetInfo(value(firstPayment.assetId)))
114+ if (if ((attachedAssetInfo.issuer.bytes != incubatorContract))
115+ then (attachedAssetInfo.issuer.bytes != breederContract)
116+ else false)
117+ then throw("You can attach only DUCKs issued by incubator or breeder ")
47118 else {
48- func handleUnlockOneDuck (accum,duckId) = {
49- let kDuckLock = keyDuckLock(toString(i.originCaller), duckId)
50- let duckLockedValue = getBoolean(this, kDuckLock)
51- let duckIsLocked = match duckLockedValue {
52- case t: Boolean =>
53- t
54- case _ =>
55- false
56- }
57- if ((duckIsLocked == false))
58- then throw(("Whhhhat, the duck is not locked by you: " + duckId))
59- else (accum ++ [DeleteEntry(kDuckLock), ScriptTransfer(i.originCaller, 1, fromBase58String(duckId))])
60- }
61-
62- let $l = duckIdsList
63- let $s = size($l)
64- let $acc0 = nil
65- func 1 ($a,$i) = if (($i >= $s))
66- then $a
67- else handleUnlockOneDuck($a, $l[$i])
68-
69- func 2 ($a,$i) = if (($i >= $s))
70- then $a
71- else throw("List size exceeds 10")
72-
73- 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
119+ let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId))
120+ let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId))
121+ let kMantleStatus = keyArtefactStatus(MANTLENAME, fromBase58String(artefactId))
122+ let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId))
123+ let kDuckLock = keyDuckLock(toString(i.originCaller), toBase58String(value(firstPayment.assetId)))
124+ let mantleExists = getBooleanValue(kMantleExists)
125+ let mantleOwner = getStringValue(kMantleOwner)
126+ let mantleStatus = getStringValue(kMantleStatus)
127+ let kArtefactIdByType = keyArtefactIdByDuckAndType(MANTLENAME, value(firstPayment.assetId))
128+ if (!(mantleExists))
129+ then throw("Mantle with such an ID does not exist")
130+ else if ((mantleOwner != toString(i.originCaller)))
131+ then throw("You're not an owner of the mantle")
132+ else if ((mantleStatus != STATUSFREE))
133+ then throw("Mantle is already used!")
134+ else {
135+ let kPutOnArtefact = keyPutOnArtefact(MANTLENAME, toString(i.originCaller), toBase58String(value(firstPayment.assetId)), fromBase58String(artefactId))
136+[BooleanEntry(kPutOnArtefact, true), StringEntry(kMantleStatus, STATUSOCCUPIED), StringEntry(kArtefactOwnerAndStatus, STATUSOCCUPIED), BooleanEntry(kDuckLock, true), StringEntry(kArtefactIdByType, artefactId)]
137+ }
74138 }
75139 }
140+
141+
142+
143+@Callable(i)
144+func takeOffArtefact (duckId,artefactType) = {
145+ let kArtefactIdByTypeAndDuck = keyArtefactIdByDuckAndType(artefactType, fromBase58String(duckId))
146+ let artefactId = getStringValue(kArtefactIdByTypeAndDuck)
147+ let kArtefactType = keyArtefactType(fromBase58String(artefactId))
148+ let kPutOnArtefact = keyPutOnArtefact(artefactType, toString(i.originCaller), duckId, fromBase58String(artefactId))
149+ let kPutOnArtefactStatus = getBooleanValue(kPutOnArtefact)
150+ let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(artefactType, toString(i.originCaller), fromBase58String(artefactId))
151+ let kDuckLock = keyDuckLock(toString(i.originCaller), duckId)
152+ let kMantleStatus = keyArtefactStatus(artefactType, fromBase58String(artefactId))
153+ if ((kPutOnArtefactStatus != true))
154+ then throw("There is no duck with such parameteres")
155+ else [DeleteEntry(kPutOnArtefact), DeleteEntry(kArtefactIdByTypeAndDuck), DeleteEntry(kDuckLock), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), ScriptTransfer(i.originCaller, 1, fromBase58String(duckId))]
156+ }
157+
158+
159+
160+@Callable(i)
161+func unlockNftForWars (keys) = if ((i.callerPublicKey != base58'23NWm7kUDQqbTVkirjd5JXWRZaWVoS4ZesmRNHicBa3T'))
162+ then throw("Cannot call this method")
163+ else {
164+ let keysList = split(keys, ";")
165+ if ((size(keysList) > 10))
166+ then throw("You cannot unlock more than 10 ducks in one transaction")
167+ else {
168+ func handleUnlockOneDuck (accum,key) = {
169+ let kDuckLock = split(key, "_")
170+ (accum ++ [DeleteEntry(key), ScriptTransfer(addressFromStringValue(value(kDuckLock[1])), 1, fromBase58String(value(kDuckLock[3])))])
171+ }
172+
173+ let $l = keysList
174+ let $s = size($l)
175+ let $acc0 = nil
176+ func 1 ($a,$i) = if (($i >= $s))
177+ then $a
178+ else handleUnlockOneDuck($a, $l[$i])
179+
180+ func 2 ($a,$i) = if (($i >= $s))
181+ then $a
182+ else throw("List size exceeds 10")
183+
184+ 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
185+ }
186+ }
76187
77188
78189 @Verifier(tx)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let breederContract = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
4+let breederContract = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y'
55
6-let incubatorContract = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
6+let incubatorContract = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM'
7+
8+let eggAssetId = base58'3v7zGkeHS6KrsvmTRzEzvCxm5cdzkCtM7z5cM6efcjCB'
9+
10+let MANTLENAME = "mantle"
11+
12+let STATUSFREE = "FREE"
13+
14+let STATUSOCCUPIED = "OCCUPIED"
715
816 func keyDuckLock (callerAddress,duckId) = (((("address_" + callerAddress) + "_duck_") + duckId) + "_status")
917
1018
19+func keyInvestor (callerAddress) = (("address_" + callerAddress) + "_amount")
20+
21+
22+func keyArtefactInvested (type,artefactId) = (((("artefact_" + type) + "_artefactId_") + artefactId) + "_invested")
23+
24+
25+func keyOnlyArtefactLevel (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_level")
26+
27+
28+func keyArtefactIdByDuckAndType (type,duckId) = (((("artefact_ " + type) + "_duck_") + toBase58String(duckId)) + "_artefactId")
29+
30+
31+func keyArtefactOwner (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_owner")
32+
33+
34+func keyArtefactOwnerAndStatus (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status")
35+
36+
37+func keyArtefactStatus (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_status")
38+
39+
40+func keyArtefactType (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_type")
41+
42+
43+func keyArtefactLevel (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_level")
44+
45+
46+func keyPutOnArtefact (type,owner,duckId,artefactId) = (((((((("address_" + owner) + "_duck_") + duckId) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status")
47+
48+
49+func keyArtefactExists (type,artefactId) = ((("artefact_" + type) + "_artefactId_") + toBase58String(artefactId))
50+
51+
1152 @Callable(i)
12-func lockNftForWars () = {
13- func handlePayment (accum,payment) = {
14- let assetId = value(payment.assetId)
15- let nft = valueOrErrorMessage(assetInfo(assetId), ("There is not asset with such an id " + toBase58String(assetId)))
16- if (if ((nft.issuer != Address(breederContract)))
17- then (nft.issuer != Address(incubatorContract))
18- else false)
19- then throw("NFT was NOT issued by WavesDucks contracts")
20- else {
21- let kDuckLock = keyDuckLock(toString(i.originCaller), toBase58String(assetId))
22- (accum ++ [BooleanEntry(kDuckLock, true)])
23- }
53+func buyArtefact (type) = if ((type != MANTLENAME))
54+ then throw("You can buy only mantles now")
55+ else {
56+ let MANTLEPRICE = 1000000
57+ let firstPayment = value(i.payments[0])
58+ if ((firstPayment.assetId != eggAssetId))
59+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggAssetId)))
60+ else if ((firstPayment.amount != MANTLEPRICE))
61+ then throw(("To buy a mantle you currently need the following amount of EGGlets: " + toString(MANTLEPRICE)))
62+ else {
63+ let issueMantleNFT = Issue("DUCK-MANTLE-0", "[Artefact] Mantle NFT for Jeduck", 1, 0, false)
64+ let mantleNftId = calculateAssetId(issueMantleNFT)
65+ let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.caller), mantleNftId)
66+ let kMantleExists = keyArtefactExists(MANTLENAME, mantleNftId)
67+ let kMantleOwner = keyArtefactOwner(MANTLENAME, mantleNftId)
68+ let kMantleStatus = keyArtefactStatus(MANTLENAME, mantleNftId)
69+ let kArtefactType = keyArtefactType(mantleNftId)
70+ let kMantleInvested = keyArtefactInvested(MANTLENAME, toBase58String(mantleNftId))
71+ let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.caller), mantleNftId)
72+ let kOnlyArtefactLevel = keyOnlyArtefactLevel(mantleNftId)
73+[IntegerEntry(kMantleLevel, 1), IntegerEntry(kMantleInvested, MANTLEPRICE), BooleanEntry(kMantleExists, true), StringEntry(kMantleOwner, toString(i.caller)), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactType, MANTLENAME), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), IntegerEntry(kOnlyArtefactLevel, 1)]
74+ }
2475 }
2576
26- let $l = i.payments
27- let $s = size($l)
28- let $acc0 = nil
29- func 1 ($a,$i) = if (($i >= $s))
30- then $a
31- else handlePayment($a, $l[$i])
3277
33- func 2 ($a,$i) = if (($i >= $s))
34- then $a
35- else throw("List size exceeds 10")
3678
37- 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
79+@Callable(i)
80+func upgradeMantle (artefactId) = {
81+ let upgradePointPrice = 1000000
82+ let firstPayment = value(i.payments[0])
83+ if ((firstPayment.assetId != eggAssetId))
84+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggAssetId)))
85+ else if ((upgradePointPrice > firstPayment.amount))
86+ then throw(("Minimal payment for upgrading mantle is: " + toString(upgradePointPrice)))
87+ else {
88+ let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId))
89+ let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId))
90+ let mantleExists = getBooleanValue(kMantleExists)
91+ let mantleOwner = getStringValue(kMantleOwner)
92+ if (!(mantleExists))
93+ then throw("Mantle with such an ID does not exist")
94+ else if ((mantleOwner != toString(i.originCaller)))
95+ then throw("You're not an owner of the mantle")
96+ else {
97+ let kMantleInvested = keyArtefactInvested(MANTLENAME, artefactId)
98+ let mantleAlreadyInvested = getIntegerValue(kMantleInvested)
99+ let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId))
100+ let kOnlyArtefactLevel = keyOnlyArtefactLevel(fromBase58String(artefactId))
101+ let totalInvested = (mantleAlreadyInvested + firstPayment.amount)
102+ let newLevel = (((10 * pow(totalInvested, 8, 6, 1, 8, HALFUP)) + 100000000) / 100000000)
103+[IntegerEntry(kMantleLevel, newLevel), IntegerEntry(kMantleInvested, totalInvested), IntegerEntry(kOnlyArtefactLevel, newLevel)]
104+ }
105+ }
38106 }
39107
40108
41109
42110 @Callable(i)
43-func unlockNftForWars (duckIds) = {
44- let duckIdsList = split(duckIds, ";")
45- if ((size(duckIdsList) > 10))
46- then throw("You cannot unlock more than 10 ducks in one transaction")
111+func putOnArtefact (artefactId) = {
112+ let firstPayment = value(i.payments[0])
113+ let attachedAssetInfo = value(assetInfo(value(firstPayment.assetId)))
114+ if (if ((attachedAssetInfo.issuer.bytes != incubatorContract))
115+ then (attachedAssetInfo.issuer.bytes != breederContract)
116+ else false)
117+ then throw("You can attach only DUCKs issued by incubator or breeder ")
47118 else {
48- func handleUnlockOneDuck (accum,duckId) = {
49- let kDuckLock = keyDuckLock(toString(i.originCaller), duckId)
50- let duckLockedValue = getBoolean(this, kDuckLock)
51- let duckIsLocked = match duckLockedValue {
52- case t: Boolean =>
53- t
54- case _ =>
55- false
56- }
57- if ((duckIsLocked == false))
58- then throw(("Whhhhat, the duck is not locked by you: " + duckId))
59- else (accum ++ [DeleteEntry(kDuckLock), ScriptTransfer(i.originCaller, 1, fromBase58String(duckId))])
60- }
61-
62- let $l = duckIdsList
63- let $s = size($l)
64- let $acc0 = nil
65- func 1 ($a,$i) = if (($i >= $s))
66- then $a
67- else handleUnlockOneDuck($a, $l[$i])
68-
69- func 2 ($a,$i) = if (($i >= $s))
70- then $a
71- else throw("List size exceeds 10")
72-
73- 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
119+ let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId))
120+ let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId))
121+ let kMantleStatus = keyArtefactStatus(MANTLENAME, fromBase58String(artefactId))
122+ let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId))
123+ let kDuckLock = keyDuckLock(toString(i.originCaller), toBase58String(value(firstPayment.assetId)))
124+ let mantleExists = getBooleanValue(kMantleExists)
125+ let mantleOwner = getStringValue(kMantleOwner)
126+ let mantleStatus = getStringValue(kMantleStatus)
127+ let kArtefactIdByType = keyArtefactIdByDuckAndType(MANTLENAME, value(firstPayment.assetId))
128+ if (!(mantleExists))
129+ then throw("Mantle with such an ID does not exist")
130+ else if ((mantleOwner != toString(i.originCaller)))
131+ then throw("You're not an owner of the mantle")
132+ else if ((mantleStatus != STATUSFREE))
133+ then throw("Mantle is already used!")
134+ else {
135+ let kPutOnArtefact = keyPutOnArtefact(MANTLENAME, toString(i.originCaller), toBase58String(value(firstPayment.assetId)), fromBase58String(artefactId))
136+[BooleanEntry(kPutOnArtefact, true), StringEntry(kMantleStatus, STATUSOCCUPIED), StringEntry(kArtefactOwnerAndStatus, STATUSOCCUPIED), BooleanEntry(kDuckLock, true), StringEntry(kArtefactIdByType, artefactId)]
137+ }
74138 }
75139 }
140+
141+
142+
143+@Callable(i)
144+func takeOffArtefact (duckId,artefactType) = {
145+ let kArtefactIdByTypeAndDuck = keyArtefactIdByDuckAndType(artefactType, fromBase58String(duckId))
146+ let artefactId = getStringValue(kArtefactIdByTypeAndDuck)
147+ let kArtefactType = keyArtefactType(fromBase58String(artefactId))
148+ let kPutOnArtefact = keyPutOnArtefact(artefactType, toString(i.originCaller), duckId, fromBase58String(artefactId))
149+ let kPutOnArtefactStatus = getBooleanValue(kPutOnArtefact)
150+ let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(artefactType, toString(i.originCaller), fromBase58String(artefactId))
151+ let kDuckLock = keyDuckLock(toString(i.originCaller), duckId)
152+ let kMantleStatus = keyArtefactStatus(artefactType, fromBase58String(artefactId))
153+ if ((kPutOnArtefactStatus != true))
154+ then throw("There is no duck with such parameteres")
155+ else [DeleteEntry(kPutOnArtefact), DeleteEntry(kArtefactIdByTypeAndDuck), DeleteEntry(kDuckLock), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), ScriptTransfer(i.originCaller, 1, fromBase58String(duckId))]
156+ }
157+
158+
159+
160+@Callable(i)
161+func unlockNftForWars (keys) = if ((i.callerPublicKey != base58'23NWm7kUDQqbTVkirjd5JXWRZaWVoS4ZesmRNHicBa3T'))
162+ then throw("Cannot call this method")
163+ else {
164+ let keysList = split(keys, ";")
165+ if ((size(keysList) > 10))
166+ then throw("You cannot unlock more than 10 ducks in one transaction")
167+ else {
168+ func handleUnlockOneDuck (accum,key) = {
169+ let kDuckLock = split(key, "_")
170+ (accum ++ [DeleteEntry(key), ScriptTransfer(addressFromStringValue(value(kDuckLock[1])), 1, fromBase58String(value(kDuckLock[3])))])
171+ }
172+
173+ let $l = keysList
174+ let $s = size($l)
175+ let $acc0 = nil
176+ func 1 ($a,$i) = if (($i >= $s))
177+ then $a
178+ else handleUnlockOneDuck($a, $l[$i])
179+
180+ func 2 ($a,$i) = if (($i >= $s))
181+ then $a
182+ else throw("List size exceeds 10")
183+
184+ 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
185+ }
186+ }
76187
77188
78189 @Verifier(tx)
79190 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
80191

github/deemru/w8io/3ef1775 
52.45 ms