tx · 9ARgt6cFHvvMRQP2H92krEG1ih3NVJeGnybTnQjEovun 3N3ow28aEESPBAtyxhjWAyRhpMaXSTLcy33: -0.02200000 Waves 2024.10.07 20:24 [3316719] smart account 3N3ow28aEESPBAtyxhjWAyRhpMaXSTLcy33 > SELF 0.00000000 Waves
{ "type": 13, "id": "9ARgt6cFHvvMRQP2H92krEG1ih3NVJeGnybTnQjEovun", "fee": 2200000, "feeAssetId": null, "timestamp": 1728321878643, "version": 2, "chainId": 84, "sender": "3N3ow28aEESPBAtyxhjWAyRhpMaXSTLcy33", "senderPublicKey": "mYBb9jrrbWnKZCnBpAEqHKUWzx5KBKd7z2QhHDXPeeB", "proofs": [ "5RXteMzT6G5zpQf826Km9JEAau7VgXmAEuyiThZNk6iWx3h3TmJJGKx6ALcC1xiJmndAA8cDENjS35bsGMD3A4PU" ], "script": "base64:AAIFAAAAAAAAACkIAhIDCgEIEgUKAwgIARIDCgEIEgMKAQgSBAoCCAESAwoBCBIECgIICAAAACcBAAAACWlzVGVzdEVudgAAAAAEAAAAB3Rlc3RlbnYEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwIAAAAHVEVTVEVOVgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABeAUAAAAHJG1hdGNoMAUAAAABeAcFAAAAB3Rlc3RlbnYBAAAADHRyeUdldFN0cmluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAABBvcmFjbGVBZGRyZXNzS2V5AAAAAAIAAAAUc3RhdGljX29yYWNsZUFkZHJlc3MBAAAAEWJyZWVkZXJBZGRyZXNzS2V5AAAAAAIAAAAVc3RhdGljX2JyZWVkZXJBZGRyZXNzAQAAABNpbmN1YmF0b3JBZGRyZXNzS2V5AAAAAAIAAAAXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBAAAADWVnZ0Fzc2V0SWRLZXkAAAAAAgAAABFzdGF0aWNfZWdnQXNzZXRJZAEAAAATd2VhcmFibGVzQWRkcmVzc0tleQAAAAACAAAAF3N0YXRpY193ZWFyYWJsZXNBZGRyZXNzAQAAABFmYXJtaW5nQWRkcmVzc0tleQAAAAACAAAAGHN0YXRpY19mYXJtaW5nQWRkcmVzc05ldwEAAAARY291cG9uc0FkZHJlc3NLZXkAAAAAAgAAABVzdGF0aWNfY291cG9uc0FkZHJlc3MBAAAAEXJlYmlydGhBZGRyZXNzS2V5AAAAAAIAAAAVc3RhdGljX3JlYmlydGhBZGRyZXNzAQAAAA5idXJuQWRkcmVzc0tleQAAAAACAAAAEnN0YXRpY19idXJuQWRkcmVzcwEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAQb3JhY2xlQWRkcmVzc0tleQAAAAABAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAARYnJlZWRlckFkZHJlc3NLZXkAAAAAAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAATaW5jdWJhdG9yQWRkcmVzc0tleQAAAAABAAAADWdldEVnZ0Fzc2V0SWQAAAAACQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAANZWdnQXNzZXRJZEtleQAAAAABAAAAE2dldFdlYXJhYmxlc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABN3ZWFyYWJsZXNBZGRyZXNzS2V5AAAAAAEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABFmYXJtaW5nQWRkcmVzc0tleQAAAAABAAAAEWdldENvdXBvbnNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAARY291cG9uc0FkZHJlc3NLZXkAAAAAAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAEXJlYmlydGhBZGRyZXNzS2V5AAAAAAEAAAAOZ2V0QnVybkFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAAA5idXJuQWRkcmVzc0tleQAAAAAAAAAACk1BTlRMRU5BTUUCAAAABm1hbnRsZQAAAAAKU1RBVFVTRlJFRQIAAAAERlJFRQAAAAAOU1RBVFVTT0NDVVBJRUQCAAAACE9DQ1VQSUVEAQAAAAtrZXlEdWNrTG9jawAAAAIAAAANY2FsbGVyQWRkcmVzcwAAAAZkdWNrSWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAADWNhbGxlckFkZHJlc3MCAAAABl9kdWNrXwUAAAAGZHVja0lkAgAAAAdfc3RhdHVzAQAAAAtrZXlJbnZlc3RvcgAAAAEAAAANY2FsbGVyQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAdfYW1vdW50AQAAABNrZXlBcnRlZmFjdEludmVzdGVkAAAAAgAAAAR0eXBlAAAACmFydGVmYWN0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0ZWZhY3RfBQAAAAR0eXBlAgAAAAxfYXJ0ZWZhY3RJZF8FAAAACmFydGVmYWN0SWQCAAAACV9pbnZlc3RlZAEAAAAUa2V5T25seUFydGVmYWN0TGV2ZWwAAAABAAAACmFydGVmYWN0SWQJAAEsAAAAAgkAASwAAAACAgAAAAthcnRlZmFjdElkXwkAAlgAAAABBQAAAAphcnRlZmFjdElkAgAAAAZfbGV2ZWwBAAAAGmtleUFydGVmYWN0SWRCeUR1Y2tBbmRUeXBlAAAAAgAAAAR0eXBlAAAABmR1Y2tJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAphcnRlZmFjdF8g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AgUAAAAKTUFOVExFTkFNRQUAAAALbWFudGxlTmZ0SWQEAAAADGtNYW50bGVPd25lcgkBAAAAEGtleUFydGVmYWN0T3duZXIAAAACBQAAAApNQU5UTEVOQU1FBQAAAAttYW50bGVOZnRJZAQAAAANa01hbnRsZVN0YXR1cwkBAAAAEWtleUFydGVmYWN0U3RhdHVzAAAAAgUAAAAKTUFOVExFTkFNRQUAAAALbWFudGxlTmZ0SWQEAAAADWtBcnRlZmFjdFR5cGUJAQAAAA9rZXlBcnRlZmFjdFR5cGUAAAABBQAAAAttYW50bGVOZnRJZAQAAAAPa01hbnRsZUludmVzdGVkCQEAAAATa2V5QXJ0ZWZhY3RJbnZlc3RlZAAAAAIFAAAACk1BTlRMRU5BTUUJAAJYAAAAAQUAAAALbWFudGxlTmZ0SWQEAAAAF2tBcnRlZmFjdE93bmVyQW5kU3RhdHVzCQEAAAAZa2V5QXJ0ZWZhY3RPd25lckFuZFN0YXR1cwAAAAMFAAAACk1BTlRMRU5BTUUFAAAAB2FkZHJlc3MFAAAAC21hbnRsZU5mdElkBAAAABJrT25seUFydGVmYWN0TGV2ZWwJAQAAABRrZXlPbmx5QXJ0ZWZhY3RMZXZlbAAAAAEFAAAAC21hbnRsZU5mdElkBAAAAAhpbnZlc3RlZAkAAGwAAAAGCQAAZQAAAAIFAAAABWxldmVsAAAAAAAAAAABAAAAAAAAAAABCQAAaQAAAAIAAAAAADuaygAAAAAAAAAAAAYAAAAAAAAAAAgAAAAAAAAAAAgFAAAABkhBTEZVUAkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrTWFudGxlTGV2ZWwFAAAABWxldmVsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rTWFudGxlSW52ZXN0ZWQFAAAACGludmVzdGVkCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA1rTWFudGxlRXhpc3RzBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxrTWFudGxlT3duZXIFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa01hbnRsZVN0YXR1cwUAAAAKU1RBVFVTRlJFRQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rQXJ0ZWZhY3RUeXBlBQAAAApNQU5UTEVOQU1FCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAF2tBcnRlZmFjdE93bmVyQW5kU3RhdHVzBQAAAApTVEFUVVNGUkVFCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrT25seUFydGVmYWN0TGV2ZWwFAAAABWxldmVsBQAAAANuaWwJAAJYAAAAAQUAAAALbWFudGxlTmZ0SWQAAAABaQEAAAALYnV5QXJ0ZWZhY3QAAAABAAAABHR5cGUDCQEAAAACIT0AAAACBQAAAAR0eXBlBQAAAApNQU5UTEVOQU1FCQAAAgAAAAECAAAAIVdCQTogWW91IGNhbiBidXkgb25seSBtYW50bGVzIG5vdwQAAAALTUFOVExFUFJJQ0UAAAAAAAAPQkAEAAAAE2Ftb3VudFBhaWRCeUNvdXBvbnMAAAAAAAAAAAADCQAAAAAAAAIFAAAAE2Ftb3VudFBhaWRCeUNvdXBvbnMFAAAAE2Ftb3VudFBhaWRCeUNvdXBvbnMEAAAACWxlZnRUb1BheQkAAGUAAAACCQAAaAAAAAIFAAAAC01BTlRMRVBSSUNFAAAAAAAAAABkBQAAABNhbW91bnRQYWlkQnlDb3Vwb25zBAAAAAdwYXltZW50AwkBAAAAAiE9AAAAAgUAAAAJbGVmdFRvUGF5AAAAAAAAAAAABAAAAAxmaXJzdFBheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAAMZmlyc3RQYXltZW50AAAAB2Fzc2V0SWQJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAAIAAAABCQABLAAAAAICAAAAQVdCQTogWW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQACWAAAAAEJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAxmaXJzdFBheW1lbnQAAAAGYW1vdW50BQAAAAlsZWZ0VG9QYXkJAAACAAAAAQkAASwAAAACAgAAAElXQkE6IFRvIGJ1eSBhIG1hbnRsZSB5b3UgY3VycmVudGx5IG5lZWQgdGhlIGZvbGxvd2luZyBhbW91bnQgb2YgRUdHbGV0czogCQABpAAAAAEFAAAACWxlZnRUb1BheQUAAAAJbGVmdFRvUGF5AAAAAAAAAAAAAwkAAAAAAAACBQAAAAdwYXltZW50BQAAAAdwYXltZW50BAAAAA5pc3N1ZU1hbnRsZU5GVAkABEIAAAAFAgAAAA1EVUNLLU1BTlRMRS0wAgAAACBbQXJ0ZWZhY3RdIE1hbnRsZSBORlQgZm9yIEplZHVjawAAAAAAAAAAAQAAAAAAAAAAAAcEAAAAC21hbnRsZU5mdElkCQAEOAAAAAEFAAAADmlzc3VlTWFudGxlTkZUBAAAAAxrTWFudGxlTGV2ZWwJAQAAABBrZXlBcnRlZmFjdExldmVsAAAAAwUAAAAKTUFOVExFTkFNRQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAC21hbnRsZU5mdElkBAAAAA1rTWFudGxlRXhpc3RzCQEAAAARa2V5QXJ0ZWZhY3RFeGlzdHMAAAACBQAAAApNQU5UTEVOQU1FBQAAAAttYW50bGVOZnRJZAQAAAAMa01hbnRsZU93bmVyCQEAAAAQa2V5QXJ0ZWZhY3RPd25lcgAAAAIFAAAACk1BTlRMRU5BTUUFAAAAC21hbnRsZU5mdElkBAAAAA1rTWFudGxlU3RhdHVzCQEAAAARa2V5QXJ0ZWZhY3RTdGF0dXMAAAACBQAAAApNQU5UTEVOQU1FBQAAAAttYW50bGVOZnRJZAQAAAANa0FydGVmYWN0VHlwZQkBAAAAD2tleUFydGVmYWN0VHlwZQAAAAEFAAAAC21hbnRsZU5mdElkBAAAAA9rTWFudGxlSW52ZXN0ZWQJAQAAABNrZXlBcnRlZmFjdEludmVzdGVkAAAAAgUAAAAKTUFOVExFTkFNRQkAAlgAAAABBQAAAAttYW50bGVOZnRJZAQAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMJAQAAABlrZXlBcnRlZmFjdE93bmVyQW5kU3RhdHVzAAAAAwUAAAAKTUFOVExFTkFNRQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAC21hbnRsZU5mdElkBAAAABJrT25seUFydGVmYWN0TGV2ZWwJAQAAABRrZXlPbmx5QXJ0ZWZhY3RMZXZlbAAAAAEFAAAAC21hbnRsZU5mdElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrTWFudGxlTGV2ZWwAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tNYW50bGVJbnZlc3RlZAUAAAALTUFOVExFUFJJQ0UJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAADWtNYW50bGVFeGlzdHMGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADGtNYW50bGVPd25lcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa01hbnRsZVN0YXR1cwUAAAAKU1RBVFVTRlJFRQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rQXJ0ZWZhY3RUeXBlBQAAAApNQU5UTEVOQU1FCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAF2tBcnRlZmFjdE93bmVyQW5kU3RhdHVzBQAAAApTVEFUVVNGUkVFCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrT25seUFydGVmYWN0TGV2ZWwAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADXVwZ3JhZGVNYW50bGUAAAABAAAACmFydGVmYWN0SWQEAAAAEXVwZ3JhZGVQb2ludFByaWNlAAAAAAAAD0JABAAAAAxmaXJzdFBheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABmFtb3VudAgFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQDCQEAAAACIT0AAAACCAUAAAAMZmlyc3RQYXltZW50AAAAB2Fzc2V0SWQJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAAIAAAABCQABLAAAAAICAAAAQVdVTTogWW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQACWAAAAAEJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAMJAABmAAAAAgUAAAARdXBncmFkZVBvaW50UHJpY2UIBQAAAAxmaXJzdFBheW1lbnQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAAAuV1VNOiBNaW5pbWFsIHBheW1lbnQgZm9yIHVwZ3JhZGluZyBtYW50bGUgaXM6IAkAAaQAAAABBQAAABF1cGdyYWRlUG9pbnRQcmljZQkBAAAAEXVwZ3JhZGVNYW50bGVGdW5jAAAAAwUAAAABaQUAAAAKYXJ0ZWZhY3RJZAUAAAAGYW1vdW50AAAAAWkBAAAAFnVwZ3JhZGVNYW50bGVCeUNvdXBvbnMAAAACAAAACmFydGVmYWN0SWQAAAANY291cG9uc0Ftb3VudAQAAAARdXBncmFkZVBvaW50UHJpY2UAAAAAAAAPQkAEAAAABmFtb3VudAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQQAAAAMZmlyc3RQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkCQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAACAAAAAQkAASwAAAACAgAAAENXVU1CQzogWW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQACWAAAAAEJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAQAAAAIYnVybkNhbGwJAAP8AAAABAkBAAAADmdldEJ1cm5BZGRyZXNzAAAAAAIAAAAUYnVybkF0dGFjaGVkUGF5bWVudHMFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgkBAAAADWdldEVnZ0Fzc2V0SWQAAAAACAUAAAAMZmlyc3RQYXltZW50AAAABmFtb3VudAUAAAADbmlsAwkAAAAAAAACBQAAAAhidXJuQ2FsbAUAAAAIYnVybkNhbGwIBQAAAAxmaXJzdFBheW1lbnQAAAAGYW1vdW50CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAAAAAAAAAMJAABmAAAAAgUAAAARdXBncmFkZVBvaW50UHJpY2UJAABkAAAAAgUAAAANY291cG9uc0Ftb3VudAUAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAAAwV1VNQkM6IE1pbmltYWwgcGF5bWVudCBmb3IgdXBncmFkaW5nIG1hbnRsZSBpczogCQABpAAAAAEFAAAAEXVwZ3JhZGVQb2ludFByaWNlBAAAABNhbW91bnRQYWlkQnlDb3Vwb25zCQEAAAAFYXNJbnQAAAABCQAD/AAAAAQJAQAAABFnZXRDb3Vwb25zQWRkcmVzcwAAAAACAAAACnVzZUNvdXBvbnMJAARMAAAAAgUAAAANY291cG9uc0Ftb3VudAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAE2Ftb3VudFBhaWRCeUNvdXBvbnMFAAAAE2Ftb3VudFBhaWRCeUNvdXBvbnMDCQEAAAACIT0AAAACBQAAAA1jb3Vwb25zQW1vdW50BQAAABNhbW91bnRQYWlkQnlDb3Vwb25zCQAAAgAAAAECAAAASFdVTUJDOiBOb3QgZW5vdWdoIGNvdXBvbnMhIFBsZWFzZSBtYWtlIHN1cmUgdG8gcGljayBsb3dlciBjb3Vwb24gYW1vdW50IQkBAAAAEXVwZ3JhZGVNYW50bGVGdW5jAAAAAwUAAAABaQUAAAAKYXJ0ZWZhY3RJZAkAAGQAAAACBQAAAA1jb3Vwb25zQW1vdW50BQAAAAZhbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADXB1dE9uQXJ0ZWZhY3QAAAABAAAACmFydGVmYWN0SWQEAAAADGZpcnN0UGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAARYXR0YWNoZWRBc3NldEluZm8JAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQAAAAAAAAAAAEJAAACAAAAAQIAAAAZV1BPQTogTkZUIGlzIG5vdCBhdHRhY2hlZAMDCQEAAAACIT0AAAACCAUAAAARYXR0YWNoZWRBc3NldEluZm8AAAAGaXNzdWVyCQEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAAAIhPQAAAAIIBQAAABFhdHRhY2hlZEFzc2V0SW5mbwAAAAZpc3N1ZXIJAQAAABFnZXRCcmVlZGVyQWRkcmVzcwAAAAAHCQAAAgAAAAECAAAAP1dQT0E6IFlvdSBjYW4gYXR0YWNoIG9ubHkgRFVDS3MgaXNzdWVkIGJ5IGluY3ViYXRvciBvciBicmVlZGVyIAQAAAAKaGFzU3dlYXRlcgkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAAE2dldFdlYXJhYmxlc0FkZHJlc3MAAAAACQABLAAAAAIJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAgAAAA1fQVJULVhTV0VBVEVSBAAAAA1rTWFudGxlRXhpc3RzCQEAAAARa2V5QXJ0ZWZhY3RFeGlzdHMAAAACBQAAAApNQU5UTEVOQU1FCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADGtNYW50bGVPd25lcgkBAAAAEGtleUFydGVmYWN0T3duZXIAAAACBQAAAApNQU5UTEVOQU1FCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADWtNYW50bGVTdGF0dXMJAQAAABFrZXlBcnRlZmFjdFN0YXR1cwAAAAIFAAAACk1BTlRMRU5BTUUJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMJAQAAABlrZXlBcnRlZmFjdE93bmVyQW5kU3RhdHVzAAAAAwUAAAAKTUFOVExFTkFNRQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAAJa0R1Y2tMb2NrCQEAAAALa2V5RHVja0xvY2sAAAACCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAAMZmlyc3RQYXltZW50AAAAB2Fzc2V0SWQEAAAADG1hbnRsZUV4aXN0cwkBAAAAEUBleHRyTmF0aXZlKDEwNTYpAAAAAQUAAAANa01hbnRsZUV4aXN0cwQAAAALbWFudGxlT3duZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAADGtNYW50bGVPd25lcgQAAAAMbWFudGxlU3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABBQAAAA1rTWFudGxlU3RhdHVzBAAAABFrQXJ0ZWZhY3RJZEJ5VHlwZQkBAAAAGmtleUFydGVmYWN0SWRCeUR1Y2tBbmRUeXBlAAAAAgUAAAAKTUFOVExFTkFNRQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAwkBAAAAASEAAAABBQAAAAxtYW50bGVFeGlzdHMJAAACAAAAAQIAAAArV1BPQTogTWFudGxlIHdpdGggc3VjaCBhbiBJRCBkb2VzIG5vdCBleGlzdAMJAQAAAAIhPQAAAAIFAAAAC21hbnRsZU93bmVyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkAAAIAAAABAgAAACdXUE9BOiBZb3UncmUgbm90IGFuIG93bmVyIG9mIHRoZSBtYW50bGUDCQEAAAACIT0AAAACBQAAAAxtYW50bGVTdGF0dXMFAAAAClNUQVRVU0ZSRUUJAAACAAAAAQIAAAAdV1BPQTogTWFudGxlIGlzIGFscmVhZHkgdXNlZCEEAAAACXN0YWtlRHVjawMJAQAAAAIhPQAAAAIFAAAACmhhc1N3ZWF0ZXICAAAAAAMJAQAAAAlpc0phY2twb3QAAAABCQEAAAAFdmFsdWUAAAABCAUAAAAMZmlyc3RQYXltZW50AAAAB2Fzc2V0SWQJAAP8AAAABAkBAAAAEWdldEZhcm1pbmdBZGRyZXNzAAAAAAIAAAAUc3Rha2VORlRXaXRob3V0UGVyY2gFAAAAA25pbAgFAAAAAWkAAAAIcGF5bWVudHMJAAP8AAAABAkBAAAAEWdldEZhcm1pbmdBZGRyZXNzAAAAAAIAAAAIc3Rha2VORlQFAAAAA25pbAgFAAAAAWkAAAAIcGF5bWVudHMFAAAAA25pbAMJAAAAAAAAAgUAAAAJc3Rha2VEdWNrBQAAAAlzdGFrZUR1Y2sEAAAADmtQdXRPbkFydGVmYWN0CQEAAAAQa2V5UHV0T25BcnRlZmFjdAAAAAQFAAAACk1BTlRMRU5BTUUJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAxmaXJzdFBheW1lbnQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphcnRlZmFjdElkCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA5rUHV0T25BcnRlZmFjdAYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa01hbnRsZVN0YXR1cwUAAAAOU1RBVFVTT0NDVVBJRUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAXa0FydGVmYWN0T3duZXJBbmRTdGF0dXMFAAAADlNUQVRVU09DQ1VQSUVECQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrRHVja0xvY2sGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEWtBcnRlZmFjdElkQnlUeXBlBQAAAAphcnRlZmFjdElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAD3Rha2VPZmZBcnRlZmFjdAAAAAIAAAAGZHVja0lkAAAADGFydGVmYWN0VHlwZQQAAAAYa0FydGVmYWN0SWRCeVR5cGVBbmREdWNrCQEAAAAaa2V5QXJ0ZWZhY3RJZEJ5RHVja0FuZFR5cGUAAAACBQAAAAxhcnRlZmFjdFR5cGUJAAJZAAAAAQUAAAAGZHVja0lkBAAAAAphcnRlZmFjdElkCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABBQAAABhrQXJ0ZWZhY3RJZEJ5VHlwZUFuZER1Y2sEAAAADWtBcnRlZmFjdFR5cGUJAQAAAA9rZXlBcnRlZmFjdFR5cGUAAAABCQACWQAAAAEFAAAACmFydGVmYWN0SWQEAAAADmtQdXRPbkFydGVmYWN0CQEAAAAQa2V5UHV0T25BcnRlZmFjdAAAAAQFAAAADGFydGVmYWN0VHlwZQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIFAAAABmR1Y2tJZAkAAlkAAAABBQAAAAphcnRlZmFjdElkBAAAABRrUHV0T25BcnRlZmFjdFN0YXR1cwkBAAAAEUBleHRyTmF0aXZlKDEwNTYpAAAAAQUAAAAOa1B1dE9uQXJ0ZWZhY3QEAAAAF2tBcnRlZmFjdE93bmVyQW5kU3RhdHVzCQEAAAAZa2V5QXJ0ZWZhY3RPd25lckFuZFN0YXR1cwAAAAMFAAAADGFydGVmYWN0VHlwZQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAQAAAAJa0R1Y2tMb2NrCQEAAAALa2V5RHVja0xvY2sAAAACCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAAGZHVja0lkBAAAAA1rTWFudGxlU3RhdHVzCQEAAAARa2V5QXJ0ZWZhY3RTdGF0dXMAAAACBQAAAAxhcnRlZmFjdFR5cGUJAAJZAAAAAQUAAAAKYXJ0ZWZhY3RJZAMJAQAAAAIhPQAAAAIFAAAAFGtQdXRPbkFydGVmYWN0U3RhdHVzBgkAAAIAAAABAgAAACxXVE9BOiBUaGVyZSBpcyBubyBkdWNrIHdpdGggc3VjaCBwYXJhbWV0ZXJlcwQAAAAKaGFzU3dlYXRlcgkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAAE2dldFdlYXJhYmxlc0FkZHJlc3MAAAAACQABLAAAAAIFAAAABmR1Y2tJZAIAAAANX0FSVC1YU1dFQVRFUgQAAAAIaXNTdGFrZWQDCQAAAAAAAAIJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAAJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18JAAQl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", "height": 3316719, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func isTestEnv () = { | |
5 | + | let testenv = match getBoolean(this, "TESTENV") { | |
6 | + | case x: Boolean => | |
7 | + | x | |
8 | + | case _ => | |
9 | + | false | |
10 | + | } | |
11 | + | testenv | |
12 | + | } | |
13 | + | ||
14 | + | ||
15 | + | func tryGetString (key) = match getString(this, key) { | |
16 | + | case a: String => | |
17 | + | a | |
18 | + | case _ => | |
19 | + | "" | |
20 | + | } | |
21 | + | ||
22 | + | ||
23 | + | func tryGetStringExternal (address,key) = match getString(address, key) { | |
24 | + | case a: String => | |
25 | + | a | |
26 | + | case _ => | |
27 | + | "" | |
28 | + | } | |
29 | + | ||
30 | + | ||
31 | + | func oracleAddressKey () = "static_oracleAddress" | |
32 | + | ||
33 | + | ||
34 | + | func breederAddressKey () = "static_breederAddress" | |
35 | + | ||
36 | + | ||
37 | + | func incubatorAddressKey () = "static_incubatorAddress" | |
38 | + | ||
39 | + | ||
40 | + | func eggAssetIdKey () = "static_eggAssetId" | |
41 | + | ||
42 | + | ||
43 | + | func wearablesAddressKey () = "static_wearablesAddress" | |
44 | + | ||
45 | + | ||
46 | + | func farmingAddressKey () = "static_farmingAddressNew" | |
47 | + | ||
48 | + | ||
49 | + | func couponsAddressKey () = "static_couponsAddress" | |
50 | + | ||
51 | + | ||
52 | + | func rebirthAddressKey () = "static_rebirthAddress" | |
53 | + | ||
54 | + | ||
55 | + | func burnAddressKey () = "static_burnAddress" | |
56 | + | ||
57 | + | ||
58 | + | func getOracle () = Address(fromBase58String(tryGetString(oracleAddressKey()))) | |
59 | + | ||
60 | + | ||
61 | + | func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), breederAddressKey()))) | |
62 | + | ||
63 | + | ||
64 | + | func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), incubatorAddressKey()))) | |
65 | + | ||
66 | + | ||
67 | + | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), eggAssetIdKey())) | |
68 | + | ||
69 | + | ||
70 | + | func getWearablesAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), wearablesAddressKey()))) | |
71 | + | ||
72 | + | ||
73 | + | func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), farmingAddressKey()))) | |
74 | + | ||
75 | + | ||
76 | + | func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), couponsAddressKey()))) | |
77 | + | ||
78 | + | ||
79 | + | func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), rebirthAddressKey()))) | |
80 | + | ||
81 | + | ||
82 | + | func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), burnAddressKey()))) | |
83 | + | ||
84 | + | ||
85 | + | let MANTLENAME = "mantle" | |
86 | + | ||
87 | + | let STATUSFREE = "FREE" | |
88 | + | ||
89 | + | let STATUSOCCUPIED = "OCCUPIED" | |
90 | + | ||
91 | + | func keyDuckLock (callerAddress,duckId) = (((("address_" + callerAddress) + "_duck_") + duckId) + "_status") | |
92 | + | ||
93 | + | ||
94 | + | func keyInvestor (callerAddress) = (("address_" + callerAddress) + "_amount") | |
95 | + | ||
96 | + | ||
97 | + | func keyArtefactInvested (type,artefactId) = (((("artefact_" + type) + "_artefactId_") + artefactId) + "_invested") | |
98 | + | ||
99 | + | ||
100 | + | func keyOnlyArtefactLevel (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_level") | |
101 | + | ||
102 | + | ||
103 | + | func keyArtefactIdByDuckAndType (type,duckId) = (((("artefact_ " + type) + "_duck_") + toBase58String(duckId)) + "_artefactId") | |
104 | + | ||
105 | + | ||
106 | + | func keyArtefactOwner (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_owner") | |
107 | + | ||
108 | + | ||
109 | + | func keyArtefactOwnerAndStatus (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status") | |
110 | + | ||
111 | + | ||
112 | + | func keyArtefactStatus (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_status") | |
113 | + | ||
114 | + | ||
115 | + | func keyArtefactType (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_type") | |
116 | + | ||
117 | + | ||
118 | + | func keyArtefactLevel (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_level") | |
119 | + | ||
120 | + | ||
121 | + | func keyPutOnArtefact (type,owner,duckId,artefactId) = (((((((("address_" + owner) + "_duck_") + duckId) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status") | |
122 | + | ||
123 | + | ||
124 | + | func keyArtefactExists (type,artefactId) = ((("artefact_" + type) + "_artefactId_") + toBase58String(artefactId)) | |
125 | + | ||
126 | + | ||
127 | + | func isJackpot (assetId) = (takeRight(value(value(assetInfo(assetId)).name), 1) == "U") | |
128 | + | ||
129 | + | ||
130 | + | func asInt (value) = match value { | |
131 | + | case int: Int => | |
132 | + | int | |
133 | + | case _ => | |
134 | + | throw("WAI: wrong type, expected: Int") | |
135 | + | } | |
136 | + | ||
137 | + | ||
138 | + | func upgradeMantleFunc (i,artefactId,amount) = { | |
139 | + | let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId)) | |
140 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId)) | |
141 | + | let mantleExists = getBooleanValue(kMantleExists) | |
142 | + | let mantleOwner = getStringValue(kMantleOwner) | |
143 | + | if (!(mantleExists)) | |
144 | + | then throw("WUPM: Mantle with such an ID does not exist") | |
145 | + | else if ((mantleOwner != toString(i.originCaller))) | |
146 | + | then throw("WUPM: You're not an owner of the mantle") | |
147 | + | else { | |
148 | + | let kMantleInvested = keyArtefactInvested(MANTLENAME, artefactId) | |
149 | + | let mantleAlreadyInvested = getIntegerValue(kMantleInvested) | |
150 | + | let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId)) | |
151 | + | let kOnlyArtefactLevel = keyOnlyArtefactLevel(fromBase58String(artefactId)) | |
152 | + | let totalInvested = (mantleAlreadyInvested + amount) | |
153 | + | let newLevel = (((10 * pow(totalInvested, 8, 6, 1, 8, HALFUP)) + 100000000) / 100000000) | |
154 | + | if ((newLevel >= 340)) | |
155 | + | then throw("DUMF: You reached the max level! Max level is 340!") | |
156 | + | else [IntegerEntry(kMantleLevel, newLevel), IntegerEntry(kMantleInvested, totalInvested), IntegerEntry(kOnlyArtefactLevel, newLevel)] | |
157 | + | } | |
158 | + | } | |
159 | + | ||
160 | + | ||
161 | + | @Callable(i) | |
162 | + | func configureOracle (oracle) = if ((i.caller != this)) | |
163 | + | then throw("WCO: admin only") | |
164 | + | else [StringEntry("static_oracleAddress", oracle)] | |
165 | + | ||
166 | + | ||
167 | + | ||
168 | + | @Callable(i) | |
169 | + | func issueFreeMantle (address,type,level) = if ((i.caller != this)) | |
170 | + | then throw("WIFM: Can be called only by admin") | |
171 | + | else if ((type != MANTLENAME)) | |
172 | + | then throw("WIFM: You can buy only mantles now") | |
173 | + | else { | |
174 | + | let issueMantleNFT = Issue("DUCK-MANTLE-0", "[Artefact] Mantle NFT for Jeduck", 1, 0, false) | |
175 | + | let mantleNftId = calculateAssetId(issueMantleNFT) | |
176 | + | let kMantleLevel = keyArtefactLevel(MANTLENAME, address, mantleNftId) | |
177 | + | let kMantleExists = keyArtefactExists(MANTLENAME, mantleNftId) | |
178 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, mantleNftId) | |
179 | + | let kMantleStatus = keyArtefactStatus(MANTLENAME, mantleNftId) | |
180 | + | let kArtefactType = keyArtefactType(mantleNftId) | |
181 | + | let kMantleInvested = keyArtefactInvested(MANTLENAME, toBase58String(mantleNftId)) | |
182 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, address, mantleNftId) | |
183 | + | let kOnlyArtefactLevel = keyOnlyArtefactLevel(mantleNftId) | |
184 | + | let invested = pow((level - 1), 1, (1000000000 / 6), 8, 8, HALFUP) | |
185 | + | $Tuple2([IntegerEntry(kMantleLevel, level), IntegerEntry(kMantleInvested, invested), BooleanEntry(kMantleExists, true), StringEntry(kMantleOwner, address), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactType, MANTLENAME), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), IntegerEntry(kOnlyArtefactLevel, level)], toBase58String(mantleNftId)) | |
186 | + | } | |
187 | + | ||
188 | + | ||
189 | + | ||
190 | + | @Callable(i) | |
191 | + | func buyArtefact (type) = if ((type != MANTLENAME)) | |
192 | + | then throw("WBA: You can buy only mantles now") | |
193 | + | else { | |
194 | + | let MANTLEPRICE = 1000000 | |
195 | + | let amountPaidByCoupons = 0 | |
196 | + | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
197 | + | then { | |
198 | + | let leftToPay = ((MANTLEPRICE * 100) - amountPaidByCoupons) | |
199 | + | let payment = if ((leftToPay != 0)) | |
200 | + | then { | |
201 | + | let firstPayment = value(i.payments[0]) | |
202 | + | if ((firstPayment.assetId != getEggAssetId())) | |
203 | + | then throw(("WBA: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
204 | + | else if ((firstPayment.amount != leftToPay)) | |
205 | + | then throw(("WBA: To buy a mantle you currently need the following amount of EGGlets: " + toString(leftToPay))) | |
206 | + | else leftToPay | |
207 | + | } | |
208 | + | else 0 | |
209 | + | if ((payment == payment)) | |
210 | + | then { | |
211 | + | let issueMantleNFT = Issue("DUCK-MANTLE-0", "[Artefact] Mantle NFT for Jeduck", 1, 0, false) | |
212 | + | let mantleNftId = calculateAssetId(issueMantleNFT) | |
213 | + | let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.caller), mantleNftId) | |
214 | + | let kMantleExists = keyArtefactExists(MANTLENAME, mantleNftId) | |
215 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, mantleNftId) | |
216 | + | let kMantleStatus = keyArtefactStatus(MANTLENAME, mantleNftId) | |
217 | + | let kArtefactType = keyArtefactType(mantleNftId) | |
218 | + | let kMantleInvested = keyArtefactInvested(MANTLENAME, toBase58String(mantleNftId)) | |
219 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.caller), mantleNftId) | |
220 | + | let kOnlyArtefactLevel = keyOnlyArtefactLevel(mantleNftId) | |
221 | + | [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)] | |
222 | + | } | |
223 | + | else throw("Strict value is not equal to itself.") | |
224 | + | } | |
225 | + | else throw("Strict value is not equal to itself.") | |
226 | + | } | |
227 | + | ||
228 | + | ||
229 | + | ||
230 | + | @Callable(i) | |
231 | + | func upgradeMantle (artefactId) = { | |
232 | + | let upgradePointPrice = 1000000 | |
233 | + | let firstPayment = value(i.payments[0]) | |
234 | + | let amount = firstPayment.amount | |
235 | + | if ((firstPayment.assetId != getEggAssetId())) | |
236 | + | then throw(("WUM: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
237 | + | else if ((upgradePointPrice > firstPayment.amount)) | |
238 | + | then throw(("WUM: Minimal payment for upgrading mantle is: " + toString(upgradePointPrice))) | |
239 | + | else upgradeMantleFunc(i, artefactId, amount) | |
240 | + | } | |
241 | + | ||
242 | + | ||
243 | + | ||
244 | + | @Callable(i) | |
245 | + | func upgradeMantleByCoupons (artefactId,couponsAmount) = { | |
246 | + | let upgradePointPrice = 1000000 | |
247 | + | let amount = if ((size(i.payments) == 1)) | |
248 | + | then { | |
249 | + | let firstPayment = value(i.payments[0]) | |
250 | + | if ((firstPayment.assetId != getEggAssetId())) | |
251 | + | then throw(("WUMBC: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
252 | + | else { | |
253 | + | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), firstPayment.amount)]) | |
254 | + | if ((burnCall == burnCall)) | |
255 | + | then firstPayment.amount | |
256 | + | else throw("Strict value is not equal to itself.") | |
257 | + | } | |
258 | + | } | |
259 | + | else 0 | |
260 | + | if ((upgradePointPrice > (couponsAmount + amount))) | |
261 | + | then throw(("WUMBC: Minimal payment for upgrading mantle is: " + toString(upgradePointPrice))) | |
262 | + | else { | |
263 | + | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [couponsAmount], nil)) | |
264 | + | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
265 | + | then if ((couponsAmount != amountPaidByCoupons)) | |
266 | + | then throw("WUMBC: Not enough coupons! Please make sure to pick lower coupon amount!") | |
267 | + | else upgradeMantleFunc(i, artefactId, (couponsAmount + amount)) | |
268 | + | else throw("Strict value is not equal to itself.") | |
269 | + | } | |
270 | + | } | |
271 | + | ||
272 | + | ||
273 | + | ||
274 | + | @Callable(i) | |
275 | + | func putOnArtefact (artefactId) = { | |
276 | + | let firstPayment = value(i.payments[0]) | |
277 | + | let attachedAssetInfo = value(assetInfo(value(firstPayment.assetId))) | |
278 | + | if ((firstPayment.amount != 1)) | |
279 | + | then throw("WPOA: NFT is not attached") | |
280 | + | else if (if ((attachedAssetInfo.issuer != getIncubatorAddress())) | |
281 | + | then (attachedAssetInfo.issuer != getBreederAddress()) | |
282 | + | else false) | |
283 | + | then throw("WPOA: You can attach only DUCKs issued by incubator or breeder ") | |
284 | + | else { | |
285 | + | let hasSweater = tryGetStringExternal(getWearablesAddress(), (toBase58String(value(firstPayment.assetId)) + "_ART-XSWEATER")) | |
286 | + | let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId)) | |
287 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId)) | |
288 | + | let kMantleStatus = keyArtefactStatus(MANTLENAME, fromBase58String(artefactId)) | |
289 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId)) | |
290 | + | let kDuckLock = keyDuckLock(toString(i.originCaller), toBase58String(value(firstPayment.assetId))) | |
291 | + | let mantleExists = getBooleanValue(kMantleExists) | |
292 | + | let mantleOwner = getStringValue(kMantleOwner) | |
293 | + | let mantleStatus = getStringValue(kMantleStatus) | |
294 | + | let kArtefactIdByType = keyArtefactIdByDuckAndType(MANTLENAME, value(firstPayment.assetId)) | |
295 | + | if (!(mantleExists)) | |
296 | + | then throw("WPOA: Mantle with such an ID does not exist") | |
297 | + | else if ((mantleOwner != toString(i.originCaller))) | |
298 | + | then throw("WPOA: You're not an owner of the mantle") | |
299 | + | else if ((mantleStatus != STATUSFREE)) | |
300 | + | then throw("WPOA: Mantle is already used!") | |
301 | + | else { | |
302 | + | let stakeDuck = if ((hasSweater != "")) | |
303 | + | then if (isJackpot(value(firstPayment.assetId))) | |
304 | + | then invoke(getFarmingAddress(), "stakeNFTWithoutPerch", nil, i.payments) | |
305 | + | else invoke(getFarmingAddress(), "stakeNFT", nil, i.payments) | |
306 | + | else nil | |
307 | + | if ((stakeDuck == stakeDuck)) | |
308 | + | then { | |
309 | + | let kPutOnArtefact = keyPutOnArtefact(MANTLENAME, toString(i.originCaller), toBase58String(value(firstPayment.assetId)), fromBase58String(artefactId)) | |
310 | + | [BooleanEntry(kPutOnArtefact, true), StringEntry(kMantleStatus, STATUSOCCUPIED), StringEntry(kArtefactOwnerAndStatus, STATUSOCCUPIED), BooleanEntry(kDuckLock, true), StringEntry(kArtefactIdByType, artefactId)] | |
311 | + | } | |
312 | + | else throw("Strict value is not equal to itself.") | |
313 | + | } | |
314 | + | } | |
315 | + | } | |
316 | + | ||
317 | + | ||
318 | + | ||
319 | + | @Callable(i) | |
320 | + | func takeOffArtefact (duckId,artefactType) = { | |
321 | + | let kArtefactIdByTypeAndDuck = keyArtefactIdByDuckAndType(artefactType, fromBase58String(duckId)) | |
322 | + | let artefactId = getStringValue(kArtefactIdByTypeAndDuck) | |
323 | + | let kArtefactType = keyArtefactType(fromBase58String(artefactId)) | |
324 | + | let kPutOnArtefact = keyPutOnArtefact(artefactType, toString(i.originCaller), duckId, fromBase58String(artefactId)) | |
325 | + | let kPutOnArtefactStatus = getBooleanValue(kPutOnArtefact) | |
326 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(artefactType, toString(i.originCaller), fromBase58String(artefactId)) | |
327 | + | let kDuckLock = keyDuckLock(toString(i.originCaller), duckId) | |
328 | + | let kMantleStatus = keyArtefactStatus(artefactType, fromBase58String(artefactId)) | |
329 | + | if ((kPutOnArtefactStatus != true)) | |
330 | + | then throw("WTOA: There is no duck with such parameteres") | |
331 | + | else { | |
332 | + | let hasSweater = tryGetStringExternal(getWearablesAddress(), (duckId + "_ART-XSWEATER")) | |
333 | + | let isStaked = if ((tryGetStringExternal(getFarmingAddress(), (((("address_" + toString(i.originCaller)) + "_asset_") + duckId) + "_unstaker")) == "")) | |
334 | + | then false | |
335 | + | else true | |
336 | + | let unstakeDuck = if (if ((hasSweater != "")) | |
337 | + | then isStaked | |
338 | + | else false) | |
339 | + | then if (isJackpot(fromBase58String(duckId))) | |
340 | + | then asInt(invoke(getFarmingAddress(), "unstakeJackpot", [duckId], i.payments)) | |
341 | + | else asInt(invoke(getFarmingAddress(), "unstakeNFT", [duckId], i.payments)) | |
342 | + | else 0 | |
343 | + | if ((unstakeDuck == unstakeDuck)) | |
344 | + | then { | |
345 | + | let sendRewards = if ((unstakeDuck > 0)) | |
346 | + | then [ScriptTransfer(i.originCaller, unstakeDuck, getEggAssetId())] | |
347 | + | else nil | |
348 | + | ([DeleteEntry(kPutOnArtefact), DeleteEntry(kArtefactIdByTypeAndDuck), DeleteEntry(kDuckLock), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), ScriptTransfer(i.originCaller, 1, fromBase58String(duckId))] ++ sendRewards) | |
349 | + | } | |
350 | + | else throw("Strict value is not equal to itself.") | |
351 | + | } | |
352 | + | } | |
353 | + | ||
354 | + | ||
355 | + | @Verifier(tx) | |
356 | + | func verify () = if (isTestEnv()) | |
357 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
358 | + | else { | |
359 | + | let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4' | |
360 | + | let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8' | |
361 | + | let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3' | |
362 | + | let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser)) | |
363 | + | then 1 | |
364 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser)) | |
365 | + | then 1 | |
366 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser)) | |
367 | + | then 1 | |
368 | + | else 0 | |
369 | + | let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser)) | |
370 | + | then 1 | |
371 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser)) | |
372 | + | then 1 | |
373 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser)) | |
374 | + | then 1 | |
375 | + | else 0 | |
376 | + | let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser)) | |
377 | + | then 1 | |
378 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser)) | |
379 | + | then 1 | |
380 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser)) | |
381 | + | then 1 | |
382 | + | else 0 | |
383 | + | let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned) | |
384 | + | match tx { | |
385 | + | case _ => | |
386 | + | (signaturesCount >= 2) | |
387 | + | } | |
388 | + | } | |
389 | + |
github/deemru/w8io/169f3d6 33.20 ms ◑