tx · 3hMEWSW212rKCDSJyXx2F4zxnjzhXQDf7yozAe43cjV3

3N5ecXT7MHB6z33Ms2Pvy6thNVBMeacaACo:  -0.01100000 Waves

2023.08.17 10:53 [2714317] smart account 3N5ecXT7MHB6z33Ms2Pvy6thNVBMeacaACo > SELF 0.00000000 Waves

{ "type": 13, "id": "3hMEWSW212rKCDSJyXx2F4zxnjzhXQDf7yozAe43cjV3", "fee": 1100000, "feeAssetId": null, "timestamp": 1692258811529, "version": 2, "chainId": 84, "sender": "3N5ecXT7MHB6z33Ms2Pvy6thNVBMeacaACo", "senderPublicKey": "3WPc9rDre1YBs13teGnzt1PnEEQZXaaSTRU1tVuqLa4Z", "proofs": [ "4jJtgtsA7hKexQcwbRH6yPh1RqTTRUPKmcfVwX7q67RUQPTLYVnaULpwxG3Uz1ag6UtruSVjdcgjnNrRDDYHcrB7" ], "script": "base64:BgI/CAISDQoLGBgBAQEBAQEBCAgSABIAEgQKAgEIEgQKAgEIEgQKAgEIEgQKAgEIEgQKAgEIEgQKAgEIEgQKAgEIMQAUSU5JVElBTF9UT0tFTl9BTU9VTlQAgICapuqv4wEADVBFUkNFTlRfU0NBTEUA6AcADGtXRGFvQWRkcmVzcwILd0Rhb0FkZHJlc3MAC2tXRGFvQW1vdW50Agp3RGFvQW1vdW50AAlrV0Rhb0xvY2sCDndEYW9Mb2NrUGVyaW9kAAxrV0Rhb1Zlc3RpbmcCEXdEYW9WZXN0aW5nUGVyaW9kAA9rV0Rhb1dpdGhkcmF3ZWQCDndEYW9XaXRoZHJhd2VkAAxrVGVhbUFkZHJlc3MCC3RlYW1BZGRyZXNzAAtrVGVhbUFtb3VudAIKdGVhbUFtb3VudAAJa1RlYW1Mb2NrAg50ZWFtTG9ja1BlcmlvZAAMa1RlYW1WZXN0aW5nAhF0ZWFtVmVzdGluZ1BlcmlvZAAPa1RlYW1XaXRoZHJhd2VkAg50ZWFtV2l0aGRyYXdlZAAQa01hcmtldGluZ0Ftb3VudAIMbWFya2V0QW1vdW50ABRrTWFya2V0aW5nV2l0aGRyYXdlZAITbWFya2V0aW5nV2l0aGRyYXdlZAAOa1BhcnRuZXJBbW91bnQCDXBhcnRuZXJBbW91bnQAE2tQYXJ0bmVyc1dpdGhkcmF3ZWQCEnBhcnRuZXJzV2l0aGRyYXdlZAAQa1JldHJvRHJvcEFtb3VudAIPcmV0cm9Ecm9wQW1vdW50ABRrUmV0cm9Ecm9wV2l0aGRyYXdlZAITcmV0cm9Ecm9wV2l0aGRyYXdlZAARa0xlbmRSZXdhcmRBbW91bnQCEWxlbmRSZXdhcmRzQW1vdW50ABVrTGVuZFJld2FyZFdpdGhkcmF3ZWQCFGxlbmRSZXdhcmRXaXRoZHJhd2VkAA9rTFBSZXdhcmRBbW91bnQCDmxwUmV3YXJkQW1vdW50ABNrTFBSZXdhcmRXaXRoZHJhd2VkAhJscFJld2FyZFdpdGhkcmF3ZWQAD2tQb29sSW5pdEFtb3VudAIOcG9vbEluaXRBbW91bnQAE2tQb29sSW5pdFdpdGhkcmF3ZWQCEnBvb2xJbml0V2l0aGRyYXdlZAAQa0xhdW5jaHBhZEFtb3VudAIPbGF1bmNocGFkQW1vdW50ABRrTGF1bmNocGFkV2l0aGRyYXdlZAITbGF1bmNocGFkV2l0aGRyYXdlZAAMa0FYTFlUb2tlbklkAgtheGx5VG9rZW5JZAAMa1N0YXJ0SGVpZ2h0AgtzdGFydEhlaWdodAAJa0FkbWluMVBLAhVncm91cDFfYWRtaW4xX3B1Yl9rZXkACWtBZG1pbjJQSwIVZ3JvdXAxX2FkbWluMl9wdWJfa2V5AAlrQWRtaW4zUEsCFWdyb3VwMV9hZG1pbjNfcHViX2tleQARa0F4bHlNYWluQ29udHJhY3QCDG1haW5Db250cmFjdAAMa0F4bHlGYXJtaW5nAg5mYXJtaW5nQWRkcmVzcwAMbWFpbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwURa0F4bHlNYWluQ29udHJhY3QCGUNhbid0IGdldCBtYWluQ29udGFjdCBrZXkADmZhcm1pbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0F4bHlGYXJtaW5nAhxDYW4ndCBnZXQgZmFybWluZ0FkZHJlc3Mga2V5AAhhZG1pbjFQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQlrQWRtaW4xUEsCEkNhbid0IGdldCBhZG1pbjFQSwAIYWRtaW4yUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUJa0FkbWluMlBLAhJDYW4ndCBnZXQgYWRtaW4yUEsACGFkbWluM1BLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQxtYWluQ29udHJhY3QFCWtBZG1pbjNQSwISQ2FuJ3QgZ2V0IGFkbWluM1BLAAZBWExZSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUMa0FYTFlUb2tlbklkAQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFCGFkbWluMVBLCQDMCAIFCGFkbWluMlBLCQDMCAIFCGFkbWluM1BLBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECKE9ubHkgYWRtaW4gZ3JvdXAxIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgENaXNGYXJtaW5nQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFDmZhcm1pbmdBZGRyZXNzBQR1bml0CQACAQIsT25seSBmYXJtaW5nIGNvbnRyYWN0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BGXBhcnNlUGVyY2VudFBhcmFtVG9BbW91bnQBBXBhcmFtBAdwZXJjZW50BAckbWF0Y2gwBQVwYXJhbQMJAAECBQckbWF0Y2gwAgNJbnQEAXAFByRtYXRjaDAFAXADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFwBQckbWF0Y2gwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUBcAIdQ2FuJ3QgcGFyc2UgcGVyY2VudCBpbiBwYXJhbXMJAAIBAgtNYXRjaCBlcnJvcgMDCQBnAgAABQdwZXJjZW50BgkAZwIFB3BlcmNlbnQFDVBFUkNFTlRfU0NBTEUJAAIBAjNwZXJjZW50IG11c3QgYmUgbnVtYmVyIGJldHdlZW4gMSgwLjEpIGFuZCA5OTkoOTkuOSkEBmFtb3VudAkAawMFFElOSVRJQUxfVE9LRU5fQU1PVU5UBQdwZXJjZW50BQ1QRVJDRU5UX1NDQUxFBQZhbW91bnQBFnBhcnNlTG9ja1Zlc3RpbmdQZXJpb2QCB2xvY2tTdHIHdmVzdFN0cgQKbG9ja1BlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFB2xvY2tTdHICF0Nhbid0IHBhcnNlIGxvY2sgcGVyaW9kBA12ZXN0aW5nUGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUHdmVzdFN0cgIaQ2FuJ3QgcGFyc2UgdmVzdGluZyBwZXJpb2QDAwkAZwIAAAUKbG9ja1BlcmlvZAYJAGcCAAAFDXZlc3RpbmdQZXJpb2QJAAIBAjNsb2NrUGVyaW9kIGFuZCB2ZXN0aW5nUGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgUKbG9ja1BlcmlvZAUNdmVzdGluZ1BlcmlvZAkAAgECLXZlc3RpbmdQZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gbG9ja1BlcmlvZAkAlAoCBQpsb2NrUGVyaW9kBQ12ZXN0aW5nUGVyaW9kAQ92YWxpZGF0ZUFkZHJlc3MBBGFTdHIJAKUIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBGFTdHICF1dyb25nIGFkZHJlc3MgaW4gcGFyYW1zARNwYXJzZVdEQU9UZWFtUGFyYW1zAQZwYXJhbXMEB2FkZHJlc3MJAQ92YWxpZGF0ZUFkZHJlc3MBCQCRAwIFBnBhcmFtcwAABAZhbW91bnQJARlwYXJzZVBlcmNlbnRQYXJhbVRvQW1vdW50AQkAkQMCBQZwYXJhbXMAAQQLJHQwNDU0MTQ2MTkJARZwYXJzZUxvY2tWZXN0aW5nUGVyaW9kAgkAkQMCBQZwYXJhbXMAAgkAkQMCBQZwYXJhbXMAAwQKbG9ja1BlcmlvZAgFCyR0MDQ1NDE0NjE5Al8xBA12ZXN0aW5nUGVyaW9kCAULJHQwNDU0MTQ2MTkCXzIJAJYKBAUHYWRkcmVzcwUGYW1vdW50BQpsb2NrUGVyaW9kBQ12ZXN0aW5nUGVyaW9kAQtwYXJzZVBhcmFtcwEGcGFyYW1zBAdhZGRyZXNzCQEPdmFsaWRhdGVBZGRyZXNzAQkAkQMCBQZwYXJhbXMAAAQGYW1vdW50CQEZcGFyc2VQZXJjZW50UGFyYW1Ub0Ftb3VudAEJAJEDAgUGcGFyYW1zAAEJAJQKAgUHYWRkcmVzcwUGYW1vdW50AQ93aXRoZHJhd1RlYW1EYW8GC3RvdGFsQW1vdW50CmxvY2tQZXJpb2QNdmVzdGluZ1BlcmlvZAp3aXRoZHJhd2VkB2FkZHJlc3MEd0tleQQLc3RhcnRIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDGtTdGFydEhlaWdodAQIbG9ja1RpbGwJAGQCBQtzdGFydEhlaWdodAUKbG9ja1BlcmlvZAQLdmVzdGluZ1RpbGwJAGQCCQBkAgULc3RhcnRIZWlnaHQFCmxvY2tQZXJpb2QFDXZlc3RpbmdQZXJpb2QEC2NhbldpdGhkcmF3CQBlAgkAawMFC3RvdGFsQW1vdW50CQCXAwEJAMwIAgkAZQIFBmhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0BQpsb2NrUGVyaW9kCQDMCAIFC3Zlc3RpbmdUaWxsBQNuaWwFDXZlc3RpbmdQZXJpb2QFCndpdGhkcmF3ZWQDCQBnAgUIbG9ja1RpbGwFBmhlaWdodAkAAgECFkxvY2sgcGVyaW9kIGlzIG5vdCBlbmQDCQBnAgAABQtjYW5XaXRoZHJhdwkAAgECE05vdGhpbmcgdG8gd2l0aGRyYXcJAMwIAgkBDEludGVnZXJFbnRyeQIFBHdLZXkJAGQCBQp3aXRoZHJhd2VkBQtjYW5XaXRoZHJhdwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzBQtjYW5XaXRoZHJhdwUGQVhMWUlkBQNuaWwBD3dpdGhkcmF3VG9PdGhlcgUGYW1vdW50C3RvdGFsQW1vdW50CndpdGhkcmF3ZWQHYWRkcmVzcwR3S2V5AwkAZgIJAGQCBQp3aXRoZHJhd2VkBQZhbW91bnQFC3RvdGFsQW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIdWW91IGNhbid0IHdpdGhkcmF3IG1vcmUgdGhhbiAJAKQDAQULdG90YWxBbW91bnQCFSBhbHJlYWR5IHdpdGhkcmF3ZWQ6IAkApAMBBQp3aXRoZHJhd2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQR3S2V5CQBkAgUKd2l0aGRyYXdlZAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFB2FkZHJlc3MFBmFtb3VudAUGQVhMWUlkBQNuaWwKAWkBBGluaXQLCndEYW9QYXJhbXMKdGVhbVBhcmFtcxBtYXJrZXRpbmdQZXJjZW50DnBhcnRuZXJQZXJjZW50EHJldHJvRHJvcFBlcmNlbnQRbGVuZFJld2FyZFBlcmNlbnQPbHBSZXdhcmRQZXJjZW50D3Bvb2xJbml0UGVyY2VudBBsYXVuY2hwYWRQZXJjZW50EG1haW5Db250cmFjdEFkZHILZmFybWluZ0FkZHIJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQMJAQIhPQIJAJADAQUKd0Rhb1BhcmFtcwAECQACAQIbd0Rhb1BhcmFtcyBtdXN0IGhhdmUgNCBhcmdzAwkBAiE9AgkAkAMBBQp0ZWFtUGFyYW1zAAQJAAIBAht0ZWFtUGFyYW1zIG11c3QgaGF2ZSA0IGFyZ3MDCQBnAgAABRBtYXJrZXRpbmdQZXJjZW50CQACAQIcbWFya2V0aW5nUGVyY2VudCBtdXN0IGJlID4gMAMJAGcCAAAFDnBhcnRuZXJQZXJjZW50CQACAQIacGFydG5lclBlcmNlbnQgbXVzdCBiZSA+IDADCQBnAgAABRByZXRyb0Ryb3BQZXJjZW50CQACAQIccmV0cm9Ecm9wUGVyY2VudCBtdXN0IGJlID4gMAMJAGcCAAAFEWxlbmRSZXdhcmRQZXJjZW50CQACAQIcbGVuZFJld2FyZFBhcmFtcyBtdXN0IGJlID4gMAMJAGcCAAAFD2xwUmV3YXJkUGVyY2VudAkAAgECGmxwUmV3YXJkUGFyYW1zIG11c3QgYmUgPiAwAwkAZwIAAAUPcG9vbEluaXRQZXJjZW50CQACAQIacG9vbEluaXRQYXJhbXMgbXVzdCBiZSA+IDADCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFC2Zhcm1pbmdBZGRyCQACAQIVV3JvbmcgZmFybWluZyBhZGRyZXNzAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBRBtYWluQ29udHJhY3RBZGRyCQACAQIbV3JvbmcgbWFpbiBjb250cmFjdCBhZGRyZXNzBAskdDA3MjUyNzM1MAkBE3BhcnNlV0RBT1RlYW1QYXJhbXMBBQp3RGFvUGFyYW1zBAt3RGFvQWRkcmVzcwgFCyR0MDcyNTI3MzUwAl8xBAp3RGFvQW1vdW50CAULJHQwNzI1MjczNTACXzIEDndEYW9Mb2NrUGVyaW9kCAULJHQwNzI1MjczNTACXzMEEXdEYW9WZXN0aW5nUGVyaW9kCAULJHQwNzI1MjczNTACXzQECyR0MDczNTM3NDUxCQETcGFyc2VXREFPVGVhbVBhcmFtcwEFCnRlYW1QYXJhbXMEC3RlYW1BZGRyZXNzCAULJHQwNzM1Mzc0NTECXzEECnRlYW1BbW91bnQIBQskdDA3MzUzNzQ1MQJfMgQOdGVhbUxvY2tQZXJpb2QIBQskdDA3MzUzNzQ1MQJfMwQRdGVhbVZlc3RpbmdQZXJpb2QIBQskdDA3MzUzNzQ1MQJfNAQHbUFtb3VudAkBGXBhcnNlUGVyY2VudFBhcmFtVG9BbW91bnQBBRBtYXJrZXRpbmdQZXJjZW50BAdwQW1vdW50CQEZcGFyc2VQZXJjZW50UGFyYW1Ub0Ftb3VudAEFDnBhcnRuZXJQZXJjZW50BAdyQW1vdW50CQEZcGFyc2VQZXJjZW50UGFyYW1Ub0Ftb3VudAEFEHJldHJvRHJvcFBlcmNlbnQEB2xBbW91bnQJARlwYXJzZVBlcmNlbnRQYXJhbVRvQW1vdW50AQURbGVuZFJld2FyZFBlcmNlbnQECGxwQW1vdW50CQEZcGFyc2VQZXJjZW50UGFyYW1Ub0Ftb3VudAEFD2xwUmV3YXJkUGVyY2VudAQIcGlBbW91bnQJARlwYXJzZVBlcmNlbnRQYXJhbVRvQW1vdW50AQUPcG9vbEluaXRQZXJjZW50BAhsYUFtb3VudAkBGXBhcnNlUGVyY2VudFBhcmFtVG9BbW91bnQBBRBsYXVuY2hwYWRQZXJjZW50BANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCBQp3RGFvQW1vdW50BQp0ZWFtQW1vdW50BQdtQW1vdW50BQdwQW1vdW50BQdyQW1vdW50BQdsQW1vdW50BQhscEFtb3VudAUIcGlBbW91bnQDCQBmAgUDc3VtBRRJTklUSUFMX1RPS0VOX0FNT1VOVAkAAgECF1dyb25nIHBlcmNlbnRzKCA+IDEwMCUpBAVpc3N1ZQkAwggFAgRBWExZAhNBWExZIHByb3RvY29sIHRva2VuBRRJTklUSUFMX1RPS0VOX0FNT1VOVAAIBwQFaWRTdHIJANgEAQkAuAgBBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQxrV0Rhb0FkZHJlc3MFC3dEYW9BZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrV0Rhb0Ftb3VudAUKd0Rhb0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa1dEYW9Mb2NrBQ53RGFvTG9ja1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1dEYW9WZXN0aW5nBRF3RGFvVmVzdGluZ1BlcmlvZAkAzAgCCQELU3RyaW5nRW50cnkCBQxrVGVhbUFkZHJlc3MFC3RlYW1BZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrVGVhbUFtb3VudAUKdGVhbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa1RlYW1Mb2NrBQ50ZWFtTG9ja1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1RlYW1WZXN0aW5nBRF0ZWFtVmVzdGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa01hcmtldGluZ0Ftb3VudAUHbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa1BhcnRuZXJBbW91bnQFB3BBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtSZXRyb0Ryb3BBbW91bnQFB3JBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtMZW5kUmV3YXJkQW1vdW50BQdsQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rTFBSZXdhcmRBbW91bnQFCGxwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rUG9vbEluaXRBbW91bnQFCHBpQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrTGF1bmNocGFkQW1vdW50BQhsYUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1N0YXJ0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgURa0F4bHlNYWluQ29udHJhY3QFEG1haW5Db250cmFjdEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0F4bHlGYXJtaW5nBQtmYXJtaW5nQWRkcgkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQxrQVhMWVRva2VuSWQFBWlkU3RyBQNuaWwBaQEMd2l0aGRyYXdXRGFvAAQGYW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQtrV0Rhb0Ftb3VudAQKbG9ja1BlcmlvZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUJa1dEYW9Mb2NrBA12ZXN0aW5nUGVyaW9kCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQxrV0Rhb1Zlc3RpbmcEB2FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDGtXRGFvQWRkcmVzcwQKd2l0aGRyYXdlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ9rV0Rhb1dpdGhkcmF3ZWQAAAkBD3dpdGhkcmF3VGVhbURhbwYFBmFtb3VudAUKbG9ja1BlcmlvZAUNdmVzdGluZ1BlcmlvZAUKd2l0aGRyYXdlZAUHYWRkcmVzcwUPa1dEYW9XaXRoZHJhd2VkAWkBDHdpdGhkcmF3VGVhbQAEBmFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwULa1RlYW1BbW91bnQECmxvY2tQZXJpb2QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFCWtUZWFtTG9jawQNdmVzdGluZ1BlcmlvZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUMa1RlYW1WZXN0aW5nBAdhZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQxrVGVhbUFkZHJlc3MECndpdGhkcmF3ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa1RlYW1XaXRoZHJhd2VkAAAJAQ93aXRoZHJhd1RlYW1EYW8GBQZhbW91bnQFCmxvY2tQZXJpb2QFDXZlc3RpbmdQZXJpb2QFCndpdGhkcmF3ZWQFB2FkZHJlc3MFD2tUZWFtV2l0aGRyYXdlZAFpARF3aXRoZHJhd01hcmtldGluZwIGYW1vdW50CmFkZHJlc3NTdHIJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQLdG90YWxBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEGtNYXJrZXRpbmdBbW91bnQECndpdGhkcmF3ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFFGtNYXJrZXRpbmdXaXRoZHJhd2VkBAdhZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQphZGRyZXNzU3RyCQEPd2l0aGRyYXdUb090aGVyBQUGYW1vdW50BQt0b3RhbEFtb3VudAUKd2l0aGRyYXdlZAUHYWRkcmVzcwUUa01hcmtldGluZ1dpdGhkcmF3ZWQBaQEQd2l0aGRyYXdQYXJ0bmVycwIGYW1vdW50CmFkZHJlc3NTdHIJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQLdG90YWxBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDmtQYXJ0bmVyQW1vdW50BAp3aXRoZHJhd2VkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRNrUGFydG5lcnNXaXRoZHJhd2VkBAdhZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQphZGRyZXNzU3RyCQEPd2l0aGRyYXdUb090aGVyBQUGYW1vdW50BQt0b3RhbEFtb3VudAUKd2l0aGRyYXdlZAUHYWRkcmVzcwUTa1BhcnRuZXJzV2l0aGRyYXdlZAFpARJ3aXRoZHJhd1JldHJvRHJhb3ACBmFtb3VudAphZGRyZXNzU3RyCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEC3RvdGFsQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRBrUmV0cm9Ecm9wQW1vdW50BAp3aXRoZHJhd2VkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRRrUmV0cm9Ecm9wV2l0aGRyYXdlZAQHYWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKYWRkcmVzc1N0cgkBD3dpdGhkcmF3VG9PdGhlcgUFBmFtb3VudAULdG90YWxBbW91bnQFCndpdGhkcmF3ZWQFB2FkZHJlc3MFFGtSZXRyb0Ryb3BXaXRoZHJhd2VkAWkBEHdpdGhkcmF3UG9sbEluaXQCBmFtb3VudAphZGRyZXNzU3RyCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEC3RvdGFsQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ9rUG9vbEluaXRBbW91bnQECndpdGhkcmF3ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFE2tQb29sSW5pdFdpdGhkcmF3ZWQEB2FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmFkZHJlc3NTdHIJAQ93aXRoZHJhd1RvT3RoZXIFBQZhbW91bnQFC3RvdGFsQW1vdW50BQp3aXRoZHJhd2VkBQdhZGRyZXNzBRNrUG9vbEluaXRXaXRoZHJhd2VkAWkBEndpdGhkcmF3TGVuZFJld2FyZAIGYW1vdW50DGFkZHJlc3NUb1N0cgkBC3ZhbHVlT3JFbHNlAgkBDWlzRmFybWluZ0NhbGwBBQFpBAt0b3RhbEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwURa0xlbmRSZXdhcmRBbW91bnQECndpdGhkcmF3ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFFWtMZW5kUmV3YXJkV2l0aGRyYXdlZAQHYWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUMYWRkcmVzc1RvU3RyCQEPd2l0aGRyYXdUb090aGVyBQUGYW1vdW50BQt0b3RhbEFtb3VudAUKd2l0aGRyYXdlZAUHYWRkcmVzcwUVa0xlbmRSZXdhcmRXaXRoZHJhd2VkAWkBEHdpdGhkcmF3THBSZXdhcmQCBmFtb3VudAxhZGRyZXNzVG9TdHIJAQt2YWx1ZU9yRWxzZQIJAQ1pc0Zhcm1pbmdDYWxsAQUBaQQLdG90YWxBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFD2tMUFJld2FyZEFtb3VudAQKd2l0aGRyYXdlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUTa0xQUmV3YXJkV2l0aGRyYXdlZAQHYWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUMYWRkcmVzc1RvU3RyCQEPd2l0aGRyYXdUb090aGVyBQUGYW1vdW50BQt0b3RhbEFtb3VudAUKd2l0aGRyYXdlZAUHYWRkcmVzcwUTa0xQUmV3YXJkV2l0aGRyYXdlZAFpARF3aXRoZHJhd0xhdW5jaHBhZAIGYW1vdW50DGFkZHJlc3NUb1N0cgkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAt0b3RhbEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUQa0xhdW5jaHBhZEFtb3VudAQKd2l0aGRyYXdlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUUa0xhdW5jaHBhZFdpdGhkcmF3ZWQEB2FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDGFkZHJlc3NUb1N0cgkBD3dpdGhkcmF3VG9PdGhlcgUFBmFtb3VudAULdG90YWxBbW91bnQFCndpdGhkcmF3ZWQFB2FkZHJlc3MFFGtMYXVuY2hwYWRXaXRoZHJhd2VkAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUIYWRtaW4xUEsAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQhhZG1pbjJQSwABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCGFkbWluM1BLAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBAZpc1NlbGYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECmlzUmlnaHRGZWUDCQAAAggFA2ludgNmZWUAoLmOMAkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcECmlzSW5pdENhbGwJAAACCAUDaW52CGZ1bmN0aW9uAgRpbml0BAxpc25vUGF5bWVudHMJAAACCQCQAwEIBQNpbnYIcGF5bWVudHMAAAMDAwMFCmlzUmlnaHRGZWUFCmlzSW5pdENhbGwHBQZpc1NlbGYHBQxpc25vUGF5bWVudHMHBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluczrUwJU=", "height": 2714317, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: G1pV52N1z7QqxYVYtun2utbbnWZcCguKSv8ZGyt1wgMa Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let INITIAL_TOKEN_AMOUNT = 1000000000000000
5+
6+let PERCENT_SCALE = 1000
7+
8+let kWDaoAddress = "wDaoAddress"
9+
10+let kWDaoAmount = "wDaoAmount"
11+
12+let kWDaoLock = "wDaoLockPeriod"
13+
14+let kWDaoVesting = "wDaoVestingPeriod"
15+
16+let kWDaoWithdrawed = "wDaoWithdrawed"
17+
18+let kTeamAddress = "teamAddress"
19+
20+let kTeamAmount = "teamAmount"
21+
22+let kTeamLock = "teamLockPeriod"
23+
24+let kTeamVesting = "teamVestingPeriod"
25+
26+let kTeamWithdrawed = "teamWithdrawed"
27+
28+let kMarketingAmount = "marketAmount"
29+
30+let kMarketingWithdrawed = "marketingWithdrawed"
31+
32+let kPartnerAmount = "partnerAmount"
33+
34+let kPartnersWithdrawed = "partnersWithdrawed"
35+
36+let kRetroDropAmount = "retroDropAmount"
37+
38+let kRetroDropWithdrawed = "retroDropWithdrawed"
39+
40+let kLendRewardAmount = "lendRewardsAmount"
41+
42+let kLendRewardWithdrawed = "lendRewardWithdrawed"
43+
44+let kLPRewardAmount = "lpRewardAmount"
45+
46+let kLPRewardWithdrawed = "lpRewardWithdrawed"
47+
48+let kPoolInitAmount = "poolInitAmount"
49+
50+let kPoolInitWithdrawed = "poolInitWithdrawed"
51+
52+let kLaunchpadAmount = "launchpadAmount"
53+
54+let kLaunchpadWithdrawed = "launchpadWithdrawed"
55+
56+let kAXLYTokenId = "axlyTokenId"
57+
58+let kStartHeight = "startHeight"
59+
60+let kAdmin1PK = "group1_admin1_pub_key"
61+
62+let kAdmin2PK = "group1_admin2_pub_key"
63+
64+let kAdmin3PK = "group1_admin3_pub_key"
65+
66+let kAxlyMainContract = "mainContract"
67+
68+let kAxlyFarming = "farmingAddress"
69+
70+let mainContract = addressFromStringValue(valueOrErrorMessage(getString(this, kAxlyMainContract), "Can't get mainContact key"))
71+
72+let farmingAddress = addressFromStringValue(valueOrErrorMessage(getString(this, kAxlyFarming), "Can't get farmingAddress key"))
73+
74+let admin1PK = fromBase58String(valueOrErrorMessage(getString(mainContract, kAdmin1PK), "Can't get admin1PK"))
75+
76+let admin2PK = fromBase58String(valueOrErrorMessage(getString(mainContract, kAdmin2PK), "Can't get admin2PK"))
77+
78+let admin3PK = fromBase58String(valueOrErrorMessage(getString(mainContract, kAdmin3PK), "Can't get admin3PK"))
79+
80+let AXLYId = fromBase58String(getStringValue(this, kAXLYTokenId))
81+
82+func isAdminCall (i) = if (containsElement([admin1PK, admin2PK, admin3PK], i.callerPublicKey))
83+ then unit
84+ else throw("Only admin group1 can call this function")
85+
86+
87+func isSelfCall (i) = if ((i.caller == this))
88+ then unit
89+ else throw("Only contract itself can call this function")
90+
91+
92+func isFarmingCall (i) = if ((i.caller == farmingAddress))
93+ then unit
94+ else throw("Only farming contract can call this function")
95+
96+
97+func parsePercentParamToAmount (param) = {
98+ let percent = match param {
99+ case p: Int =>
100+ p
101+ case p: String =>
102+ valueOrErrorMessage(parseInt(p), "Can't parse percent in params")
103+ case _ =>
104+ throw("Match error")
105+ }
106+ if (if ((0 >= percent))
107+ then true
108+ else (percent >= PERCENT_SCALE))
109+ then throw("percent must be number between 1(0.1) and 999(99.9)")
110+ else {
111+ let amount = fraction(INITIAL_TOKEN_AMOUNT, percent, PERCENT_SCALE)
112+ amount
113+ }
114+ }
115+
116+
117+func parseLockVestingPeriod (lockStr,vestStr) = {
118+ let lockPeriod = valueOrErrorMessage(parseInt(lockStr), "Can't parse lock period")
119+ let vestingPeriod = valueOrErrorMessage(parseInt(vestStr), "Can't parse vesting period")
120+ if (if ((0 >= lockPeriod))
121+ then true
122+ else (0 >= vestingPeriod))
123+ then throw("lockPeriod and vestingPeriod must be greater than 0")
124+ else if ((lockPeriod > vestingPeriod))
125+ then throw("vestingPeriod must be greater than lockPeriod")
126+ else $Tuple2(lockPeriod, vestingPeriod)
127+ }
128+
129+
130+func validateAddress (aStr) = toString(valueOrErrorMessage(addressFromString(aStr), "Wrong address in params"))
131+
132+
133+func parseWDAOTeamParams (params) = {
134+ let address = validateAddress(params[0])
135+ let amount = parsePercentParamToAmount(params[1])
136+ let $t045414619 = parseLockVestingPeriod(params[2], params[3])
137+ let lockPeriod = $t045414619._1
138+ let vestingPeriod = $t045414619._2
139+ $Tuple4(address, amount, lockPeriod, vestingPeriod)
140+ }
141+
142+
143+func parseParams (params) = {
144+ let address = validateAddress(params[0])
145+ let amount = parsePercentParamToAmount(params[1])
146+ $Tuple2(address, amount)
147+ }
148+
149+
150+func withdrawTeamDao (totalAmount,lockPeriod,vestingPeriod,withdrawed,address,wKey) = {
151+ let startHeight = getIntegerValue(this, kStartHeight)
152+ let lockTill = (startHeight + lockPeriod)
153+ let vestingTill = ((startHeight + lockPeriod) + vestingPeriod)
154+ let canWithdraw = (fraction(totalAmount, min([(height - (startHeight + lockPeriod)), vestingTill]), vestingPeriod) - withdrawed)
155+ if ((lockTill >= height))
156+ then throw("Lock period is not end")
157+ else if ((0 >= canWithdraw))
158+ then throw("Nothing to withdraw")
159+ else [IntegerEntry(wKey, (withdrawed + canWithdraw)), ScriptTransfer(address, canWithdraw, AXLYId)]
160+ }
161+
162+
163+func withdrawToOther (amount,totalAmount,withdrawed,address,wKey) = if (((withdrawed + amount) > totalAmount))
164+ then throw(((("You can't withdraw more than " + toString(totalAmount)) + " already withdrawed: ") + toString(withdrawed)))
165+ else [IntegerEntry(wKey, (withdrawed + amount)), ScriptTransfer(address, amount, AXLYId)]
166+
167+
168+@Callable(i)
169+func init (wDaoParams,teamParams,marketingPercent,partnerPercent,retroDropPercent,lendRewardPercent,lpRewardPercent,poolInitPercent,launchpadPercent,mainContractAddr,farmingAddr) = valueOrElse(isSelfCall(i), if ((size(wDaoParams) != 4))
170+ then throw("wDaoParams must have 4 args")
171+ else if ((size(teamParams) != 4))
172+ then throw("teamParams must have 4 args")
173+ else if ((0 >= marketingPercent))
174+ then throw("marketingPercent must be > 0")
175+ else if ((0 >= partnerPercent))
176+ then throw("partnerPercent must be > 0")
177+ else if ((0 >= retroDropPercent))
178+ then throw("retroDropPercent must be > 0")
179+ else if ((0 >= lendRewardPercent))
180+ then throw("lendRewardParams must be > 0")
181+ else if ((0 >= lpRewardPercent))
182+ then throw("lpRewardParams must be > 0")
183+ else if ((0 >= poolInitPercent))
184+ then throw("poolInitParams must be > 0")
185+ else if (!(isDefined(addressFromString(farmingAddr))))
186+ then throw("Wrong farming address")
187+ else if (!(isDefined(addressFromString(mainContractAddr))))
188+ then throw("Wrong main contract address")
189+ else {
190+ let $t072527350 = parseWDAOTeamParams(wDaoParams)
191+ let wDaoAddress = $t072527350._1
192+ let wDaoAmount = $t072527350._2
193+ let wDaoLockPeriod = $t072527350._3
194+ let wDaoVestingPeriod = $t072527350._4
195+ let $t073537451 = parseWDAOTeamParams(teamParams)
196+ let teamAddress = $t073537451._1
197+ let teamAmount = $t073537451._2
198+ let teamLockPeriod = $t073537451._3
199+ let teamVestingPeriod = $t073537451._4
200+ let mAmount = parsePercentParamToAmount(marketingPercent)
201+ let pAmount = parsePercentParamToAmount(partnerPercent)
202+ let rAmount = parsePercentParamToAmount(retroDropPercent)
203+ let lAmount = parsePercentParamToAmount(lendRewardPercent)
204+ let lpAmount = parsePercentParamToAmount(lpRewardPercent)
205+ let piAmount = parsePercentParamToAmount(poolInitPercent)
206+ let laAmount = parsePercentParamToAmount(launchpadPercent)
207+ let sum = (((((((wDaoAmount + teamAmount) + mAmount) + pAmount) + rAmount) + lAmount) + lpAmount) + piAmount)
208+ if ((sum > INITIAL_TOKEN_AMOUNT))
209+ then throw("Wrong percents( > 100%)")
210+ else {
211+ let issue = Issue("AXLY", "AXLY protocol token", INITIAL_TOKEN_AMOUNT, 8, false)
212+ let idStr = toBase58String(calculateAssetId(issue))
213+[StringEntry(kWDaoAddress, wDaoAddress), IntegerEntry(kWDaoAmount, wDaoAmount), IntegerEntry(kWDaoLock, wDaoLockPeriod), IntegerEntry(kWDaoVesting, wDaoVestingPeriod), StringEntry(kTeamAddress, teamAddress), IntegerEntry(kTeamAmount, teamAmount), IntegerEntry(kTeamLock, teamLockPeriod), IntegerEntry(kTeamVesting, teamVestingPeriod), IntegerEntry(kMarketingAmount, mAmount), IntegerEntry(kPartnerAmount, pAmount), IntegerEntry(kRetroDropAmount, rAmount), IntegerEntry(kLendRewardAmount, lAmount), IntegerEntry(kLPRewardAmount, lpAmount), IntegerEntry(kPoolInitAmount, piAmount), IntegerEntry(kLaunchpadAmount, laAmount), IntegerEntry(kStartHeight, height), StringEntry(kAxlyMainContract, mainContractAddr), StringEntry(kAxlyFarming, farmingAddr), issue, StringEntry(kAXLYTokenId, idStr)]
214+ }
215+ })
216+
217+
218+
219+@Callable(i)
220+func withdrawWDao () = {
221+ let amount = getIntegerValue(this, kWDaoAmount)
222+ let lockPeriod = getIntegerValue(this, kWDaoLock)
223+ let vestingPeriod = getIntegerValue(this, kWDaoVesting)
224+ let address = addressFromStringValue(getStringValue(this, kWDaoAddress))
225+ let withdrawed = valueOrElse(getInteger(this, kWDaoWithdrawed), 0)
226+ withdrawTeamDao(amount, lockPeriod, vestingPeriod, withdrawed, address, kWDaoWithdrawed)
227+ }
228+
229+
230+
231+@Callable(i)
232+func withdrawTeam () = {
233+ let amount = getIntegerValue(this, kTeamAmount)
234+ let lockPeriod = getIntegerValue(this, kTeamLock)
235+ let vestingPeriod = getIntegerValue(this, kTeamVesting)
236+ let address = addressFromStringValue(getStringValue(this, kTeamAddress))
237+ let withdrawed = valueOrElse(getInteger(this, kTeamWithdrawed), 0)
238+ withdrawTeamDao(amount, lockPeriod, vestingPeriod, withdrawed, address, kTeamWithdrawed)
239+ }
240+
241+
242+
243+@Callable(i)
244+func withdrawMarketing (amount,addressStr) = valueOrElse(isSelfCall(i), {
245+ let totalAmount = getIntegerValue(this, kMarketingAmount)
246+ let withdrawed = getIntegerValue(this, kMarketingWithdrawed)
247+ let address = addressFromStringValue(addressStr)
248+ withdrawToOther(amount, totalAmount, withdrawed, address, kMarketingWithdrawed)
249+ })
250+
251+
252+
253+@Callable(i)
254+func withdrawPartners (amount,addressStr) = valueOrElse(isSelfCall(i), {
255+ let totalAmount = getIntegerValue(this, kPartnerAmount)
256+ let withdrawed = getIntegerValue(this, kPartnersWithdrawed)
257+ let address = addressFromStringValue(addressStr)
258+ withdrawToOther(amount, totalAmount, withdrawed, address, kPartnersWithdrawed)
259+ })
260+
261+
262+
263+@Callable(i)
264+func withdrawRetroDraop (amount,addressStr) = valueOrElse(isSelfCall(i), {
265+ let totalAmount = getIntegerValue(this, kRetroDropAmount)
266+ let withdrawed = getIntegerValue(this, kRetroDropWithdrawed)
267+ let address = addressFromStringValue(addressStr)
268+ withdrawToOther(amount, totalAmount, withdrawed, address, kRetroDropWithdrawed)
269+ })
270+
271+
272+
273+@Callable(i)
274+func withdrawPollInit (amount,addressStr) = valueOrElse(isSelfCall(i), {
275+ let totalAmount = getIntegerValue(this, kPoolInitAmount)
276+ let withdrawed = getIntegerValue(this, kPoolInitWithdrawed)
277+ let address = addressFromStringValue(addressStr)
278+ withdrawToOther(amount, totalAmount, withdrawed, address, kPoolInitWithdrawed)
279+ })
280+
281+
282+
283+@Callable(i)
284+func withdrawLendReward (amount,addressToStr) = valueOrElse(isFarmingCall(i), {
285+ let totalAmount = getIntegerValue(this, kLendRewardAmount)
286+ let withdrawed = getIntegerValue(this, kLendRewardWithdrawed)
287+ let address = addressFromStringValue(addressToStr)
288+ withdrawToOther(amount, totalAmount, withdrawed, address, kLendRewardWithdrawed)
289+ })
290+
291+
292+
293+@Callable(i)
294+func withdrawLpReward (amount,addressToStr) = valueOrElse(isFarmingCall(i), {
295+ let totalAmount = getIntegerValue(this, kLPRewardAmount)
296+ let withdrawed = getIntegerValue(this, kLPRewardWithdrawed)
297+ let address = addressFromStringValue(addressToStr)
298+ withdrawToOther(amount, totalAmount, withdrawed, address, kLPRewardWithdrawed)
299+ })
300+
301+
302+
303+@Callable(i)
304+func withdrawLaunchpad (amount,addressToStr) = valueOrElse(isSelfCall(i), {
305+ let totalAmount = getIntegerValue(this, kLaunchpadAmount)
306+ let withdrawed = getIntegerValue(this, kLaunchpadWithdrawed)
307+ let address = addressFromStringValue(addressToStr)
308+ withdrawToOther(amount, totalAmount, withdrawed, address, kLaunchpadWithdrawed)
309+ })
310+
311+
312+@Verifier(tx)
313+func verify () = {
314+ let multiSignedByAdmins = {
315+ let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], admin1PK))
316+ then 1
317+ else 0
318+ let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], admin2PK))
319+ then 1
320+ else 0
321+ let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], admin3PK))
322+ then 1
323+ else 0
324+ (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
325+ }
326+ match tx {
327+ case inv: InvokeScriptTransaction =>
328+ let isSelf = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
329+ let isRightFee = if ((inv.fee == 100900000))
330+ then (inv.feeAssetId == unit)
331+ else false
332+ let isInitCall = (inv.function == "init")
333+ let isnoPayments = (size(inv.payments) == 0)
334+ if (if (if (if (isRightFee)
335+ then isInitCall
336+ else false)
337+ then isSelf
338+ else false)
339+ then isnoPayments
340+ else false)
341+ then true
342+ else multiSignedByAdmins
343+ case _ =>
344+ multiSignedByAdmins
345+ }
346+ }
347+

github/deemru/w8io/3ef1775 
31.56 ms