tx · 14SdfYaqVDjM71uTkVZgj6v1KbbCgZVN1gPK828Qdih3

3P3ohGCRmJzjTsP7RQ7jZV7QNw76wB1Nsnn:  -0.01500000 Waves

2022.09.11 14:20 [3289891] smart account 3P3ohGCRmJzjTsP7RQ7jZV7QNw76wB1Nsnn > SELF 0.00000000 Waves

{ "type": 13, "id": "14SdfYaqVDjM71uTkVZgj6v1KbbCgZVN1gPK828Qdih3", "fee": 1500000, "feeAssetId": null, "timestamp": 1662895220453, "version": 2, "chainId": 87, "sender": "3P3ohGCRmJzjTsP7RQ7jZV7QNw76wB1Nsnn", "senderPublicKey": "4VbrQipmZPdnspDL7qvREPopho2QYYX2MzEkz8vYqYvT", "proofs": [ "4kyBAtikUGpCKFe4XcvE8dbKKeVxcHrj2EyhucqXMSAMQfHn2pqewCssnM4mAycrr8YDnzvjA7czYAyKeQCLoWBj" ], "script": "base64:BgI0CAISAwoBCBIDCgEIEggKBggBBAEBARIDCgEEEgASABIAEgMKAQgSBgoECAgBARIECgIICCgAC2tleU1BY2NQS2V5AgltYXN0ZXJfcGsADWtleUJhY2t1cFBLZXkCB2JhY2tfcGsACHdhcnNQS2V5Agd3YXJzX3BrAQZnZXRTdHIBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgAADm1BY2NQS2V5U3RyaW5nCQEGZ2V0U3RyAQULa2V5TUFjY1BLZXkAEGJhY2t1cFBLZXlTdHJpbmcJAQZnZXRTdHIBBQ1rZXlCYWNrdXBQS2V5AQxnZXRCYWNrdXBLZXkAAwkAAAIFEGJhY2t1cFBLZXlTdHJpbmcCAAgFBHRoaXMFYnl0ZXMJANkEAQUQYmFja3VwUEtleVN0cmluZwAIbUFjY1BLZXkJANkEAQUObUFjY1BLZXlTdHJpbmcACG1BY2NBZGRyCQCnCAEFCG1BY2NQS2V5AApmZWVQZXJjZW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQhtQWNjQWRkcgkArAICCQCsAgICAmZfCQClCAEFBHRoaXMCBF9mZWUADnN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIbUFjY0FkZHIJAKwCAgkArAICAgJmXwkApQgBBQR0aGlzAg5fc3Rha2VfYWRkcmVzcwkArAICCQCsAgICAmZfCQClCAEFBHRoaXMCGl9zdGFrZV9hZGRyZXNzIG5vdCBkZWZpbmVkAAh3QWNjUEtleQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIbUFjY0FkZHIFCHdhcnNQS2V5CQCsAgIFCHdhcnNQS2V5Agwgbm90IGRlZmluZWQAD2tUb3RhbExpcXVpZGl0eQIPdG90YWxfbGlxdWlkaXR5AAxrSW5pdGlhbGl6ZWQCC0lOSVRJQUxJWkVEABNrTGlxdWlkaXR5VGhyZXNob2xkAhNMSVFVSURJVFlfVEhSRVNIT0xEABNrVG90YWxGYXJtaW5nUmV3YXJkAhR0b3RhbF9mYXJtaW5nX3Jld2FyZAANa1NoYXJlQXNzZXRJZAIOU0hBUkVfQVNTRVRfSUQADmtJbmN1YmF0b3JEYXBwAg5JTkNVQkFUT1JfREFQUAAMa0JyZWVkZXJEYXBwAgxCUkVFREVSX0RBUFAADGtGYXJtaW5nRGFwcAIMRkFSTUlOR19EQVBQABBrTWFya2V0UHJveHlEYXBwAhZNQVJLRVRQTEFDRV9QUk9YWV9EQVBQAAxrQXVjdGlvbkRhcHACDEFVQ1RJT05fREFQUAAHa0xvY2tlZAIGTE9DS0VEABBrQ2VvQ29sbGVjdGVkRmVlAhFjZW9fY29sbGVjdGVkX2ZlZQAXa0Nlb0NvbGxlY3RlZEZlZU92ZXJhbGwCD2Nlb19mZWVfb3ZlcmFsbAASa0xvY2tlZEludmVzdG1lbnRzAhJsb2NrZWRfaW52ZXN0bWVudHMAEGtleVRvdGFsQ29tcG91bmQCDnRvdGFsX2NvbXBvdW5kAA9rZXlHbG9iYWxTdGFrZWQCDWdsb2JhbF9zdGFrZWQBBmdldEludAEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEHZ2V0Qm9vbAEDa2V5BAckbWF0Y2gwCQCbCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBQR1bml0AQdnZXRTdHJBAgFhAWsEByRtYXRjaDAJAJ0IAgUBYQUBawMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAENdHJ5R2V0Qm9vbGVhbgIBYQNrZXkEByRtYXRjaDAJAJsIAgUBYQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQdnZXRJbnRBAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABEGdldFZvdGVIZWlnaHRLZXkAAhFWT1RFX0hFSUdIVF9TVEFSVAENcmVzdWx0Vm90ZUtleQEGaGVpZ2h0CQCsAgICC0xJUVVJREFURURfBQZoZWlnaHQBDGlzTGlxdWlkYXRlZAAECnZvdGVIZWlnaHQJAQdnZXRJbnRBAgUOc3Rha2luZ0FkZHJlc3MJARBnZXRWb3RlSGVpZ2h0S2V5AAMJAAACBQp2b3RlSGVpZ2h0AAAHCQENdHJ5R2V0Qm9vbGVhbgIFDnN0YWtpbmdBZGRyZXNzCQENcmVzdWx0Vm90ZUtleQEJAKQDAQUKdm90ZUhlaWdodAESZ2V0TWFya2V0UHJveHlBZGRyAAkBB2dldFN0ckECBQhtQWNjQWRkcgUQa01hcmtldFByb3h5RGFwcAEIZ2V0RWdnSWQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFCG1BY2NBZGRyAgxFR0dfQVNTRVRfSUQBD2dldFNoYXJlQXNzZXRJZAAJANkEAQkBBmdldFN0cgEFDWtTaGFyZUFzc2V0SWQBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQKAWkBDWluaXRNYXN0ZXJLZXkBCXB1YmxpY0tleQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24DCQECIT0CBQ5tQWNjUEtleVN0cmluZwIACQACAQIyTWFzdGVyIHB1YmxpYyBrZXkgYWxyZWFkeSBzZXQsIHlvdSBjYW4ndCBvdmVycmlkZSEJAMwIAgkBC1N0cmluZ0VudHJ5AgULa2V5TUFjY1BLZXkFCXB1YmxpY0tleQUDbmlsAWkBDWluaXRCYWNrdXBLZXkBCXB1YmxpY0tleQMJAQIhPQIIBQFpBmNhbGxlcgkApwgBBQhtQWNjUEtleQkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUNa2V5QmFja3VwUEtleQUJcHVibGljS2V5BQNuaWwBaQESaW5pdENvbGxlY3RpdmVGYXJtBgRuYW1lEG1pbmltdW1UaHJlc2hvbGQJbWlncmF0aW9uEnRvdGFsRmFybWluZ1Jld2FyZA50b3RhbExpcXVpZGl0eQ50b3RhbEZhcm1Ub2tlbgMJAAACBQ5tQWNjUEtleVN0cmluZwIACQACAQIkRmlyc3QgaW5pdGlhdGllIGEgbWFzdGVyIHB1YmxpYyBrZXkhAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQhtQWNjUEtleQkAAgECAl8xAwkBAiE9AgkBB2dldEJvb2wBBQxrSW5pdGlhbGl6ZWQFBHVuaXQJAAIBAgJfMgMDCQAAAgUJbWlncmF0aW9uBwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AICt4gQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQhnZXRFZ2dJZAAHCQACAQIDXzIwBAtzaGFyZVRva2VucwMFCW1pZ3JhdGlvbgUOdG90YWxGYXJtVG9rZW4AgK3iBAQKc2hhcmVUb2tlbgkAwggFBQRuYW1lCQCsAgIJAKwCAgIUVGVhbSB0b2tlbiBmb3IgdGhlICIFBG5hbWUCESIgY29sbGVjdGl2ZSBmYXJtBQtzaGFyZVRva2VucwAIBgQMdG90TGlxdWlkaXR5AwUJbWlncmF0aW9uBQ50b3RhbExpcXVpZGl0eQCAreIEBBB0b3RGYXJtaW5nUmV3YXJkAwUJbWlncmF0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrVG90YWxGYXJtaW5nUmV3YXJkBRJ0b3RhbEZhcm1pbmdSZXdhcmQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBCQC4CAEFCnNoYXJlVG9rZW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIFDGtJbml0aWFsaXplZAYJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tUb3RhbExpcXVpZGl0eQUMdG90TGlxdWlkaXR5CQDMCAIFCnNoYXJlVG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtzaGFyZVRva2VucwkAuAgBBQpzaGFyZVRva2VuCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrTG9ja2VkBwkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa0xpcXVpZGl0eVRocmVzaG9sZAUQbWluaW11bVRocmVzaG9sZAUDbmlsBRB0b3RGYXJtaW5nUmV3YXJkAWkBB3NldExvY2sBAXMDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFCG1BY2NQS2V5CQACAQIDXzIxCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrTG9ja2VkBQFzBQNuaWwBaQEPbG9ja0ludmVzdG1lbnRzAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHVlvdSBjYW5ub3QgbG9jayB0aGlzIGNvbnRyYWN0CQDMCAIJAQxCb29sZWFuRW50cnkCBRJrTG9ja2VkSW52ZXN0bWVudHMGBQNuaWwBaQERdW5sb2NrSW52ZXN0bWVudHMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIdWW91IGNhbm5vdCBsb2NrIHRoaXMgY29udHJhY3QJAMwIAgkBDEJvb2xlYW5FbnRyeQIFEmtMb2NrZWRJbnZlc3RtZW50cwcFA25pbAFpARBwcm92aWRlTGlxdWlkaXR5AAMJAQxpc0xpcXVpZGF0ZWQACQACAQIWQ1BMOiBDRiBpcyBsaXF1aWRhdGVkIQQKZWdnQXNzZXRJZAkBCGdldEVnZ0lkAAMDAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQh3QWNjUEtleQkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQhtQWNjUEtleQcJAAACCQEHZ2V0Qm9vbAEFEmtMb2NrZWRJbnZlc3RtZW50cwYHCQACAQJZQ29udHJhY3QgaXMgbG9ja2VkIGZvciBpbnZlc3RtZW50cyBieSBpdCdzIENFTy4gUGxlYXNlIGludmVzdCBpbiBhbm90aGVyIGNvbGxlY3RpdmUgZmFybS4DCQAAAgkBB2dldEJvb2wBBQdrTG9ja2VkBgkAAgECA18yMgMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUKZWdnQXNzZXRJZAkAAgECAl80AwkAZgIAwIQ9CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECIE1pbiBhbW91bnQgdG8gaW52ZXN0IGlzIDAuMDEgRUdHBA50b3RhbExpcXVpZGl0eQkBBmdldEludAEFD2tUb3RhbExpcXVpZGl0eQQRc2hhcmVUb2tlbnNUb0dpdmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA1zaGFyZVRva2Vuc0lkCQDZBAEJAQZnZXRTdHIBBQ1rU2hhcmVBc3NldElkBAdyZWlzc3VlCQEHUmVpc3N1ZQMJAQ9nZXRTaGFyZUFzc2V0SWQABRFzaGFyZVRva2Vuc1RvR2l2ZQYEDWtQYXJ0aWNpcGF0ZWQJAKwCAgkArAICAghhY2NvdW50XwkApQgBCAUBaQZjYWxsZXICDV9wYXJ0aWNpcGF0ZWQEE2FscmVhZHlQYXJ0aWNpcGF0ZWQJAQdnZXRCb29sAQUNa1BhcnRpY2lwYXRlZAkAlAoCCQDMCAIFB3JlaXNzdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRFzaGFyZVRva2Vuc1RvR2l2ZQUNc2hhcmVUb2tlbnNJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa1RvdGFsTGlxdWlkaXR5CQBkAgUOdG90YWxMaXF1aWRpdHkJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rUGFydGljaXBhdGVkBgUDbmlsBRFzaGFyZVRva2Vuc1RvR2l2ZQFpARdjbGFpbUZhcm1pbmdSZXdhcmRQcm94eQEDaWRzAwkBDGlzTGlxdWlkYXRlZAAJAAIBAhhDQ0ZSUDogQ0YgaXMgbGlxdWlkYXRlZCEDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFCG1BY2NQS2V5CQACAQIDXzIzBAplZ2dBc3NldElkCQEIZ2V0RWdnSWQABAxzaGFyZUFzc2V0SWQJAQ9nZXRTaGFyZUFzc2V0SWQABAtmYXJtaW5nRGFwcAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBB2dldFN0ckECBQhtQWNjQWRkcgUMa0Zhcm1pbmdEYXBwCgELY2xhaW1SZXdhcmQCBWFjY3VtBW5mdElkBAZpbnZSZXMJAPwHBAULZmFybWluZ0RhcHACC2NsYWltUmV3YXJkCQDMCAIFBW5mdElkBQNuaWwFA25pbAMJAAACBQZpbnZSZXMFBmludlJlcwQHJG1hdGNoMAUGaW52UmVzAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwCQBkAgUFYWNjdW0FA2ludAkAAgECAl81CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAZuZnRJZHMJALUJAgUDaWRzAgE7BApmb2xkUmVzdWx0CgACJGwFBm5mdElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELY2xhaW1SZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDWNsYWltZWRSZXdhcmQEByRtYXRjaDAFCmZvbGRSZXN1bHQDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECAl82BBJ0b3RhbEZhcm1pbmdSZXdhcmQJAQZnZXRJbnQBBRNrVG90YWxGYXJtaW5nUmV3YXJkBA5mYXJtQ2VvRmVlU2l6ZQkAawMFDWNsYWltZWRSZXdhcmQFCmZlZVBlcmNlbnQAZAQNY3VycmVudENlb0ZlZQkBBmdldEludAEFEGtDZW9Db2xsZWN0ZWRGZWUEDWNlb0ZlZU92ZXJhbGwJAQZnZXRJbnQBBRdrQ2VvQ29sbGVjdGVkRmVlT3ZlcmFsbAQLYW1vdW50VG9QYXkJAGUCBQ1jbGFpbWVkUmV3YXJkBQ5mYXJtQ2VvRmVlU2l6ZQQFdG9wVXAJAPwHBAUOc3Rha2luZ0FkZHJlc3MCC3RvcFVwUmV3YXJkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCmVnZ0Fzc2V0SWQFC2Ftb3VudFRvUGF5BQNuaWwDCQAAAgUFdG9wVXAFBXRvcFVwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrVG90YWxGYXJtaW5nUmV3YXJkCQBkAgUSdG90YWxGYXJtaW5nUmV3YXJkBQthbW91bnRUb1BheQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa0Nlb0NvbGxlY3RlZEZlZQkAZAIFDWN1cnJlbnRDZW9GZWUFDmZhcm1DZW9GZWVTaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrQ2VvQ29sbGVjdGVkRmVlT3ZlcmFsbAkAZAIFDWNlb0ZlZU92ZXJhbGwFDmZhcm1DZW9GZWVTaXplBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELY2xhaW1DZW9GZWUECGFkZHJlc3MxCGFkZHJlc3MyDWFkZHJlc3MxU2hhcmUNYWRkcmVzczJTaGFyZQMJAQxpc0xpcXVpZGF0ZWQACQACAQIXQ0NDRjogQ0YgaXMgbGlxdWlkYXRlZCEDCQBmAgAABQ1hZGRyZXNzMVNoYXJlCQACAQIZU2hhcmUgMSBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCAAAFDWFkZHJlc3MyU2hhcmUJAAIBAhlTaGFyZSAyIGNhbid0IGJlIG5lZ2F0aXZlAwkBAiE9AgkAZAIFDWFkZHJlc3MxU2hhcmUFDWFkZHJlc3MyU2hhcmUAZAkAAgECG1N1bSBvZiBzaGFyZXMgc2hvdWxkIGJlIDEwMAMJAAACCQEHZ2V0Qm9vbAEFB2tMb2NrZWQGCQACAQIDXzIyAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwQWY3VycmVudENlb0NvbGxlY3RlZEZlZQkBBmdldEludAEFEGtDZW9Db2xsZWN0ZWRGZWUEDmFkZHJlc3MxUmV3YXJkAwkAAAIFCGFkZHJlc3MyAgAFFmN1cnJlbnRDZW9Db2xsZWN0ZWRGZWUJAGsDBRZjdXJyZW50Q2VvQ29sbGVjdGVkRmVlBQ1hZGRyZXNzMVNoYXJlAGQEDmFkZHJlc3MyUmV3YXJkAwkAAAIFCGFkZHJlc3MyAgAAAAkAawMFFmN1cnJlbnRDZW9Db2xsZWN0ZWRGZWUFDWFkZHJlc3MyU2hhcmUAZAQWc2NyaXB0VHJhbnNmZXJBZGRyZXNzMgMJAAACBQhhZGRyZXNzMgIABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYWRkcmVzczIFDmFkZHJlc3MyUmV3YXJkCQEIZ2V0RWdnSWQABQNuaWwJAM4IAgUWc2NyaXB0VHJhbnNmZXJBZGRyZXNzMgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQhhZGRyZXNzMQUOYWRkcmVzczFSZXdhcmQJAQhnZXRFZ2dJZAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtDZW9Db2xsZWN0ZWRGZWUAAAUDbmlsCQACAQIiT25seSBtYW5hZ2VyIGNhbiBjYWxsIHRoZSBjb250cmFjdAFpARBjYWxsVW5zdGFrZVByb3h5AghmdW5jdGlvbgdhc3NldElkAwkBDGlzTGlxdWlkYXRlZAAJAAIBAhdDQ1VQOiBDRiBpcyBsaXF1aWRhdGVkIQMJAAACCQEHZ2V0Qm9vbAEFB2tMb2NrZWQGCQACAQIWQ29udHJhY3QgaXMgbG9ja2VkIG5vdwMDCQECIT0CBQhmdW5jdGlvbgIKdW5zdGFrZU5GVAkBAiE9AgUIZnVuY3Rpb24CDnVuc3Rha2VKYWNrcG90BwkAAgECEUJhZCBmdW5jdGlvbiBuYW1lAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIhQ2FuIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBhY2NvdW50BAplZ2dBc3NldElkCQEIZ2V0RWdnSWQABAxzaGFyZUFzc2V0SWQJAQ9nZXRTaGFyZUFzc2V0SWQABBJmYXJtaW5nRGFwcEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQdnZXRTdHJBAgUIbUFjY0FkZHICDEZBUk1JTkdfREFQUAQOdW5zdGFrZWRSZXdhcmQJAPwHBAUSZmFybWluZ0RhcHBBZGRyZXNzBQhmdW5jdGlvbgkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQ51bnN0YWtlZFJld2FyZAUOdW5zdGFrZWRSZXdhcmQEBnJld2FyZAQHJG1hdGNoMAUOdW5zdGFrZWRSZXdhcmQDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECFkVycm9yIGR1cmluZyB1bnN0YWtpbmcEDWN1cnJlbnRDZW9GZWUJAQZnZXRJbnQBBRBrQ2VvQ29sbGVjdGVkRmVlBA1jZW9GZWVPdmVyYWxsCQEGZ2V0SW50AQUXa0Nlb0NvbGxlY3RlZEZlZU92ZXJhbGwEDmZhcm1DZW9GZWVTaXplCQBrAwUGcmV3YXJkBQpmZWVQZXJjZW50AGQEC2Ftb3VudFRvUGF5CQBlAgUGcmV3YXJkBQ5mYXJtQ2VvRmVlU2l6ZQQFdG9wVXAJAPwHBAUOc3Rha2luZ0FkZHJlc3MCC3RvcFVwUmV3YXJkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCmVnZ0Fzc2V0SWQFC2Ftb3VudFRvUGF5BQNuaWwDCQAAAgUFdG9wVXAFBXRvcFVwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrQ2VvQ29sbGVjdGVkRmVlCQBkAgUNY3VycmVudENlb0ZlZQUOZmFybUNlb0ZlZVNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tDZW9Db2xsZWN0ZWRGZWVPdmVyYWxsCQBkAgUNY2VvRmVlT3ZlcmFsbAUOZmFybUNlb0ZlZVNpemUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEDGNoZWNrU3RhcnRlZAkAZwIJAQZnZXRJbnQBBQ9rVG90YWxMaXF1aWRpdHkJAQZnZXRJbnQBBRNrTGlxdWlkaXR5VGhyZXNob2xkBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBBRhY2NlcHRlZENhbGxzU3Rha2luZwkAzAgCAg9zdGFrZUZhcm1Ub2tlbnMJAMwIAgILY2xhaW1SZXdhcmQJAMwIAgISd2l0aGRyYXdGYXJtVG9rZW5zBQNuaWwEEWFjY2VwdGVkQ2FsbHNUaGlzCQDMCAICEGNhbGxVbnN0YWtlUHJveHkJAMwIAgILY2xhaW1DZW9GZWUJAMwIAgIPbG9ja0ludmVzdG1lbnRzCQDMCAICEXVubG9ja0ludmVzdG1lbnRzBQNuaWwDAwkAAAIIBQNpbnYIZnVuY3Rpb24CCnVuc3Rha2VORlQGCQAAAggFA2ludghmdW5jdGlvbgIOdW5zdGFrZUphY2twb3QJAAIBAihZb3UgY2Fubm90IGNhbGwgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5AwMDCQAAAgkApAgBCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAg1pbml0TWFzdGVyS2V5BwkAAAIFDm1BY2NQS2V5U3RyaW5nAgAHAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQxnZXRCYWNrdXBLZXkAAwMJAAACCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BwkAAAIJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQxnZXRCYWNrdXBLZXkABwcJAAIBAgRfMTAwAwkAAAIFDGNoZWNrU3RhcnRlZAcJAAIBAgNfMTQDCQAAAgkBB2dldEJvb2wBBQdrTG9ja2VkBgkAAgECA18yMgMDCQBmAggFA2ludgNmZWUAoPc2BgkBAiE9AggFA2ludgpmZWVBc3NldElkBQR1bml0CQACAQIDXzE1AwkAZgIJAJADAQgFA2ludghwYXltZW50cwADCQACAQIDXzE3AwMJAAACCQCkCAEIBQNpbnYEZEFwcAUEdGhpcwkBD2NvbnRhaW5zRWxlbWVudAIFEWFjY2VwdGVkQ2FsbHNUaGlzCAUDaW52CGZ1bmN0aW9uBwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEMZ2V0QmFja3VwS2V5AAMDCQAAAgkApAgBCAUDaW52BGRBcHAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARJnZXRNYXJrZXRQcm94eUFkZHIACQAAAggFA2ludghmdW5jdGlvbgIUY2FsbE1hcmtldHBsYWNlUHJveHkHAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQxnZXRCYWNrdXBLZXkAAwMJAAACCQCkCAEIBQNpbnYEZEFwcAUOc3Rha2luZ0FkZHJlc3MJAQ9jb250YWluc0VsZW1lbnQCBRRhY2NlcHRlZENhbGxzU3Rha2luZwgFA2ludghmdW5jdGlvbgcDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDGdldEJhY2t1cEtleQAEEGFsbG93ZWRDb250cmFjdHMJAQdnZXRTdHJBAgUIbUFjY0FkZHICEWFsbG93ZWRfY29udHJhY3RzBBRhbGxvd2VkQ29udHJhY3RzTGlzdAkAtQkCBRBhbGxvd2VkQ29udHJhY3RzAgE7BApkYXBwVG9DYWxsCQClCAEJAKQIAQgFA2ludgRkQXBwCQECIT0CCQDPCAIFFGFsbG93ZWRDb250cmFjdHNMaXN0BQpkYXBwVG9DYWxsBQR1bml0AwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJzcwUHJG1hdGNoMAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUIbUFjY1BLZXkDCQABAgUHJG1hdGNoMAIXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EAm10BQckbWF0Y2gwCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQhtQWNjUEtleQcyJzW/", "height": 3289891, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8gkPf6ieYA9TkmdgwAqL3JyTekEFZHQ2uNMDSvASJRoW Next: xHXbQK2ceKgo3rDryzkhG6nysfjJdkf7tQDSumQPtB6 Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyMAccPKey = "master_pk"
9090 }
9191
9292
93+func tryGetBoolean (a,key) = match getBoolean(a, key) {
94+ case b: Boolean =>
95+ b
96+ case _ =>
97+ false
98+}
99+
100+
93101 func getIntA (address,key) = match getInteger(address, key) {
94102 case b: Int =>
95103 b
96104 case _ =>
97105 0
98106 }
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+ }
99121
100122
101123 func getMarketProxyAddr () = getStrA(mAccAddr, kMarketProxyDapp)
128150 func initBackupKey (publicKey) = if ((i.caller != addressFromPublicKey(mAccPKey)))
129151 then throw("You cannot do this action")
130152 else [StringEntry(keyBackupPKey, publicKey)]
131-
132-
133-
134-@Callable(i)
135-func calculateCompoundShareAndIssue (amount) = if ((i.caller != this))
136- then throw("You cannot do this action")
137- else if ((getBool(kLockedInvestments) == true))
138- then $Tuple2(nil, 0)
139- else {
140- let shareAssetId = getShareAssetId()
141- let totalCompound = getIntA(stakingAddress, keyTotalCompound)
142- let totalStaked = getIntA(stakingAddress, keyGlobalStaked)
143- let totalLocked = (totalStaked + totalCompound)
144- let amountForCompound = fraction(amount, totalCompound, totalLocked)
145- $Tuple2([Reissue(shareAssetId, amountForCompound, true)], amountForCompound)
146- }
147153
148154
149155
198204
199205
200206 @Callable(i)
201-func provideLiquidity () = {
202- let eggAssetId = getEggId()
203- if (if (if ((i.callerPublicKey != wAccPKey))
204- then (i.callerPublicKey != mAccPKey)
205- else false)
206- then (getBool(kLockedInvestments) == true)
207- else false)
208- then throw("Contract is locked for investments by it's CEO. Please invest in another collective farm.")
209- else if ((getBool(kLocked) == true))
210- then throw("_22")
211- else if ((i.payments[0].assetId != eggAssetId))
212- then throw("_4")
213- else if ((1000000 > i.payments[0].amount))
214- then throw("Min amount to invest is 0.01 EGG")
215- else {
216- let totalLiquidity = getInt(kTotalLiquidity)
217- let shareTokensToGive = i.payments[0].amount
218- let shareTokensId = fromBase58String(getStr(kShareAssetId))
219- let reissue = Reissue(getShareAssetId(), shareTokensToGive, true)
220- let kParticipated = (("account_" + toString(i.caller)) + "_participated")
221- let alreadyParticipated = getBool(kParticipated)
222- $Tuple2([reissue, ScriptTransfer(i.caller, shareTokensToGive, shareTokensId), IntegerEntry(kTotalLiquidity, (totalLiquidity + value(i.payments[0].amount))), BooleanEntry(kParticipated, true)], shareTokensToGive)
223- }
224- }
225-
226-
227-
228-@Callable(i)
229-func claimFarmingRewardProxy (ids) = if ((i.callerPublicKey != mAccPKey))
230- then throw("_23")
207+func provideLiquidity () = if (isLiquidated())
208+ then throw("CPL: CF is liquidated!")
231209 else {
232210 let eggAssetId = getEggId()
233- let shareAssetId = getShareAssetId()
234- let farmingDapp = addressFromStringValue(getStrA(mAccAddr, kFarmingDapp))
235- func claimReward (accum,nftId) = {
236- let invRes = invoke(farmingDapp, "claimReward", [nftId], nil)
237- if ((invRes == invRes))
238- then match invRes {
239- case int: Int =>
240- (accum + int)
241- case _ =>
242- throw("_5")
243- }
244- else throw("Strict value is not equal to itself.")
245- }
246-
247- let nftIds = split(ids, ";")
248- let foldResult = {
249- let $l = nftIds
250- let $s = size($l)
251- let $acc0 = 0
252- func $f0_1 ($a,$i) = if (($i >= $s))
253- then $a
254- else claimReward($a, $l[$i])
255-
256- func $f0_2 ($a,$i) = if (($i >= $s))
257- then $a
258- else throw("List size exceeds 10")
259-
260- $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)
261- }
262- let claimedReward = match foldResult {
263- case int: Int =>
264- int
265- case _ =>
266- throw("_6")
267- }
268- let totalFarmingReward = getInt(kTotalFarmingReward)
269- let farmCeoFeeSize = fraction(claimedReward, feePercent, 100)
270- let currentCeoFee = getInt(kCeoCollectedFee)
271- let ceoFeeOverall = getInt(kCeoCollectedFeeOverall)
272- let amountToPay = (claimedReward - farmCeoFeeSize)
273- let amountCompound = asInt(invoke(this, "calculateCompoundShareAndIssue", [amountToPay], nil))
274- if ((amountCompound == amountCompound))
275- then {
276- let topUp = invoke(stakingAddress, "topUpReward", nil, [AttachedPayment(eggAssetId, (amountToPay - amountCompound)), AttachedPayment(shareAssetId, amountCompound)])
277- if ((topUp == topUp))
278- then [IntegerEntry(kTotalFarmingReward, (totalFarmingReward + amountToPay)), IntegerEntry(kCeoCollectedFee, (currentCeoFee + farmCeoFeeSize)), IntegerEntry(kCeoCollectedFeeOverall, (ceoFeeOverall + farmCeoFeeSize))]
279- else throw("Strict value is not equal to itself.")
280- }
281- else throw("Strict value is not equal to itself.")
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+ }
282232 }
283233
284234
285235
286236 @Callable(i)
287-func claimCeoFee (address1,address2,address1Share,address2Share) = if ((0 > address1Share))
288- then throw("Share 1 can't be negative")
289- else if ((0 > address2Share))
290- then throw("Share 2 can't be negative")
291- else if (((address1Share + address2Share) != 100))
292- then throw("Sum of shares should be 100")
293- else if ((getBool(kLocked) == true))
294- then throw("_22")
295- else if ((i.caller == this))
296- then {
297- let currentCeoCollectedFee = getInt(kCeoCollectedFee)
298- let address1Reward = if ((address2 == ""))
299- then currentCeoCollectedFee
300- else fraction(currentCeoCollectedFee, address1Share, 100)
301- let address2Reward = if ((address2 == ""))
302- then 0
303- else fraction(currentCeoCollectedFee, address2Share, 100)
304- let scriptTransferAddress2 = if ((address2 == ""))
305- then nil
306- else [ScriptTransfer(addressFromStringValue(address2), address2Reward, getEggId())]
307- (scriptTransferAddress2 ++ [ScriptTransfer(addressFromStringValue(address1), address1Reward, getEggId()), IntegerEntry(kCeoCollectedFee, 0)])
308- }
309- else throw("Only manager can call the contract")
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+ }
310288
311289
312290
313291 @Callable(i)
314-func startLiquidation (auctionId) = throw("_7")
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")
315317
316318
317319
318320 @Callable(i)
319-func voteForLiquidation (auctionId) = throw("_7")
320-
321-
322-
323-@Callable(i)
324-func callUnstakeProxy (function,assetId) = if ((getBool(kLocked) == true))
325- then throw("Contract is locked now")
326- else if (if ((function != "unstakeNFT"))
327- then (function != "unstakeJackpot")
328- else false)
329- then throw("Bad function name")
330- else if ((i.caller != this))
331- then throw("Can be called only by the account")
332- else {
333- let eggAssetId = getEggId()
334- let shareAssetId = getShareAssetId()
335- let farmingDappAddress = addressFromStringValue(getStrA(mAccAddr, "FARMING_DAPP"))
336- let unstakedReward = invoke(farmingDappAddress, function, [assetId], nil)
337- if ((unstakedReward == unstakedReward))
338- then {
339- let reward = match unstakedReward {
340- case int: Int =>
341- int
342- case _ =>
343- throw("Error during unstaking")
344- }
345- let currentCeoFee = getInt(kCeoCollectedFee)
346- let ceoFeeOverall = getInt(kCeoCollectedFeeOverall)
347- let farmCeoFeeSize = fraction(reward, feePercent, 100)
348- let amountToPay = (reward - farmCeoFeeSize)
349- let amountCompontCall = invoke(this, "calculateCompoundShareAndIssue", [amountToPay], nil)
350- if ((amountCompontCall == amountCompontCall))
351- then {
352- let amountCompound = asInt(invoke(this, "calculateCompoundShareAndIssue", [amountToPay], nil))
353- if ((amountCompound == amountCompound))
354- then {
355- let topUp = invoke(stakingAddress, "topUpReward", nil, [AttachedPayment(eggAssetId, (amountToPay - amountCompound)), AttachedPayment(shareAssetId, amountCompound)])
356- if ((topUp == topUp))
357- then [IntegerEntry(kCeoCollectedFee, (currentCeoFee + farmCeoFeeSize)), IntegerEntry(kCeoCollectedFeeOverall, (ceoFeeOverall + farmCeoFeeSize))]
358- else throw("Strict value is not equal to itself.")
359- }
360- else throw("Strict value is not equal to itself.")
361- }
362- else throw("Strict value is not equal to itself.")
363- }
364- else throw("Strict value is not equal to itself.")
365- }
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+ }
366355
367356
368357 @Verifier(tx)
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyMAccPKey = "master_pk"
55
66 let keyBackupPKey = "back_pk"
77
88 let warsPKey = "wars_pk"
99
1010 func getStr (key) = match getString(this, key) {
1111 case b: String =>
1212 b
1313 case _ =>
1414 ""
1515 }
1616
1717
1818 let mAccPKeyString = getStr(keyMAccPKey)
1919
2020 let backupPKeyString = getStr(keyBackupPKey)
2121
2222 func getBackupKey () = if ((backupPKeyString == ""))
2323 then this.bytes
2424 else fromBase58String(backupPKeyString)
2525
2626
2727 let mAccPKey = fromBase58String(mAccPKeyString)
2828
2929 let mAccAddr = addressFromPublicKey(mAccPKey)
3030
3131 let feePercent = getIntegerValue(mAccAddr, (("f_" + toString(this)) + "_fee"))
3232
3333 let stakingAddress = addressFromStringValue(valueOrErrorMessage(getString(mAccAddr, (("f_" + toString(this)) + "_stake_address")), (("f_" + toString(this)) + "_stake_address not defined")))
3434
3535 let wAccPKey = fromBase58String(valueOrErrorMessage(getString(mAccAddr, warsPKey), (warsPKey + " not defined")))
3636
3737 let kTotalLiquidity = "total_liquidity"
3838
3939 let kInitialized = "INITIALIZED"
4040
4141 let kLiquidityThreshold = "LIQUIDITY_THRESHOLD"
4242
4343 let kTotalFarmingReward = "total_farming_reward"
4444
4545 let kShareAssetId = "SHARE_ASSET_ID"
4646
4747 let kIncubatorDapp = "INCUBATOR_DAPP"
4848
4949 let kBreederDapp = "BREEDER_DAPP"
5050
5151 let kFarmingDapp = "FARMING_DAPP"
5252
5353 let kMarketProxyDapp = "MARKETPLACE_PROXY_DAPP"
5454
5555 let kAuctionDapp = "AUCTION_DAPP"
5656
5757 let kLocked = "LOCKED"
5858
5959 let kCeoCollectedFee = "ceo_collected_fee"
6060
6161 let kCeoCollectedFeeOverall = "ceo_fee_overall"
6262
6363 let kLockedInvestments = "locked_investments"
6464
6565 let keyTotalCompound = "total_compound"
6666
6767 let keyGlobalStaked = "global_staked"
6868
6969 func getInt (key) = match getInteger(this, key) {
7070 case b: Int =>
7171 b
7272 case _ =>
7373 0
7474 }
7575
7676
7777 func getBool (key) = match getBoolean(this, key) {
7878 case b: Boolean =>
7979 b
8080 case _ =>
8181 unit
8282 }
8383
8484
8585 func getStrA (a,k) = match getString(a, k) {
8686 case b: String =>
8787 b
8888 case _ =>
8989 ""
9090 }
9191
9292
93+func tryGetBoolean (a,key) = match getBoolean(a, key) {
94+ case b: Boolean =>
95+ b
96+ case _ =>
97+ false
98+}
99+
100+
93101 func getIntA (address,key) = match getInteger(address, key) {
94102 case b: Int =>
95103 b
96104 case _ =>
97105 0
98106 }
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+ }
99121
100122
101123 func getMarketProxyAddr () = getStrA(mAccAddr, kMarketProxyDapp)
102124
103125
104126 func getEggId () = fromBase58String(getStringValue(mAccAddr, "EGG_ASSET_ID"))
105127
106128
107129 func getShareAssetId () = fromBase58String(getStr(kShareAssetId))
108130
109131
110132 func asInt (value) = match value {
111133 case int: Int =>
112134 int
113135 case _ =>
114136 throw("wrong type, expected: Int")
115137 }
116138
117139
118140 @Callable(i)
119141 func initMasterKey (publicKey) = if ((i.caller != this))
120142 then throw("You cannot do this action")
121143 else if ((mAccPKeyString != ""))
122144 then throw("Master public key already set, you can't override!")
123145 else [StringEntry(keyMAccPKey, publicKey)]
124146
125147
126148
127149 @Callable(i)
128150 func initBackupKey (publicKey) = if ((i.caller != addressFromPublicKey(mAccPKey)))
129151 then throw("You cannot do this action")
130152 else [StringEntry(keyBackupPKey, publicKey)]
131-
132-
133-
134-@Callable(i)
135-func calculateCompoundShareAndIssue (amount) = if ((i.caller != this))
136- then throw("You cannot do this action")
137- else if ((getBool(kLockedInvestments) == true))
138- then $Tuple2(nil, 0)
139- else {
140- let shareAssetId = getShareAssetId()
141- let totalCompound = getIntA(stakingAddress, keyTotalCompound)
142- let totalStaked = getIntA(stakingAddress, keyGlobalStaked)
143- let totalLocked = (totalStaked + totalCompound)
144- let amountForCompound = fraction(amount, totalCompound, totalLocked)
145- $Tuple2([Reissue(shareAssetId, amountForCompound, true)], amountForCompound)
146- }
147153
148154
149155
150156 @Callable(i)
151157 func initCollectiveFarm (name,minimumThreshold,migration,totalFarmingReward,totalLiquidity,totalFarmToken) = if ((mAccPKeyString == ""))
152158 then throw("First initiatie a master public key!")
153159 else if ((i.callerPublicKey != mAccPKey))
154160 then throw("_1")
155161 else if ((getBool(kInitialized) != unit))
156162 then throw("_2")
157163 else if (if ((migration == false))
158164 then if ((i.payments[0].amount != 10000000))
159165 then true
160166 else (i.payments[0].assetId != getEggId())
161167 else false)
162168 then throw("_20")
163169 else {
164170 let shareTokens = if (migration)
165171 then totalFarmToken
166172 else 10000000
167173 let shareToken = Issue(name, (("Team token for the \"" + name) + "\" collective farm"), shareTokens, 8, true)
168174 let totLiquidity = if (migration)
169175 then totalLiquidity
170176 else 10000000
171177 let totFarmingReward = if (migration)
172178 then [IntegerEntry(kTotalFarmingReward, totalFarmingReward)]
173179 else nil
174180 ([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)
175181 }
176182
177183
178184
179185 @Callable(i)
180186 func setLock (s) = if ((i.callerPublicKey != mAccPKey))
181187 then throw("_21")
182188 else [BooleanEntry(kLocked, s)]
183189
184190
185191
186192 @Callable(i)
187193 func lockInvestments () = if ((i.caller != this))
188194 then throw("You cannot lock this contract")
189195 else [BooleanEntry(kLockedInvestments, true)]
190196
191197
192198
193199 @Callable(i)
194200 func unlockInvestments () = if ((i.caller != this))
195201 then throw("You cannot lock this contract")
196202 else [BooleanEntry(kLockedInvestments, false)]
197203
198204
199205
200206 @Callable(i)
201-func provideLiquidity () = {
202- let eggAssetId = getEggId()
203- if (if (if ((i.callerPublicKey != wAccPKey))
204- then (i.callerPublicKey != mAccPKey)
205- else false)
206- then (getBool(kLockedInvestments) == true)
207- else false)
208- then throw("Contract is locked for investments by it's CEO. Please invest in another collective farm.")
209- else if ((getBool(kLocked) == true))
210- then throw("_22")
211- else if ((i.payments[0].assetId != eggAssetId))
212- then throw("_4")
213- else if ((1000000 > i.payments[0].amount))
214- then throw("Min amount to invest is 0.01 EGG")
215- else {
216- let totalLiquidity = getInt(kTotalLiquidity)
217- let shareTokensToGive = i.payments[0].amount
218- let shareTokensId = fromBase58String(getStr(kShareAssetId))
219- let reissue = Reissue(getShareAssetId(), shareTokensToGive, true)
220- let kParticipated = (("account_" + toString(i.caller)) + "_participated")
221- let alreadyParticipated = getBool(kParticipated)
222- $Tuple2([reissue, ScriptTransfer(i.caller, shareTokensToGive, shareTokensId), IntegerEntry(kTotalLiquidity, (totalLiquidity + value(i.payments[0].amount))), BooleanEntry(kParticipated, true)], shareTokensToGive)
223- }
224- }
225-
226-
227-
228-@Callable(i)
229-func claimFarmingRewardProxy (ids) = if ((i.callerPublicKey != mAccPKey))
230- then throw("_23")
207+func provideLiquidity () = if (isLiquidated())
208+ then throw("CPL: CF is liquidated!")
231209 else {
232210 let eggAssetId = getEggId()
233- let shareAssetId = getShareAssetId()
234- let farmingDapp = addressFromStringValue(getStrA(mAccAddr, kFarmingDapp))
235- func claimReward (accum,nftId) = {
236- let invRes = invoke(farmingDapp, "claimReward", [nftId], nil)
237- if ((invRes == invRes))
238- then match invRes {
239- case int: Int =>
240- (accum + int)
241- case _ =>
242- throw("_5")
243- }
244- else throw("Strict value is not equal to itself.")
245- }
246-
247- let nftIds = split(ids, ";")
248- let foldResult = {
249- let $l = nftIds
250- let $s = size($l)
251- let $acc0 = 0
252- func $f0_1 ($a,$i) = if (($i >= $s))
253- then $a
254- else claimReward($a, $l[$i])
255-
256- func $f0_2 ($a,$i) = if (($i >= $s))
257- then $a
258- else throw("List size exceeds 10")
259-
260- $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)
261- }
262- let claimedReward = match foldResult {
263- case int: Int =>
264- int
265- case _ =>
266- throw("_6")
267- }
268- let totalFarmingReward = getInt(kTotalFarmingReward)
269- let farmCeoFeeSize = fraction(claimedReward, feePercent, 100)
270- let currentCeoFee = getInt(kCeoCollectedFee)
271- let ceoFeeOverall = getInt(kCeoCollectedFeeOverall)
272- let amountToPay = (claimedReward - farmCeoFeeSize)
273- let amountCompound = asInt(invoke(this, "calculateCompoundShareAndIssue", [amountToPay], nil))
274- if ((amountCompound == amountCompound))
275- then {
276- let topUp = invoke(stakingAddress, "topUpReward", nil, [AttachedPayment(eggAssetId, (amountToPay - amountCompound)), AttachedPayment(shareAssetId, amountCompound)])
277- if ((topUp == topUp))
278- then [IntegerEntry(kTotalFarmingReward, (totalFarmingReward + amountToPay)), IntegerEntry(kCeoCollectedFee, (currentCeoFee + farmCeoFeeSize)), IntegerEntry(kCeoCollectedFeeOverall, (ceoFeeOverall + farmCeoFeeSize))]
279- else throw("Strict value is not equal to itself.")
280- }
281- else throw("Strict value is not equal to itself.")
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+ }
282232 }
283233
284234
285235
286236 @Callable(i)
287-func claimCeoFee (address1,address2,address1Share,address2Share) = if ((0 > address1Share))
288- then throw("Share 1 can't be negative")
289- else if ((0 > address2Share))
290- then throw("Share 2 can't be negative")
291- else if (((address1Share + address2Share) != 100))
292- then throw("Sum of shares should be 100")
293- else if ((getBool(kLocked) == true))
294- then throw("_22")
295- else if ((i.caller == this))
296- then {
297- let currentCeoCollectedFee = getInt(kCeoCollectedFee)
298- let address1Reward = if ((address2 == ""))
299- then currentCeoCollectedFee
300- else fraction(currentCeoCollectedFee, address1Share, 100)
301- let address2Reward = if ((address2 == ""))
302- then 0
303- else fraction(currentCeoCollectedFee, address2Share, 100)
304- let scriptTransferAddress2 = if ((address2 == ""))
305- then nil
306- else [ScriptTransfer(addressFromStringValue(address2), address2Reward, getEggId())]
307- (scriptTransferAddress2 ++ [ScriptTransfer(addressFromStringValue(address1), address1Reward, getEggId()), IntegerEntry(kCeoCollectedFee, 0)])
308- }
309- else throw("Only manager can call the contract")
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+ }
310288
311289
312290
313291 @Callable(i)
314-func startLiquidation (auctionId) = throw("_7")
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")
315317
316318
317319
318320 @Callable(i)
319-func voteForLiquidation (auctionId) = throw("_7")
320-
321-
322-
323-@Callable(i)
324-func callUnstakeProxy (function,assetId) = if ((getBool(kLocked) == true))
325- then throw("Contract is locked now")
326- else if (if ((function != "unstakeNFT"))
327- then (function != "unstakeJackpot")
328- else false)
329- then throw("Bad function name")
330- else if ((i.caller != this))
331- then throw("Can be called only by the account")
332- else {
333- let eggAssetId = getEggId()
334- let shareAssetId = getShareAssetId()
335- let farmingDappAddress = addressFromStringValue(getStrA(mAccAddr, "FARMING_DAPP"))
336- let unstakedReward = invoke(farmingDappAddress, function, [assetId], nil)
337- if ((unstakedReward == unstakedReward))
338- then {
339- let reward = match unstakedReward {
340- case int: Int =>
341- int
342- case _ =>
343- throw("Error during unstaking")
344- }
345- let currentCeoFee = getInt(kCeoCollectedFee)
346- let ceoFeeOverall = getInt(kCeoCollectedFeeOverall)
347- let farmCeoFeeSize = fraction(reward, feePercent, 100)
348- let amountToPay = (reward - farmCeoFeeSize)
349- let amountCompontCall = invoke(this, "calculateCompoundShareAndIssue", [amountToPay], nil)
350- if ((amountCompontCall == amountCompontCall))
351- then {
352- let amountCompound = asInt(invoke(this, "calculateCompoundShareAndIssue", [amountToPay], nil))
353- if ((amountCompound == amountCompound))
354- then {
355- let topUp = invoke(stakingAddress, "topUpReward", nil, [AttachedPayment(eggAssetId, (amountToPay - amountCompound)), AttachedPayment(shareAssetId, amountCompound)])
356- if ((topUp == topUp))
357- then [IntegerEntry(kCeoCollectedFee, (currentCeoFee + farmCeoFeeSize)), IntegerEntry(kCeoCollectedFeeOverall, (ceoFeeOverall + farmCeoFeeSize))]
358- else throw("Strict value is not equal to itself.")
359- }
360- else throw("Strict value is not equal to itself.")
361- }
362- else throw("Strict value is not equal to itself.")
363- }
364- else throw("Strict value is not equal to itself.")
365- }
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+ }
366355
367356
368357 @Verifier(tx)
369358 func verify () = {
370359 let checkStarted = (getInt(kTotalLiquidity) >= getInt(kLiquidityThreshold))
371360 match tx {
372361 case inv: InvokeScriptTransaction =>
373362 let acceptedCallsStaking = ["stakeFarmTokens", "claimReward", "withdrawFarmTokens"]
374363 let acceptedCallsThis = ["callUnstakeProxy", "claimCeoFee", "lockInvestments", "unlockInvestments"]
375364 if (if ((inv.function == "unstakeNFT"))
376365 then true
377366 else (inv.function == "unstakeJackpot"))
378367 then throw("You cannot call these functions directly")
379368 else if (if (if ((addressFromRecipient(inv.dApp) == this))
380369 then (inv.function == "initMasterKey")
381370 else false)
382371 then (mAccPKeyString == "")
383372 else false)
384373 then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
385374 then true
386375 else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
387376 else if (if ((sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) == false))
388377 then (sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey()) == false)
389378 else false)
390379 then throw("_100")
391380 else if ((checkStarted == false))
392381 then throw("_14")
393382 else if ((getBool(kLocked) == true))
394383 then throw("_22")
395384 else if (if ((inv.fee > 900000))
396385 then true
397386 else (inv.feeAssetId != unit))
398387 then throw("_15")
399388 else if ((size(inv.payments) > 3))
400389 then throw("_17")
401390 else if (if ((addressFromRecipient(inv.dApp) == this))
402391 then containsElement(acceptedCallsThis, inv.function)
403392 else false)
404393 then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
405394 then true
406395 else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
407396 else if (if ((addressFromRecipient(inv.dApp) == addressFromStringValue(getMarketProxyAddr())))
408397 then (inv.function == "callMarketplaceProxy")
409398 else false)
410399 then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
411400 then true
412401 else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
413402 else if (if ((addressFromRecipient(inv.dApp) == stakingAddress))
414403 then containsElement(acceptedCallsStaking, inv.function)
415404 else false)
416405 then if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
417406 then true
418407 else sigVerify(tx.bodyBytes, tx.proofs[0], getBackupKey())
419408 else {
420409 let allowedContracts = getStrA(mAccAddr, "allowed_contracts")
421410 let allowedContractsList = split(allowedContracts, ";")
422411 let dappToCall = toString(addressFromRecipient(inv.dApp))
423412 (indexOf(allowedContractsList, dappToCall) != unit)
424413 }
425414 case ss: SetScriptTransaction =>
426415 sigVerify(tx.bodyBytes, tx.proofs[0], mAccPKey)
427416 case mt: MassTransferTransaction =>
428417 sigVerify(tx.bodyBytes, tx.proofs[0], mAccPKey)
429418 case _ =>
430419 false
431420 }
432421 }
433422

github/deemru/w8io/6500d08 
64.06 ms