tx · 2MBpJFiBayanqWMKJAbd5PozsxAJA2kqGJ7gqh2VrBNh

3NBwZbvD45CscLGF78qTaDRBZ7mDBHt3Yib:  -0.00900000 Waves

2022.08.26 14:58 [2201416] smart account 3NBwZbvD45CscLGF78qTaDRBZ7mDBHt3Yib > SELF 0.00000000 Waves

{ "type": 13, "id": "2MBpJFiBayanqWMKJAbd5PozsxAJA2kqGJ7gqh2VrBNh", "fee": 900000, "feeAssetId": null, "timestamp": 1661515136510, "version": 2, "chainId": 84, "sender": "3NBwZbvD45CscLGF78qTaDRBZ7mDBHt3Yib", "senderPublicKey": "3q3N8Kv49DbzNHyTB4A87UYz2DdquXCgP3GNCcD9Zj66", "proofs": [ "5eKhG6Lq8kQodinfrhuqoKTwk4aPCGPXYfaDXMJ1hE4HXvDewM4oLfEnkKEjuVLvc2cQAHzbXQ1P5WpkPxUkqth2" ], "script": "base64:BgJACAISDAoKCAgICAgBCAgBARIECgIICBIECgIIARIECgIBARIECgIICBIFCgMICAgSBAoCCAgSBAoCBAgSAwoBCDoAB3ZlcnNpb24CAzEuMAALQ09ORl9JTklUX0sCC2NvbmZpZ19pbml0AAtDT05GX0FNSU5fSwIMY29uZmlnX2FkbWluAA1DT05GX09SQUNMRV9LAg1jb25maWdfb3JhY2xlABNDT05GX0FSVFdPUktfREFQUF9LAhNjb25maWdfYXJ0d29ya19kYXBwABFDT05GX1VTRVJTX0RBUFBfSwIRY29uZmlnX3VzZXJzX2RhcHAAEENPTkZfRkVFX0FTU0VUX0sCEGNvbmZpZ19mZWVfYXNzZXQAEUNPTkZfRkVFX0FNT1VOVF9LAhFjb25maWdfZmVlX2Ftb3VudAAVQ09ORl9TV09QX1NJR05fREFQUF9LAhVjb25maWdfc3dvcF9zaWduX2RhcHAAFENPTkZfU1dPUF9FVEhfREFQUF9LAhRjb25maWdfc3dvcF9ldGhfZGFwcAAfQ09ORl9DT05GSVJNQVRJT05TX0ZST01fV0FWRVNfSwIfY29uZmlnX2NvbmZpcm1hdGlvbnNfZnJvbV93YXZlcwAdQ09ORl9DT05GSVJNQVRJT05TX0ZST01fRVRIX0sCHWNvbmZpZ19jb25maXJtYXRpb25zX2Zyb21fZXRoAA1kYXBwUnVubmluZ19LAhRjb25mX2RhcHBfaXNfcnVubmluZwAQbWFpbnRlbmFuY2VNU0dfSwIUY29uZl9tYWludGVuYW5jZV9tc2cAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWRhcHBSdW5uaW5nX0sGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRBtYWludGVuYW5jZU1TR19LAgAADXN0YXR1c19MT0NLRUQCBkxPQ0tFRAAPc3RhdHVzX1VOTE9DS0VEAghVTkxPQ0tFRAAOc3RhdHVzX1BFTkRJTkcCB1BFTkRJTkcADXN0YXR1c19DTE9TRUQCBkNMT1NFRAARY3JlYXRvclJlZ2lzdGVyZWQCClJFR0lTVEVSRUQAD2NyZWF0b3JWZXJpZmllZAIIVkVSSUZJRUQACmFydEZsYWdnZWQCB0ZMQUdHRUQACmFydElsbGVnYWwCB0lMTEVHQUwACmFydFBlbmRpbmcCD0NIQU5HRV9SRVFVSVJFRAAITkVUV09SS1MJAMwIAgIDRVRIBQNuaWwBDGtleU5GVHN0YXR1cwEFbmZ0SWQJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX3N0YXR1cwEOa2V5VHJhbnNmZXJORlQDBW5mdElkBHR4aWQGY2FsbGVyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJdHJhbnNmZXJfBQVuZnRJZAIBXwUEdHhpZAIBXwUGY2FsbGVyAA9rZXlGZWVOb25NaW50ZWQCD2Nvc3Rfbm9uX21pbnRlZAAMa2V5RmVlTWludGVkAgtjb3N0X21pbnRlZAEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcABWFkbWluCQEFdmFsdWUBCQERQGV4dHJOYXRpdmUoMTA2MikBCQEOZ2V0U3RyaW5nQnlLZXkBBQtDT05GX0FNSU5fSwAMYXJ0d29ya3NEYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQEFE0NPTkZfQVJUV09SS19EQVBQX0sACXVzZXJzRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBBRFDT05GX1VTRVJTX0RBUFBfSwAKb3JhY2xlQWRkcgkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBBQ1DT05GX09SQUNMRV9LABBmZWVBY2NlcHRlZEFzc2V0CQEOZ2V0U3RyaW5nQnlLZXkBBRBDT05GX0ZFRV9BU1NFVF9LABhmZWVBY2NlcHRlZEFtb3VudEZvclNpZ24JAQ9nZXRJbnRlZ2VyQnlLZXkBBRFDT05GX0ZFRV9BTU9VTlRfSwEXZ2V0U3RyaW5nRnJvbVVzZXJzQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQl1c2Vyc0RhcHAFA2tleQIAARpnZXRTdHJpbmdGcm9tQXJ0d29ya3NCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFDGFydHdvcmtzRGFwcAUDa2V5AgABGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCm9yYWNsZUFkZHIFA2tleQIbSW50ZWdlciB1bmRlZmluZWQgaW4gb3JhY2xlAQxhc3NldElzVmFsaWQBDGFzc2V0RGV0YWlscwMDAwkAAAIIBQxhc3NldERldGFpbHMIcXVhbnRpdHkAAQkAAAIIBQxhc3NldERldGFpbHMIZGVjaW1hbHMAAAcJAAACCAUMYXNzZXREZXRhaWxzCnJlaXNzdWFibGUHBwkAAAIIBQxhc3NldERldGFpbHMGaXNzdWVyBQxhcnR3b3Jrc0RhcHAHAQxpc1NpZ25BcnRORlQBAmlkBAxhc3NldERldGFpbHMJAQV2YWx1ZQEJAOwHAQUCaWQJAQxhc3NldElzVmFsaWQBBQxhc3NldERldGFpbHMBCWlzUGF5bWVudAEBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAgkAAgECGU5lZWQgdG8gYXR0YWNoIDIgcGF5bWVudHMEC25mdF9wYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECm5mdF9hbW91bnQJAQV2YWx1ZQEIBQtuZnRfcGF5bWVudAZhbW91bnQED2dhdGV3YXlfcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBA5nYXRld2F5X2Ftb3VudAkBBXZhbHVlAQgFD2dhdGV3YXlfcGF5bWVudAZhbW91bnQJAJYKBAULbmZ0X3BheW1lbnQFCm5mdF9hbW91bnQFD2dhdGV3YXlfcGF5bWVudAUOZ2F0ZXdheV9hbW91bnQABmlzSW5pdAkBC3ZhbHVlT3JFbHNlAgkBD2dldEJvb2xlYW5CeUtleQEFC0NPTkZfSU5JVF9LBwEJb3duZXJPbmx5AQFpBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyBAJpZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAphbGxvd2VkQXJyAwUGaXNJbml0CQDMCAIJAKUIAQUFYWRtaW4JAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkApQgBBQR0aGlzBQNuaWwJAQ9jb250YWluc0VsZW1lbnQCBQphbGxvd2VkQXJyBQZjYWxsZXIBDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABE2dldENyZWF0b3JGcm9tTkZUaWQBBW5mdGlkBAduZnREYXRhCQEaZ2V0U3RyaW5nRnJvbUFydHdvcmtzQnlLZXkBCQCsAgICBG5mdF8FBW5mdGlkBAdjcmVhdG9yCQCRAwIJALUJAgUHbmZ0RGF0YQIBXwAGBAVhcnRJZAkAkQMCCQC1CQIFB25mdERhdGECAV8ABQkAlAoCBQdjcmVhdG9yBQVhcnRJZAETZ2V0Q3JlYXRvckVSQzIwQWRkcgEEYWRkcgkBF2dldFN0cmluZ0Zyb21Vc2Vyc0J5S2V5AQkArAICAgt1c2VyX0VSQzIwXwUEYWRkcgEQZ2V0Q3JlYXRvclN0YXR1cwEEYWRkcgkBF2dldFN0cmluZ0Zyb21Vc2Vyc0J5S2V5AQkArAICAgx1c2VyX3N0YXR1c18FBGFkZHIBDGdldEFydFN0YXR1cwIFYXJ0SWQEYWRkcgkBGmdldFN0cmluZ0Zyb21BcnR3b3Jrc0J5S2V5AQkArAICCQCsAgIJAKwCAgIJYXJ0X2ZsYWdfBQVhcnRJZAIBXwUEYWRkcgEOaXNWYWxpZENyZWF0b3IBBnN0YXR1cwMJAAACBQZzdGF0dXMFEWNyZWF0b3JSZWdpc3RlcmVkBgkAAAIFBnN0YXR1cwUPY3JlYXRvclZlcmlmaWVkAQppc1ZhbGlkQXJ0AQZzdGF0dXMDAwkBAiE9AgUGc3RhdHVzBQphcnRGbGFnZ2VkCQECIT0CBQZzdGF0dXMFCmFydElsbGVnYWwHCQECIT0CBQZzdGF0dXMFCmFydFBlbmRpbmcHAQxpc0V2bUFkZHJlc3MBBGFkZHIDCQAAAgkAsQIBBQRhZGRyACoJAAACCQCvAgIFBGFkZHIAAgICMHgHARBzZXRTd29wRGFwcHNGdW5jAghzaWduRGFwcAdldGhEYXBwCQDMCAIJAQtTdHJpbmdFbnRyeQIFFUNPTkZfU1dPUF9TSUdOX0RBUFBfSwUIc2lnbkRhcHAJAMwIAgkBC1N0cmluZ0VudHJ5AgUUQ09ORl9TV09QX0VUSF9EQVBQX0sFB2V0aERhcHAFA25pbAEKc2V0RmVlRnVuYwIIZmVlQXNzZXQJZmVlQW1vdW50BAxhc3NldERldGFpbHMJAOwHAQkA2QQBBQhmZWVBc3NldAQHZGVjaW1hbAgJAQV2YWx1ZQEFDGFzc2V0RGV0YWlscwhkZWNpbWFscwQPYmFzZTEwRmVlQW1vdW50CQBsBgUJZmVlQW1vdW50AAAACgABBQdkZWNpbWFsBQZIQUxGVVAJAMwIAgkBC1N0cmluZ0VudHJ5AgUQQ09ORl9GRUVfQVNTRVRfSwUIZmVlQXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEUNPTkZfRkVFX0FNT1VOVF9LBQ9iYXNlMTBGZWVBbW91bnQFA25pbAEUc2V0Q29uZmlybWF0aW9uc0Z1bmMCEGNvbmZpcm1mcm9tV2F2ZXMOY29uZmlybWZyb21FdGgJAMwIAgkBDEludGVnZXJFbnRyeQIFH0NPTkZfQ09ORklSTUFUSU9OU19GUk9NX1dBVkVTX0sFEGNvbmZpcm1mcm9tV2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQIFHUNPTkZfQ09ORklSTUFUSU9OU19GUk9NX0VUSF9LBQ5jb25maXJtZnJvbUV0aAUDbmlsCQFpAQRpbml0CglhZG1pbkFkZHIKb3JhY2xlQWRkcgxhcnR3b3Jrc0RhcHAJdXNlcnNEYXBwCGZlZUFzc2V0CWZlZUFtb3VudAhzaWduRGFwcAdldGhEYXBwEGNvbmZpcm1mcm9tV2F2ZXMOY29uZmlybWZyb21FdGgDCQEJb3duZXJPbmx5AQUBaQQMc2V0U3dvcERhcHBzCQEQc2V0U3dvcERhcHBzRnVuYwIFCHNpZ25EYXBwBQdldGhEYXBwBAZzZXRGZWUJAQpzZXRGZWVGdW5jAgUIZmVlQXNzZXQFCWZlZUFtb3VudAQQc2V0Q29uZmlybWF0aW9ucwkBFHNldENvbmZpcm1hdGlvbnNGdW5jAgUQY29uZmlybWZyb21XYXZlcwUOY29uZmlybWZyb21FdGgJAM4IAgkAzggCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgULQ09ORl9BTUlOX0sFCWFkbWluQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQ1DT05GX09SQUNMRV9LBQpvcmFjbGVBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFE0NPTkZfQVJUV09SS19EQVBQX0sFDGFydHdvcmtzRGFwcAkAzAgCCQELU3RyaW5nRW50cnkCBRFDT05GX1VTRVJTX0RBUFBfSwUJdXNlcnNEYXBwCQDMCAIJAQxCb29sZWFuRW50cnkCBQtDT05GX0lOSVRfSwYFA25pbAUMc2V0U3dvcERhcHBzBQZzZXRGZWUFEHNldENvbmZpcm1hdGlvbnMJAAIBAgtOb3QgYWxsb3dlZAFpAQxzZXRTd29wRGFwcHMCCHNpZ25EYXBwB2V0aERhcHADCQEJb3duZXJPbmx5AQUBaQkBEHNldFN3b3BEYXBwc0Z1bmMCBQhzaWduRGFwcAUHZXRoRGFwcAkAAgECC05vdCBhbGxvd2VkAWkBBnNldEZlZQIIZmVlQXNzZXQJZmVlQW1vdW50AwkBCW93bmVyT25seQEFAWkJAQpzZXRGZWVGdW5jAgUIZmVlQXNzZXQFCWZlZUFtb3VudAkAAgECC05vdCBhbGxvd2VkAWkBEHNldENvbmZpcm1hdGlvbnMCEGNvbmZpcm1mcm9tV2F2ZXMOY29uZmlybWZyb21FdGgDCQEJb3duZXJPbmx5AQUBaQkBFHNldENvbmZpcm1hdGlvbnNGdW5jAgUQY29uZmlybWZyb21XYXZlcwUOY29uZmlybWZyb21FdGgJAAIBAgtOb3QgYWxsb3dlZAFpAQRsb2NrAglyZWNpcGllbnQHbmV0d29yawMJAQEhAQUGaXNJbml0CQACAQIOZEFwcCBub3QgcmVhZHkDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQhORVRXT1JLUwUHbmV0d29yawkAAgECFU5ldHdvcmsgbm90IHN1cHBvcnRlZAMJAQEhAQkBDGlzRXZtQWRkcmVzcwEFCXJlY2lwaWVudAkAAgECF1dyb25nIHJlY2lwaWVudCBhZGRyZXNzBAskdDA2NzgxNjgyMAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAULJHQwNjc4MTY4MjACXzEEBmNhbGxlcggFCyR0MDY3ODE2ODIwAl8yBARkYXRlCAULJHQwNjc4MTY4MjACXzMECyR0MDY4MjM2OTAwCQEJaXNQYXltZW50AQUBaQQLbmZ0X3BheW1lbnQIBQskdDA2ODIzNjkwMAJfMQQKbmZ0X2Ftb3VudAgFCyR0MDY4MjM2OTAwAl8yBA9nYXRld2F5X3BheW1lbnQIBQskdDA2ODIzNjkwMAJfMwQOZ2F0ZXdheV9hbW91bnQIBQskdDA2ODIzNjkwMAJfNAMJAQIhPQIFCm5mdF9hbW91bnQAAQkAAgECD05vIE5GVCBhdHRhY2hlZAQFbmZ0SWQDAwkBCWlzRGVmaW5lZAEIBQtuZnRfcGF5bWVudAdhc3NldElkCQEMaXNTaWduQXJ0TkZUAQkBBXZhbHVlAQgFC25mdF9wYXltZW50B2Fzc2V0SWQHCQDYBAEJAQV2YWx1ZQEIBQtuZnRfcGF5bWVudAdhc3NldElkCQACAQIbT25seSBTSUdOIEFydCBORlQgYWNjZXB0ZWQuBAskdDA3MTg3NzI2OQkBE2dldENyZWF0b3JGcm9tTkZUaWQBBQVuZnRJZAQHY3JlYXRvcggFCyR0MDcxODc3MjY5Al8xBAVhcnRJZAgFCyR0MDcxODc3MjY5Al8yAwkBASEBCQEOaXNWYWxpZENyZWF0b3IBCQEQZ2V0Q3JlYXRvclN0YXR1cwEFB2NyZWF0b3IJAAIBCQCsAgICE0NyZWF0b3Igc3RhdHVzIGlzIDoJARBnZXRDcmVhdG9yU3RhdHVzAQUHY3JlYXRvcgMJAQEhAQkBCmlzVmFsaWRBcnQBCQEMZ2V0QXJ0U3RhdHVzAgUFYXJ0SWQFB2NyZWF0b3IJAAIBCQCsAgICE0FydHdvcmsgc3RhdHVzIGlzIDoJAQxnZXRBcnRTdGF0dXMCBQVhcnRJZAUHY3JlYXRvcgQJZXJjMjBBZGRyCQETZ2V0Q3JlYXRvckVSQzIwQWRkcgEFB2NyZWF0b3IDCQAAAgkAsQIBBQllcmMyMEFkZHIAAAkAAgECLFRoaXMgYXJ0aXN0IGRpZG4ndCBhbGxvdyBjcm9zc2NoYWluIHRyYW5zZmVyBAluZnRTdGF0dXMJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlORlRzdGF0dXMBBQVuZnRJZAMDCQAAAgUJbmZ0U3RhdHVzBQ1zdGF0dXNfTE9DS0VEBgkAAAIFCW5mdFN0YXR1cwUOc3RhdHVzX1BFTkRJTkcJAAIBAhJORlQgYWxyZWFkeSBsb2NrZWQED2dhc0ZlZU5vbk1pbnRlZAkBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBBQ9rZXlGZWVOb25NaW50ZWQEDGdhc0ZlZU1pbnRlZAkBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBBQxrZXlGZWVNaW50ZWQECGlzTWludGVkAwkAAAIFCW5mdFN0YXR1cwUPc3RhdHVzX1VOTE9DS0VEBgcDAwkBASEBCQEJaXNEZWZpbmVkAQgFD2dhdGV3YXlfcGF5bWVudAdhc3NldElkBgkBAiE9AgkA2AQBCQEFdmFsdWUBCAUPZ2F0ZXdheV9wYXltZW50B2Fzc2V0SWQFEGZlZUFjY2VwdGVkQXNzZXQJAAIBAhNXcm9uZyBwYXltZW50IGFzc2V0AwMFCGlzTWludGVkCQBmAgUOZ2F0ZXdheV9hbW91bnQJAGQCBQxnYXNGZWVNaW50ZWQFGGZlZUFjY2VwdGVkQW1vdW50Rm9yU2lnbgcJAAIBAh5Xcm9uZyBwYXltZW50IGFtb3VudCB0byB1bmxvY2sDAwkBASEBBQhpc01pbnRlZAkAZgIFDmdhdGV3YXlfYW1vdW50CQBkAgUPZ2FzRmVlTm9uTWludGVkBRhmZWVBY2NlcHRlZEFtb3VudEZvclNpZ24HCQACAQInV3JvbmcgcGF5bWVudCBhbW91bnQgdG8gbWludCBhbmQgdW5sb2NrBBB1c2RuVG9Td2FwRm9yRXRoAwUIaXNNaW50ZWQFDGdhc0ZlZU1pbnRlZAUPZ2FzRmVlTm9uTWludGVkBBFzd2FwX3VzZG5fdG9fc2lnbgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBCQEOZ2V0U3RyaW5nQnlLZXkBBRVDT05GX1NXT1BfU0lHTl9EQVBQX0sCCGV4Y2hhbmdlCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFEGZlZUFjY2VwdGVkQXNzZXQFGGZlZUFjY2VwdGVkQW1vdW50Rm9yU2lnbgUDbmlsAwkAAAIFEXN3YXBfdXNkbl90b19zaWduBRFzd2FwX3VzZG5fdG9fc2lnbgQQc3dhcF91c2RuX3RvX2V0aAkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBCQEOZ2V0U3RyaW5nQnlLZXkBBRRDT05GX1NXT1BfRVRIX0RBUFBfSwIIZXhjaGFuZ2UJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUQZmVlQWNjZXB0ZWRBc3NldAUQdXNkblRvU3dhcEZvckV0aAUDbmlsAwkAAAIFEHN3YXBfdXNkbl90b19ldGgFEHN3YXBfdXNkbl90b19ldGgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleU5GVHN0YXR1cwEFBW5mdElkBQ5zdGF0dXNfUEVORElORwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkBDmtleVRyYW5zZmVyTkZUAwUFbmZ0SWQFAmlkBQZjYWxsZXICAV8FDnN0YXR1c19QRU5ESU5HCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQlyZWNpcGllbnQCAV8FB25ldHdvcmsCAV8FBmNhbGxlcgIBXwUCaWQCAV8ICQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEIBQtuZnRfcGF5bWVudAdhc3NldElkBG5hbWUCAV8JAKQDAQUEZGF0ZQIBXwkApAMBBQZoZWlnaHQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjb25maXJtTG9jawMFbmZ0SWQKdHJhbnNmZXJJZAZjYWxsZXIDCQEBIQEFBmlzSW5pdAkAAgECDmRBcHAgbm90IHJlYWR5AwkBCW93bmVyT25seQEFAWkECW5mdFN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDGtleU5GVHN0YXR1cwEFBW5mdElkAwkBAiE9AgUJbmZ0U3RhdHVzBQ5zdGF0dXNfUEVORElORwkAAgECD05GVCBub3QgcGVuZGluZwQDdmFsCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIJAKwCAgkBDmtleVRyYW5zZmVyTkZUAwUFbmZ0SWQFCnRyYW5zZmVySWQFBmNhbGxlcgIBXwUOc3RhdHVzX1BFTkRJTkcEBm5ld0tleQkArAICCQCsAgIJAQ5rZXlUcmFuc2Zlck5GVAMFBW5mdElkBQp0cmFuc2ZlcklkBQZjYWxsZXICAV8FDXN0YXR1c19DTE9TRUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAQ5rZXlUcmFuc2Zlck5GVAMFBW5mdElkBQp0cmFuc2ZlcklkBQZjYWxsZXICAV8FDnN0YXR1c19QRU5ESU5HCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm5ld0tleQUDdmFsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlORlRzdGF0dXMBBQVuZnRJZAUNc3RhdHVzX0xPQ0tFRAUDbmlsCQACAQILTm90IGFsbG93ZWQBaQEGdW5sb2NrAglyZWNpcGllbnQFbmZ0SWQDCQEBIQEFBmlzSW5pdAkAAgECDmRBcHAgbm90IHJlYWR5AwkBCW93bmVyT25seQEFAWkECW5mdFN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDGtleU5GVHN0YXR1cwEFBW5mdElkAwkBAiE9AgUJbmZ0U3RhdHVzBQ1zdGF0dXNfTE9DS0VECQACAQIpTkZUIG5vdCBsb2NrZWQsIGZpbmFsaXplIGZpcnN0IGlmIHBlbmRpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleU5GVHN0YXR1cwEFBW5mdElkBQ9zdGF0dXNfVU5MT0NLRUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCXJlY2lwaWVudAABCQDZBAEFBW5mdElkBQNuaWwJAAIBAgtOb3QgYWxsb3dlZAFpAQphcHBSdW5uaW5nAgZpc0xpdmUHbWVzc2FnZQMJAQEhAQUGaXNJbml0CQACAQIOZEFwcCBub3QgcmVhZHkDCQEJb3duZXJPbmx5AQUBaQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNZGFwcFJ1bm5pbmdfSwUGaXNMaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFEG1haW50ZW5hbmNlTVNHX0sFB21lc3NhZ2UFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQELZGVsZXRlRW50cnkBBWVudHJ5AwkBCW93bmVyT25seQEFAWkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUFZW50cnkFA25pbAkAAgECAm5vAGbJnxU=", "height": 2201416, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3uBZC5nWpDSyeuRW1Q791TGYXA6m6tE7aBXb7ykGxep5 Next: 45Bt8N9suyfqKfoLjzTtKbPAHvzkQ3u9FUH9MKos9dZH Diff:
OldNewDifferences
2020 let CONF_SWOP_SIGN_DAPP_K = "config_swop_sign_dapp"
2121
2222 let CONF_SWOP_ETH_DAPP_K = "config_swop_eth_dapp"
23+
24+let CONF_CONFIRMATIONS_FROM_WAVES_K = "config_confirmations_from_waves"
25+
26+let CONF_CONFIRMATIONS_FROM_ETH_K = "config_confirmations_from_eth"
2327
2428 let dappRunning_K = "conf_dapp_is_running"
2529
177181 }
178182
179183
184+func setConfirmationsFunc (confirmfromWaves,confirmfromEth) = [IntegerEntry(CONF_CONFIRMATIONS_FROM_WAVES_K, confirmfromWaves), IntegerEntry(CONF_CONFIRMATIONS_FROM_ETH_K, confirmfromEth)]
185+
186+
180187 @Callable(i)
181-func init (adminAddr,oracleAddr,artworksDapp,usersDapp,feeAsset,feeAmount,signDapp,ethDapp) = if (ownerOnly(i))
188+func init (adminAddr,oracleAddr,artworksDapp,usersDapp,feeAsset,feeAmount,signDapp,ethDapp,confirmfromWaves,confirmfromEth) = if (ownerOnly(i))
182189 then {
183190 let setSwopDapps = setSwopDappsFunc(signDapp, ethDapp)
184191 let setFee = setFeeFunc(feeAsset, feeAmount)
185- (([StringEntry(CONF_AMIN_K, adminAddr), StringEntry(CONF_ORACLE_K, oracleAddr), StringEntry(CONF_ARTWORK_DAPP_K, artworksDapp), StringEntry(CONF_USERS_DAPP_K, usersDapp), BooleanEntry(CONF_INIT_K, true)] ++ setSwopDapps) ++ setFee)
192+ let setConfirmations = setConfirmationsFunc(confirmfromWaves, confirmfromEth)
193+ ((([StringEntry(CONF_AMIN_K, adminAddr), StringEntry(CONF_ORACLE_K, oracleAddr), StringEntry(CONF_ARTWORK_DAPP_K, artworksDapp), StringEntry(CONF_USERS_DAPP_K, usersDapp), BooleanEntry(CONF_INIT_K, true)] ++ setSwopDapps) ++ setFee) ++ setConfirmations)
186194 }
187195 else throw("Not allowed")
188196
203211
204212
205213 @Callable(i)
214+func setConfirmations (confirmfromWaves,confirmfromEth) = if (ownerOnly(i))
215+ then setConfirmationsFunc(confirmfromWaves, confirmfromEth)
216+ else throw("Not allowed")
217+
218+
219+
220+@Callable(i)
206221 func lock (recipient,network) = if (!(isInit))
207222 then throw("dApp not ready")
208223 else if (!(containsElement(NETWORKS, network)))
210225 else if (!(isEvmAddress(recipient)))
211226 then throw("Wrong recipient address")
212227 else {
213- let $t060776116 = idCallerDate(i)
214- let id = $t060776116._1
215- let caller = $t060776116._2
216- let date = $t060776116._3
217- let $t061196196 = isPayment(i)
218- let nft_payment = $t061196196._1
219- let nft_amount = $t061196196._2
220- let gateway_payment = $t061196196._3
221- let gateway_amount = $t061196196._4
228+ let $t067816820 = idCallerDate(i)
229+ let id = $t067816820._1
230+ let caller = $t067816820._2
231+ let date = $t067816820._3
232+ let $t068236900 = isPayment(i)
233+ let nft_payment = $t068236900._1
234+ let nft_amount = $t068236900._2
235+ let gateway_payment = $t068236900._3
236+ let gateway_amount = $t068236900._4
222237 if ((nft_amount != 1))
223238 then throw("No NFT attached")
224239 else {
227242 else false)
228243 then toBase58String(value(nft_payment.assetId))
229244 else throw("Only SIGN Art NFT accepted.")
230- let $t064836565 = getCreatorFromNFTid(nftId)
231- let creator = $t064836565._1
232- let artId = $t064836565._2
245+ let $t071877269 = getCreatorFromNFTid(nftId)
246+ let creator = $t071877269._1
247+ let artId = $t071877269._2
233248 if (!(isValidCreator(getCreatorStatus(creator))))
234249 then throw(("Creator status is :" + getCreatorStatus(creator)))
235250 else if (!(isValidArt(getArtStatus(artId, creator))))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = "1.0"
55
66 let CONF_INIT_K = "config_init"
77
88 let CONF_AMIN_K = "config_admin"
99
1010 let CONF_ORACLE_K = "config_oracle"
1111
1212 let CONF_ARTWORK_DAPP_K = "config_artwork_dapp"
1313
1414 let CONF_USERS_DAPP_K = "config_users_dapp"
1515
1616 let CONF_FEE_ASSET_K = "config_fee_asset"
1717
1818 let CONF_FEE_AMOUNT_K = "config_fee_amount"
1919
2020 let CONF_SWOP_SIGN_DAPP_K = "config_swop_sign_dapp"
2121
2222 let CONF_SWOP_ETH_DAPP_K = "config_swop_eth_dapp"
23+
24+let CONF_CONFIRMATIONS_FROM_WAVES_K = "config_confirmations_from_waves"
25+
26+let CONF_CONFIRMATIONS_FROM_ETH_K = "config_confirmations_from_eth"
2327
2428 let dappRunning_K = "conf_dapp_is_running"
2529
2630 let maintenanceMSG_K = "conf_maintenance_msg"
2731
2832 let dappRunning = valueOrElse(getBoolean(this, dappRunning_K), true)
2933
3034 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSG_K), "")
3135
3236 let status_LOCKED = "LOCKED"
3337
3438 let status_UNLOCKED = "UNLOCKED"
3539
3640 let status_PENDING = "PENDING"
3741
3842 let status_CLOSED = "CLOSED"
3943
4044 let creatorRegistered = "REGISTERED"
4145
4246 let creatorVerified = "VERIFIED"
4347
4448 let artFlagged = "FLAGGED"
4549
4650 let artIllegal = "ILLEGAL"
4751
4852 let artPending = "CHANGE_REQUIRED"
4953
5054 let NETWORKS = ["ETH"]
5155
5256 func keyNFTstatus (nftId) = (("nft_" + nftId) + "_status")
5357
5458
5559 func keyTransferNFT (nftId,txid,caller) = ((((("transfer_" + nftId) + "_") + txid) + "_") + caller)
5660
5761
5862 let keyFeeNonMinted = "cost_non_minted"
5963
6064 let keyFeeMinted = "cost_minted"
6165
6266 func getStringByKey (key) = valueOrElse(getString(this, key), "")
6367
6468
6569 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
6670
6771
6872 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
6973
7074
7175 let admin = value(addressFromStringValue(getStringByKey(CONF_AMIN_K)))
7276
7377 let artworksDapp = value(addressFromString(getStringByKey(CONF_ARTWORK_DAPP_K)))
7478
7579 let usersDapp = value(addressFromString(getStringByKey(CONF_USERS_DAPP_K)))
7680
7781 let oracleAddr = value(addressFromString(getStringByKey(CONF_ORACLE_K)))
7882
7983 let feeAcceptedAsset = getStringByKey(CONF_FEE_ASSET_K)
8084
8185 let feeAcceptedAmountForSign = getIntegerByKey(CONF_FEE_AMOUNT_K)
8286
8387 func getStringFromUsersByKey (key) = valueOrElse(getString(usersDapp, key), "")
8488
8589
8690 func getStringFromArtworksByKey (key) = valueOrElse(getString(artworksDapp, key), "")
8791
8892
8993 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleAddr, key), "Integer undefined in oracle")
9094
9195
9296 func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
9397 then (assetDetails.decimals == 0)
9498 else false)
9599 then (assetDetails.reissuable == false)
96100 else false)
97101 then (assetDetails.issuer == artworksDapp)
98102 else false
99103
100104
101105 func isSignArtNFT (id) = {
102106 let assetDetails = value(assetInfo(id))
103107 assetIsValid(assetDetails)
104108 }
105109
106110
107111 func isPayment (i) = if ((size(i.payments) != 2))
108112 then throw("Need to attach 2 payments")
109113 else {
110114 let nft_payment = value(i.payments[0])
111115 let nft_amount = value(nft_payment.amount)
112116 let gateway_payment = value(i.payments[1])
113117 let gateway_amount = value(gateway_payment.amount)
114118 $Tuple4(nft_payment, nft_amount, gateway_payment, gateway_amount)
115119 }
116120
117121
118122 let isInit = valueOrElse(getBooleanByKey(CONF_INIT_K), false)
119123
120124 func ownerOnly (i) = {
121125 let caller = toString(i.caller)
122126 let id = toBase58String(i.transactionId)
123127 let allowedArr = if (isInit)
124128 then [toString(admin), toString(this)]
125129 else [toString(this)]
126130 containsElement(allowedArr, caller)
127131 }
128132
129133
130134 func idCallerDate (i) = if (!(dappRunning))
131135 then throw(maintenanceMSG)
132136 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
133137
134138
135139 func getCreatorFromNFTid (nftid) = {
136140 let nftData = getStringFromArtworksByKey(("nft_" + nftid))
137141 let creator = split(nftData, "_")[6]
138142 let artId = split(nftData, "_")[5]
139143 $Tuple2(creator, artId)
140144 }
141145
142146
143147 func getCreatorERC20Addr (addr) = getStringFromUsersByKey(("user_ERC20_" + addr))
144148
145149
146150 func getCreatorStatus (addr) = getStringFromUsersByKey(("user_status_" + addr))
147151
148152
149153 func getArtStatus (artId,addr) = getStringFromArtworksByKey(((("art_flag_" + artId) + "_") + addr))
150154
151155
152156 func isValidCreator (status) = if ((status == creatorRegistered))
153157 then true
154158 else (status == creatorVerified)
155159
156160
157161 func isValidArt (status) = if (if ((status != artFlagged))
158162 then (status != artIllegal)
159163 else false)
160164 then (status != artPending)
161165 else false
162166
163167
164168 func isEvmAddress (addr) = if ((size(addr) == 42))
165169 then (take(addr, 2) == "0x")
166170 else false
167171
168172
169173 func setSwopDappsFunc (signDapp,ethDapp) = [StringEntry(CONF_SWOP_SIGN_DAPP_K, signDapp), StringEntry(CONF_SWOP_ETH_DAPP_K, ethDapp)]
170174
171175
172176 func setFeeFunc (feeAsset,feeAmount) = {
173177 let assetDetails = assetInfo(fromBase58String(feeAsset))
174178 let decimal = value(assetDetails).decimals
175179 let base10FeeAmount = pow(feeAmount, 0, 10, 1, decimal, HALFUP)
176180 [StringEntry(CONF_FEE_ASSET_K, feeAsset), IntegerEntry(CONF_FEE_AMOUNT_K, base10FeeAmount)]
177181 }
178182
179183
184+func setConfirmationsFunc (confirmfromWaves,confirmfromEth) = [IntegerEntry(CONF_CONFIRMATIONS_FROM_WAVES_K, confirmfromWaves), IntegerEntry(CONF_CONFIRMATIONS_FROM_ETH_K, confirmfromEth)]
185+
186+
180187 @Callable(i)
181-func init (adminAddr,oracleAddr,artworksDapp,usersDapp,feeAsset,feeAmount,signDapp,ethDapp) = if (ownerOnly(i))
188+func init (adminAddr,oracleAddr,artworksDapp,usersDapp,feeAsset,feeAmount,signDapp,ethDapp,confirmfromWaves,confirmfromEth) = if (ownerOnly(i))
182189 then {
183190 let setSwopDapps = setSwopDappsFunc(signDapp, ethDapp)
184191 let setFee = setFeeFunc(feeAsset, feeAmount)
185- (([StringEntry(CONF_AMIN_K, adminAddr), StringEntry(CONF_ORACLE_K, oracleAddr), StringEntry(CONF_ARTWORK_DAPP_K, artworksDapp), StringEntry(CONF_USERS_DAPP_K, usersDapp), BooleanEntry(CONF_INIT_K, true)] ++ setSwopDapps) ++ setFee)
192+ let setConfirmations = setConfirmationsFunc(confirmfromWaves, confirmfromEth)
193+ ((([StringEntry(CONF_AMIN_K, adminAddr), StringEntry(CONF_ORACLE_K, oracleAddr), StringEntry(CONF_ARTWORK_DAPP_K, artworksDapp), StringEntry(CONF_USERS_DAPP_K, usersDapp), BooleanEntry(CONF_INIT_K, true)] ++ setSwopDapps) ++ setFee) ++ setConfirmations)
186194 }
187195 else throw("Not allowed")
188196
189197
190198
191199 @Callable(i)
192200 func setSwopDapps (signDapp,ethDapp) = if (ownerOnly(i))
193201 then setSwopDappsFunc(signDapp, ethDapp)
194202 else throw("Not allowed")
195203
196204
197205
198206 @Callable(i)
199207 func setFee (feeAsset,feeAmount) = if (ownerOnly(i))
200208 then setFeeFunc(feeAsset, feeAmount)
201209 else throw("Not allowed")
202210
203211
204212
205213 @Callable(i)
214+func setConfirmations (confirmfromWaves,confirmfromEth) = if (ownerOnly(i))
215+ then setConfirmationsFunc(confirmfromWaves, confirmfromEth)
216+ else throw("Not allowed")
217+
218+
219+
220+@Callable(i)
206221 func lock (recipient,network) = if (!(isInit))
207222 then throw("dApp not ready")
208223 else if (!(containsElement(NETWORKS, network)))
209224 then throw("Network not supported")
210225 else if (!(isEvmAddress(recipient)))
211226 then throw("Wrong recipient address")
212227 else {
213- let $t060776116 = idCallerDate(i)
214- let id = $t060776116._1
215- let caller = $t060776116._2
216- let date = $t060776116._3
217- let $t061196196 = isPayment(i)
218- let nft_payment = $t061196196._1
219- let nft_amount = $t061196196._2
220- let gateway_payment = $t061196196._3
221- let gateway_amount = $t061196196._4
228+ let $t067816820 = idCallerDate(i)
229+ let id = $t067816820._1
230+ let caller = $t067816820._2
231+ let date = $t067816820._3
232+ let $t068236900 = isPayment(i)
233+ let nft_payment = $t068236900._1
234+ let nft_amount = $t068236900._2
235+ let gateway_payment = $t068236900._3
236+ let gateway_amount = $t068236900._4
222237 if ((nft_amount != 1))
223238 then throw("No NFT attached")
224239 else {
225240 let nftId = if (if (isDefined(nft_payment.assetId))
226241 then isSignArtNFT(value(nft_payment.assetId))
227242 else false)
228243 then toBase58String(value(nft_payment.assetId))
229244 else throw("Only SIGN Art NFT accepted.")
230- let $t064836565 = getCreatorFromNFTid(nftId)
231- let creator = $t064836565._1
232- let artId = $t064836565._2
245+ let $t071877269 = getCreatorFromNFTid(nftId)
246+ let creator = $t071877269._1
247+ let artId = $t071877269._2
233248 if (!(isValidCreator(getCreatorStatus(creator))))
234249 then throw(("Creator status is :" + getCreatorStatus(creator)))
235250 else if (!(isValidArt(getArtStatus(artId, creator))))
236251 then throw(("Artwork status is :" + getArtStatus(artId, creator)))
237252 else {
238253 let erc20Addr = getCreatorERC20Addr(creator)
239254 if ((size(erc20Addr) == 0))
240255 then throw("This artist didn't allow crosschain transfer")
241256 else {
242257 let nftStatus = getStringByKey(keyNFTstatus(nftId))
243258 if (if ((nftStatus == status_LOCKED))
244259 then true
245260 else (nftStatus == status_PENDING))
246261 then throw("NFT already locked")
247262 else {
248263 let gasFeeNonMinted = getIntegerByKeyFromOracle(keyFeeNonMinted)
249264 let gasFeeMinted = getIntegerByKeyFromOracle(keyFeeMinted)
250265 let isMinted = if ((nftStatus == status_UNLOCKED))
251266 then true
252267 else false
253268 if (if (!(isDefined(gateway_payment.assetId)))
254269 then true
255270 else (toBase58String(value(gateway_payment.assetId)) != feeAcceptedAsset))
256271 then throw("Wrong payment asset")
257272 else if (if (isMinted)
258273 then (gateway_amount > (gasFeeMinted + feeAcceptedAmountForSign))
259274 else false)
260275 then throw("Wrong payment amount to unlock")
261276 else if (if (!(isMinted))
262277 then (gateway_amount > (gasFeeNonMinted + feeAcceptedAmountForSign))
263278 else false)
264279 then throw("Wrong payment amount to mint and unlock")
265280 else {
266281 let usdnToSwapForEth = if (isMinted)
267282 then gasFeeMinted
268283 else gasFeeNonMinted
269284 let swap_usdn_to_sign = invoke(addressFromStringValue(getStringByKey(CONF_SWOP_SIGN_DAPP_K)), "exchange", [1], [AttachedPayment(fromBase58String(feeAcceptedAsset), feeAcceptedAmountForSign)])
270285 if ((swap_usdn_to_sign == swap_usdn_to_sign))
271286 then {
272287 let swap_usdn_to_eth = invoke(addressFromStringValue(getStringByKey(CONF_SWOP_ETH_DAPP_K)), "exchange", [1], [AttachedPayment(fromBase58String(feeAcceptedAsset), usdnToSwapForEth)])
273288 if ((swap_usdn_to_eth == swap_usdn_to_eth))
274289 then [StringEntry(keyNFTstatus(nftId), status_PENDING), StringEntry(((keyTransferNFT(nftId, id, caller) + "_") + status_PENDING), ((((((((((((recipient + "_") + network) + "_") + caller) + "_") + id) + "_") + value(assetInfo(value(nft_payment.assetId))).name) + "_") + toString(date)) + "_") + toString(height)))]
275290 else throw("Strict value is not equal to itself.")
276291 }
277292 else throw("Strict value is not equal to itself.")
278293 }
279294 }
280295 }
281296 }
282297 }
283298 }
284299
285300
286301
287302 @Callable(i)
288303 func confirmLock (nftId,transferId,caller) = if (!(isInit))
289304 then throw("dApp not ready")
290305 else if (ownerOnly(i))
291306 then {
292307 let nftStatus = getStringByKey(keyNFTstatus(nftId))
293308 if ((nftStatus != status_PENDING))
294309 then throw("NFT not pending")
295310 else {
296311 let val = getStringByKey(((keyTransferNFT(nftId, transferId, caller) + "_") + status_PENDING))
297312 let newKey = ((keyTransferNFT(nftId, transferId, caller) + "_") + status_CLOSED)
298313 [DeleteEntry(((keyTransferNFT(nftId, transferId, caller) + "_") + status_PENDING)), StringEntry(newKey, val), StringEntry(keyNFTstatus(nftId), status_LOCKED)]
299314 }
300315 }
301316 else throw("Not allowed")
302317
303318
304319
305320 @Callable(i)
306321 func unlock (recipient,nftId) = if (!(isInit))
307322 then throw("dApp not ready")
308323 else if (ownerOnly(i))
309324 then {
310325 let nftStatus = getStringByKey(keyNFTstatus(nftId))
311326 if ((nftStatus != status_LOCKED))
312327 then throw("NFT not locked, finalize first if pending")
313328 else [StringEntry(keyNFTstatus(nftId), status_UNLOCKED), ScriptTransfer(Address(fromBase58String(recipient)), 1, fromBase58String(nftId))]
314329 }
315330 else throw("Not allowed")
316331
317332
318333
319334 @Callable(i)
320335 func appRunning (isLive,message) = if (!(isInit))
321336 then throw("dApp not ready")
322337 else if (ownerOnly(i))
323338 then [BooleanEntry(dappRunning_K, isLive), StringEntry(maintenanceMSG_K, message)]
324339 else throw("You are not allowed to change this")
325340
326341
327342
328343 @Callable(i)
329344 func deleteEntry (entry) = if (ownerOnly(i))
330345 then [DeleteEntry(entry)]
331346 else throw("no")
332347
333348

github/deemru/w8io/3ef1775 
70.34 ms