tx · 5tmj8z8r33FxdZGvCVcpcFM99gMqEXBt4hsBXUpVfrPx

3P8FgFUEvZCD1c6FkZM3zT5eYezocydyxDD:  -0.01400000 Waves

2023.03.15 19:45 [3556951] smart account 3P8FgFUEvZCD1c6FkZM3zT5eYezocydyxDD > SELF 0.00000000 Waves

{ "type": 13, "id": "5tmj8z8r33FxdZGvCVcpcFM99gMqEXBt4hsBXUpVfrPx", "fee": 1400000, "feeAssetId": null, "timestamp": 1678898783200, "version": 2, "chainId": 87, "sender": "3P8FgFUEvZCD1c6FkZM3zT5eYezocydyxDD", "senderPublicKey": "DkxqS5tLpEQJtue73P7Cwt117bTL6nZjvnLiSnkEd1QQ", "proofs": [ "46gUU7pCBxjdPAgW5yzEFgu4YH8WcmYboowPzHjtZDjNwfidjPpM3GThHJdvs1dBpu316DCW7HrZQTJr7NPW8x9S" ], "script": "base64:BgIqCAISBAoCAQESBAoCAQESBAoCCAgSBQoDGAgIEgMKAQgSAwoBCBIDCgEIIwEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwEVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAISc3RhdGljX2h1bnRBZGRyZXNzARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBFHN0YXRpY0tleV9lZ2dBc3NldElkAAIRc3RhdGljX2VnZ0Fzc2V0SWQBF3N0YXRpY0tleV9taW5QZXJjZW50YWdlAAIUc3RhdGljX21pblBlcmNlbnRhZ2UBF3N0YXRpY0tleV9tYXhQZXJjZW50YWdlAAIUc3RhdGljX21heFBlcmNlbnRhZ2UBG3N0YXRpY0tleV9hY2Nlc3NJdGVtQXNzZXRJZAACGHN0YXRpY19hY2Nlc3NJdGVtQXNzZXRJZAEZc3RhdGljS2V5X2FjY2Vzc0l0ZW1QcmljZQACFnN0YXRpY19hY2Nlc3NJdGVtUHJpY2UBEGtleV9nZXREdWNrT3duZXIBBGR1Y2sJAKwCAgkArAICAgVkdWNrXwUEZHVjawIGX293bmVyARFrZXlfZ2V0RHVja1N0YXR1cwEEZHVjawkArAICCQCsAgICBWR1Y2tfBQRkdWNrAgdfc3RhdHVzARNrZXlfZ2V0RHVja1JlbnRlZEJ5AQRkdWNrCQCsAgIJAKwCAgIFZHVja18FBGR1Y2sCCV9yZW50ZWRCeQETa2V5X2dldER1Y2tEdXJhdGlvbgEEZHVjawkArAICCQCsAgICBWR1Y2tfBQRkdWNrAglfZHVyYXRpb24BFGtleV9nZXREdWNrUmVudHN0YXJ0AQRkdWNrCQCsAgIJAKwCAgIFZHVja18FBGR1Y2sCCV9zdGFydF90cwEVa2V5X2dldER1Y2tQZXJjZW50YWdlAQRkdWNrCQCsAgIJAKwCAgIFZHVja18FBGR1Y2sCC19wZXJjZW50YWdlARNrZXlfZ2V0RHVja0xhc3RQYWlkAQRkdWNrCQCsAgIJAKwCAgIFZHVja18FBGR1Y2sCCV9sYXN0UGFpZAESa2V5X2dldFRvdGFsUmVudGVkAQR1c2VyCQCsAgIJAKwCAgIHcmVudGVkXwUEdXNlcgIHX2Ftb3VudAEca2V5X2dldFRvdGFsQm91Z2h0RXh0cmFTcG90cwEEdXNlcgkArAICCQCsAgICBnNwb3RzXwUEdXNlcgIHX2Ftb3VudAEUa2V5X2dldFJlZnVuZGFibGVGZWUCBHVzZXIEZHVjawkArAICCQCsAgICBnNwb3RzXwUEdXNlcgIHX2Ftb3VudAEca2V5X2dhbWVQcmVGdW5kZWRJdGVtRm9yRHVjawEEZHVjawkArAICAg5hY2Nlc3NfZnVuZGVkXwUEZHVjawEPa2V5X3Nwb3RzQm91Z2h0AQphZGRyZXNzU3RyCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICDF9zcG90c0JvdWdodAENa2V5X3Nwb3RzQnVzeQEKYWRkcmVzc1N0cgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgpfc3BvdHNCdXN5ARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5ARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAENdHJ5R2V0SW50ZWdlcgEDa2V5CQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgUEdGhpcwUDa2V5AQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAh5SQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQAC0dlbmVyYXRpb25zCQDMCAICAUcJAMwIAgIBSAkAzAgCAgFJCQDMCAICAUsJAMwIAgIBTAkAzAgCAgFNCQDMCAICAU4JAMwIAgIBTwUDbmlsAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABDmdldEh1bnRBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFHN0YXRpY0tleV9lZ2dBc3NldElkAAEUZ2V0QWNjZXNzSXRlbUFzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQ5nZXRIdW50QWRkcmVzcwAJARtzdGF0aWNLZXlfYWNjZXNzSXRlbUFzc2V0SWQAARJnZXRBY2Nlc3NJdGVtUHJpY2UACQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBDmdldEh1bnRBZGRyZXNzAAIWc3RhdGljX2FjY2Vzc0l0ZW1QcmljZQEScHV0Rm9yUmVudEludGVybmFsAwFpDGR1cmF0aW9uSW5NcwpwZXJjZW50YWdlBAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGZHVja0lkCQDYBAEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAMJAQIhPQIIBQxmaXJzdFBheW1lbnQGYW1vdW50AAEJAAIBAhlSUEZSOiBORlQgaXMgbm90IGF0dGFjaGVkBAhjaGlsZHJlbgkBBWFzSW50AQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuBAtib3VnaHRTcG90cwkBFXRyeUdldEludGVnZXJFeHRlcm5hbAIJAQ5nZXRIdW50QWRkcmVzcwAJAQ9rZXlfc3BvdHNCb3VnaHQBCQClCAEIBQFpBmNhbGxlcgQJYnVzeVNwb3RzCQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBDmdldEh1bnRBZGRyZXNzAAkBDWtleV9zcG90c0J1c3kBCQClCAEIBQFpBmNhbGxlcgMJAGcCBQlidXN5U3BvdHMFC2JvdWdodFNwb3RzCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhVSUEZSOiBObyBmcmVlIHNwb3RzISAJAKQDAQUJYnVzeVNwb3RzAgEgCQCkAwEFC2JvdWdodFNwb3RzAgEgCQClCAEIBQFpBmNhbGxlcgIBIAkApQgBCQEOZ2V0SHVudEFkZHJlc3MAAwMJAGYCBQpwZXJjZW50YWdlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEXc3RhdGljS2V5X21heFBlcmNlbnRhZ2UABgkAZgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARdzdGF0aWNLZXlfbWluUGVyY2VudGFnZQAFCnBlcmNlbnRhZ2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICJ1JQRlI6IHBsZWFzZSBwaWNrIGEgcGVyY2VudGFnZSBiZXR3ZWVuIAkBF3N0YXRpY0tleV9taW5QZXJjZW50YWdlAAIFIGFuZCAJARdzdGF0aWNLZXlfbWF4UGVyY2VudGFnZQACASUJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlfZ2V0RHVja1BlcmNlbnRhZ2UBBQZkdWNrSWQFCnBlcmNlbnRhZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlfZ2V0RHVja0R1cmF0aW9uAQUGZHVja0lkBQxkdXJhdGlvbkluTXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleV9nZXREdWNrT3duZXIBBQZkdWNrSWQJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlfZ2V0RHVja1N0YXR1cwEFBmR1Y2tJZAIESURMRQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAKAIAQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHBwFpAQpwdXRGb3JSZW50AgxkdXJhdGlvbkluTXMKcGVyY2VudGFnZQkBEnB1dEZvclJlbnRJbnRlcm5hbAMFAWkFDGR1cmF0aW9uSW5NcwUKcGVyY2VudGFnZQFpARdidXlHbGFzc2VzQW5kUHV0Rm9yUmVudAIMZHVyYXRpb25Jbk1zCnBlcmNlbnRhZ2UECmJ1eUdsYXNzZXMJAPwHBAkBDmdldEh1bnRBZGRyZXNzAAIPYnV5QWNjZXNzSXRlbSgpBQNuaWwJAMwIAgkAkQMCCAUBaQhwYXltZW50cwABBQNuaWwDCQAAAgUKYnV5R2xhc3NlcwUKYnV5R2xhc3NlcwkBEnB1dEZvclJlbnRJbnRlcm5hbAMFAWkFDGR1cmF0aW9uSW5NcwUKcGVyY2VudGFnZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARByZW50RHVja0Zyb21Vc2VyAgZkdWNrSWQEZ2FtZQQFZ2VuZXMJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBBQZkdWNrSWQEbmFtZQIABApnZW5lcmF0aW9uCQCRAwIFBWdlbmVzAA4EA2ZlZQkAZAIJAQV2YWx1ZQEJAM8IAgULR2VuZXJhdGlvbnMFCmdlbmVyYXRpb24JAGgCAAEAgOHrFwQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAAgECJ1RCVDogUGxlYXNlIGF0dGFjaCB0aGUgY29ycmVjdCBwYXltZW50IQMJAQIhPQIIBQNwbXQGYW1vdW50BQNmZWUJAAIBAjBSUkRGVTogUGxlYXNlIGF0dGFjaCBlbm91Z2ggcmVmdW5kYWJsZSBkZXBvc2l0cyEECmR1Y2tTdGF0dXMJAQx0cnlHZXRTdHJpbmcBCQERa2V5X2dldER1Y2tTdGF0dXMBBQZkdWNrSWQDCQECIT0CBQpkdWNrU3RhdHVzAgRJRExFCQACAQkArAICAkFSUkRGVTogWW91IGNhbiBvbmx5IHJlbnQgZHVja3Mgd2l0aCBJRExFIHN0YXR1cy4gQ3VycmVudCBzdGF0dXM6IAUKZHVja1N0YXR1cwQJZHVja093bmVyCQEMdHJ5R2V0U3RyaW5nAQkBEGtleV9nZXREdWNrT3duZXIBBQZkdWNrSWQEC2JvdWdodFNwb3RzCQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBDmdldEh1bnRBZGRyZXNzAAkBD2tleV9zcG90c0JvdWdodAEFCWR1Y2tPd25lcgQJYnVzeVNwb3RzCQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBDmdldEh1bnRBZGRyZXNzAAkBDWtleV9zcG90c0J1c3kBBQlkdWNrT3duZXIED2J1eVNwb3RJZk5lZWRlZAMJAGcCBQlidXN5U3BvdHMFC2JvdWdodFNwb3RzBARjYWxsCQD8BwQJAQ5nZXRIdW50QWRkcmVzcwACEmJ1eUFjY2Vzc0l0ZW1PdGhlcgkAzAgCBQlkdWNrT3duZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEOZ2V0SHVudEFkZHJlc3MACQEbc3RhdGljS2V5X2FjY2Vzc0l0ZW1Bc3NldElkAAkBEUBleHRyTmF0aXZlKDEwNTApAgkBDmdldEh1bnRBZGRyZXNzAAkBGXN0YXRpY0tleV9hY2Nlc3NJdGVtUHJpY2UABQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBHGtleV9nYW1lUHJlRnVuZGVkSXRlbUZvckR1Y2sBBQZkdWNrSWQGBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAQIhPQIFBGdhbWUCBEhVTlQJAAIBAhhSUkRGVTogVW5zdXBwb3J0ZWQgZ2FtZSEEB3N0YXJ0VHMIBQlsYXN0QmxvY2sJdGltZXN0YW1wBA5zZW5kVG9IdW50RGF0YQkA/AcECQEOZ2V0SHVudEFkZHJlc3MAAg9sb2NrRHVja1JlbnRpbmcJAMwIAgUJZHVja093bmVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUGZHVja0lkAAEFA25pbAMJAAACBQ5zZW5kVG9IdW50RGF0YQUOc2VuZFRvSHVudERhdGEED2Ftb3VudFJlbnRlZEtleQkBEmtleV9nZXRUb3RhbFJlbnRlZAEJAKUIAQgFAWkGY2FsbGVyBAlib3VnaHRLZXkJARxrZXlfZ2V0VG90YWxCb3VnaHRFeHRyYVNwb3RzAQkApQgBCAUBaQZjYWxsZXIED25ld0Ftb3VudFJlbnRlZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUPYW1vdW50UmVudGVkS2V5AAEECnRvdGFsU3BvdHMJAGQCCQENdHJ5R2V0SW50ZWdlcgEFCWJvdWdodEtleQAFAwkAZgIFD25ld0Ftb3VudFJlbnRlZAUKdG90YWxTcG90cwkAAgEJAKwCAgIvUlJERlU6IFlvdSBhbHJlYWR5IHJlbnRlZCBtYXggYW1vdW50IG9mIGR1Y2tzISAJAKQDAQUKdG90YWxTcG90cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleV9nZXREdWNrUmVudHN0YXJ0AQUGZHVja0lkBQdzdGFydFRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5X2dldFJlZnVuZGFibGVGZWUCCQClCAEIBQFpBmNhbGxlcgUGZHVja0lkBQNmZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFD2Ftb3VudFJlbnRlZEtleQUPbmV3QW1vdW50UmVudGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlfZ2V0RHVja1N0YXR1cwEFBmR1Y2tJZAIGUkVOVEVECQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlfZ2V0RHVja1JlbnRlZEJ5AQUGZHVja0lkCQClCAEIBQFpBmNhbGxlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHRvcFVwUmV3YXJkcwMUZHVja0lkQW5kQW1vdW50c0xpc3QHYW1vdW50cwdhc3NldElkCgELaGFuZGxlVG9wVXACA2FjYw9kdWNrSWRBbmRBbW91bnQECnNwbGl0QXJyYXkJALUJAgUPZHVja0lkQW5kQW1vdW50AgE6BAZkdWNrSWQJAJEDAgUKc3BsaXRBcnJheQAABAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzcGxpdEFycmF5AAEECWR1Y2tPd25lcgkBDHRyeUdldFN0cmluZwEJARBrZXlfZ2V0RHVja093bmVyAQUGZHVja0lkBAZyZW50ZXIJAQx0cnlHZXRTdHJpbmcBCQETa2V5X2dldER1Y2tSZW50ZWRCeQEFBmR1Y2tJZAQNZmVlUGVyY2VudGFnZQkBDXRyeUdldEludGVnZXIBCQEVa2V5X2dldER1Y2tQZXJjZW50YWdlAQUGZHVja0lkBA5mb3JPd25lckFtb3VudAkAawMFBmFtb3VudAUNZmVlUGVyY2VudGFnZQBkBA9mb3JQbGF5ZXJBbW91bnQJAGUCBQZhbW91bnQFDmZvck93bmVyQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWR1Y2tPd25lcgkAaAIFDmZvck93bmVyQW1vdW50AKCNBgkA2QQBBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBnJlbnRlcgkAaAIFD2ZvclBsYXllckFtb3VudACgjQYJANkEAQUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleV9nZXREdWNrTGFzdFBhaWQBBQZkdWNrSWQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwKAAIkbAUUZHVja0lkQW5kQW1vdW50c0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2hhbmRsZVRvcFVwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwFpAQ1jbGFpbUR1Y2tCYWNrAQZkdWNrSWQECWR1Y2tPd25lcgkBDHRyeUdldFN0cmluZwEJARBrZXlfZ2V0RHVja093bmVyAQUGZHVja0lkAwkBAiE9AgUJZHVja093bmVyCQClCAEIBQFpBmNhbGxlcgkAAgECMlJDREI6IFBsZWFzZSBkb24ndCB0cnkgdG8gc3RlYWwgc29tZW9uZSBlbHNlIGR1Y2shAwMJAQ10cnlHZXRCb29sZWFuAQkBHGtleV9nYW1lUHJlRnVuZGVkSXRlbUZvckR1Y2sBBQZkdWNrSWQDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBDmdldEh1bnRBZGRyZXNzAAkBG3N0YXRpY0tleV9hY2Nlc3NJdGVtQXNzZXRJZAAGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBDmdldEh1bnRBZGRyZXNzAAkBGXN0YXRpY0tleV9hY2Nlc3NJdGVtUHJpY2UABwkAAgECRlBsZWFzZSBtYWtlIHN1cmUgdG8gYXR0YWNoIGVub3VnaCBmdW5kcyB0byBwYXkgZm9yIHlvdXIgcHJldmlvdXMgc3BvdCEECmR1Y2tTdGF0dXMJAQx0cnlHZXRTdHJpbmcBCQERa2V5X2dldER1Y2tTdGF0dXMBBQZkdWNrSWQDCQAAAgUKZHVja1N0YXR1cwIESURMRQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQZkdWNrSWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleV9nZXREdWNrU3RhdHVzAQUGZHVja0lkBQNuaWwEB3N0YXJ0VHMJAQ10cnlHZXRJbnRlZ2VyAQkBFGtleV9nZXREdWNrUmVudHN0YXJ0AQUGZHVja0lkAwkAZgIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQBkAgUHc3RhcnRUcwkBDXRyeUdldEludGVnZXIBCQETa2V5X2dldER1Y2tEdXJhdGlvbgEFBmR1Y2tJZAQGcGxheWVyCQEMdHJ5R2V0U3RyaW5nAQkBE2tleV9nZXREdWNrUmVudGVkQnkBBQZkdWNrSWQEDnJlbW92ZUZyb21IdW50CQD8BwQJAQ5nZXRIdW50QWRkcmVzcwACEXVubG9ja0R1Y2tSZW50aW5nCQDMCAIFBmR1Y2tJZAkAzAgCBQlkdWNrT3duZXIFA25pbAUDbmlsAwkAAAIFDnJlbW92ZUZyb21IdW50BQ5yZW1vdmVGcm9tSHVudAQMcmVmdW5kRmVlS2V5CQEUa2V5X2dldFJlZnVuZGFibGVGZWUCBQZwbGF5ZXIFBmR1Y2tJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQZwbGF5ZXIJAQ10cnlHZXRJbnRlZ2VyAQUMcmVmdW5kRmVlS2V5CQENZ2V0RWdnQXNzZXRJZAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQUMcmVmdW5kRmVlS2V5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWR1Y2tPd25lcgABCQDZBAEFBmR1Y2tJZAkAzAgCCQELRGVsZXRlRW50cnkBCQERa2V5X2dldER1Y2tTdGF0dXMBBQZkdWNrSWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBE2tleV9nZXREdWNrUmVudGVkQnkBBQZkdWNrSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQLbGFzdFBheW1lbnQJAQ10cnlHZXRJbnRlZ2VyAQkBE2tleV9nZXREdWNrTGFzdFBhaWQBBQZkdWNrSWQEDXRocmVlRGF5c0luTXMJAGgCCQBoAgkAaAIAAwAYADwA6AcDCQBmAggFCWxhc3RCbG9jawZoZWlnaHQJAGQCBQtsYXN0UGF5bWVudAUNdGhyZWVEYXlzSW5NcwQHdW5zdGFrZQkA/AcECQEOZ2V0SHVudEFkZHJlc3MAAhF1bmxvY2tEdWNrUmVudGluZwkAzAgCBQZkdWNrSWQJAMwIAgUJZHVja093bmVyBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWR1Y2tPd25lcgABCQDZBAEFBmR1Y2tJZAkAzAgCCQELRGVsZXRlRW50cnkBCQERa2V5X2dldER1Y2tTdGF0dXMBBQZkdWNrSWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBE2tleV9nZXREdWNrUmVudGVkQnkBBQZkdWNrSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECNlJDREI6IFJlbnRpbmcgcGVyaW9kIGlzIG5vdCBvdmVyIGFuZCBwbGF5ZXIgaXMgYWN0aXZlIQFpAQxzZW5kRHVja0JhY2sBBmR1Y2tJZAQIcmVudGVkQnkJAQx0cnlHZXRTdHJpbmcBCQETa2V5X2dldER1Y2tSZW50ZWRCeQEFBmR1Y2tJZAMJAQIhPQIFCHJlbnRlZEJ5CQClCAEIBQFpBmNhbGxlcgkAAgECIFJTREI6IFlvdSBkaWRuJ3QgcmVudCB0aGlzIGR1Y2shBAlkdWNrT3duZXIJAQx0cnlHZXRTdHJpbmcBCQEQa2V5X2dldER1Y2tPd25lcgEFBmR1Y2tJZAQMcmVmdW5kRmVlS2V5CQEUa2V5X2dldFJlZnVuZGFibGVGZWUCCQClCAEIBQFpBmNhbGxlcgUGZHVja0lkBA5yZW1vdmVGcm9tSHVudAkA/AcECQEOZ2V0SHVudEFkZHJlc3MAAhF1bmxvY2tEdWNrUmVudGluZwkAzAgCBQZkdWNrSWQJAMwIAgUJZHVja093bmVyBQNuaWwFA25pbAMJAAACBQ5yZW1vdmVGcm9tSHVudAUOcmVtb3ZlRnJvbUh1bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQENdHJ5R2V0SW50ZWdlcgEFDHJlZnVuZEZlZUtleQkBDWdldEVnZ0Fzc2V0SWQACQDMCAIJAQtEZWxldGVFbnRyeQEFDHJlZnVuZEZlZUtleQkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5X2dldER1Y2tTdGF0dXMBBQZkdWNrSWQCBElETEUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleV9nZXREdWNrU3RhdHVzAQUGZHVja0lkCQDMCAIJAQtEZWxldGVFbnRyeQEJARNrZXlfZ2V0RHVja1JlbnRlZEJ5AQUGZHVja0lkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg9SQ086IGFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAUGb3JhY2xlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXc3RhdGljS2V5X21pblBlcmNlbnRhZ2UAAAUJAMwIAgkBDEludGVnZXJFbnRyeQIJARdzdGF0aWNLZXlfbWF4UGVyY2VudGFnZQAAUAUDbmlsANqL1pg=", "height": 3556951, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7FpBjpa8zsobXihB5uLQULrDbcfHkxU2MNxS7f9ueHBh Next: HzHrcAtgB8GE3ZbKdBSxhEp2rbGNaQiRJyW5NBfgFJPd Diff:
OldNewDifferences
138138 }
139139
140140
141+func tryGetBoolean (key) = match getBoolean(key) {
142+ case b: Boolean =>
143+ b
144+ case _ =>
145+ false
146+}
147+
148+
141149 @Callable(i)
142150 func putForRent (durationInMs,percentage) = putForRentInternal(i, durationInMs, percentage)
143151
237245 let duckOwner = tryGetString(key_getDuckOwner(duckId))
238246 if ((duckOwner != toString(i.caller)))
239247 then throw("RCDB: Please don't try to steal someone else duck!")
240- else {
241- let duckStatus = tryGetString(key_getDuckStatus(duckId))
242- if ((duckStatus == "IDLE"))
243- then [ScriptTransfer(i.caller, 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId))]
244- else {
245- let startTs = tryGetInteger(key_getDuckRentstart(duckId))
246- if ((lastBlock.timestamp > (startTs + tryGetInteger(key_getDuckDuration(duckId)))))
247- then {
248- let player = tryGetString(key_getDuckRentedBy(duckId))
249- let removeFromHunt = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
250- if ((removeFromHunt == removeFromHunt))
251- then {
252- let refundFeeKey = key_getRefundableFee(player, duckId)
248+ else if (if (tryGetBoolean(key_gamePreFundedItemForDuck(duckId)))
249+ then if ((i.payments[0].assetId != fromBase58String(tryGetStringExternal(getHuntAddress(), staticKey_accessItemAssetId()))))
250+ then true
251+ else (i.payments[0].amount != getIntegerValue(getHuntAddress(), staticKey_accessItemPrice()))
252+ else false)
253+ then throw("Please make sure to attach enough funds to pay for your previous spot!")
254+ else {
255+ let duckStatus = tryGetString(key_getDuckStatus(duckId))
256+ if ((duckStatus == "IDLE"))
257+ then [ScriptTransfer(i.caller, 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId))]
258+ else {
259+ let startTs = tryGetInteger(key_getDuckRentstart(duckId))
260+ if ((lastBlock.timestamp > (startTs + tryGetInteger(key_getDuckDuration(duckId)))))
261+ then {
262+ let player = tryGetString(key_getDuckRentedBy(duckId))
263+ let removeFromHunt = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
264+ if ((removeFromHunt == removeFromHunt))
265+ then {
266+ let refundFeeKey = key_getRefundableFee(player, duckId)
253267 [ScriptTransfer(addressFromStringValue(player), tryGetInteger(refundFeeKey), getEggAssetId()), DeleteEntry(refundFeeKey), ScriptTransfer(addressFromStringValue(duckOwner), 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
254- }
255- else throw("Strict value is not equal to itself.")
256- }
257- else {
258- let lastPayment = tryGetInteger(key_getDuckLastPaid(duckId))
259- let threeDaysInMs = (((3 * 24) * 60) * 1000)
260- if ((lastBlock.height > (lastPayment + threeDaysInMs)))
261- then {
262- let unstake = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
263- if ((unstake == unstake))
264- then [ScriptTransfer(addressFromStringValue(duckOwner), 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
265- else throw("Strict value is not equal to itself.")
266- }
267- else throw("RCDB: Renting period is not over and player is active!")
268- }
269- }
270- }
268+ }
269+ else throw("Strict value is not equal to itself.")
270+ }
271+ else {
272+ let lastPayment = tryGetInteger(key_getDuckLastPaid(duckId))
273+ let threeDaysInMs = (((3 * 24) * 60) * 1000)
274+ if ((lastBlock.height > (lastPayment + threeDaysInMs)))
275+ then {
276+ let unstake = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
277+ if ((unstake == unstake))
278+ then [ScriptTransfer(addressFromStringValue(duckOwner), 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
279+ else throw("Strict value is not equal to itself.")
280+ }
281+ else throw("RCDB: Renting period is not over and player is active!")
282+ }
283+ }
284+ }
271285 }
272286
273287
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func staticKey_oracleAddress () = "static_oracleAddress"
55
66
77 func staticKey_huntAddress () = "static_huntAddress"
88
99
1010 func staticKey_breederAddress () = "static_breederAddress"
1111
1212
1313 func staticKey_eggAssetId () = "static_eggAssetId"
1414
1515
1616 func staticKey_minPercentage () = "static_minPercentage"
1717
1818
1919 func staticKey_maxPercentage () = "static_maxPercentage"
2020
2121
2222 func staticKey_accessItemAssetId () = "static_accessItemAssetId"
2323
2424
2525 func staticKey_accessItemPrice () = "static_accessItemPrice"
2626
2727
2828 func key_getDuckOwner (duck) = (("duck_" + duck) + "_owner")
2929
3030
3131 func key_getDuckStatus (duck) = (("duck_" + duck) + "_status")
3232
3333
3434 func key_getDuckRentedBy (duck) = (("duck_" + duck) + "_rentedBy")
3535
3636
3737 func key_getDuckDuration (duck) = (("duck_" + duck) + "_duration")
3838
3939
4040 func key_getDuckRentstart (duck) = (("duck_" + duck) + "_start_ts")
4141
4242
4343 func key_getDuckPercentage (duck) = (("duck_" + duck) + "_percentage")
4444
4545
4646 func key_getDuckLastPaid (duck) = (("duck_" + duck) + "_lastPaid")
4747
4848
4949 func key_getTotalRented (user) = (("rented_" + user) + "_amount")
5050
5151
5252 func key_getTotalBoughtExtraSpots (user) = (("spots_" + user) + "_amount")
5353
5454
5555 func key_getRefundableFee (user,duck) = (("spots_" + user) + "_amount")
5656
5757
5858 func key_gamePreFundedItemForDuck (duck) = ("access_funded_" + duck)
5959
6060
6161 func key_spotsBought (addressStr) = (("address_" + addressStr) + "_spotsBought")
6262
6363
6464 func key_spotsBusy (addressStr) = (("address_" + addressStr) + "_spotsBusy")
6565
6666
6767 func tryGetStringExternal (address,key) = match getString(address, key) {
6868 case a: String =>
6969 a
7070 case _ =>
7171 ""
7272 }
7373
7474
7575 func tryGetString (key) = tryGetStringExternal(this, key)
7676
7777
7878 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
7979 case b: Int =>
8080 b
8181 case _ =>
8282 0
8383 }
8484
8585
8686 func tryGetInteger (key) = tryGetIntegerExternal(this, key)
8787
8888
8989 func asInt (value) = match value {
9090 case int: Int =>
9191 int
9292 case _ =>
9393 throw("RAI: wrong type, expected: Int")
9494 }
9595
9696
9797 let Generations = ["G", "H", "I", "K", "L", "M", "N", "O"]
9898
9999 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
100100
101101
102102 func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_huntAddress())))
103103
104104
105105 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
106106
107107
108108 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
109109
110110
111111 func getAccessItemAssetId () = fromBase58String(tryGetStringExternal(getHuntAddress(), staticKey_accessItemAssetId()))
112112
113113
114114 func getAccessItemPrice () = tryGetIntegerExternal(getHuntAddress(), "static_accessItemPrice")
115115
116116
117117 func putForRentInternal (i,durationInMs,percentage) = {
118118 let firstPayment = value(i.payments[0])
119119 let duckId = toBase58String(value(firstPayment.assetId))
120120 if ((firstPayment.amount != 1))
121121 then throw("RPFR: NFT is not attached")
122122 else {
123123 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
124124 if ((children == children))
125125 then {
126126 let boughtSpots = tryGetIntegerExternal(getHuntAddress(), key_spotsBought(toString(i.caller)))
127127 let busySpots = tryGetIntegerExternal(getHuntAddress(), key_spotsBusy(toString(i.caller)))
128128 if ((busySpots >= boughtSpots))
129129 then throw(((((((("RPFR: No free spots! " + toString(busySpots)) + " ") + toString(boughtSpots)) + " ") + toString(i.caller)) + " ") + toString(getHuntAddress())))
130130 else if (if ((percentage > getIntegerValue(this, staticKey_maxPercentage())))
131131 then true
132132 else (getIntegerValue(this, staticKey_minPercentage()) > percentage))
133133 then throw((((("RPFR: please pick a percentage between " + staticKey_minPercentage()) + " and ") + staticKey_maxPercentage()) + "%"))
134134 else [IntegerEntry(key_getDuckPercentage(duckId), percentage), IntegerEntry(key_getDuckDuration(duckId), durationInMs), StringEntry(key_getDuckOwner(duckId), toString(i.caller)), StringEntry(key_getDuckStatus(duckId), "IDLE")]
135135 }
136136 else throw("Strict value is not equal to itself.")
137137 }
138138 }
139139
140140
141+func tryGetBoolean (key) = match getBoolean(key) {
142+ case b: Boolean =>
143+ b
144+ case _ =>
145+ false
146+}
147+
148+
141149 @Callable(i)
142150 func putForRent (durationInMs,percentage) = putForRentInternal(i, durationInMs, percentage)
143151
144152
145153
146154 @Callable(i)
147155 func buyGlassesAndPutForRent (durationInMs,percentage) = {
148156 let buyGlasses = invoke(getHuntAddress(), "buyAccessItem()", nil, [i.payments[1]])
149157 if ((buyGlasses == buyGlasses))
150158 then putForRentInternal(i, durationInMs, percentage)
151159 else throw("Strict value is not equal to itself.")
152160 }
153161
154162
155163
156164 @Callable(i)
157165 func rentDuckFromUser (duckId,game) = {
158166 let genes = split(value(assetInfo(fromBase58String(duckId))).name, "")
159167 let generation = genes[14]
160168 let fee = (value(indexOf(Generations, generation)) + (1 * 50000000))
161169 let pmt = value(i.payments[0])
162170 if ((value(pmt.assetId) != getEggAssetId()))
163171 then throw("TBT: Please attach the correct payment!")
164172 else if ((pmt.amount != fee))
165173 then throw("RRDFU: Please attach enough refundable deposits!")
166174 else {
167175 let duckStatus = tryGetString(key_getDuckStatus(duckId))
168176 if ((duckStatus != "IDLE"))
169177 then throw(("RRDFU: You can only rent ducks with IDLE status. Current status: " + duckStatus))
170178 else {
171179 let duckOwner = tryGetString(key_getDuckOwner(duckId))
172180 let boughtSpots = tryGetIntegerExternal(getHuntAddress(), key_spotsBought(duckOwner))
173181 let busySpots = tryGetIntegerExternal(getHuntAddress(), key_spotsBusy(duckOwner))
174182 let buySpotIfNeeded = if ((busySpots >= boughtSpots))
175183 then {
176184 let call = invoke(getHuntAddress(), "buyAccessItemOther", [duckOwner], [AttachedPayment(fromBase58String(tryGetStringExternal(getHuntAddress(), staticKey_accessItemAssetId())), getIntegerValue(getHuntAddress(), staticKey_accessItemPrice()))])
177185 if ((call == call))
178186 then [BooleanEntry(key_gamePreFundedItemForDuck(duckId), true)]
179187 else throw("Strict value is not equal to itself.")
180188 }
181189 else nil
182190 if ((game != "HUNT"))
183191 then throw("RRDFU: Unsupported game!")
184192 else {
185193 let startTs = lastBlock.timestamp
186194 let sendToHuntData = invoke(getHuntAddress(), "lockDuckRenting", [duckOwner], [AttachedPayment(fromBase58String(duckId), 1)])
187195 if ((sendToHuntData == sendToHuntData))
188196 then {
189197 let amountRentedKey = key_getTotalRented(toString(i.caller))
190198 let boughtKey = key_getTotalBoughtExtraSpots(toString(i.caller))
191199 let newAmountRented = (tryGetInteger(amountRentedKey) + 1)
192200 let totalSpots = (tryGetInteger(boughtKey) + 5)
193201 if ((newAmountRented > totalSpots))
194202 then throw(("RRDFU: You already rented max amount of ducks! " + toString(totalSpots)))
195203 else [IntegerEntry(key_getDuckRentstart(duckId), startTs), IntegerEntry(key_getRefundableFee(toString(i.caller), duckId), fee), IntegerEntry(amountRentedKey, newAmountRented), StringEntry(key_getDuckStatus(duckId), "RENTED"), StringEntry(key_getDuckRentedBy(duckId), toString(i.caller))]
196204 }
197205 else throw("Strict value is not equal to itself.")
198206 }
199207 }
200208 }
201209 }
202210
203211
204212
205213 @Callable(i)
206214 func topUpRewards (duckIdAndAmountsList,amounts,assetId) = {
207215 func handleTopUp (acc,duckIdAndAmount) = {
208216 let splitArray = split(duckIdAndAmount, ":")
209217 let duckId = splitArray[0]
210218 let amount = parseIntValue(splitArray[1])
211219 let duckOwner = tryGetString(key_getDuckOwner(duckId))
212220 let renter = tryGetString(key_getDuckRentedBy(duckId))
213221 let feePercentage = tryGetInteger(key_getDuckPercentage(duckId))
214222 let forOwnerAmount = fraction(amount, feePercentage, 100)
215223 let forPlayerAmount = (amount - forOwnerAmount)
216224 [ScriptTransfer(addressFromStringValue(duckOwner), (forOwnerAmount * 100000), fromBase58String(assetId)), ScriptTransfer(addressFromStringValue(renter), (forPlayerAmount * 100000), fromBase58String(assetId)), IntegerEntry(key_getDuckLastPaid(duckId), lastBlock.timestamp)]
217225 }
218226
219227 let $l = duckIdAndAmountsList
220228 let $s = size($l)
221229 let $acc0 = nil
222230 func $f0_1 ($a,$i) = if (($i >= $s))
223231 then $a
224232 else handleTopUp($a, $l[$i])
225233
226234 func $f0_2 ($a,$i) = if (($i >= $s))
227235 then $a
228236 else throw("List size exceeds 15")
229237
230238 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($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), 11), 12), 13), 14), 15)
231239 }
232240
233241
234242
235243 @Callable(i)
236244 func claimDuckBack (duckId) = {
237245 let duckOwner = tryGetString(key_getDuckOwner(duckId))
238246 if ((duckOwner != toString(i.caller)))
239247 then throw("RCDB: Please don't try to steal someone else duck!")
240- else {
241- let duckStatus = tryGetString(key_getDuckStatus(duckId))
242- if ((duckStatus == "IDLE"))
243- then [ScriptTransfer(i.caller, 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId))]
244- else {
245- let startTs = tryGetInteger(key_getDuckRentstart(duckId))
246- if ((lastBlock.timestamp > (startTs + tryGetInteger(key_getDuckDuration(duckId)))))
247- then {
248- let player = tryGetString(key_getDuckRentedBy(duckId))
249- let removeFromHunt = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
250- if ((removeFromHunt == removeFromHunt))
251- then {
252- let refundFeeKey = key_getRefundableFee(player, duckId)
248+ else if (if (tryGetBoolean(key_gamePreFundedItemForDuck(duckId)))
249+ then if ((i.payments[0].assetId != fromBase58String(tryGetStringExternal(getHuntAddress(), staticKey_accessItemAssetId()))))
250+ then true
251+ else (i.payments[0].amount != getIntegerValue(getHuntAddress(), staticKey_accessItemPrice()))
252+ else false)
253+ then throw("Please make sure to attach enough funds to pay for your previous spot!")
254+ else {
255+ let duckStatus = tryGetString(key_getDuckStatus(duckId))
256+ if ((duckStatus == "IDLE"))
257+ then [ScriptTransfer(i.caller, 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId))]
258+ else {
259+ let startTs = tryGetInteger(key_getDuckRentstart(duckId))
260+ if ((lastBlock.timestamp > (startTs + tryGetInteger(key_getDuckDuration(duckId)))))
261+ then {
262+ let player = tryGetString(key_getDuckRentedBy(duckId))
263+ let removeFromHunt = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
264+ if ((removeFromHunt == removeFromHunt))
265+ then {
266+ let refundFeeKey = key_getRefundableFee(player, duckId)
253267 [ScriptTransfer(addressFromStringValue(player), tryGetInteger(refundFeeKey), getEggAssetId()), DeleteEntry(refundFeeKey), ScriptTransfer(addressFromStringValue(duckOwner), 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
254- }
255- else throw("Strict value is not equal to itself.")
256- }
257- else {
258- let lastPayment = tryGetInteger(key_getDuckLastPaid(duckId))
259- let threeDaysInMs = (((3 * 24) * 60) * 1000)
260- if ((lastBlock.height > (lastPayment + threeDaysInMs)))
261- then {
262- let unstake = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
263- if ((unstake == unstake))
264- then [ScriptTransfer(addressFromStringValue(duckOwner), 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
265- else throw("Strict value is not equal to itself.")
266- }
267- else throw("RCDB: Renting period is not over and player is active!")
268- }
269- }
270- }
268+ }
269+ else throw("Strict value is not equal to itself.")
270+ }
271+ else {
272+ let lastPayment = tryGetInteger(key_getDuckLastPaid(duckId))
273+ let threeDaysInMs = (((3 * 24) * 60) * 1000)
274+ if ((lastBlock.height > (lastPayment + threeDaysInMs)))
275+ then {
276+ let unstake = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
277+ if ((unstake == unstake))
278+ then [ScriptTransfer(addressFromStringValue(duckOwner), 1, fromBase58String(duckId)), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
279+ else throw("Strict value is not equal to itself.")
280+ }
281+ else throw("RCDB: Renting period is not over and player is active!")
282+ }
283+ }
284+ }
271285 }
272286
273287
274288
275289 @Callable(i)
276290 func sendDuckBack (duckId) = {
277291 let rentedBy = tryGetString(key_getDuckRentedBy(duckId))
278292 if ((rentedBy != toString(i.caller)))
279293 then throw("RSDB: You didn't rent this duck!")
280294 else {
281295 let duckOwner = tryGetString(key_getDuckOwner(duckId))
282296 let refundFeeKey = key_getRefundableFee(toString(i.caller), duckId)
283297 let removeFromHunt = invoke(getHuntAddress(), "unlockDuckRenting", [duckId, duckOwner], nil)
284298 if ((removeFromHunt == removeFromHunt))
285299 then [ScriptTransfer(i.caller, tryGetInteger(refundFeeKey), getEggAssetId()), DeleteEntry(refundFeeKey), StringEntry(key_getDuckStatus(duckId), "IDLE"), DeleteEntry(key_getDuckStatus(duckId)), DeleteEntry(key_getDuckRentedBy(duckId))]
286300 else throw("Strict value is not equal to itself.")
287301 }
288302 }
289303
290304
291305
292306 @Callable(i)
293307 func configureOracle (oracle) = if ((i.caller != this))
294308 then throw("RCO: admin only")
295309 else [StringEntry(staticKey_oracleAddress(), oracle), IntegerEntry(staticKey_minPercentage(), 5), IntegerEntry(staticKey_maxPercentage(), 80)]
296310
297311

github/deemru/w8io/873ac7e 
67.33 ms