tx · 43JW21EzuU76kDh5mg94yP4WkjwEgaiM5GYmFcs8roFF

3N43JYG2V93YFoqRKwVv8wdihrSAzLGAyE9:  -0.01800000 Waves

2022.11.03 12:23 [2300744] smart account 3N43JYG2V93YFoqRKwVv8wdihrSAzLGAyE9 > SELF 0.00000000 Waves

{ "type": 13, "id": "43JW21EzuU76kDh5mg94yP4WkjwEgaiM5GYmFcs8roFF", "fee": 1800000, "feeAssetId": null, "timestamp": 1667467429133, "version": 2, "chainId": 84, "sender": "3N43JYG2V93YFoqRKwVv8wdihrSAzLGAyE9", "senderPublicKey": "GZ21uawsKqsN4vtEvjBExAk9KuMX97aS3T8otU7RjFn", "proofs": [ "5qhdz4ZXdjK9MqVxx3HJRVXmuHkH7dBe5vUCyLP2SKrpTEvpaHYE5bWUhcEABmpKNtj6ubLXma6YxTBhu9ZNdxx" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgIKwAHVkVSU0lPTgIFMS4wLjABCWdldFN0ckJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAlvcmFjbGVGZWUJAQV2YWx1ZQEJAKYIAQkBCWdldFN0ckJ5SwECD2NvbmZfb3JhY2xlX2ZlZQALZmVlUmVjZWl2ZXIJAQlnZXRTdHJCeUsBAhFjb25mX2ZlZV9yZWNlaXZlcgAKZXZlbnRzRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQISY29uZl9hcnR3b3Jrc19kYXBwAAh1c2VyRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQIPY29uZl91c2Vyc19kYXBwAAtzaWduQXNzZXRJZAkA2QQBCQEJZ2V0U3RyQnlLAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAVjaHJpcwkBCWdldFN0ckJ5SwECDGNvbmZfYWRtaW5fMQAHc2lnbkN1dAADAAxvcmdhbml6ZXJDdXQACgANdXNlclN1c3BlbmRlZAIJU1VTUEVOREVEAAxldmVudElsbGVnYWwCB0lMTEVHQUwADmV2ZW50U3VzcGVuZGVkAglTVVNQRU5ERUQADmRhcHBSdW5uaW5nS2V5AhRjb25mX2RhcHBfaXNfcnVubmluZwARbWFpbnRlbmFuY2VNU0dLZXkCFGNvbmZfbWFpbnRlbmFuY2VfbXNnAAtkYXBwUnVubmluZwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ5kYXBwUnVubmluZ0tleQYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFEW1haW50ZW5hbmNlTVNHS2V5AgAACW51bVNhbGVzSwIJbnVtX3NhbGVzAQ1nZXRVc2VyU3RyQnlLAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAFA2tleQIFRXJyb3IBDmdldEV2ZW50U3RyQnlLAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUKZXZlbnRzRGFwcAUDa2V5AgABCWdldEludEJ5SwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQ1rZXlVc2VyU3RhdHVzAQRhZGRyCQCsAgICDHVzZXJfc3RhdHVzXwUEYWRkcgEHa2V5RmxhZwINb3JnYW5pemVyQWRkcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9mbGFnXwUHZXZlbnRJZAIBXwUNb3JnYW5pemVyQWRkcgEKa2V5TkZURGF0YQECaWQJAKwCAgIEbmZ0XwUCaWQBCmdldFNhbGVLZXkEBmNhbGxlcgh0aWNrZXRJZAdldmVudElkDW9yZ2FuaXplckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINc2FsZTJuZF9pbmZvXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAIBXwUHZXZlbnRJZAIBXwUNb3JnYW5pemVyQWRkcgEJZ2V0QmlkS2V5BApvZmZlck93bmVyCHRpY2tldElkCXNhbGVPd25lcgdvZmZlcklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCW9mZmVyMm5kXwUKb2ZmZXJPd25lcgIBXwUIdGlja2V0SWQCAV8FCXNhbGVPd25lcgIBXwUHb2ZmZXJJZAETZ2V0SW50QnlLRnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEMYXNzZXRJc1ZhbGlkAQxhc3NldERldGFpbHMDAwMJAAACCAUMYXNzZXREZXRhaWxzCHF1YW50aXR5AAEJAAACCAUMYXNzZXREZXRhaWxzCGRlY2ltYWxzAAAHCQAAAggFDGFzc2V0RGV0YWlscwpyZWlzc3VhYmxlBwcJAAACCAUMYXNzZXREZXRhaWxzBmlzc3VlcgUKZXZlbnRzRGFwcAcBDmlzU2lnbkV2ZW50TkZUAQJpZAQMYXNzZXREZXRhaWxzCQEFdmFsdWUBCQDsBwEFAmlkCQEMYXNzZXRJc1ZhbGlkAQUMYXNzZXREZXRhaWxzARBhY2NlcHRlZEFzc2V0SWRzAQdhc3NldElkAwkBAiE9AgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAcGAQ1nZXRCaWRBc3NldElkAQdhc3NldElkCQDZBAEFB2Fzc2V0SWQBFWdldFNhbGVPd25lckFuZFN0YXR1cwEIdGlja2V0SWQECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUIdGlja2V0SWQDCQAAAgkAsQIBBQlzYWxlT3duZXIAAAkAAgECEFRpY2tldCBub3QgZm91bmQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUIdGlja2V0SWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQITVGlja2V0IG5vdCBmb3Igc2FsZQUJc2FsZU93bmVyAQpnZXRCaWREYXRhAQNrZXkEB2JpZERhdGEJAQlnZXRTdHJCeUsBCQCsAgIFA2tleQIFX09QRU4DCQAAAgUHYmlkRGF0YQIACQACAQIPT2ZmZXIgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8EB2Fzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAIJAJUKAwUKYmlkRGF0YUFycgUHYXNzZXRJZAUHYmlkRGF0YQEMZXZlbnRJc1ZhbGlkAQtldmVudFN0YXR1cwMJAQIhPQIFC2V2ZW50U3RhdHVzBQxldmVudElsbGVnYWwJAQIhPQIFC2V2ZW50U3RhdHVzBQ5ldmVudFN1c3BlbmRlZAcBEGNoZWNrRXZlbnRTdGF0dXMCBGFkZHICaWQEC2V2ZW50U3RhdHVzCQEOZ2V0RXZlbnRTdHJCeUsBCQEHa2V5RmxhZwIFBGFkZHIFAmlkAwkBDGV2ZW50SXNWYWxpZAEFC2V2ZW50U3RhdHVzBgkAAgEJAKwCAgIaT3JpZ2luYWwgZXZlbnQgZmxhZ2dlZCBhcyAFC2V2ZW50U3RhdHVzARRjaGVja09yZ2FuaXplclN0YXR1cwEEYWRkcgQPb3JnYW5pemVyU3RhdHVzCQENZ2V0VXNlclN0ckJ5SwEJAQ1rZXlVc2VyU3RhdHVzAQUEYWRkcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDXVzZXJTdXNwZW5kZWQFA25pbAUPb3JnYW5pemVyU3RhdHVzCQACAQkArAICAhNPcmlnaW5hbCBvcmdhbml6ZXIgBQ9vcmdhbml6ZXJTdGF0dXMGAQxjaGVja05GVEluZm8BB2Fzc2V0SWQEB25mdERhdGEJALUJAgkBDmdldEV2ZW50U3RyQnlLAQkBCmtleU5GVERhdGEBBQdhc3NldElkAgFfAwMJAQEhAQkBEGNoZWNrRXZlbnRTdGF0dXMCCQCRAwIFB25mdERhdGEABgkAkQMCBQduZnREYXRhAAUJAQEhAQkBFGNoZWNrT3JnYW5pemVyU3RhdHVzAQkAkQMCBQduZnREYXRhAAYHCQCVCgMHCQCRAwIFB25mdERhdGEABQkAkQMCBQduZnREYXRhAAYJAJUKAwYJAJEDAgUHbmZ0RGF0YQAFCQCRAwIFB25mdERhdGEABgEPY2hlY2tFVkVOVEV4aXN0AgVhcnRJZAtjcmVhdG9yQWRkcgMDCQEBIQEJARBjaGVja0V2ZW50U3RhdHVzAgULY3JlYXRvckFkZHIFBWFydElkCQEBIQEJARRjaGVja09yZ2FuaXplclN0YXR1cwEFC2NyZWF0b3JBZGRyBwcGAQxzZXRUcmFuc2ZlcnMGBmFtb3VudAdhc3NldElkCHRpY2tldElkDW9yZ2FuaXplckFkZHIJc2FsZU93bmVyBmNhbGxlcgQNYW1vdW50Rm9yU2lnbgkAawMFBmFtb3VudAUHc2lnbkN1dABkBBJhbW91bnRGb3JPcmdhbml6ZXIJAGsDBQZhbW91bnQFDG9yZ2FuaXplckN1dABkBA5hbW91bnRGb3JPd25lcgkAZQIFBmFtb3VudAkAZAIFDWFtb3VudEZvclNpZ24FEmFtb3VudEZvck9yZ2FuaXplcgQLY29tbWlzc2lvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwEDG9yZ2FuaXplckZlZQkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFDW9yZ2FuaXplckFkZHIFEmFtb3VudEZvck9yZ2FuaXplcgUHYXNzZXRJZAQIb3duZXJGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQlzYWxlT3duZXIFDmFtb3VudEZvck93bmVyBQdhc3NldElkBAxjb2xsZWN0b3JORlQJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQkA2QQBBQh0aWNrZXRJZAkAlgoEBQtjb21taXNzaW9ucwUMb3JnYW5pemVyRmVlBQhvd25lckZlZQUMY29sbGVjdG9yTkZUAQ9wcm92aWRlQmFzZURhdGECAWkIdGlja2V0SWQECyR0MDYwMTM2MDUyCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQskdDA2MDEzNjA1MgJfMQQGY2FsbGVyCAULJHQwNjAxMzYwNTICXzIEBGRhdGUIBQskdDA2MDEzNjA1MgJfMwQLJHQwNjA1NTYxMTYJAQxjaGVja05GVEluZm8BBQh0aWNrZXRJZAQKaXNWYWxpZE5GVAgFCyR0MDYwNTU2MTE2Al8xBAVhcnRJZAgFCyR0MDYwNTU2MTE2Al8yBAtjcmVhdG9yQWRkcggFCyR0MDYwNTU2MTE2Al8zCQCYCgYFAmlkBQZjYWxsZXIFBGRhdGUFCmlzVmFsaWRORlQFBWFydElkBQtjcmVhdG9yQWRkcgEOdXBkYXRlTnVtU2FsZXMABAhudW1TYWxlcwkBCWdldEludEJ5SwEFCW51bVNhbGVzSwkBDEludGVnZXJFbnRyeQIFCW51bVNhbGVzSwkAZAIFCG51bVNhbGVzAAEJBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBCmFwcFJ1bm5pbmcCBmlzTGl2ZQdtZXNzYWdlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIEAmlkCQDYBAEIBQZpbnZva2UNdHJhbnNhY3Rpb25JZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDmRhcHBSdW5uaW5nS2V5BQZpc0xpdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgURbWFpbnRlbmFuY2VNU0dLZXkFB21lc3NhZ2UFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEHc2VsbE5GVAIFcHJpY2UFYXNzZXQECyR0MDcxNzA3MjA2CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDcxNzA3MjA2Al8xBAZhbW91bnQIBQskdDA3MTcwNzIwNgJfMgMJAQIhPQIFBmFtb3VudAABCQACAQISTm8gVGlja2V0IGF0dGFjaGVkBAh0aWNrZXRJZAMDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkBDmlzU2lnbkV2ZW50TkZUAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAcJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECG09ubHkgU0lHTiBBcnQgTkZUIGFjY2VwdGVkLgQLJHQwNzQ0ODc1MzIJAQ9wcm92aWRlQmFzZURhdGECBQFpBQh0aWNrZXRJZAQCaWQIBQskdDA3NDQ4NzUzMgJfMQQGY2FsbGVyCAULJHQwNzQ0ODc1MzICXzIEBGRhdGUIBQskdDA3NDQ4NzUzMgJfMwQKaXNWYWxpZE5GVAgFCyR0MDc0NDg3NTMyAl80BAVhcnRJZAgFCyR0MDc0NDg3NTMyAl81BAtjcmVhdG9yQWRkcggFCyR0MDc0NDg3NTMyAl82AwkBASEBBQppc1ZhbGlkTkZUCQACAQISTm90IGEgdmFsaWQgdGlja2V0AwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFBWFzc2V0CQACAQIYT25seSBTSUdOIHRva2VuIGFjY2VwdGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCmdldFNhbGVLZXkEBQZjYWxsZXIFCHRpY2tldElkBQVhcnRJZAULY3JlYXRvckFkZHICBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCkAwEFBGRhdGUCAV8JAKQDAQUFcHJpY2UCAV8FBWFzc2V0AgFfBQh0aWNrZXRJZAIBXwUFYXJ0SWQCAV8FC2NyZWF0b3JBZGRyAgFfBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUIdGlja2V0SWQCBE9QRU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQh0aWNrZXRJZAUGY2FsbGVyBQNuaWwBaQEPdXBkYXRlU2FsZVByaWNlAwh0aWNrZXRJZAVwcmljZQVhc3NldAQLJHQwODEyNjgyMTAJAQ9wcm92aWRlQmFzZURhdGECBQFpBQh0aWNrZXRJZAQCaWQIBQskdDA4MTI2ODIxMAJfMQQGY2FsbGVyCAULJHQwODEyNjgyMTACXzIEBGRhdGUIBQskdDA4MTI2ODIxMAJfMwQKaXNWYWxpZE5GVAgFCyR0MDgxMjY4MjEwAl80BAVhcnRJZAgFCyR0MDgxMjY4MjEwAl81BAtjcmVhdG9yQWRkcggFCyR0MDgxMjY4MjEwAl82AwkBASEBBQppc1ZhbGlkTkZUCQACAQISTm90IGEgdmFsaWQgdGlja2V0BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FCHRpY2tldElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhlZb3UgZG9uJ3Qgb3duIHRoaXMgdGlja2V0BApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FCHRpY2tldElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECGE9ubHkgU0lHTiB0b2tlbiBhY2NlcHRlZAQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFCHRpY2tldElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQC1CQIJAQlnZXRTdHJCeUsBCQCsAgIFB3NhbGVLZXkCBV9PUEVOAgFfCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2FsZUtleQIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUIc2FsZUluZm8AAAIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8JAJEDAgUIc2FsZUluZm8AAwIBXwkAkQMCBQhzYWxlSW5mbwAEAgFfCQCRAwIFCHNhbGVJbmZvAAUCAV8JAJEDAgUIc2FsZUluZm8ABgUDbmlsAWkBCmNhbmNlbFNhbGUBCHRpY2tldElkBAskdDA5MTgwOTQxMgkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFCHRpY2tldElkBAJpZAgFCyR0MDkxODA5NDEyAl8xBAZjYWxsZXIIBQskdDA5MTgwOTQxMgJfMgQEZGF0ZQgFCyR0MDkxODA5NDEyAl8zBAppc1ZhbGlkTkZUCAULJHQwOTE4MDk0MTICXzQEBWFydElkCAULJHQwOTE4MDk0MTICXzUEC2NyZWF0b3JBZGRyCAULJHQwOTE4MDk0MTICXzYECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUIdGlja2V0SWQDCQECIT0CBQlzYWxlT3duZXIFBmNhbGxlcgkAAgECGVlvdSBkb24ndCBvd24gdGhpcyB0aWNrZXQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUIdGlja2V0SWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQIPU2FsZSBub3QgYWN0aXZlBAdzYWxlS2V5CQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUIdGlja2V0SWQFBWFydElkBQtjcmVhdG9yQWRkcgQIc2FsZUluZm8JAQlnZXRTdHJCeUsBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUIdGlja2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUHc2FsZUtleQIBXwUCaWQCCl9DQU5DRUxMRUQJAKwCAgkArAICCQCsAgIJAKwCAgUIc2FsZUluZm8CC19DQU5DRUxMRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQkA2QQBBQh0aWNrZXRJZAUDbmlsAWkBBmJ1eU5GVAEIdGlja2V0SWQEDSR0MDEwMjY3MTAzODAJAQ9wcm92aWRlQmFzZURhdGECBQFpBQh0aWNrZXRJZAQCaWQIBQ0kdDAxMDI2NzEwMzgwAl8xBAZjYWxsZXIIBQ0kdDAxMDI2NzEwMzgwAl8yBARkYXRlCAUNJHQwMTAyNjcxMDM4MAJfMwQKaXNWYWxpZE5GVAgFDSR0MDEwMjY3MTAzODACXzQEBWFydElkCAUNJHQwMTAyNjcxMDM4MAJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMDI2NzEwMzgwAl82AwkBASEBBQppc1ZhbGlkTkZUCQACAQISTm90IGEgdmFsaWQgdGlja2V0BAlzYWxlT3duZXIJARVnZXRTYWxlT3duZXJBbmRTdGF0dXMBBQh0aWNrZXRJZAQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFCHRpY2tldElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEDXNhbGVJbmZvQXJyYXkJALUJAgUIc2FsZUluZm8CAV8DCQAAAgkAtgkBCQCRAwIFDXNhbGVJbmZvQXJyYXkAAQAACQACAQIKT2ZmZXIgb25seQQNJHQwMTA3ODgxMDgyNAkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxMDc4ODEwODI0Al8xBAZhbW91bnQIBQ0kdDAxMDc4ODEwODI0Al8yBA9wYXltZW50QXNzZXRTdHIDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAgADAwkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAEJAKQDAQUGYW1vdW50BgkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAIFD3BheW1lbnRBc3NldFN0cgkAAgECGlBheW1lbnQgaW5mb3MgZG9uJ3QgbWF0Y2guBA0kdDAxMTA2ODExMjAzCQEMc2V0VHJhbnNmZXJzBgUGYW1vdW50CAUHcGF5bWVudAdhc3NldElkBQh0aWNrZXRJZAULY3JlYXRvckFkZHIFCXNhbGVPd25lcgUGY2FsbGVyBAtjb21taXNzaW9ucwgFDSR0MDExMDY4MTEyMDMCXzEECmNyZWF0b3JGZWUIBQ0kdDAxMTA2ODExMjAzAl8yBAhvd25lckZlZQgFDSR0MDExMDY4MTEyMDMCXzMEDGNvbGxlY3Rvck5GVAgFDSR0MDExMDY4MTEyMDMCXzQJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FCHRpY2tldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwIIX0NMT1NFRF8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8FBmNhbGxlcgkAzAgCCQEOdXBkYXRlTnVtU2FsZXMACQDMCAIFCmNyZWF0b3JGZWUJAMwIAgUIb3duZXJGZWUJAMwIAgUMY29sbGVjdG9yTkZUBQNuaWwFC2NvbW1pc3Npb25zAWkBCHNldE9mZmVyAQh0aWNrZXRJZAQNJHQwMTE2MjMxMTcxMQkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFCHRpY2tldElkBAJpZAgFDSR0MDExNjIzMTE3MTECXzEECm9mZmVyT3duZXIIBQ0kdDAxMTYyMzExNzExAl8yBARkYXRlCAUNJHQwMTE2MjMxMTcxMQJfMwQKaXNWYWxpZE5GVAgFDSR0MDExNjIzMTE3MTECXzQEBWFydElkCAUNJHQwMTE2MjMxMTcxMQJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMTYyMzExNzExAl82AwkBASEBBQppc1ZhbGlkTkZUCQACAQISTm90IGEgdmFsaWQgdGlja2V0BA0kdDAxMTc3NTExODExCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDExNzc1MTE4MTECXzEEBmFtb3VudAgFDSR0MDExNzc1MTE4MTECXzIEB2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkAAAIFBmFtb3VudAAACQACAQIWT2ZmZXIgb2YgMCBub3QgYWxsb3dlZAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUIdGlja2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUIdGlja2V0SWQFCXNhbGVPd25lcgUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBmFtb3VudAIBXwUHYXNzZXRJZAIBXwUIdGlja2V0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUKb2ZmZXJPd25lcgIBXwUCaWQFA25pbAFpAQthY2NlcHRPZmZlcgMIdGlja2V0SWQHb2ZmZXJJZApvZmZlck93bmVyBA0kdDAxMjQ4OTEyNTczCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUIdGlja2V0SWQEAmlkCAUNJHQwMTI0ODkxMjU3MwJfMQQGY2FsbGVyCAUNJHQwMTI0ODkxMjU3MwJfMgQEZGF0ZQgFDSR0MDEyNDg5MTI1NzMCXzMECmlzVmFsaWRORlQIBQ0kdDAxMjQ4OTEyNTczAl80BAVhcnRJZAgFDSR0MDEyNDg5MTI1NzMCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTI0ODkxMjU3MwJfNgMJAQEhAQUKaXNWYWxpZE5GVAkAAgECEk5vdCBhIHZhbGlkIHRpY2tldAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUIdGlja2V0SWQDCQECIT0CBQZjYWxsZXIFCXNhbGVPd25lcgkAAgECIE9ubHkgc2FsZSBvd25lciBjYW4gYWNjZXB0IG9mZmVyBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQh0aWNrZXRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAxMjgzNjEyODkxCQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDEyODM2MTI4OTECXzEEB2Fzc2V0SWQIBQ0kdDAxMjgzNjEyODkxAl8yBAdiaWREYXRhCAUNJHQwMTI4MzYxMjg5MQJfMwQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFCHRpY2tldElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEBmFtb3VudAkBBXZhbHVlAQkAtgkBCQCRAwIFCmJpZERhdGFBcnIAAQQNJHQwMTMxMzAxMzI2NAkBDHNldFRyYW5zZmVycwYFBmFtb3VudAUHYXNzZXRJZAUIdGlja2V0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIJAJEDAgUKYmlkRGF0YUFycgAGBAtjb21taXNzaW9ucwgFDSR0MDEzMTMwMTMyNjQCXzEECmNyZWF0b3JGZWUIBQ0kdDAxMzEzMDEzMjY0Al8yBAhvd25lckZlZQgFDSR0MDEzMTMwMTMyNjQCXzMEDGNvbGxlY3Rvck5GVAgFDSR0MDEzMTMwMTMyNjQCXzQECmFzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUHYXNzZXRJZAkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZiaWRLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FCHRpY2tldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGYmlkS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIFB2JpZERhdGECCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAg5fQ0xPU0VELU9GRkVSXwkApAMBBQRkYXRlAgFfBQJpZAIBXwUKb2ZmZXJPd25lcgIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRTdHIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQpjcmVhdG9yRmVlCQDMCAIFCG93bmVyRmVlCQDMCAIFDGNvbGxlY3Rvck5GVAUDbmlsBQtjb21taXNzaW9ucwFpAQtjYW5jZWxPZmZlcgQIdGlja2V0SWQHb2ZmZXJJZApvZmZlck93bmVyCXNhbGVPd25lcgQNJHQwMTQwMzMxNDEwNQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTQwMzMxNDEwNQJfMQQGY2FsbGVyCAUNJHQwMTQwMzMxNDEwNQJfMgQEZGF0ZQgFDSR0MDE0MDMzMTQxMDUCXzMDAwkBAiE9AgUGY2FsbGVyBQpvZmZlck93bmVyCQECIT0CBQZjYWxsZXIFCXNhbGVPd25lcgcJAAIBAh1Zb3UgY2Fubm90IGNhbmNlbCB0aGlzIG9mZmVyLgQGYmlkS2V5CQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUIdGlja2V0SWQFCXNhbGVPd25lcgUHb2ZmZXJJZAQNJHQwMTQyODAxNDMzNQkBCmdldEJpZERhdGEBBQZiaWRLZXkECmJpZERhdGFBcnIIBQ0kdDAxNDI4MDE0MzM1Al8xBAdhc3NldElkCAUNJHQwMTQyODAxNDMzNQJfMgQHYmlkRGF0YQgFDSR0MDE0MjgwMTQzMzUCXzMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZiaWRLZXkCBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGYmlkS2V5AgpfQ0FOQ0VMTEVECQCsAgIJAKwCAgkArAICCQCsAgIFB2JpZERhdGECC19DQU5DRUxMRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpiaWREYXRhQXJyAAEFB2Fzc2V0SWQFA25pbADwFiCi", "height": 2300744, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: FkwbBnCRuFA7ZH6xY7Cc6ZkohzaJQsEe3aJnPvQonqV3 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let VERSION = "1.0.0"
5+
6+func getStrByK (key) = valueOrElse(getString(this, key), "")
7+
8+
9+let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
10+
11+let feeReceiver = getStrByK("conf_fee_receiver")
12+
13+let eventsDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
14+
15+let userDapp = value(addressFromString(getStrByK("conf_users_dapp")))
16+
17+let signAssetId = fromBase58String(getStrByK("conf_accepted_asset_SIGN"))
18+
19+let chris = getStrByK("conf_admin_1")
20+
21+let signCut = 3
22+
23+let organizerCut = 10
24+
25+let userSuspended = "SUSPENDED"
26+
27+let eventIllegal = "ILLEGAL"
28+
29+let eventSuspended = "SUSPENDED"
30+
31+let dappRunningKey = "conf_dapp_is_running"
32+
33+let maintenanceMSGKey = "conf_maintenance_msg"
34+
35+let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
36+
37+let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
38+
39+let numSalesK = "num_sales"
40+
41+func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
42+
43+
44+func getEventStrByK (key) = valueOrElse(getString(eventsDapp, key), "")
45+
46+
47+func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
48+
49+
50+func keyUserStatus (addr) = ("user_status_" + addr)
51+
52+
53+func keyFlag (organizerAddr,eventId) = ((("event_flag_" + eventId) + "_") + organizerAddr)
54+
55+
56+func keyNFTData (id) = ("nft_" + id)
57+
58+
59+func getSaleKey (caller,ticketId,eventId,organizerAddr) = ((((((("sale2nd_info_" + caller) + "_") + ticketId) + "_") + eventId) + "_") + organizerAddr)
60+
61+
62+func getBidKey (offerOwner,ticketId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + ticketId) + "_") + saleOwner) + "_") + offerId)
63+
64+
65+func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
66+
67+
68+func idCallerDate (i) = if (!(dappRunning))
69+ then throw(maintenanceMSG)
70+ else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
71+
72+
73+func isPayment (i) = if ((size(i.payments) == 0))
74+ then throw("No payment attached")
75+ else {
76+ let payment = value(i.payments[0])
77+ let amount = value(payment.amount)
78+ $Tuple2(payment, amount)
79+ }
80+
81+
82+func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
83+ then (assetDetails.decimals == 0)
84+ else false)
85+ then (assetDetails.reissuable == false)
86+ else false)
87+ then (assetDetails.issuer == eventsDapp)
88+ else false
89+
90+
91+func isSignEventNFT (id) = {
92+ let assetDetails = value(assetInfo(id))
93+ assetIsValid(assetDetails)
94+ }
95+
96+
97+func acceptedAssetIds (assetId) = if ((assetId != toBase58String(signAssetId)))
98+ then false
99+ else true
100+
101+
102+func getBidAssetId (assetId) = fromBase58String(assetId)
103+
104+
105+func getSaleOwnerAndStatus (ticketId) = {
106+ let saleOwner = getStrByK(("current_owner_on_dapp_" + ticketId))
107+ if ((size(saleOwner) == 0))
108+ then throw("Ticket not found")
109+ else {
110+ let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + ticketId))
111+ if ((saleStatus != "OPEN"))
112+ then throw("Ticket not for sale")
113+ else saleOwner
114+ }
115+ }
116+
117+
118+func getBidData (key) = {
119+ let bidData = getStrByK((key + "_OPEN"))
120+ if ((bidData == ""))
121+ then throw("Offer not found")
122+ else {
123+ let bidDataArr = split(bidData, "_")
124+ let assetId = getBidAssetId(bidDataArr[2])
125+ $Tuple3(bidDataArr, assetId, bidData)
126+ }
127+ }
128+
129+
130+func eventIsValid (eventStatus) = if ((eventStatus != eventIllegal))
131+ then (eventStatus != eventSuspended)
132+ else false
133+
134+
135+func checkEventStatus (addr,id) = {
136+ let eventStatus = getEventStrByK(keyFlag(addr, id))
137+ if (eventIsValid(eventStatus))
138+ then true
139+ else throw(("Original event flagged as " + eventStatus))
140+ }
141+
142+
143+func checkOrganizerStatus (addr) = {
144+ let organizerStatus = getUserStrByK(keyUserStatus(addr))
145+ if (containsElement([userSuspended], organizerStatus))
146+ then throw(("Original organizer " + organizerStatus))
147+ else true
148+ }
149+
150+
151+func checkNFTInfo (assetId) = {
152+ let nftData = split(getEventStrByK(keyNFTData(assetId)), "_")
153+ if (if (!(checkEventStatus(nftData[6], nftData[5])))
154+ then !(checkOrganizerStatus(nftData[6]))
155+ else false)
156+ then $Tuple3(false, nftData[5], nftData[6])
157+ else $Tuple3(true, nftData[5], nftData[6])
158+ }
159+
160+
161+func checkEVENTExist (artId,creatorAddr) = if (if (!(checkEventStatus(creatorAddr, artId)))
162+ then !(checkOrganizerStatus(creatorAddr))
163+ else false)
164+ then false
165+ else true
166+
167+
168+func setTransfers (amount,assetId,ticketId,organizerAddr,saleOwner,caller) = {
169+ let amountForSign = fraction(amount, signCut, 100)
170+ let amountForOrganizer = fraction(amount, organizerCut, 100)
171+ let amountForOwner = (amount - (amountForSign + amountForOrganizer))
172+ let commissions = [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
173+ let organizerFee = ScriptTransfer(Address(fromBase58String(organizerAddr)), amountForOrganizer, assetId)
174+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
175+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(ticketId))
176+ $Tuple4(commissions, organizerFee, ownerFee, collectorNFT)
177+ }
178+
179+
180+func provideBaseData (i,ticketId) = {
181+ let $t060136052 = idCallerDate(i)
182+ let id = $t060136052._1
183+ let caller = $t060136052._2
184+ let date = $t060136052._3
185+ let $t060556116 = checkNFTInfo(ticketId)
186+ let isValidNFT = $t060556116._1
187+ let artId = $t060556116._2
188+ let creatorAddr = $t060556116._3
189+ $Tuple6(id, caller, date, isValidNFT, artId, creatorAddr)
190+ }
191+
192+
193+func updateNumSales () = {
194+ let numSales = getIntByK(numSalesK)
195+ IntegerEntry(numSalesK, (numSales + 1))
196+ }
197+
198+
199+@Callable(invoke)
200+func setConf (key,val) = {
201+ let caller = toString(invoke.caller)
202+ if (containsElement([chris, toString(this)], caller))
203+ then if (contains(key, "conf_"))
204+ then [StringEntry(key, val)]
205+ else throw("Entries starting with conf_ only")
206+ else throw("You are not allowed to change this")
207+ }
208+
209+
210+
211+@Callable(invoke)
212+func appRunning (isLive,message) = {
213+ let caller = toString(invoke.caller)
214+ let id = toBase58String(invoke.transactionId)
215+ if (containsElement([chris, toString(this)], caller))
216+ then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
217+ else throw("You are not allowed to change this")
218+ }
219+
220+
221+
222+@Callable(i)
223+func sellNFT (price,asset) = {
224+ let $t071707206 = isPayment(i)
225+ let payment = $t071707206._1
226+ let amount = $t071707206._2
227+ if ((amount != 1))
228+ then throw("No Ticket attached")
229+ else {
230+ let ticketId = if (if (isDefined(payment.assetId))
231+ then isSignEventNFT(value(payment.assetId))
232+ else false)
233+ then toBase58String(value(payment.assetId))
234+ else throw("Only SIGN Art NFT accepted.")
235+ let $t074487532 = provideBaseData(i, ticketId)
236+ let id = $t074487532._1
237+ let caller = $t074487532._2
238+ let date = $t074487532._3
239+ let isValidNFT = $t074487532._4
240+ let artId = $t074487532._5
241+ let creatorAddr = $t074487532._6
242+ if (!(isValidNFT))
243+ then throw("Not a valid ticket")
244+ else if (!(acceptedAssetIds(asset)))
245+ then throw("Only SIGN token accepted")
246+ else [StringEntry((getSaleKey(caller, ticketId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + ticketId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + ticketId), "OPEN"), StringEntry(("current_owner_on_dapp_" + ticketId), caller)]
247+ }
248+ }
249+
250+
251+
252+@Callable(i)
253+func updateSalePrice (ticketId,price,asset) = {
254+ let $t081268210 = provideBaseData(i, ticketId)
255+ let id = $t081268210._1
256+ let caller = $t081268210._2
257+ let date = $t081268210._3
258+ let isValidNFT = $t081268210._4
259+ let artId = $t081268210._5
260+ let creatorAddr = $t081268210._6
261+ if (!(isValidNFT))
262+ then throw("Not a valid ticket")
263+ else {
264+ let saleOwner = getStrByK(("current_owner_on_dapp_" + ticketId))
265+ if ((saleOwner != caller))
266+ then throw("You don't own this ticket")
267+ else {
268+ let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + ticketId))
269+ if ((saleStatus != "OPEN"))
270+ then throw("Sale not active")
271+ else if (!(acceptedAssetIds(asset)))
272+ then throw("Only SIGN token accepted")
273+ else {
274+ let saleKey = getSaleKey(caller, ticketId, artId, creatorAddr)
275+ let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
276+[StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
277+ }
278+ }
279+ }
280+ }
281+
282+
283+
284+@Callable(i)
285+func cancelSale (ticketId) = {
286+ let $t091809412 = provideBaseData(i, ticketId)
287+ let id = $t091809412._1
288+ let caller = $t091809412._2
289+ let date = $t091809412._3
290+ let isValidNFT = $t091809412._4
291+ let artId = $t091809412._5
292+ let creatorAddr = $t091809412._6
293+ let saleOwner = getStrByK(("current_owner_on_dapp_" + ticketId))
294+ if ((saleOwner != caller))
295+ then throw("You don't own this ticket")
296+ else {
297+ let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + ticketId))
298+ if ((saleStatus != "OPEN"))
299+ then throw("Sale not active")
300+ else {
301+ let saleKey = getSaleKey(caller, ticketId, artId, creatorAddr)
302+ let saleInfo = getStrByK((saleKey + "_OPEN"))
303+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + ticketId)), DeleteEntry(("current_owner_on_dapp_" + ticketId)), StringEntry((((saleKey + "_") + id) + "_CANCELLED"), ((((saleInfo + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(ticketId))]
304+ }
305+ }
306+ }
307+
308+
309+
310+@Callable(i)
311+func buyNFT (ticketId) = {
312+ let $t01026710380 = provideBaseData(i, ticketId)
313+ let id = $t01026710380._1
314+ let caller = $t01026710380._2
315+ let date = $t01026710380._3
316+ let isValidNFT = $t01026710380._4
317+ let artId = $t01026710380._5
318+ let creatorAddr = $t01026710380._6
319+ if (!(isValidNFT))
320+ then throw("Not a valid ticket")
321+ else {
322+ let saleOwner = getSaleOwnerAndStatus(ticketId)
323+ let saleKey = getSaleKey(saleOwner, ticketId, artId, creatorAddr)
324+ let saleInfo = getStrByK((saleKey + "_OPEN"))
325+ if ((size(saleInfo) == 0))
326+ then throw("Sale Not found!")
327+ else {
328+ let saleInfoArray = split(saleInfo, "_")
329+ if ((parseInt(saleInfoArray[1]) == 0))
330+ then throw("Offer only")
331+ else {
332+ let $t01078810824 = isPayment(i)
333+ let payment = $t01078810824._1
334+ let amount = $t01078810824._2
335+ let paymentAssetStr = if (isDefined(payment.assetId))
336+ then toBase58String(value(payment.assetId))
337+ else ""
338+ if (if ((saleInfoArray[1] != toString(amount)))
339+ then true
340+ else (saleInfoArray[2] != paymentAssetStr))
341+ then throw("Payment infos don't match.")
342+ else {
343+ let $t01106811203 = setTransfers(amount, payment.assetId, ticketId, creatorAddr, saleOwner, caller)
344+ let commissions = $t01106811203._1
345+ let creatorFee = $t01106811203._2
346+ let ownerFee = $t01106811203._3
347+ let collectorNFT = $t01106811203._4
348+ ([DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + ticketId)), DeleteEntry(("current_owner_on_dapp_" + ticketId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), creatorFee, ownerFee, collectorNFT] ++ commissions)
349+ }
350+ }
351+ }
352+ }
353+ }
354+
355+
356+
357+@Callable(i)
358+func setOffer (ticketId) = {
359+ let $t01162311711 = provideBaseData(i, ticketId)
360+ let id = $t01162311711._1
361+ let offerOwner = $t01162311711._2
362+ let date = $t01162311711._3
363+ let isValidNFT = $t01162311711._4
364+ let artId = $t01162311711._5
365+ let creatorAddr = $t01162311711._6
366+ if (!(isValidNFT))
367+ then throw("Not a valid ticket")
368+ else {
369+ let $t01177511811 = isPayment(i)
370+ let payment = $t01177511811._1
371+ let amount = $t01177511811._2
372+ let assetId = toBase58String(value(payment.assetId))
373+ if (!(acceptedAssetIds(assetId)))
374+ then throw("asset not accepted")
375+ else if ((amount == 0))
376+ then throw("Offer of 0 not allowed")
377+ else {
378+ let saleOwner = getSaleOwnerAndStatus(ticketId)
379+[StringEntry((getBidKey(offerOwner, ticketId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + ticketId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
380+ }
381+ }
382+ }
383+
384+
385+
386+@Callable(i)
387+func acceptOffer (ticketId,offerId,offerOwner) = {
388+ let $t01248912573 = provideBaseData(i, ticketId)
389+ let id = $t01248912573._1
390+ let caller = $t01248912573._2
391+ let date = $t01248912573._3
392+ let isValidNFT = $t01248912573._4
393+ let artId = $t01248912573._5
394+ let creatorAddr = $t01248912573._6
395+ if (!(isValidNFT))
396+ then throw("Not a valid ticket")
397+ else {
398+ let saleOwner = getSaleOwnerAndStatus(ticketId)
399+ if ((caller != saleOwner))
400+ then throw("Only sale owner can accept offer")
401+ else {
402+ let bidKey = getBidKey(offerOwner, ticketId, saleOwner, offerId)
403+ let $t01283612891 = getBidData(bidKey)
404+ let bidDataArr = $t01283612891._1
405+ let assetId = $t01283612891._2
406+ let bidData = $t01283612891._3
407+ let saleKey = getSaleKey(saleOwner, ticketId, artId, creatorAddr)
408+ let saleInfo = getStrByK((saleKey + "_OPEN"))
409+ if ((size(saleInfo) == 0))
410+ then throw("Sale Not found!")
411+ else {
412+ let amount = value(parseInt(bidDataArr[1]))
413+ let $t01313013264 = setTransfers(amount, assetId, ticketId, creatorAddr, saleOwner, bidDataArr[6])
414+ let commissions = $t01313013264._1
415+ let creatorFee = $t01313013264._2
416+ let ownerFee = $t01313013264._3
417+ let collectorNFT = $t01313013264._4
418+ let assetIdStr = toBase58String(value(assetId))
419+ ([DeleteEntry((saleKey + "_OPEN")), DeleteEntry((bidKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + ticketId)), DeleteEntry(("current_owner_on_dapp_" + ticketId)), StringEntry((bidKey + "_CLOSED"), ((((bidData + "_CLOSED_") + toString(date)) + "_") + id)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((((((saleInfo + "_CLOSED-OFFER_") + toString(date)) + "_") + id) + "_") + offerOwner) + "_") + toString(amount)) + "_") + assetIdStr)), updateNumSales(), creatorFee, ownerFee, collectorNFT] ++ commissions)
420+ }
421+ }
422+ }
423+ }
424+
425+
426+
427+@Callable(i)
428+func cancelOffer (ticketId,offerId,offerOwner,saleOwner) = {
429+ let $t01403314105 = idCallerDate(i)
430+ let id = $t01403314105._1
431+ let caller = $t01403314105._2
432+ let date = $t01403314105._3
433+ if (if ((caller != offerOwner))
434+ then (caller != saleOwner)
435+ else false)
436+ then throw("You cannot cancel this offer.")
437+ else {
438+ let bidKey = getBidKey(offerOwner, ticketId, saleOwner, offerId)
439+ let $t01428014335 = getBidData(bidKey)
440+ let bidDataArr = $t01428014335._1
441+ let assetId = $t01428014335._2
442+ let bidData = $t01428014335._3
443+[DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
444+ }
445+ }
446+
447+

github/deemru/w8io/873ac7e 
29.51 ms