tx · 8D2KQriJcgav4c4fbMia9JLfasCGRsNJYEbm5dvdCUg2

3PL8qQRRZ8eumFRzeqVb1A3ZE8CnC5843fF:  -0.01100000 Waves

2022.09.12 13:11 [3291235] smart account 3PL8qQRRZ8eumFRzeqVb1A3ZE8CnC5843fF > SELF 0.00000000 Waves

{ "type": 13, "id": "8D2KQriJcgav4c4fbMia9JLfasCGRsNJYEbm5dvdCUg2", "fee": 1100000, "feeAssetId": null, "timestamp": 1662977548866, "version": 2, "chainId": 87, "sender": "3PL8qQRRZ8eumFRzeqVb1A3ZE8CnC5843fF", "senderPublicKey": "5wbx9CCWVqjcjtdPpy8H34zpMXXL8pu7arxaVpUFXbBM", "proofs": [ "3rUPoyj77bC5RhqDxxayBbDLfmrcsSDHAjuHw3CQq7tej4GQ4h2G9yhjbQmqPn85JytKNHSYbVrTzz7oJZ47YmnM" ], "script": "base64:BgI0CAISAwoBCBIDCgEIEggKBggBBAEBARIDCgEEEgASABIAEgMKAQgSBgoECAgBARIECgIICCgAC2tleU1BY2NQS2V5AgltYXN0ZXJfcGsADWtleUJhY2t1cFBLZXkCB2JhY2tfcGsACHdhcnNQS2V5Agd3YXJzX3BrAQZnZXRTdHIBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgAADm1BY2NQS2V5U3RyaW5nCQEGZ2V0U3RyAQULa2V5TUFjY1BLZXkAEGJhY2t1cFBLZXlTdHJpbmcJAQZnZXRTdHIBBQ1rZXlCYWNrdXBQS2V5AQxnZXRCYWNrdXBLZXkAAwkAAAIFEGJhY2t1cFBLZXlTdHJpbmcCAAgFBHRoaXMFYnl0ZXMJANkEAQUQYmFja3VwUEtleVN0cmluZwAIbUFjY1BLZXkJANkEAQUObUFjY1BLZXlTdHJpbmcACG1BY2NBZGRyCQCnCAEFCG1BY2NQS2V5AApmZWVQZXJjZW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQhtQWNjQWRkcgkArAICCQCsAgICAmZfCQClCAEFBHRoaXMCBF9mZWUADnN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIbUFjY0FkZHIJAKwCAgkArAICAgJmXwkApQgBBQR0aGlzAg5fc3Rha2VfYWRkcmVzcwkArAICCQCsAgICAmZfCQClCAEFBHRoaXMCGl9zdGFrZV9hZGRyZXNzIG5vdCBkZWZpbmVkAAh3QWNjUEtleQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIbUFjY0FkZHIFCHdhcnNQS2V5CQCsAgIFCHdhcnNQS2V5Agwgbm90IGRlZmluZWQAD2tUb3RhbExpcXVpZGl0eQIPdG90YWxfbGlxdWlkaXR5AAxrSW5pdGlhbGl6ZWQCC0lOSVRJQUxJWkVEABNrTGlxdWlkaXR5VGhyZXNob2xkAhNMSVFVSURJVFlfVEhSRVNIT0xEABNrVG90YWxGYXJtaW5nUmV3YXJkAhR0b3RhbF9mYXJtaW5nX3Jld2FyZAANa1NoYXJlQXNzZXRJZAIOU0hBUkVfQVNTRVRfSUQADmtJbmN1YmF0b3JEYXBwAg5JTkNVQkFUT1JfREFQUAAMa0JyZWVkZXJEYXBwAgxCUkVFREVSX0RBUFAADGtGYXJtaW5nRGFwcAIMRkFSTUlOR19EQVBQABBrTWFya2V0UHJveHlEYXBwAhZNQVJLRVRQTEFDRV9QUk9YWV9EQVBQAAxrQXVjdGlvbkRhcHACDEFVQ1RJT05fREFQUAAHa0xvY2tlZAIGTE9DS0VEABBrQ2VvQ29sbGVjdGVkRmVlAhFjZW9fY29sbGVjdGVkX2ZlZQAXa0Nlb0NvbGxlY3RlZEZlZU92ZXJhbGwCD2Nlb19mZWVfb3ZlcmFsbAASa0xvY2tlZEludmVzdG1lbnRzAhJsb2NrZWRfaW52ZXN0bWVudHMAEGtleVRvdGFsQ29tcG91bmQCDnRvdGFsX2NvbXBvdW5kAA9rZXlHbG9iYWxTdGFrZWQCDWdsb2JhbF9zdGFrZWQBBmdldEludAEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEHZ2V0Qm9vbAEDa2V5BAckbWF0Y2gwCQCbCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBQR1bml0AQdnZXRTdHJBAgFhAWsEByRtYXRjaDAJAJ0IAgUBYQUBawMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAENdHJ5R2V0Qm9vbGVhbgIBYQNrZXkEByRtYXRjaDAJAJsIAgUBYQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQdnZXRJbnRBAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABEGdldFZvdGVIZWlnaHRLZXkAAhFWT1RFX0hFSUdIVF9TVEFSVAENcmVzdWx0Vm90ZUtleQEGaGVpZ2h0CQCsAgICC0xJUVVJREFURURfBQZoZWlnaHQBDGlzTGlxdWlkYXRlZAAECnZvdGVIZWlnaHQJAQdnZXRJbnRBAgUOc3Rha2luZ0FkZHJlc3MJARBnZXRWb3RlSGVpZ2h0S2V5AAMJAAACBQp2b3RlSGVpZ2h0AAAHCQENdHJ5R2V0Qm9vbGVhbgIFDnN0YWtpbmdBZGRyZXNzCQENcmVzdWx0Vm90ZUtleQEJAKQDAQUKdm90ZUhlaWdodAESZ2V0TWFya2V0UHJveHlBZGRyAAkBB2dldFN0ckECBQhtQWNjQWRkcgUQa01hcmtldFByb3h5RGFwcAEIZ2V0RWdnSWQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFCG1BY2NBZGRyAgxFR0dfQVNTRVRfSUQBD2dldFNoYXJlQXNzZXRJZAAJANkEAQkBBmdldFN0cgEFDWtTaGFyZUFzc2V0SWQBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQKAWkBDWluaXRNYXN0ZXJLZXkBCXB1YmxpY0tleQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24DCQECIT0CBQ5tQWNjUEtleVN0cmluZwIACQACAQIyTWFzdGVyIHB1YmxpYyBrZXkgYWxyZWFkeSBzZXQsIHlvdSBjYW4ndCBvdmVycmlkZSEJAMwIAgkBC1N0cmluZ0VudHJ5AgULa2V5TUFjY1BLZXkFCXB1YmxpY0tleQUDbmlsAWkBDWluaXRCYWNrdXBLZXkBCXB1YmxpY0tleQMJAQIhPQIIBQFpBmNhbGxlcgkApwgBBQhtQWNjUEtleQkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUNa2V5QmFja3VwUEtleQUJcHVibGljS2V5BQNuaWwBaQESaW5pdENvbGxlY3RpdmVGYXJtBgRuYW1lEG1pbmltdW1UaHJlc2hvbGQJbWlncmF0aW9uEnRvdGFsRmFybWluZ1Jld2FyZA50b3RhbExpcXVpZGl0eQ50b3RhbEZhcm1Ub2tlbgMJAAACBQ5tQWNjUEtleVN0cmluZwIACQACAQIkRmlyc3QgaW5pdGlhdGllIGEgbWFzdGVyIHB1YmxpYyBrZXkhAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQhtQWNjUEtleQkAAgECAl8xAwkBAiE9AgkBB2dldEJvb2wBBQxrSW5pdGlhbGl6ZWQFBHVuaXQJAAIBAgJfMgMDCQAAAgUJbWlncmF0aW9uBwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AICt4gQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQhnZXRFZ2dJZAAHCQACAQIDXzIwBAtzaGFyZVRva2VucwMFCW1pZ3JhdGlvbgUOdG90YWxGYXJtVG9rZW4AgK3iBAQKc2hhcmVUb2tlbgkAwggFBQRuYW1lCQCsAgIJAKwCAgIUVGVhbSB0b2tlbiBmb3IgdGhlICIFBG5hbWUCESIgY29sbGVjdGl2ZSBmYXJtBQtzaGFyZVRva2VucwAIBgQMdG90TGlxdWlkaXR5AwUJbWlncmF0aW9uBQ50b3RhbExpcXVpZGl0eQCAreIEBBB0b3RGYXJtaW5nUmV3YXJkAwUJbWlncmF0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrVG90YWxGYXJtaW5nUmV3YXJkBRJ0b3RhbEZhcm1pbmdSZXdhcmQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBCQC4CAEFCnNoYXJlVG9rZW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIFDGtJbml0aWFsaXplZAYJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tUb3RhbExpcXVpZGl0eQUMdG90TGlxdWlkaXR5CQDMCAIFCnNoYXJlVG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtzaGFyZVRva2VucwkAuAgBBQpzaGFyZVRva2VuCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrTG9ja2VkBwkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa0xpcXVpZGl0eVRocmVzaG9sZAUQbWluaW11bVRocmVzaG9sZAUDbmlsBRB0b3RGYXJtaW5nUmV3YXJkAWkBB3NldExvY2sBAXMDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFCG1BY2NQS2V5CQACAQIDXzIxCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrTG9ja2VkBQFzBQNuaWwBaQEPbG9ja0ludmVzdG1lbnRzAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHVlvdSBjYW5ub3QgbG9jayB0aGlzIGNvbnRyYWN0CQDMCAIJAQxCb29sZWFuRW50cnkCBRJrTG9ja2VkSW52ZXN0bWVudHMGBQNuaWwBaQERdW5sb2NrSW52ZXN0bWVudHMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIdWW91IGNhbm5vdCBsb2NrIHRoaXMgY29udHJhY3QJAMwIAgkBDEJvb2xlYW5FbnRyeQIFEmtMb2NrZWRJbnZlc3RtZW50cwcFA25pbAFpARBwcm92aWRlTGlxdWlkaXR5AAMJAQxpc0xpcXVpZGF0ZWQACQACAQIWQ1BMOiBDRiBpcyBsaXF1aWRhdGVkIQQKZWdnQXNzZXRJZAkBCGdldEVnZ0lkAAMDAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQh3QWNjUEtleQkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQhtQWNjUEtleQcJAAACCQEHZ2V0Qm9vbAEFEmtMb2NrZWRJbnZlc3RtZW50cwYHCQACAQJZQ29udHJhY3QgaXMgbG9ja2VkIGZvciBpbnZlc3RtZW50cyBieSBpdCdzIENFTy4gUGxlYXNlIGludmVzdCBpbiBhbm90aGVyIGNvbGxlY3RpdmUgZmFybS4DCQAAAgkBB2dldEJvb2wBBQdrTG9ja2VkBgkAAgECA18yMgMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUKZWdnQXNzZXRJZAkAAgECAl80AwkAZgIAwIQ9CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECIE1pbiBhbW91bnQgdG8gaW52ZXN0IGlzIDAuMDEgRUdHBA50b3RhbExpcXVpZGl0eQkBBmdldEludAEFD2tUb3RhbExpcXVpZGl0eQQRc2hhcmVUb2tlbnNUb0dpdmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA1zaGFyZVRva2Vuc0lkCQDZBAEJAQZnZXRTdHIBBQ1rU2hhcmVBc3NldElkBAdyZWlzc3VlCQEHUmVpc3N1ZQMJAQ9nZXRTaGFyZUFzc2V0SWQABRFzaGFyZVRva2Vuc1RvR2l2ZQYEDWtQYXJ0aWNpcGF0ZWQJAKwCAgkArAICAghhY2NvdW50XwkApQgBCAUBaQZjYWxsZXICDV9wYXJ0aWNpcGF0ZWQEE2FscmVhZHlQYXJ0aWNpcGF0ZWQJAQdnZXRCb29sAQUNa1BhcnRpY2lwYXRlZAkAlAoCCQDMCAIFB3JlaXNzdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRFzaGFyZVRva2Vuc1RvR2l2ZQUNc2hhcmVUb2tlbnNJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa1RvdGFsTGlxdWlkaXR5CQBkAgUOdG90YWxMaXF1aWRpdHkJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rUGFydGljaXBhdGVkBgUDbmlsBRFzaGFyZVRva2Vuc1RvR2l2ZQFpARdjbGFpbUZhcm1pbmdSZXdhcmRQcm94eQEDaWRzAwkBDGlzTGlxdWlkYXRlZAAJAAIBAhhDQ0ZSUDogQ0YgaXMgbGlxdWlkYXRlZCEDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFCG1BY2NQS2V5CQACAQIDXzIzBAplZ2dBc3NldElkCQEIZ2V0RWdnSWQABAxzaGFyZUFzc2V0SWQJAQ9nZXRTaGFyZUFzc2V0SWQABAtmYXJtaW5nRGFwcAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBB2dldFN0ckECBQhtQWNjQWRkcgUMa0Zhcm1pbmdEYXBwCgELY2xhaW1SZXdhcmQCBWFjY3VtBW5mdElkBAZpbnZSZXMJAPwHBAULZmFybWluZ0RhcHACC2NsYWltUmV3YXJkCQDMCAIFBW5mdElkBQNuaWwFA25pbAMJAAACBQZpbnZSZXMFBmludlJlcwQHJG1hdGNoMAUGaW52UmVzAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwCQBkAgUFYWNjdW0FA2ludAkAAgECAl81CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAZuZnRJZHMJALUJAgUDaWRzAgE7BApmb2xkUmVzdWx0CgACJGwFBm5mdElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELY2xhaW1SZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDWNsYWltZWRSZXdhcmQEByRtYXRjaDAFCmZvbGRSZXN1bHQDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECAl82BBJ0b3RhbEZhcm1pbmdSZXdhcmQJAQZnZXRJbnQBBRNrVG90YWxGYXJtaW5nUmV3YXJkBA5mYXJtQ2VvRmVlU2l6ZQkAawMFDWNsYWltZWRSZXdhcmQFCmZlZVBlcmNlbnQAZAQNY3VycmVudENlb0ZlZQkBBmdldEludAEFEGtDZW9Db2xsZWN0ZWRGZWUEDWNlb0ZlZU92ZXJhbGwJAQZnZXRJbnQBBRdrQ2VvQ29sbGVjdGVkRmVlT3ZlcmFsbAQLYW1vdW50VG9QYXkJAGUCBQ1jbGFpbWVkUmV3YXJkBQ5mYXJtQ2VvRmVlU2l6ZQQFdG9wVXAJAPwHBAUOc3Rha2luZ0FkZHJlc3MCC3RvcFVwUmV3YXJkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCmVnZ0Fzc2V0SWQFC2Ftb3VudFRvUGF5BQNuaWwDCQAAAgUFdG9wVXAFBXRvcFVwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrVG90YWxGYXJtaW5nUmV3YXJkCQBkAgUSdG90YWxGYXJtaW5nUmV3YXJkBQthbW91bnRUb1BheQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa0Nlb0NvbGxlY3RlZEZlZQkAZAIFDWN1cnJlbnRDZW9GZWUFDmZhcm1DZW9GZWVTaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrQ2VvQ29sbGVjdGVkRmVlT3ZlcmFsbAkAZAIFDWNlb0ZlZU92ZXJhbGwFDmZhcm1DZW9GZWVTaXplBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELY2xhaW1DZW9GZWUECGFkZHJlc3MxCGFkZHJlc3MyDWFkZHJlc3MxU2hhcmUNYWRkcmVzczJTaGFyZQMJAQxpc0xpcXVpZGF0ZWQACQACAQIXQ0NDRjogQ0YgaXMgbGlxdWlkYXRlZCEDCQBmAgAABQ1hZGRyZXNzMVNoYXJlCQACAQIZU2hhcmUgMSBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCAAAFDWFkZHJlc3MyU2hhcmUJAAIBAhlTaGFyZSAyIGNhbid0IGJlIG5lZ2F0aXZlAwkBAiE9AgkAZAIFDWFkZHJlc3MxU2hhcmUFDWFkZHJlc3MyU2hhcmUAZAkAAgECG1N1bSBvZiBzaGFyZXMgc2hvdWxkIGJlIDEwMAMJAAACCQEHZ2V0Qm9vbAEFB2tMb2NrZWQGCQACAQIDXzIyAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwQWY3VycmVudENlb0NvbGxlY3RlZEZlZQkBBmdldEludAEFEGtDZW9Db2xsZWN0ZWRGZWUEDmFkZHJlc3MxUmV3YXJkAwkAAAIFCGFkZHJlc3MyAgAFFmN1cnJlbnRDZW9Db2xsZWN0ZWRGZWUJAGsDBRZjdXJyZW50Q2VvQ29sbGVjdGVkRmVlBQ1hZGRyZXNzMVNoYXJlAGQEDmFkZHJlc3MyUmV3YXJkAwkAAAIFCGFkZHJlc3MyAgAAAAkAawMFFmN1cnJlbnRDZW9Db2xsZWN0ZWRGZWUFDWFkZHJlc3MyU2hhcmUAZAQWc2NyaXB0VHJhbnNmZXJBZGRyZXNzMgMJAAACBQhhZGRyZXNzMgIABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYWRkcmVzczIFDmFkZHJlc3MyUmV3YXJkCQEIZ2V0RWdnSWQABQNuaWwJAM4IAgUWc2NyaXB0VHJhbnNmZXJBZGRyZXNzMgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQhhZGRyZXNzMQUOYWRkcmVzczFSZXdhcmQJAQhnZXRFZ2dJZAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtDZW9Db2xsZWN0ZWRGZWUAAAUDbmlsCQACAQIiT25seSBtYW5hZ2VyIGNhbiBjYWxsIHRoZSBjb250cmFjdAFpARBjYWxsVW5zdGFrZVByb3h5AghmdW5jdGlvbgdhc3NldElkAwkBDGlzTGlxdWlkYXRlZAAJAAIBAhdDQ1VQOiBDRiBpcyBsaXF1aWRhdGVkIQMJAAACCQEHZ2V0Qm9vbAEFB2tMb2NrZWQGCQACAQIWQ29udHJhY3QgaXMgbG9ja2VkIG5vdwMDCQECIT0CBQhmdW5jdGlvbgIKdW5zdGFrZU5GVAkBAiE9AgUIZnVuY3Rpb24CDnVuc3Rha2VKYWNrcG90BwkAAgECEUJhZCBmdW5jdGlvbiBuYW1lAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIhQ2FuIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBhY2NvdW50BAplZ2dBc3NldElkCQEIZ2V0RWdnSWQABAxzaGFyZUFzc2V0SWQJAQ9nZXRTaGFyZUFzc2V0SWQABBJmYXJtaW5nRGFwcEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQdnZXRTdHJBAgUIbUFjY0FkZHICDEZBUk1JTkdfREFQUAQOdW5zdGFrZWRSZXdhcmQJAPwHBAUSZmFybWluZ0RhcHBBZGRyZXNzBQhmdW5jdGlvbgkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQ51bnN0YWtlZFJld2FyZAUOdW5zdGFrZWRSZXdhcmQEBnJld2FyZAQHJG1hdGNoMAUOdW5zdGFrZWRSZXdhcmQDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECFkVycm9yIGR1cmluZyB1bnN0YWtpbmcEDWN1cnJlbnRDZW9GZWUJAQZnZXRJbnQBBRBrQ2VvQ29sbGVjdGVkRmVlBA1jZW9GZWVPdmVyYWxsCQEGZ2V0SW50AQUXa0Nlb0NvbGxlY3RlZEZlZU92ZXJhbGwEDmZhcm1DZW9GZWVTaXplCQBrAwUGcmV3YXJkBQpmZWVQZXJjZW50AGQEC2Ftb3VudFRvUGF5CQBlAgUGcmV3YXJkBQ5mYXJtQ2VvRmVlU2l6ZQQFdG9wVXAJAPwHBAUOc3Rha2luZ0FkZHJlc3MCC3RvcFVwUmV3YXJkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCmVnZ0Fzc2V0SWQFC2Ftb3VudFRvUGF5BQNuaWwDCQAAAgUFdG9wVXAFBXRvcFVwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrQ2VvQ29sbGVjdGVkRmVlCQBkAgUNY3VycmVudENlb0ZlZQUOZmFybUNlb0ZlZVNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tDZW9Db2xsZWN0ZWRGZWVPdmVyYWxsCQBkAgUNY2VvRmVlT3ZlcmFsbAUOZmFybUNlb0ZlZVNpemUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEDGNoZWNrU3RhcnRlZAkAZwIJAQZnZXRJbnQBBQ9rVG90YWxMaXF1aWRpdHkJAQZnZXRJbnQBBRNrTGlxdWlkaXR5VGhyZXNob2xkBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBBRhY2NlcHRlZENhbGxzU3Rha2luZwkAzAgCAg9zdGFrZUZhcm1Ub2tlbnMJAMwIAgILY2xhaW1SZXdhcmQJAMwIAgISd2l0aGRyYXdGYXJtVG9rZW5zBQNuaWwEEWFjY2VwdGVkQ2FsbHNUaGlzCQDMCAICEGNhbGxVbnN0YWtlUHJveHkJAMwIAgILY2xhaW1DZW9GZWUJAMwIAgIPbG9ja0ludmVzdG1lbnRzCQDMCAICEXVubG9ja0ludmVzdG1lbnRzBQNuaWwDAwkAAAIIBQNpbnYIZnVuY3Rpb24CCnVuc3Rha2VORlQGCQAAAggFA2ludghmdW5jdGlvbgIOdW5zdGFrZUphY2twb3QJAAIBAihZb3UgY2Fubm90IGNhbGwgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5AwMDCQAAAgkApAgBCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAg1pbml0TWFzdGVyS2V5BwkAAAIFDm1BY2NQS2V5U3RyaW5nAgAHAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQxnZXRCYWNrdXBLZXkAAwMJAAACCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BwkAAAIJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQxnZXRCYWNrdXBLZXkABwcJAAIBAgRfMTAwAwkAAAIFDGNoZWNrU3RhcnRlZAcJAAIBAgNfMTQDCQAAAgkBB2dldEJvb2wBBQdrTG9ja2VkBgkAAgECA18yMgMDCQBmAggFA2ludgNmZWUAoPc2BgkBAiE9AggFA2ludgpmZWVBc3NldElkBQR1bml0CQACAQIDXzE1AwkAZgIJAJADAQgFA2ludghwYXltZW50cwADCQACAQIDXzE3AwMJAAACCQCkCAEIBQNpbnYEZEFwcAUEdGhpcwkBD2NvbnRhaW5zRWxlbWVudAIFEWFjY2VwdGVkQ2FsbHNUaGlzCAUDaW52CGZ1bmN0aW9uBwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEMZ2V0QmFja3VwS2V5AAMDCQAAAgkApAgBCAUDaW52BGRBcHAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARJnZXRNYXJrZXRQcm94eUFkZHIACQAAAggFA2ludghmdW5jdGlvbgIUY2FsbE1hcmtldHBsYWNlUHJveHkHAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQxnZXRCYWNrdXBLZXkAAwMJAAACCQCkCAEIBQNpbnYEZEFwcAUOc3Rha2luZ0FkZHJlc3MJAQ9jb250YWluc0VsZW1lbnQCBRRhY2NlcHRlZENhbGxzU3Rha2luZwgFA2ludghmdW5jdGlvbgcDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDGdldEJhY2t1cEtleQAEEGFsbG93ZWRDb250cmFjdHMJAQdnZXRTdHJBAgUIbUFjY0FkZHICEWFsbG93ZWRfY29udHJhY3RzBBRhbGxvd2VkQ29udHJhY3RzTGlzdAkAtQkCBRBhbGxvd2VkQ29udHJhY3RzAgE7BApkYXBwVG9DYWxsCQClCAEJAKQIAQgFA2ludgRkQXBwCQECIT0CCQDPCAIFFGFsbG93ZWRDb250cmFjdHNMaXN0BQpkYXBwVG9DYWxsBQR1bml0AwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJzcwUHJG1hdGNoMAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUIbUFjY1BLZXkDCQABAgUHJG1hdGNoMAIXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EAm10BQckbWF0Y2gwCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQhtQWNjUEtleQcyJzW/", "height": 3291235, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let keyMAccPKey = "master_pk"
5+
6+let keyBackupPKey = "back_pk"
7+
8+let warsPKey = "wars_pk"
9+
10+func getStr (key) = match getString(this, key) {
11+ case b: String =>
12+ b
13+ case _ =>
14+ ""
15+}
16+
17+
18+let mAccPKeyString = getStr(keyMAccPKey)
19+
20+let backupPKeyString = getStr(keyBackupPKey)
21+
22+func getBackupKey () = if ((backupPKeyString == ""))
23+ then this.bytes
24+ else fromBase58String(backupPKeyString)
25+
26+
27+let mAccPKey = fromBase58String(mAccPKeyString)
28+
29+let mAccAddr = addressFromPublicKey(mAccPKey)
30+
31+let feePercent = getIntegerValue(mAccAddr, (("f_" + toString(this)) + "_fee"))
32+
33+let stakingAddress = addressFromStringValue(valueOrErrorMessage(getString(mAccAddr, (("f_" + toString(this)) + "_stake_address")), (("f_" + toString(this)) + "_stake_address not defined")))
34+
35+let wAccPKey = fromBase58String(valueOrErrorMessage(getString(mAccAddr, warsPKey), (warsPKey + " not defined")))
36+
37+let kTotalLiquidity = "total_liquidity"
38+
39+let kInitialized = "INITIALIZED"
40+
41+let kLiquidityThreshold = "LIQUIDITY_THRESHOLD"
42+
43+let kTotalFarmingReward = "total_farming_reward"
44+
45+let kShareAssetId = "SHARE_ASSET_ID"
46+
47+let kIncubatorDapp = "INCUBATOR_DAPP"
48+
49+let kBreederDapp = "BREEDER_DAPP"
50+
51+let kFarmingDapp = "FARMING_DAPP"
52+
53+let kMarketProxyDapp = "MARKETPLACE_PROXY_DAPP"
54+
55+let kAuctionDapp = "AUCTION_DAPP"
56+
57+let kLocked = "LOCKED"
58+
59+let kCeoCollectedFee = "ceo_collected_fee"
60+
61+let kCeoCollectedFeeOverall = "ceo_fee_overall"
62+
63+let kLockedInvestments = "locked_investments"
64+
65+let keyTotalCompound = "total_compound"
66+
67+let keyGlobalStaked = "global_staked"
68+
69+func getInt (key) = match getInteger(this, key) {
70+ case b: Int =>
71+ b
72+ case _ =>
73+ 0
74+}
75+
76+
77+func getBool (key) = match getBoolean(this, key) {
78+ case b: Boolean =>
79+ b
80+ case _ =>
81+ unit
82+}
83+
84+
85+func getStrA (a,k) = match getString(a, k) {
86+ case b: String =>
87+ b
88+ case _ =>
89+ ""
90+}
91+
92+
93+func tryGetBoolean (a,key) = match getBoolean(a, key) {
94+ case b: Boolean =>
95+ b
96+ case _ =>
97+ false
98+}
99+
100+
101+func getIntA (address,key) = match getInteger(address, key) {
102+ case b: Int =>
103+ b
104+ case _ =>
105+ 0
106+}
107+
108+
109+func getVoteHeightKey () = "VOTE_HEIGHT_START"
110+
111+
112+func resultVoteKey (height) = ("LIQUIDATED_" + height)
113+
114+
115+func isLiquidated () = {
116+ let voteHeight = getIntA(stakingAddress, getVoteHeightKey())
117+ if ((voteHeight == 0))
118+ then false
119+ else tryGetBoolean(stakingAddress, resultVoteKey(toString(voteHeight)))
120+ }
121+
122+
123+func getMarketProxyAddr () = getStrA(mAccAddr, kMarketProxyDapp)
124+
125+
126+func getEggId () = fromBase58String(getStringValue(mAccAddr, "EGG_ASSET_ID"))
127+
128+
129+func getShareAssetId () = fromBase58String(getStr(kShareAssetId))
130+
131+
132+func asInt (value) = match value {
133+ case int: Int =>
134+ int
135+ case _ =>
136+ throw("wrong type, expected: Int")
137+}
138+
139+
140+@Callable(i)
141+func initMasterKey (publicKey) = if ((i.caller != this))
142+ then throw("You cannot do this action")
143+ else if ((mAccPKeyString != ""))
144+ then throw("Master public key already set, you can't override!")
145+ else [StringEntry(keyMAccPKey, publicKey)]
146+
147+
148+
149+@Callable(i)
150+func initBackupKey (publicKey) = if ((i.caller != addressFromPublicKey(mAccPKey)))
151+ then throw("You cannot do this action")
152+ else [StringEntry(keyBackupPKey, publicKey)]
153+
154+
155+
156+@Callable(i)
157+func initCollectiveFarm (name,minimumThreshold,migration,totalFarmingReward,totalLiquidity,totalFarmToken) = if ((mAccPKeyString == ""))
158+ then throw("First initiatie a master public key!")
159+ else if ((i.callerPublicKey != mAccPKey))
160+ then throw("_1")
161+ else if ((getBool(kInitialized) != unit))
162+ then throw("_2")
163+ else if (if ((migration == false))
164+ then if ((i.payments[0].amount != 10000000))
165+ then true
166+ else (i.payments[0].assetId != getEggId())
167+ else false)
168+ then throw("_20")
169+ else {
170+ let shareTokens = if (migration)
171+ then totalFarmToken
172+ else 10000000
173+ let shareToken = Issue(name, (("Team token for the \"" + name) + "\" collective farm"), shareTokens, 8, true)
174+ let totLiquidity = if (migration)
175+ then totalLiquidity
176+ else 10000000
177+ let totFarmingReward = if (migration)
178+ then [IntegerEntry(kTotalFarmingReward, totalFarmingReward)]
179+ else nil
180+ ([StringEntry(kShareAssetId, toBase58String(calculateAssetId(shareToken))), BooleanEntry(kInitialized, true), IntegerEntry(kTotalLiquidity, totLiquidity), shareToken, ScriptTransfer(i.caller, shareTokens, calculateAssetId(shareToken)), BooleanEntry(kLocked, false), IntegerEntry(kLiquidityThreshold, minimumThreshold)] ++ totFarmingReward)
181+ }
182+
183+
184+
185+@Callable(i)
186+func setLock (s) = if ((i.callerPublicKey != mAccPKey))
187+ then throw("_21")
188+ else [BooleanEntry(kLocked, s)]
189+
190+
191+
192+@Callable(i)
193+func lockInvestments () = if ((i.caller != this))
194+ then throw("You cannot lock this contract")
195+ else [BooleanEntry(kLockedInvestments, true)]
196+
197+
198+
199+@Callable(i)
200+func unlockInvestments () = if ((i.caller != this))
201+ then throw("You cannot lock this contract")
202+ else [BooleanEntry(kLockedInvestments, false)]
203+
204+
205+
206+@Callable(i)
207+func provideLiquidity () = if (isLiquidated())
208+ then throw("CPL: CF is liquidated!")
209+ else {
210+ let eggAssetId = getEggId()
211+ if (if (if ((i.callerPublicKey != wAccPKey))
212+ then (i.callerPublicKey != mAccPKey)
213+ else false)
214+ then (getBool(kLockedInvestments) == true)
215+ else false)
216+ then throw("Contract is locked for investments by it's CEO. Please invest in another collective farm.")
217+ else if ((getBool(kLocked) == true))
218+ then throw("_22")
219+ else if ((i.payments[0].assetId != eggAssetId))
220+ then throw("_4")
221+ else if ((1000000 > i.payments[0].amount))
222+ then throw("Min amount to invest is 0.01 EGG")
223+ else {
224+ let totalLiquidity = getInt(kTotalLiquidity)
225+ let shareTokensToGive = i.payments[0].amount
226+ let shareTokensId = fromBase58String(getStr(kShareAssetId))
227+ let reissue = Reissue(getShareAssetId(), shareTokensToGive, true)
228+ let kParticipated = (("account_" + toString(i.caller)) + "_participated")
229+ let alreadyParticipated = getBool(kParticipated)
230+ $Tuple2([reissue, ScriptTransfer(i.caller, shareTokensToGive, shareTokensId), IntegerEntry(kTotalLiquidity, (totalLiquidity + value(i.payments[0].amount))), BooleanEntry(kParticipated, true)], shareTokensToGive)
231+ }
232+ }
233+
234+
235+
236+@Callable(i)
237+func claimFarmingRewardProxy (ids) = if (isLiquidated())
238+ then throw("CCFRP: CF is liquidated!")
239+ else if ((i.callerPublicKey != mAccPKey))
240+ then throw("_23")
241+ else {
242+ let eggAssetId = getEggId()
243+ let shareAssetId = getShareAssetId()
244+ let farmingDapp = addressFromStringValue(getStrA(mAccAddr, kFarmingDapp))
245+ func claimReward (accum,nftId) = {
246+ let invRes = invoke(farmingDapp, "claimReward", [nftId], nil)
247+ if ((invRes == invRes))
248+ then match invRes {
249+ case int: Int =>
250+ (accum + int)
251+ case _ =>
252+ throw("_5")
253+ }
254+ else throw("Strict value is not equal to itself.")
255+ }
256+
257+ let nftIds = split(ids, ";")
258+ let foldResult = {
259+ let $l = nftIds
260+ let $s = size($l)
261+ let $acc0 = 0
262+ func $f0_1 ($a,$i) = if (($i >= $s))
263+ then $a
264+ else claimReward($a, $l[$i])
265+
266+ func $f0_2 ($a,$i) = if (($i >= $s))
267+ then $a
268+ else throw("List size exceeds 10")
269+
270+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
271+ }
272+ let claimedReward = match foldResult {
273+ case int: Int =>
274+ int
275+ case _ =>
276+ throw("_6")
277+ }
278+ let totalFarmingReward = getInt(kTotalFarmingReward)
279+ let farmCeoFeeSize = fraction(claimedReward, feePercent, 100)
280+ let currentCeoFee = getInt(kCeoCollectedFee)
281+ let ceoFeeOverall = getInt(kCeoCollectedFeeOverall)
282+ let amountToPay = (claimedReward - farmCeoFeeSize)
283+ let topUp = invoke(stakingAddress, "topUpReward", nil, [AttachedPayment(eggAssetId, amountToPay)])
284+ if ((topUp == topUp))
285+ then [IntegerEntry(kTotalFarmingReward, (totalFarmingReward + amountToPay)), IntegerEntry(kCeoCollectedFee, (currentCeoFee + farmCeoFeeSize)), IntegerEntry(kCeoCollectedFeeOverall, (ceoFeeOverall + farmCeoFeeSize))]
286+ else throw("Strict value is not equal to itself.")
287+ }
288+
289+
290+
291+@Callable(i)
292+func claimCeoFee (address1,address2,address1Share,address2Share) = if (isLiquidated())
293+ then throw("CCCF: CF is liquidated!")
294+ else if ((0 > address1Share))
295+ then throw("Share 1 can't be negative")
296+ else if ((0 > address2Share))
297+ then throw("Share 2 can't be negative")
298+ else if (((address1Share + address2Share) != 100))
299+ then throw("Sum of shares should be 100")
300+ else if ((getBool(kLocked) == true))
301+ then throw("_22")
302+ else if ((i.caller == this))
303+ then {
304+ let currentCeoCollectedFee = getInt(kCeoCollectedFee)
305+ let address1Reward = if ((address2 == ""))
306+ then currentCeoCollectedFee
307+ else fraction(currentCeoCollectedFee, address1Share, 100)
308+ let address2Reward = if ((address2 == ""))
309+ then 0
310+ else fraction(currentCeoCollectedFee, address2Share, 100)
311+ let scriptTransferAddress2 = if ((address2 == ""))
312+ then nil
313+ else [ScriptTransfer(addressFromStringValue(address2), address2Reward, getEggId())]
314+ (scriptTransferAddress2 ++ [ScriptTransfer(addressFromStringValue(address1), address1Reward, getEggId()), IntegerEntry(kCeoCollectedFee, 0)])
315+ }
316+ else throw("Only manager can call the contract")
317+
318+
319+
320+@Callable(i)
321+func callUnstakeProxy (function,assetId) = if (isLiquidated())
322+ then throw("CCUP: CF is liquidated!")
323+ else if ((getBool(kLocked) == true))
324+ then throw("Contract is locked now")
325+ else if (if ((function != "unstakeNFT"))
326+ then (function != "unstakeJackpot")
327+ else false)
328+ then throw("Bad function name")
329+ else if ((i.caller != this))
330+ then throw("Can be called only by the account")
331+ else {
332+ let eggAssetId = getEggId()
333+ let shareAssetId = getShareAssetId()
334+ let farmingDappAddress = addressFromStringValue(getStrA(mAccAddr, "FARMING_DAPP"))
335+ let unstakedReward = invoke(farmingDappAddress, function, [assetId], nil)
336+ if ((unstakedReward == unstakedReward))
337+ then {
338+ let reward = match unstakedReward {
339+ case int: Int =>
340+ int
341+ case _ =>
342+ throw("Error during unstaking")
343+ }
344+ let currentCeoFee = getInt(kCeoCollectedFee)
345+ let ceoFeeOverall = getInt(kCeoCollectedFeeOverall)
346+ let farmCeoFeeSize = fraction(reward, feePercent, 100)
347+ let amountToPay = (reward - farmCeoFeeSize)
348+ let topUp = invoke(stakingAddress, "topUpReward", nil, [AttachedPayment(eggAssetId, amountToPay)])
349+ if ((topUp == topUp))
350+ then [IntegerEntry(kCeoCollectedFee, (currentCeoFee + farmCeoFeeSize)), IntegerEntry(kCeoCollectedFeeOverall, (ceoFeeOverall + farmCeoFeeSize))]
351+ else throw("Strict value is not equal to itself.")
352+ }
353+ else throw("Strict value is not equal to itself.")
354+ }
355+
356+
357+@Verifier(tx)
358+func verify () = {
359+ let checkStarted = (getInt(kTotalLiquidity) >= getInt(kLiquidityThreshold))
360+ match tx {
361+ case inv: InvokeScriptTransaction =>
362+ let acceptedCallsStaking = ["stakeFarmTokens", "claimReward", "withdrawFarmTokens"]
363+ let acceptedCallsThis = ["callUnstakeProxy", "claimCeoFee", "lockInvestments", "unlockInvestments"]
364+ if (if ((inv.function == "unstakeNFT"))
365+ then true
366+ else (inv.function == "unstakeJackpot"))
367+ then throw("You cannot call these functions directly")
368+ else if (if (if ((addressFromRecipient(inv.dApp) == this))
369+ then (inv.function == "initMasterKey")
370+ else false)
371+ then (mAccPKeyString == "")
372+ else false)
373+ then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
374+ then true
375+ else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
376+ else if (if ((sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) == false))
377+ then (sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey()) == false)
378+ else false)
379+ then throw("_100")
380+ else if ((checkStarted == false))
381+ then throw("_14")
382+ else if ((getBool(kLocked) == true))
383+ then throw("_22")
384+ else if (if ((inv.fee > 900000))
385+ then true
386+ else (inv.feeAssetId != unit))
387+ then throw("_15")
388+ else if ((size(inv.payments) > 3))
389+ then throw("_17")
390+ else if (if ((addressFromRecipient(inv.dApp) == this))
391+ then containsElement(acceptedCallsThis, inv.function)
392+ else false)
393+ then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
394+ then true
395+ else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
396+ else if (if ((addressFromRecipient(inv.dApp) == addressFromStringValue(getMarketProxyAddr())))
397+ then (inv.function == "callMarketplaceProxy")
398+ else false)
399+ then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
400+ then true
401+ else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
402+ else if (if ((addressFromRecipient(inv.dApp) == stakingAddress))
403+ then containsElement(acceptedCallsStaking, inv.function)
404+ else false)
405+ then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
406+ then true
407+ else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
408+ else {
409+ let allowedContracts = getStrA(mAccAddr, "allowed_contracts")
410+ let allowedContractsList = split(allowedContracts, ";")
411+ let dappToCall = toString(addressFromRecipient(inv.dApp))
412+ (indexOf(allowedContractsList, dappToCall) != unit)
413+ }
414+ case ss: SetScriptTransaction =>
415+ sigVerify(tx.bodyBytes, tx.proofs[0], mAccPKey)
416+ case mt: MassTransferTransaction =>
417+ sigVerify(tx.bodyBytes, tx.proofs[0], mAccPKey)
418+ case _ =>
419+ false
420+ }
421+ }
422+

github/deemru/w8io/3ef1775 
23.48 ms