2022.05.19 00:11 [3123111] smart account 3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc > SELF 0.00000000 Waves
{ "type": 13, "id": "9suDQLc17A238cr7G9BPNkHmdFjuqvwZhRMRFGc6d1Ke", "fee": 1400000, "feeAssetId": null, "timestamp": 1652908318987, "version": 2, "chainId": 87, "sender": "3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc", "senderPublicKey": "3pJsmGRpWHpqyaAjeX7BacMEfYx32LMNN4qwxQqASBmi", "proofs": [ "4DZ1GVVgjPgBLwpWj7JGgNYSsjdXVPkimosy7gKB7WM58umqVMXSuyFXFxGFgp6jSYzZQK5zEjw6o4jLLVytpyvZ" ], "script": "base64:AAIFAAAAAAAAABcIAhIECgIBCBIDCgEIEgMKAQgSAwoBCAAAAAwAAAAADWNyZWF0ZU5mdERhcHABAAAAGgFXk93E0hfnIAr99yESTvDwdmcmgwN41FxMAAAAABBtYXJrZXRGZWVBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXiqwWKFZBTE2Nqe/i/IDW833E18jzJ3qqAAAAABJwdXp6bGVTdGF0ZUFkZHJlc3MBAAAAGgFXlGiM+e6iuaqf1vWOvKmPZxqcBvQWKYm7AAAAAA5uZnREdWNrV3JhcHBlcgEAAAAaAVcUrURSm6X9/2EX/9g65/FnioCcFLgvzx4AAAAAEW5mdFNpZ25BcnRXcmFwcGVyAQAAABoBV+6hGhXD8bZfRGX/X8gVOcR5RdUYRUcwBwAAAAAOcm95YWx0eVBlcmNlbnQAAAAAAAAAAAcBAAAACGNoZWNrTkZUAAAAAQAAAAVhc3NldAMDAwkAAAAAAAACCAgFAAAABWFzc2V0AAAABmlzc3VlcgAAAAVieXRlcwUAAAANY3JlYXRlTmZ0RGFwcAkAAAAAAAACCAUAAAAFYXNzZXQAAAAIZGVjaW1hbHMAAAAAAAAAAAAHCQAAAAAAAAIIBQAAAAVhc3NldAAAAApyZWlzc3VhYmxlBwcJAAAAAAAAAggFAAAABWFzc2V0AAAACHF1YW50aXR5AAAAAAAAAAABBwEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgIAAAAAAQAAAA90cnlHZXRBc3NldEluZm8AAAACAAAAB2Fzc2V0SWQAAAAIZXJyb3JNc2cEAAAAByRtYXRjaDAJAAPsAAAAAQkAAlkAAAABBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABBQAAAAhlcnJvck1zZwEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAWIFAAAAByRtYXRjaDAJAAJYAAAAAQUAAAABYgIAAAAFV0FWRVMBAAAADWdldEFzc2V0Qnl0ZXMAAAABAAAACmFzc2V0SWRTdHIDCQAAAAAAAAIFAAAACmFzc2V0SWRTdHICAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAACmFzc2V0SWRTdHIAAAAEAAAAAWkBAAAAB3NlbGxORlQAAAACAAAAC2J1eU91dFByaWNlAAAADWJ1eU91dEFzc2V0SWQEAAAAA3BtdAMDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAAAAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AAAAAAAAAAABBwkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABlORlQgbm90IGxpc3RlZCBhcyBwYXltZW50BAAAAAtidXlPdXRBc3NldAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAA1idXlPdXRBc3NldElkAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAFbmZ0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAADbmZ0BAAAAAckbWF0Y2gwCQAD7AAAAAEFAAAABW5mdElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAAA5DYW4ndCBmaW5kIE5GVAMJAQAAAAhjaGVja05GVAAAAAEFAAAAA25mdAMJAABmAAAAAgUAAAALYnV5T3V0UHJpY2UAAAAAAAAAAAAEAAAADGFzc2V0TmFtZVN0cgkAAlgAAAABCAUAAAADbmZ0AAAAAmlkBAAAAAluZnRJc3N1ZXIEAAAAByRtYXRjaDAJAAQdAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAAA1jcmVhdGVOZnREYXBwCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAAAdfaXNzdWVyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA9yb3lhbHR5UmVjZWl2ZXIDCQEAAAACIT0AAAACBQAAAAluZnRJc3N1ZXIJAAJYAAAAAQUAAAARbmZ0U2lnbkFydFdyYXBwZXIFAAAACW5mdElzc3VlcgkAAZEAAAACCQAEtQAAAAIJAAGRAAAAAgkABLUAAAACCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAVuZnRJZAAAAAtkZXNjcmlwdGlvbgIAAAABIAAAAAAAAAAAAgIAAAABLgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAADGFzc2V0TmFtZVN0cgIAAAAMX2J1eU91dFByaWNlBQAAAAtidXlPdXRQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAAA5fYnV5T3V0QXNzZXRJZAkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAALYnV5T3V0QXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAADGFzc2V0TmFtZVN0cgIAAAAQX3JveWFsdHlSZWNlaXZlcgUAAAAPcm95YWx0eVJlY2VpdmVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAxhc3NldE5hbWVTdHICAAAAB19zZWxsZXIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgIAAAAFX25mdF8FAAAADGFzc2V0TmFtZVN0cgUAAAAMYXNzZXROYW1lU3RyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgIAAAAFX25mdF8FAAAADGFzc2V0TmFtZVN0cgIAAAAMX3N0YXJ0U2FsZUF0BQAAAAZoZWlnaHQFAAAAA25pbAkAAAIAAAABAgAAAB9QcmljZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCQAAAgAAAAECAAAAGk5GVCBpc3N1ZWQgYnkgYW5vdGhlciBkYXBwCQAAAgAAAAECAAAAJk5GVCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIHRyYW5zYWN0aW9uAAAAAWkBAAAABmJ1eU5GVAAAAAEAAAAFbmZ0SWQEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkBAAAAAtidXlPdXRQcmljZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAADF9idXlPdXRQcmljZQQAAAANYnV5T3V0QXNzZXRJZAkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAOX2J1eU91dEFzc2V0SWQEAAAAD3JveWFsdHlSZWNlaXZlcgkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAQX3JveWFsdHlSZWNlaXZlcgQAAAAJc2VsbGVyU3RyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfc2VsbGVyBAAAAAhuZnRBc3NldAkBAAAAD3RyeUdldEFzc2V0SW5mbwAAAAIFAAAABW5mdElkAgAAAA1ORlQgbm90IGZvdW5kBAAAAAtidXlPdXRBc3NldAkBAAAAD3RyeUdldEFzc2V0SW5mbwAAAAIFAAAADWJ1eU91dEFzc2V0SWQCAAAAFkJ1eW91dCBhc3NldCBub3QgZm91bmQDAwkAAGYAAAACBQAAAAtidXlPdXRQcmljZQAAAAAAAAAAAAkAAGcAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAALYnV5T3V0UHJpY2UHBAAAAAtyb3lhbHR5UGFydAkAAGsAAAADBQAAAAtidXlPdXRQcmljZQUAAAAOcm95YWx0eVBlcmNlbnQAAAAAAAAAAGQEAAAACW1hcmtldEZlZQkAAGsAAAADBQAAAAtidXlPdXRQcmljZQAAAAAAAAAAAwAAAAAAAAAAZAMJAAAAAAAAAggFAAAAA3BtdAAAAAdhc3NldElkCAUAAAALYnV5T3V0QXNzZXQAAAACaWQJAAUUAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEIBQAAAAhuZnRBc3NldAAAAAJpZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAJc2VsbGVyU3RyCQAAZQAAAAIJAABlAAAAAgUAAAALYnV5T3V0UHJpY2UFAAAAC3JveWFsdHlQYXJ0BQAAAAltYXJrZXRGZWUIBQAAAAtidXlPdXRBc3NldAAAAAJpZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAPcm95YWx0eVJlY2VpdmVyBQAAAAtyb3lhbHR5UGFydAgFAAAAC2J1eU91dEFzc2V0AAAAAmlkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEG1hcmtldEZlZUFkZHJlc3MFAAAACW1hcmtldEZlZQgFAAAAC2J1eU91dEFzc2V0AAAAAmlkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAMX2J1eU91dFByaWNlCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAOX2J1eU91dEFzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAABBfcm95YWx0eVJlY2VpdmVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAHX3NlbGxlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAJc2VsbGVyU3RyAgAAAAVfbmZ0XwUAAAAFbmZ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAJc2VsbGVyU3RyAgAAAAVfbmZ0XwUAAAAFbmZ0SWQCAAAADF9zdGFydFNhbGVBdAUAAAADbmlsCQACWAAAAAEIBQAAAAhuZnRBc3NldAAAAAJpZAkAAAIAAAABAgAAADJUaGUgYnV5b3V0IGFzc2V0IGRvZXMgbm90IG1hdGNoIHRoZSBwdXJjaGFzZSBhc3NldAkAAAIAAAABAgAAAChQYXltZW50IGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvAAAAAWkBAAAACmNhbmNlbFNlbGwAAAABAAAABW5mdElkBAAAAAlzZWxsZXJTdHIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAB19zZWxsZXIEAAAACG5mdEFzc2V0CQEAAAAPdHJ5R2V0QXNzZXRJbmZvAAAAAgUAAAAFbmZ0SWQCAAAADU5GVCBub3QgZm91bmQDAwkAAGYAAAACCQABMQAAAAEFAAAACXNlbGxlclN0cgAAAAAAAAAAAAkAAAAAAAACBQAAAAlzZWxsZXJTdHIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBwkABRQAAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAQgFAAAACG5mdEFzc2V0AAAAAmlkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAMX2J1eU91dFByaWNlCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAOX2J1eU91dEFzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAABBfcm95YWx0eVJlY2VpdmVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAHX3NlbGxlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAJc2VsbGVyU3RyAgAAAAVfbmZ0XwUAAAAFbmZ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAJc2VsbGVyU3RyAgAAAAVfbmZ0XwUAAAAFbmZ0SWQCAAAADF9zdGFydFNhbGVBdAUAAAADbmlsBQAAAAVuZnRJZAkAAAIAAAABAgAAABRZb3UgYXJlIG5vdCBhIHNlbGxlcgAAAAFpAQAAAARsaWtlAAAAAQAAAAVuZnRJZAQAAAAIbmZ0QXNzZXQJAAPsAAAAAQkAAZsAAAABBQAAAAVuZnRJZAQAAAAJaXNEdWNrTmZ0CQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACCQEAAAAHQWRkcmVzcwAAAAEFAAAADm5mdER1Y2tXcmFwcGVyCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAB19kdWNrSWQEAAAADGlzU2lnbkFydE5mdAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAABFuZnRTaWduQXJ0V3JhcHBlcgkAASwAAAACCQABLAAAAAICAAAAC3NpZ25BcnROZnRfBQAAAAVuZnRJZAIAAAAIX2Fzc2V0SWQDAwMDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAIbmZ0QXNzZXQJAQAAAAEhAAAAAQUAAAAJaXNEdWNrTmZ0BwkBAAAAASEAAAABBQAAAAxpc1NpZ25BcnROZnQHCQEAAAAIY2hlY2tORlQAAAABCQEAAAAFdmFsdWUAAAABBQAAAAhuZnRBc3NldAcEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAtjb3VudFN0YWtlZAQAAAAHJG1hdGNoMAkABBoAAAACCQEAAAAHQWRkcmVzcwAAAAEFAAAAEnB1enpsZVN0YXRlQWRkcmVzcwkAASwAAAACBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAdfc3Rha2VkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWMFAAAAByRtYXRjaDAFAAAAAWMAAAAAAAAAAAADCQAAZwAAAAIFAAAAC2NvdW50U3Rha2VkAAAAAAAF9eEABAAAAAtuZnRMaWtlc0tleQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAZfbGlrZXMEAAAADW5mdExpa2VzVmFsdWUJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAABl9saWtlcwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAASzAAAAAgUAAAANbmZ0TGlrZXNWYWx1ZQUAAAANY2FsbGVyQWRkcmVzcwQAAAANbmV3TGlrZXNWYWx1ZQMJAAAAAAAAAgkAATEAAAABBQAAAA1uZnRMaWtlc1ZhbHVlAAAAAAAAAAAACQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAASwAAAACCQABLAAAAAIFAAAADW5mdExpa2VzVmFsdWUCAAAAASwFAAAADWNhbGxlckFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALbmZ0TGlrZXNLZXkFAAAADW5ld0xpa2VzVmFsdWUFAAAAA25pbAkAAAIAAAABAgAAABZZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkCQAAAgAAAAECAAAAK1lvdSBjYW4gbGlrZSBpZiB5b3Ugc3Rha2UgMSBvciBtb3JlIFB1enpsZXMJAAACAAAAAQIAAAAOSW52YWxpZCBORlQgaWQAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQKlnW8=", "height": 3123111, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 31Ln5r46yaPBeiVEuA3bB7B5FMRcVZGDSrB5kQ1SKaQP Next: C2iGD3vGzdiRCMDy9AVUvzmnEK9iZodc1dg1gSdRaWvH Diff:
Old | New | Differences | |
---|---|---|---|
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let createNftDapp = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By' | |
5 | 5 | ||
6 | - | let | |
6 | + | let marketFeeAddress = Address(base58'3PEa88W5it7LVPVwtpZDfYajQQWkxFNG8qf') | |
7 | 7 | ||
8 | - | let marketFeeAddress = Address(base58'3PEa88W5it7LVPVwtpZDfYajQQWkxFNG8qf') | |
8 | + | let puzzleStateAddress = base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS' | |
9 | + | ||
10 | + | let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo' | |
11 | + | ||
12 | + | let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC' | |
9 | 13 | ||
10 | 14 | let royaltyPercent = 7 | |
11 | 15 | ||
82 | 86 | case _ => | |
83 | 87 | toString(i.caller) | |
84 | 88 | } | |
85 | - | let royaltyReceiver = if ((nftIssuer != | |
89 | + | let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper))) | |
86 | 90 | then nftIssuer | |
87 | 91 | else split(split(value(assetInfo(nftId)).description, " ")[2], ".")[0] | |
88 | 92 | [IntegerEntry((("nft_" + assetNameStr) + "_buyOutPrice"), buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)] | |
133 | 137 | } | |
134 | 138 | ||
135 | 139 | ||
140 | + | ||
141 | + | @Callable(i) | |
142 | + | func like (nftId) = { | |
143 | + | let nftAsset = assetInfo(toBytes(nftId)) | |
144 | + | let isDuckNft = isDefined(getString(Address(nftDuckWrapper), (("nft_" + nftId) + "_duckId"))) | |
145 | + | let isSignArtNft = isDefined(getString(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))) | |
146 | + | if (if (if (if (isDefined(nftAsset)) | |
147 | + | then !(isDuckNft) | |
148 | + | else false) | |
149 | + | then !(isSignArtNft) | |
150 | + | else false) | |
151 | + | then checkNFT(value(nftAsset)) | |
152 | + | else false) | |
153 | + | then { | |
154 | + | let callerAddress = toString(i.caller) | |
155 | + | let countStaked = match getInteger(Address(puzzleStateAddress), (callerAddress + "_staked")) { | |
156 | + | case c: Int => | |
157 | + | c | |
158 | + | case _ => | |
159 | + | 0 | |
160 | + | } | |
161 | + | if ((countStaked >= 100000000)) | |
162 | + | then { | |
163 | + | let nftLikesKey = (("nft_" + nftId) + "_likes") | |
164 | + | let nftLikesValue = tryGetString((("nft_" + nftId) + "_likes")) | |
165 | + | if (!(isDefined(indexOf(nftLikesValue, callerAddress)))) | |
166 | + | then { | |
167 | + | let newLikesValue = if ((size(nftLikesValue) == 0)) | |
168 | + | then toString(i.caller) | |
169 | + | else ((nftLikesValue + ",") + callerAddress) | |
170 | + | [StringEntry(nftLikesKey, newLikesValue)] | |
171 | + | } | |
172 | + | else throw("You have already voted") | |
173 | + | } | |
174 | + | else throw("You can like if you stake 1 or more Puzzles") | |
175 | + | } | |
176 | + | else throw("Invalid NFT id") | |
177 | + | } | |
178 | + | ||
179 | + | ||
136 | 180 | @Verifier(tx) | |
137 | 181 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
138 | 182 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let createNftDapp = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By' | |
5 | 5 | ||
6 | - | let | |
6 | + | let marketFeeAddress = Address(base58'3PEa88W5it7LVPVwtpZDfYajQQWkxFNG8qf') | |
7 | 7 | ||
8 | - | let marketFeeAddress = Address(base58'3PEa88W5it7LVPVwtpZDfYajQQWkxFNG8qf') | |
8 | + | let puzzleStateAddress = base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS' | |
9 | + | ||
10 | + | let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo' | |
11 | + | ||
12 | + | let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC' | |
9 | 13 | ||
10 | 14 | let royaltyPercent = 7 | |
11 | 15 | ||
12 | 16 | func checkNFT (asset) = if (if (if ((asset.issuer.bytes == createNftDapp)) | |
13 | 17 | then (asset.decimals == 0) | |
14 | 18 | else false) | |
15 | 19 | then (asset.reissuable == false) | |
16 | 20 | else false) | |
17 | 21 | then (asset.quantity == 1) | |
18 | 22 | else false | |
19 | 23 | ||
20 | 24 | ||
21 | 25 | func tryGetInteger (key) = match getInteger(this, key) { | |
22 | 26 | case b: Int => | |
23 | 27 | b | |
24 | 28 | case _ => | |
25 | 29 | 0 | |
26 | 30 | } | |
27 | 31 | ||
28 | 32 | ||
29 | 33 | func tryGetString (key) = match getString(this, key) { | |
30 | 34 | case b: String => | |
31 | 35 | b | |
32 | 36 | case _ => | |
33 | 37 | "" | |
34 | 38 | } | |
35 | 39 | ||
36 | 40 | ||
37 | 41 | func tryGetAssetInfo (assetId,errorMsg) = match assetInfo(fromBase58String(assetId)) { | |
38 | 42 | case a: Asset => | |
39 | 43 | a | |
40 | 44 | case _ => | |
41 | 45 | throw(errorMsg) | |
42 | 46 | } | |
43 | 47 | ||
44 | 48 | ||
45 | 49 | func getAssetString (assetId) = match assetId { | |
46 | 50 | case b: ByteVector => | |
47 | 51 | toBase58String(b) | |
48 | 52 | case _ => | |
49 | 53 | "WAVES" | |
50 | 54 | } | |
51 | 55 | ||
52 | 56 | ||
53 | 57 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
54 | 58 | then unit | |
55 | 59 | else fromBase58String(assetIdStr) | |
56 | 60 | ||
57 | 61 | ||
58 | 62 | @Callable(i) | |
59 | 63 | func sellNFT (buyOutPrice,buyOutAssetId) = { | |
60 | 64 | let pmt = if (if ((size(i.payments) == 1)) | |
61 | 65 | then (i.payments[0].amount == 1) | |
62 | 66 | else false) | |
63 | 67 | then i.payments[0] | |
64 | 68 | else throw("NFT not listed as payment") | |
65 | 69 | let buyOutAsset = getAssetBytes(buyOutAssetId) | |
66 | 70 | if (isDefined(pmt.assetId)) | |
67 | 71 | then { | |
68 | 72 | let nftId = value(pmt.assetId) | |
69 | 73 | let nft = match assetInfo(nftId) { | |
70 | 74 | case a: Asset => | |
71 | 75 | a | |
72 | 76 | case _ => | |
73 | 77 | throw("Can't find NFT") | |
74 | 78 | } | |
75 | 79 | if (checkNFT(nft)) | |
76 | 80 | then if ((buyOutPrice > 0)) | |
77 | 81 | then { | |
78 | 82 | let assetNameStr = toBase58String(nft.id) | |
79 | 83 | let nftIssuer = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) { | |
80 | 84 | case a: String => | |
81 | 85 | a | |
82 | 86 | case _ => | |
83 | 87 | toString(i.caller) | |
84 | 88 | } | |
85 | - | let royaltyReceiver = if ((nftIssuer != | |
89 | + | let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper))) | |
86 | 90 | then nftIssuer | |
87 | 91 | else split(split(value(assetInfo(nftId)).description, " ")[2], ".")[0] | |
88 | 92 | [IntegerEntry((("nft_" + assetNameStr) + "_buyOutPrice"), buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)] | |
89 | 93 | } | |
90 | 94 | else throw("Price must be greater than zero") | |
91 | 95 | else throw("NFT issued by another dapp") | |
92 | 96 | } | |
93 | 97 | else throw("NFT is not attached to the transaction") | |
94 | 98 | } | |
95 | 99 | ||
96 | 100 | ||
97 | 101 | ||
98 | 102 | @Callable(i) | |
99 | 103 | func buyNFT (nftId) = { | |
100 | 104 | let pmt = if ((size(i.payments) == 1)) | |
101 | 105 | then i.payments[0] | |
102 | 106 | else throw("Attached payment is required") | |
103 | 107 | let buyOutPrice = tryGetInteger((("nft_" + nftId) + "_buyOutPrice")) | |
104 | 108 | let buyOutAssetId = tryGetString((("nft_" + nftId) + "_buyOutAssetId")) | |
105 | 109 | let royaltyReceiver = tryGetString((("nft_" + nftId) + "_royaltyReceiver")) | |
106 | 110 | let sellerStr = tryGetString((("nft_" + nftId) + "_seller")) | |
107 | 111 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
108 | 112 | let buyOutAsset = tryGetAssetInfo(buyOutAssetId, "Buyout asset not found") | |
109 | 113 | if (if ((buyOutPrice > 0)) | |
110 | 114 | then (pmt.amount >= buyOutPrice) | |
111 | 115 | else false) | |
112 | 116 | then { | |
113 | 117 | let royaltyPart = fraction(buyOutPrice, royaltyPercent, 100) | |
114 | 118 | let marketFee = fraction(buyOutPrice, 3, 100) | |
115 | 119 | if ((pmt.assetId == buyOutAsset.id)) | |
116 | 120 | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), ScriptTransfer(Address(fromBase58String(sellerStr)), ((buyOutPrice - royaltyPart) - marketFee), buyOutAsset.id), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAsset.id), ScriptTransfer(marketFeeAddress, marketFee, buyOutAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], toBase58String(nftAsset.id)) | |
117 | 121 | else throw("The buyout asset does not match the purchase asset") | |
118 | 122 | } | |
119 | 123 | else throw("Payment amount must be greater than zero") | |
120 | 124 | } | |
121 | 125 | ||
122 | 126 | ||
123 | 127 | ||
124 | 128 | @Callable(i) | |
125 | 129 | func cancelSell (nftId) = { | |
126 | 130 | let sellerStr = tryGetString((("nft_" + nftId) + "_seller")) | |
127 | 131 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
128 | 132 | if (if ((size(sellerStr) > 0)) | |
129 | 133 | then (sellerStr == toString(i.originCaller)) | |
130 | 134 | else false) | |
131 | 135 | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], nftId) | |
132 | 136 | else throw("You are not a seller") | |
133 | 137 | } | |
134 | 138 | ||
135 | 139 | ||
140 | + | ||
141 | + | @Callable(i) | |
142 | + | func like (nftId) = { | |
143 | + | let nftAsset = assetInfo(toBytes(nftId)) | |
144 | + | let isDuckNft = isDefined(getString(Address(nftDuckWrapper), (("nft_" + nftId) + "_duckId"))) | |
145 | + | let isSignArtNft = isDefined(getString(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))) | |
146 | + | if (if (if (if (isDefined(nftAsset)) | |
147 | + | then !(isDuckNft) | |
148 | + | else false) | |
149 | + | then !(isSignArtNft) | |
150 | + | else false) | |
151 | + | then checkNFT(value(nftAsset)) | |
152 | + | else false) | |
153 | + | then { | |
154 | + | let callerAddress = toString(i.caller) | |
155 | + | let countStaked = match getInteger(Address(puzzleStateAddress), (callerAddress + "_staked")) { | |
156 | + | case c: Int => | |
157 | + | c | |
158 | + | case _ => | |
159 | + | 0 | |
160 | + | } | |
161 | + | if ((countStaked >= 100000000)) | |
162 | + | then { | |
163 | + | let nftLikesKey = (("nft_" + nftId) + "_likes") | |
164 | + | let nftLikesValue = tryGetString((("nft_" + nftId) + "_likes")) | |
165 | + | if (!(isDefined(indexOf(nftLikesValue, callerAddress)))) | |
166 | + | then { | |
167 | + | let newLikesValue = if ((size(nftLikesValue) == 0)) | |
168 | + | then toString(i.caller) | |
169 | + | else ((nftLikesValue + ",") + callerAddress) | |
170 | + | [StringEntry(nftLikesKey, newLikesValue)] | |
171 | + | } | |
172 | + | else throw("You have already voted") | |
173 | + | } | |
174 | + | else throw("You can like if you stake 1 or more Puzzles") | |
175 | + | } | |
176 | + | else throw("Invalid NFT id") | |
177 | + | } | |
178 | + | ||
179 | + | ||
136 | 180 | @Verifier(tx) | |
137 | 181 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
138 | 182 |
github/deemru/w8io/786bc32 63.43 ms ◑