tx · 2o2dtQg6hmzgc1oU1odW2V3t2QnEQ66GRmfwXFc3bozr

3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB:  -0.01000000 Waves

2023.01.21 12:40 [2414568] smart account 3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB > SELF 0.00000000 Waves

{ "type": 13, "id": "2o2dtQg6hmzgc1oU1odW2V3t2QnEQ66GRmfwXFc3bozr", "fee": 1000000, "feeAssetId": null, "timestamp": 1674294072737, "version": 2, "chainId": 84, "sender": "3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB", "senderPublicKey": "Gd5NihbWQoWuTnSvq25TuV2BYZG4U1e9KDqZn9zBPix7", "proofs": [ "5GmieFcRWs6seKTNB6rmxUcdTfRMbRn71BWvy4PQuHYGdnyqb2uUcyRPEqJ4Cte6xKwLDE3JsA1UD8FqPHcKWH1y" ], "script": "base64:BgIgCAISBAoCCAgSBwoFCAgICAgSBAoCCAgSABIFCgMIAQQUAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAA9zdG9yYWdlVmVyaWZpZXIJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQITY29uZl9vcmFjbGVfYWRkcmVzcwAEYmFuawkBDmdldFN0cmluZ0J5S2V5AQIZY29uZl9mZWVfcmVjZWl2ZXJfYWRkcmVzcwANYWNjZXB0ZWRUb2tlbgkBDmdldFN0cmluZ0J5S2V5AQIZY29uZl9mZWVfcmVjZWl2ZXJfYWRkcmVzcwAGdXNkbklECQEOZ2V0U3RyaW5nQnlLZXkBAgxjb25mX3VzZG5faWQABWNocmlzCQEOZ2V0U3RyaW5nQnlLZXkBAhJjb25mX2FkbWluX2FkZHJlc3MAB1ZFUlNJT04CBTEuMS45ABRzdG9yYWdlRmVlTXVsdGlwbGllcgABAQpjaGVja0VudHJ5AgZwcmVmaXgEdXVpZAQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIFBnByZWZpeAUEdXVpZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECBE5PTkUBD2NoZWNrRW50cnlFbWFpbAIEdXVpZAZkb21haW4EByRtYXRjaDAJAJ0IAgUEdGhpcwkArAICCQCsAgIFBHV1aWQCAUAFBmRvbWFpbgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECBE5PTkUBCWNoZWNrVVVJRAEEdXVpZAQHJG1hdGNoMAkAnQgCBQR0aGlzBQR1dWlkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIETk9ORQESY2hlY2tJZldoaXRlTGlzdGVkAQ1jYWxsZXJBZGRyZXNzBAckbWF0Y2gwCQCaCAIFBHRoaXMJAKwCAgIRYWRkcl9XSElURUxJU1RFRF8FDWNhbGxlckFkZHJlc3MDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABCGlzQWRyZXNzAQRhZGRyAwMDCQAAAgkAsQIBBQRhZGRyACMJAAACCQCvAgIFBGFkZHIAAgICM1AHBgkAAAIJAK8CAgUEYWRkcgACAgIzTgYJAAACCQCvAgIFBGFkZHIAAgICM00BDGNvdW50UGFydGllcwILYWNjdW11bGF0b3IEYWRkcgMJAGYCCQCxAgEFBGFkZHIAAAkAZAIFC2FjY3VtdWxhdG9yAAEJAGQCBQthY2N1bXVsYXRvcgAAARRjaGVja0lmUGVuZGluZ1RvU2lnbgEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDADCQAAAgUBYQIHUEVORElORwYHBwEOZ2V0VmFsdWVTdHJpbmcBBGpzb24JAK8CAgkAsAICBQRqc29uAAEJAQV2YWx1ZQEJALMJAgkAsAICBQRqc29uAAECASIBCGdldFZhbHVlAgRqc29uA2tleQQIa2V5SW5kZXgJAQV2YWx1ZQEJALMJAgUEanNvbgkArAICCQCsAgICASIFA2tleQICIjoEBGRhdGEJALACAgUEanNvbgkAZAIJAGQCBQhrZXlJbmRleAkAsQIBBQNrZXkAAwQJanNvblZhbHVlCQEOZ2V0VmFsdWVTdHJpbmcBBQRkYXRhBQlqc29uVmFsdWUBEmdldEpzb25CZWZvcmVWYWx1ZQIEanNvbgNrZXkECGtleUluZGV4CQEFdmFsdWUBCQCzCQIFBGpzb24JAKwCAgkArAICAgEiBQNrZXkCAiI6BARkYXRhCQCvAgIFBGpzb24JAGQCCQBkAgUIa2V5SW5kZXgJALECAQUDa2V5AAMFBGRhdGEBEWdldEpzb25BZnRlclZhbHVlAgRqc29uA2tleQQIa2V5SW5kZXgJAQV2YWx1ZQEJALMJAgUEanNvbgkArAICCQCsAgICASIFA2tleQICIjoEBGRhdGEJALICAgUEanNvbgkAZQIJALECAQUEanNvbgkAZAIJAGQCCQBkAgkAZAIFCGtleUluZGV4CQCxAgEFA2tleQADAAAAAgUEZGF0YQEIYXNTdHJpbmcBAmJ2BAckbWF0Y2gwBQJidgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA2J2MAUHJG1hdGNoMAUDYnYwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkBQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlARFmaWxlQ2VydGlmaWNhdGlvbgUEaGFzaAV0aXRsZQR1dWlkBGlwZnMMc2lnbmVyUHViS2V5BAJpZAkBBXZhbHVlAQgFBmludm9rZQ10cmFuc2FjdGlvbklkBAplbnRyeUV4aXN0CQEKY2hlY2tFbnRyeQIFBGhhc2gFBHV1aWQECXV1aWRFeGlzdAkBCWNoZWNrVVVJRAEFBHV1aWQEDGNhbGxlcklzRGFwcAkAAAIFBHRoaXMIBQZpbnZva2UGY2FsbGVyBA1jYWxsZXJBZGRyZXNzAwUMY2FsbGVySXNEYXBwCQClCAEJAKcIAQkA2QQBBQxzaWduZXJQdWJLZXkJANgEAQgIBQZpbnZva2UGY2FsbGVyBWJ5dGVzBBZjYWxsZXJJc1doaXRlTGlzdGVkTnVtCQESY2hlY2tJZldoaXRlTGlzdGVkAQUNY2FsbGVyQWRkcmVzcwMJAQIhPQIFCmVudHJ5RXhpc3QCBE5PTkUJAAIBAhhUaGlzIGVudHJ5IGFscmVhZHkgZXhpc3QDCQECIT0CBQl1dWlkRXhpc3QCBE5PTkUJAAIBAhdUaGlzIHV1aWQgYWxyZWFkeSBleGlzdAMJAQIhPQIJALECAQUEdXVpZAAkCQACAQIdVXVpZCBzaG91bGQgYmUgMzYgY2hhcmFjdGVycy4DCQECIT0CCQCxAgEFBGhhc2gAQAkAAgECHUhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMuAwkAZgIJALECAQUFdGl0bGUAZAkAAgECJlRpdGxlIGlzIHRvbyBsb25nLCAxMDAgY2hhcmFjdGVycyBtYXguAwMDCQEIY29udGFpbnMCBQRoYXNoAgEiBgkBCGNvbnRhaW5zAgUFdGl0bGUCASIGCQEIY29udGFpbnMCBQRpcGZzAgEiCQACAQIMTm8gIiBhbGxvd2VkBARkYXRhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJeyJoYXNoIjoiBQRoYXNoAg4iLCJ0aW1lc3RhbXAiOgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAIKLCJ0aXRsZSI6IgUFdGl0bGUCCiIsImlwZnMiOiIFBGlwZnMCAiJ9AwkAZgIFFmNhbGxlcklzV2hpdGVMaXN0ZWROdW0AAAQKY3JlZGl0Q29zdAMJAQIhPQIJALECAQUEaXBmcwAACQBkAgABBRRzdG9yYWdlRmVlTXVsdGlwbGllcgABAwkAZgIAAAkAZQIFFmNhbGxlcklzV2hpdGVMaXN0ZWROdW0FCmNyZWRpdENvc3QJAAIBAhFOb3QgZW5vdWdoIGNyZWRpdAkAzAgCCQELU3RyaW5nRW50cnkCBQR1dWlkCQDYBAEFAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEaGFzaAUEdXVpZAkA2AQBBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBXRpdGxlBQR1dWlkCQDYBAEFAmlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEWFkZHJfV0hJVEVMSVNURURfBQ1jYWxsZXJBZGRyZXNzCQBlAgUWY2FsbGVySXNXaGl0ZUxpc3RlZE51bQUKY3JlZGl0Q29zdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwkA2AQBBQJpZAIBXwUNY2FsbGVyQWRkcmVzcwUEZGF0YQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1jYWxsZXJBZGRyZXNzAAAJAJsDAQUNYWNjZXB0ZWRUb2tlbgUDbmlsAwkBASEBBQxjYWxsZXJJc0RhcHAEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFBmludm9rZQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAQOcGF5bWVudEFzc2V0SWQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECIFdhdmVzIGlzIG5vdCBhY2NlcHRlZCBhcyBwYXltZW50BAxjdXJyZW50UHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3N0b3JhZ2VWZXJpZmllcgkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQkBBXZhbHVlAQUOcGF5bWVudEFzc2V0SWQEB2ZlZUNvc3QDCQECIT0CCQCxAgEFBGlwZnMAAAkAZAIFDGN1cnJlbnRQcmljZQkAaAIFFHN0b3JhZ2VGZWVNdWx0aXBsaWVyBQxjdXJyZW50UHJpY2UFDGN1cnJlbnRQcmljZQMJAQIhPQIJAJsDAQUNYWNjZXB0ZWRUb2tlbgUOcGF5bWVudEFzc2V0SWQJAAIBAihUaGlzIHRva2VuIGlzIG5vdCBhY2NlcHRlZCBhdCB0aGUgbW9tZW50AwMJAQIhPQIFBmFtb3VudAUHZmVlQ29zdAkAZwIAAAUWY2FsbGVySXNXaGl0ZUxpc3RlZE51bQcJAAIBAhJUaGUgcHJpY2UgaXMgd3JvbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgUEdXVpZAkA2AQBBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBGhhc2gFBHV1aWQJANgEAQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQV0aXRsZQUEdXVpZAkA2AQBBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwkA2AQBBQJpZAIBXwUNY2FsbGVyQWRkcmVzcwUEZGF0YQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRiYW5rBQdmZWVDb3N0CAUHcGF5bWVudAdhc3NldElkBQNuaWwJAAIBAh5Zb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRvIHRoYXQGaW52b2tlARNyZXZva2VDZXJ0aWZpY2F0aW9uAg9jZXJ0aWZpY2F0aW9uSWQMc2lnbmVyUHViS2V5BAJpZAkBBXZhbHVlAQgFBmludm9rZQ10cmFuc2FjdGlvbklkBAxjYWxsZXJJc0RhcHAJAAACBQR0aGlzCAUGaW52b2tlBmNhbGxlcgQNY2FsbGVyQWRkcmVzcwMFDGNhbGxlcklzRGFwcAkApQgBCQCnCAEJANkEAQUMc2lnbmVyUHViS2V5CQDYBAEICAUGaW52b2tlBmNhbGxlcgVieXRlcwQKZW50cnlFeGlzdAQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUPY2VydGlmaWNhdGlvbklkAgFfBQ1jYWxsZXJBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIETk9ORQQJaXNSZXZva2VkBAckbWF0Y2gwCQCdCAIFBHRoaXMJAKwCAgIKU1RBVFVTX0ZDXwUPY2VydGlmaWNhdGlvbklkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIETk9ORQQWY2FsbGVySXNXaGl0ZUxpc3RlZE51bQkBEmNoZWNrSWZXaGl0ZUxpc3RlZAEFDWNhbGxlckFkZHJlc3MEB25ld0pzb24JAKwCAgkArAICCQCsAgIJALMCAgUKZW50cnlFeGlzdAABAhMsInN0YXR1cyI6IlJFVk9LRURfCQDYBAEFAmlkAgIifQMJAQIhPQIFCWlzUmV2b2tlZAIETk9ORQkAAgECLVRoaXMgY2VydGlmaWNhdGlvbiBoYXZlIGFscmVhZHkgYmVlbiByZXZva2VkLgMJAAACBQplbnRyeUV4aXN0AgROT05FCQACAQIzWW91IGNhbm5vdCBjaGFuZ2UgdGhlIHN0YXR1cyBvZiB0aGlzIGNlcnRpZmljYXRpb24uAwkAZgIFFmNhbGxlcklzV2hpdGVMaXN0ZWROdW0AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhFhZGRyX1dISVRFTElTVEVEXwUNY2FsbGVyQWRkcmVzcwkAZQIFFmNhbGxlcklzV2hpdGVMaXN0ZWROdW0AAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICClNUQVRVU19GQ18FD2NlcnRpZmljYXRpb25JZAkArAICAghSRVZPS0VEXwkA2AQBBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUPY2VydGlmaWNhdGlvbklkAgFfBQ1jYWxsZXJBZGRyZXNzBQduZXdKc29uCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDWNhbGxlckFkZHJlc3MAAAkAmwMBBQ1hY2NlcHRlZFRva2VuBQNuaWwDCQEBIQEFDGNhbGxlcklzRGFwcAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUGaW52b2tlCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50BA5wYXltZW50QXNzZXRJZAMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQACAQIgV2F2ZXMgaXMgbm90IGFjY2VwdGVkIGFzIHBheW1lbnQEDGN1cnJlbnRQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPc3RvcmFnZVZlcmlmaWVyCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBCQEFdmFsdWUBBQ5wYXltZW50QXNzZXRJZAMJAQIhPQIJAJsDAQUNYWNjZXB0ZWRUb2tlbgUOcGF5bWVudEFzc2V0SWQJAAIBAihUaGlzIHRva2VuIGlzIG5vdCBhY2NlcHRlZCBhdCB0aGUgbW9tZW50AwMJAQIhPQIFBmFtb3VudAUMY3VycmVudFByaWNlCQBnAgAABRZjYWxsZXJJc1doaXRlTGlzdGVkTnVtBwkAAgECElRoZSBwcmljZSBpcyB3cm9uZwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICClNUQVRVU19GQ18FD2NlcnRpZmljYXRpb25JZAkArAICAghSRVZPS0VEXwkA2AQBBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUPY2VydGlmaWNhdGlvbklkAgFfBQ1jYWxsZXJBZGRyZXNzBQduZXdKc29uCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGJhbmsFBmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAUDbmlsCQACAQIeWW91IGFyZSBub3QgYWxsb3dlZCB0byBkbyB0aGF0Bmludm9rZQEPdXNkblNpZ25DcmVkaXRzAAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUGaW52b2tlCHBheW1lbnRzAAAEDWNhbGxlckFkZHJlc3MJANgEAQgIBQZpbnZva2UGY2FsbGVyBWJ5dGVzBAd0b2tlbklkCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAQPbnVtYmVyT2ZDcmVkaXRzCQBpAgkAaAIFBmFtb3VudAACAMCEPQQWY2FsbGVySXNXaGl0ZUxpc3RlZE51bQkBEmNoZWNrSWZXaGl0ZUxpc3RlZAEFDWNhbGxlckFkZHJlc3MDCQECIT0CCQDYBAEFB3Rva2VuSWQFBnVzZG5JRAkAAgECGk9ubHkgVVNETiBjYW4gYmUgZXhjaGFuZ2VkAwMJAQIhPQIJAGoCBQZhbW91bnQAwIQ9AAAJAQIhPQIJAGoCBQZhbW91bnQAwIQ9AKDCHgcJAAIBCQCsAgIJAKwCAgkArAICAjBZb3UgY2FuIG9ubHkgZXhjaGFuZ2UgbXVsdGlwbGUgb2YgMC41LCB5b3Ugc2VudDoJALMCAgkApAMBBQZhbW91bnQABgIBLgkAsgICCQCkAwEFBmFtb3VudAAGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEWFkZHJfV0hJVEVMSVNURURfBQ1jYWxsZXJBZGRyZXNzCQBkAgUWY2FsbGVySXNXaGl0ZUxpc3RlZE51bQUPbnVtYmVyT2ZDcmVkaXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGJhbmsFBmFtb3VudAUHdG9rZW5JZAUDbmlsAWkBG3doaXRlbGlzdEZyZWVDZXJ0aWZpY2F0aW9ucwMHYWRkcmVzcwZhbW91bnQSYWRkVG9DdXJyZW50QW1vdW50BAZjYWxsZXIJAKUIAQkApwgBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEAmlkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwUDbmlsBQZjYWxsZXIEDWN1cnJlbnRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQdhZGRyZXNzAglfZnJlZV90eHEAAAQJbmV3QW1vdW50AwUSYWRkVG9DdXJyZW50QW1vdW50CQBkAgUNY3VycmVudEFtb3VudAUGYW1vdW50BQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIJX2ZyZWVfdHhzBQluZXdBbW91bnQFA25pbAkAAgECJ1lvdSBhcmUgbm90IGF1dGhvcml6ZWQgdG8gd2hpdGVsaXN0IHR4cwECdHgBCHZlcmlmaWVyAAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAMDAwMJAAACCAUDaW52CGZ1bmN0aW9uAhFmaWxlQ2VydGlmaWNhdGlvbgkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAEAwMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CE3Jldm9rZUNlcnRpZmljYXRpb24JAAACCAUDaW52BGRBcHAFBHRoaXMHCQAAAggFA2ludgNmZWUAoMIeBwkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkBCGFzU3RyaW5nAQkAkQMCCAUDaW52BGFyZ3MAAQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQUDLB0=", "height": 2414568, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EgWXwdPZ3wgVer7b8GqNk4aCwTFNidQUGMKzvMNHvZH Next: 3hv7nh6pXSN4HDvwpWeExJ2rTDaoaYPtN6RsfFydbixo Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
4+func a (b) = valueOrElse(getString(this, b), "")
55
6-let b = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
76
8-let c = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
7+let c = value(addressFromString(a("conf_oracle_address")))
98
10-let d = "3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC"
9+let d = a("conf_fee_receiver_address")
1110
12-let e = "1.1.9"
11+let e = a("conf_fee_receiver_address")
1312
14-let f = 1
13+let f = a("conf_usdn_id")
1514
16-func g (h,i) = {
17- let j = getString(this, (h + i))
18- if ($isInstanceOf(j, "String"))
15+let g = a("conf_admin_address")
16+
17+let h = "1.1.9"
18+
19+let i = 1
20+
21+func j (k,l) = {
22+ let m = getString(this, (k + l))
23+ if ($isInstanceOf(m, "String"))
1924 then {
20- let k = j
21- k
25+ let n = m
26+ n
2227 }
2328 else "NONE"
2429 }
2530
2631
27-func l (i,m) = {
28- let j = getString(this, ((i + "@") + m))
29- if ($isInstanceOf(j, "String"))
32+func o (l,p) = {
33+ let m = getString(this, ((l + "@") + p))
34+ if ($isInstanceOf(m, "String"))
3035 then {
31- let k = j
32- k
36+ let n = m
37+ n
3338 }
3439 else "NONE"
3540 }
3641
3742
38-func n (i) = {
39- let j = getString(this, i)
40- if ($isInstanceOf(j, "String"))
43+func q (l) = {
44+ let m = getString(this, l)
45+ if ($isInstanceOf(m, "String"))
4146 then {
42- let k = j
43- k
47+ let n = m
48+ n
4449 }
4550 else "NONE"
4651 }
4752
4853
49-func o (p) = {
50- let j = getInteger(this, ("addr_WHITELISTED_" + p))
51- if ($isInstanceOf(j, "Int"))
54+func r (s) = {
55+ let m = getInteger(this, ("addr_WHITELISTED_" + s))
56+ if ($isInstanceOf(m, "Int"))
5257 then {
53- let k = j
54- k
58+ let n = m
59+ n
5560 }
5661 else 0
5762 }
5863
5964
60-func q (r) = if (if (if ((size(r) == 35))
61- then (take(r, 2) == "3P")
65+func t (u) = if (if (if ((size(u) == 35))
66+ then (take(u, 2) == "3P")
6267 else false)
6368 then true
64- else (take(r, 2) == "3N"))
69+ else (take(u, 2) == "3N"))
6570 then true
66- else (take(r, 2) == "3M")
71+ else (take(u, 2) == "3M")
6772
6873
69-func s (t,r) = if ((size(r) > 0))
70- then (t + 1)
71- else (t + 0)
74+func v (w,u) = if ((size(u) > 0))
75+ then (w + 1)
76+ else (w + 0)
7277
7378
74-func u (v) = {
75- let j = getString(this, v)
76- if ($isInstanceOf(j, "String"))
79+func x (b) = {
80+ let m = getString(this, b)
81+ if ($isInstanceOf(m, "String"))
7782 then {
78- let k = j
79- if ((k == "PENDING"))
83+ let n = m
84+ if ((n == "PENDING"))
8085 then true
8186 else false
8287 }
8489 }
8590
8691
87-func w (x) = take(drop(x, 1), value(indexOf(drop(x, 1), "\"")))
92+func y (z) = take(drop(z, 1), value(indexOf(drop(z, 1), "\"")))
8893
8994
90-func y (x,v) = {
91- let z = value(indexOf(x, (("\"" + v) + "\":")))
92- let A = drop(x, ((z + size(v)) + 3))
93- let B = w(A)
94- B
95+func A (z,b) = {
96+ let B = value(indexOf(z, (("\"" + b) + "\":")))
97+ let C = drop(z, ((B + size(b)) + 3))
98+ let D = y(C)
99+ D
95100 }
96101
97102
98-func C (x,v) = {
99- let z = value(indexOf(x, (("\"" + v) + "\":")))
100- let A = take(x, ((z + size(v)) + 3))
101- A
103+func E (z,b) = {
104+ let B = value(indexOf(z, (("\"" + b) + "\":")))
105+ let C = take(z, ((B + size(b)) + 3))
106+ C
102107 }
103108
104109
105-func D (x,v) = {
106- let z = value(indexOf(x, (("\"" + v) + "\":")))
107- let A = takeRight(x, (size(x) - ((((z + size(v)) + 3) + 0) + 2)))
108- A
110+func F (z,b) = {
111+ let B = value(indexOf(z, (("\"" + b) + "\":")))
112+ let C = takeRight(z, (size(z) - ((((B + size(b)) + 3) + 0) + 2)))
113+ C
109114 }
110115
111116
112-func E (F) = {
113- let j = F
114- if ($isInstanceOf(j, "String"))
117+func G (H) = {
118+ let m = H
119+ if ($isInstanceOf(m, "String"))
115120 then {
116- let G = j
117- G
121+ let I = m
122+ I
118123 }
119124 else throw("Sponsored Public Key String expected")
120125 }
121126
122127
123-@Callable(H)
124-func fileCertification (I,J,i,K,L) = {
125- let M = value(H.transactionId)
126- let N = g(I, i)
127- let O = n(i)
128- let P = (this == H.caller)
129- let p = if (P)
130- then toString(addressFromPublicKey(fromBase58String(L)))
131- else toBase58String(H.caller.bytes)
132- let Q = o(p)
133- if ((N != "NONE"))
128+@Callable(J)
129+func setConf (b,K) = {
130+ let L = toString(J.caller)
131+ if (containsElement([g, toString(this)], L))
132+ then if (contains(b, "conf_"))
133+ then [StringEntry(b, K)]
134+ else throw("Entries starting with conf_ only")
135+ else throw("You are not allowed to change this")
136+ }
137+
138+
139+
140+@Callable(J)
141+func fileCertification (M,N,l,O,P) = {
142+ let Q = value(J.transactionId)
143+ let R = j(M, l)
144+ let S = q(l)
145+ let T = (this == J.caller)
146+ let s = if (T)
147+ then toString(addressFromPublicKey(fromBase58String(P)))
148+ else toBase58String(J.caller.bytes)
149+ let U = r(s)
150+ if ((R != "NONE"))
134151 then throw("This entry already exist")
135- else if ((O != "NONE"))
152+ else if ((S != "NONE"))
136153 then throw("This uuid already exist")
137- else if ((size(i) != 36))
154+ else if ((size(l) != 36))
138155 then throw("Uuid should be 36 characters.")
139- else if ((size(I) != 64))
156+ else if ((size(M) != 64))
140157 then throw("Hash should be 64 characters.")
141- else if ((size(J) > 100))
158+ else if ((size(N) > 100))
142159 then throw("Title is too long, 100 characters max.")
143- else if (if (if (contains(I, "\""))
160+ else if (if (if (contains(M, "\""))
144161 then true
145- else contains(J, "\""))
162+ else contains(N, "\""))
146163 then true
147- else contains(K, "\""))
164+ else contains(O, "\""))
148165 then throw("No \" allowed")
149166 else {
150- let A = (((((((("{\"hash\":\"" + I) + "\",\"timestamp\":") + toString(lastBlock.timestamp)) + ",\"title\":\"") + J) + "\",\"ipfs\":\"") + K) + "\"}")
151- if ((Q > 0))
167+ let C = (((((((("{\"hash\":\"" + M) + "\",\"timestamp\":") + toString(lastBlock.timestamp)) + ",\"title\":\"") + N) + "\",\"ipfs\":\"") + O) + "\"}")
168+ if ((U > 0))
152169 then {
153- let R = if ((size(K) != 0))
154- then (1 + f)
170+ let V = if ((size(O) != 0))
171+ then (1 + i)
155172 else 1
156- if ((0 > (Q - R)))
173+ if ((0 > (U - V)))
157174 then throw("Not enough credit")
158- else [StringEntry(i, toBase58String(M)), StringEntry((I + i), toBase58String(M)), StringEntry((J + i), toBase58String(M)), IntegerEntry(("addr_WHITELISTED_" + p), (Q - R)), StringEntry(((("data_fc_" + toBase58String(M)) + "_") + p), A), ScriptTransfer(addressFromStringValue(p), 0, c)]
175+ else [StringEntry(l, toBase58String(Q)), StringEntry((M + l), toBase58String(Q)), StringEntry((N + l), toBase58String(Q)), IntegerEntry(("addr_WHITELISTED_" + s), (U - V)), StringEntry(((("data_fc_" + toBase58String(Q)) + "_") + s), C), ScriptTransfer(addressFromStringValue(s), 0, toBytes(e))]
159176 }
160- else if (!(P))
177+ else if (!(T))
161178 then {
162- let S = value(H.payments[0])
163- let T = value(S.amount)
164- let U = if (isDefined(S.assetId))
165- then value(S.assetId)
179+ let W = value(J.payments[0])
180+ let X = value(W.amount)
181+ let Y = if (isDefined(W.assetId))
182+ then value(W.assetId)
166183 else throw("Waves is not accepted as payment")
167- let V = getIntegerValue(a, ("certification_fee_" + toBase58String(value(U))))
168- let W = if ((size(K) != 0))
169- then (V + (f * V))
170- else V
171- if ((c != U))
184+ let Z = getIntegerValue(c, ("certification_fee_" + toBase58String(value(Y))))
185+ let aa = if ((size(O) != 0))
186+ then (Z + (i * Z))
187+ else Z
188+ if ((toBytes(e) != Y))
172189 then throw("This token is not accepted at the moment")
173- else if (if ((T != W))
174- then (0 >= Q)
190+ else if (if ((X != aa))
191+ then (0 >= U)
175192 else false)
176193 then throw("The price is wrong")
177- else [StringEntry(i, toBase58String(M)), StringEntry((I + i), toBase58String(M)), StringEntry((J + i), toBase58String(M)), StringEntry(((("data_fc_" + toBase58String(M)) + "_") + p), A), ScriptTransfer(addressFromStringValue(b), W, S.assetId)]
194+ else [StringEntry(l, toBase58String(Q)), StringEntry((M + l), toBase58String(Q)), StringEntry((N + l), toBase58String(Q)), StringEntry(((("data_fc_" + toBase58String(Q)) + "_") + s), C), ScriptTransfer(addressFromStringValue(d), aa, W.assetId)]
178195 }
179196 else throw("You are not allowed to do that")
180197 }
182199
183200
184201
185-@Callable(H)
186-func revokeCertification (X,L) = {
187- let M = value(H.transactionId)
188- let P = (this == H.caller)
189- let p = if (P)
190- then toString(addressFromPublicKey(fromBase58String(L)))
191- else toBase58String(H.caller.bytes)
192- let N = {
193- let j = getString(this, ((("data_fc_" + X) + "_") + p))
194- if ($isInstanceOf(j, "String"))
202+@Callable(J)
203+func revokeCertification (ab,P) = {
204+ let Q = value(J.transactionId)
205+ let T = (this == J.caller)
206+ let s = if (T)
207+ then toString(addressFromPublicKey(fromBase58String(P)))
208+ else toBase58String(J.caller.bytes)
209+ let R = {
210+ let m = getString(this, ((("data_fc_" + ab) + "_") + s))
211+ if ($isInstanceOf(m, "String"))
195212 then {
196- let k = j
197- k
213+ let n = m
214+ n
198215 }
199216 else "NONE"
200217 }
201- let Y = {
202- let j = getString(this, ("STATUS_FC_" + X))
203- if ($isInstanceOf(j, "String"))
218+ let ac = {
219+ let m = getString(this, ("STATUS_FC_" + ab))
220+ if ($isInstanceOf(m, "String"))
204221 then {
205- let k = j
206- k
222+ let n = m
223+ n
207224 }
208225 else "NONE"
209226 }
210- let Q = o(p)
211- let Z = (((dropRight(N, 1) + ",\"status\":\"REVOKED_") + toBase58String(M)) + "\"}")
212- if ((Y != "NONE"))
227+ let U = r(s)
228+ let ad = (((dropRight(R, 1) + ",\"status\":\"REVOKED_") + toBase58String(Q)) + "\"}")
229+ if ((ac != "NONE"))
213230 then throw("This certification have already been revoked.")
214- else if ((N == "NONE"))
231+ else if ((R == "NONE"))
215232 then throw("You cannot change the status of this certification.")
216- else if ((Q > 0))
217- then [IntegerEntry(("addr_WHITELISTED_" + p), (Q - 1)), StringEntry(("STATUS_FC_" + X), ("REVOKED_" + toBase58String(M))), StringEntry(((("data_fc_" + X) + "_") + p), Z), ScriptTransfer(addressFromStringValue(p), 0, c)]
218- else if (!(P))
233+ else if ((U > 0))
234+ then [IntegerEntry(("addr_WHITELISTED_" + s), (U - 1)), StringEntry(("STATUS_FC_" + ab), ("REVOKED_" + toBase58String(Q))), StringEntry(((("data_fc_" + ab) + "_") + s), ad), ScriptTransfer(addressFromStringValue(s), 0, toBytes(e))]
235+ else if (!(T))
219236 then {
220- let S = value(H.payments[0])
221- let T = value(S.amount)
222- let U = if (isDefined(S.assetId))
223- then value(S.assetId)
237+ let W = value(J.payments[0])
238+ let X = value(W.amount)
239+ let Y = if (isDefined(W.assetId))
240+ then value(W.assetId)
224241 else throw("Waves is not accepted as payment")
225- let V = getIntegerValue(a, ("certification_fee_" + toBase58String(value(U))))
226- if ((c != U))
242+ let Z = getIntegerValue(c, ("certification_fee_" + toBase58String(value(Y))))
243+ if ((toBytes(e) != Y))
227244 then throw("This token is not accepted at the moment")
228- else if (if ((T != V))
229- then (0 >= Q)
245+ else if (if ((X != Z))
246+ then (0 >= U)
230247 else false)
231248 then throw("The price is wrong")
232- else [StringEntry(("STATUS_FC_" + X), ("REVOKED_" + toBase58String(M))), StringEntry(((("data_fc_" + X) + "_") + p), Z), ScriptTransfer(addressFromStringValue(b), T, S.assetId)]
249+ else [StringEntry(("STATUS_FC_" + ab), ("REVOKED_" + toBase58String(Q))), StringEntry(((("data_fc_" + ab) + "_") + s), ad), ScriptTransfer(addressFromStringValue(d), X, W.assetId)]
233250 }
234251 else throw("You are not allowed to do that")
235252 }
236253
237254
238255
239-@Callable(H)
256+@Callable(J)
240257 func usdnSignCredits () = {
241- let S = value(H.payments[0])
242- let p = toBase58String(H.caller.bytes)
243- let aa = value(S.assetId)
244- let T = value(S.amount)
245- let ab = ((T * 2) / 1000000)
246- let Q = o(p)
247- if ((toBase58String(aa) != d))
258+ let W = value(J.payments[0])
259+ let s = toBase58String(J.caller.bytes)
260+ let ae = value(W.assetId)
261+ let X = value(W.amount)
262+ let af = ((X * 2) / 1000000)
263+ let U = r(s)
264+ if ((toBase58String(ae) != f))
248265 then throw("Only USDN can be exchanged")
249- else if (if (((T % 1000000) != 0))
250- then ((T % 1000000) != 500000)
266+ else if (if (((X % 1000000) != 0))
267+ then ((X % 1000000) != 500000)
251268 else false)
252- then throw(((("You can only exchange multiple of 0.5, you sent:" + dropRight(toString(T), 6)) + ".") + takeRight(toString(T), 6)))
253- else [IntegerEntry(("addr_WHITELISTED_" + p), (Q + ab)), ScriptTransfer(addressFromStringValue(b), T, aa)]
269+ then throw(((("You can only exchange multiple of 0.5, you sent:" + dropRight(toString(X), 6)) + ".") + takeRight(toString(X), 6)))
270+ else [IntegerEntry(("addr_WHITELISTED_" + s), (U + af)), ScriptTransfer(addressFromStringValue(d), X, ae)]
254271 }
255272
256273
257-@Verifier(ac)
258-func ad () = {
259- let j = ac
260- if ($isInstanceOf(j, "InvokeScriptTransaction"))
274+
275+@Callable(ag)
276+func whitelistFreeCertifications (ah,X,ai) = {
277+ let L = toString(addressFromPublicKey(ag.callerPublicKey))
278+ let Q = toBase58String(ag.transactionId)
279+ if (containsElement([g], L))
261280 then {
262- let ae = j
263- if (if (if (if ((ae.function == "fileCertification"))
264- then (ae.dApp == this)
281+ let aj = valueOrElse(getInteger(this, (ah + "_free_txq")), 0)
282+ let ak = if (ai)
283+ then (aj + X)
284+ else X
285+[IntegerEntry((ah + "_free_txs"), ak)]
286+ }
287+ else throw("You are not authorized to whitelist txs")
288+ }
289+
290+
291+@Verifier(al)
292+func am () = {
293+ let m = al
294+ if ($isInstanceOf(m, "InvokeScriptTransaction"))
295+ then {
296+ let an = m
297+ if (if (if (if ((an.function == "fileCertification"))
298+ then (an.dApp == this)
265299 else false)
266- then (ae.fee == 500000)
300+ then (an.fee == 500000)
267301 else false)
268- then (ae.feeAssetId == unit)
302+ then (an.feeAssetId == unit)
269303 else false)
270- then sigVerify(ac.bodyBytes, ac.proofs[0], fromBase58String(E(ae.args[4])))
271- else if (if (if (if ((ae.function == "revokeCertification"))
272- then (ae.dApp == this)
304+ then sigVerify(al.bodyBytes, al.proofs[0], fromBase58String(G(an.args[4])))
305+ else if (if (if (if ((an.function == "revokeCertification"))
306+ then (an.dApp == this)
273307 else false)
274- then (ae.fee == 500000)
308+ then (an.fee == 500000)
275309 else false)
276- then (ae.feeAssetId == unit)
310+ then (an.feeAssetId == unit)
277311 else false)
278- then sigVerify(ac.bodyBytes, ac.proofs[0], fromBase58String(E(ae.args[1])))
279- else sigVerify(ac.bodyBytes, ac.proofs[0], ac.senderPublicKey)
312+ then sigVerify(al.bodyBytes, al.proofs[0], fromBase58String(G(an.args[1])))
313+ else sigVerify(al.bodyBytes, al.proofs[0], al.senderPublicKey)
280314 }
281- else sigVerify(ac.bodyBytes, ac.proofs[0], ac.senderPublicKey)
315+ else sigVerify(al.bodyBytes, al.proofs[0], al.senderPublicKey)
282316 }
283317
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
4+func a (b) = valueOrElse(getString(this, b), "")
55
6-let b = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
76
8-let c = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
7+let c = value(addressFromString(a("conf_oracle_address")))
98
10-let d = "3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC"
9+let d = a("conf_fee_receiver_address")
1110
12-let e = "1.1.9"
11+let e = a("conf_fee_receiver_address")
1312
14-let f = 1
13+let f = a("conf_usdn_id")
1514
16-func g (h,i) = {
17- let j = getString(this, (h + i))
18- if ($isInstanceOf(j, "String"))
15+let g = a("conf_admin_address")
16+
17+let h = "1.1.9"
18+
19+let i = 1
20+
21+func j (k,l) = {
22+ let m = getString(this, (k + l))
23+ if ($isInstanceOf(m, "String"))
1924 then {
20- let k = j
21- k
25+ let n = m
26+ n
2227 }
2328 else "NONE"
2429 }
2530
2631
27-func l (i,m) = {
28- let j = getString(this, ((i + "@") + m))
29- if ($isInstanceOf(j, "String"))
32+func o (l,p) = {
33+ let m = getString(this, ((l + "@") + p))
34+ if ($isInstanceOf(m, "String"))
3035 then {
31- let k = j
32- k
36+ let n = m
37+ n
3338 }
3439 else "NONE"
3540 }
3641
3742
38-func n (i) = {
39- let j = getString(this, i)
40- if ($isInstanceOf(j, "String"))
43+func q (l) = {
44+ let m = getString(this, l)
45+ if ($isInstanceOf(m, "String"))
4146 then {
42- let k = j
43- k
47+ let n = m
48+ n
4449 }
4550 else "NONE"
4651 }
4752
4853
49-func o (p) = {
50- let j = getInteger(this, ("addr_WHITELISTED_" + p))
51- if ($isInstanceOf(j, "Int"))
54+func r (s) = {
55+ let m = getInteger(this, ("addr_WHITELISTED_" + s))
56+ if ($isInstanceOf(m, "Int"))
5257 then {
53- let k = j
54- k
58+ let n = m
59+ n
5560 }
5661 else 0
5762 }
5863
5964
60-func q (r) = if (if (if ((size(r) == 35))
61- then (take(r, 2) == "3P")
65+func t (u) = if (if (if ((size(u) == 35))
66+ then (take(u, 2) == "3P")
6267 else false)
6368 then true
64- else (take(r, 2) == "3N"))
69+ else (take(u, 2) == "3N"))
6570 then true
66- else (take(r, 2) == "3M")
71+ else (take(u, 2) == "3M")
6772
6873
69-func s (t,r) = if ((size(r) > 0))
70- then (t + 1)
71- else (t + 0)
74+func v (w,u) = if ((size(u) > 0))
75+ then (w + 1)
76+ else (w + 0)
7277
7378
74-func u (v) = {
75- let j = getString(this, v)
76- if ($isInstanceOf(j, "String"))
79+func x (b) = {
80+ let m = getString(this, b)
81+ if ($isInstanceOf(m, "String"))
7782 then {
78- let k = j
79- if ((k == "PENDING"))
83+ let n = m
84+ if ((n == "PENDING"))
8085 then true
8186 else false
8287 }
8388 else false
8489 }
8590
8691
87-func w (x) = take(drop(x, 1), value(indexOf(drop(x, 1), "\"")))
92+func y (z) = take(drop(z, 1), value(indexOf(drop(z, 1), "\"")))
8893
8994
90-func y (x,v) = {
91- let z = value(indexOf(x, (("\"" + v) + "\":")))
92- let A = drop(x, ((z + size(v)) + 3))
93- let B = w(A)
94- B
95+func A (z,b) = {
96+ let B = value(indexOf(z, (("\"" + b) + "\":")))
97+ let C = drop(z, ((B + size(b)) + 3))
98+ let D = y(C)
99+ D
95100 }
96101
97102
98-func C (x,v) = {
99- let z = value(indexOf(x, (("\"" + v) + "\":")))
100- let A = take(x, ((z + size(v)) + 3))
101- A
103+func E (z,b) = {
104+ let B = value(indexOf(z, (("\"" + b) + "\":")))
105+ let C = take(z, ((B + size(b)) + 3))
106+ C
102107 }
103108
104109
105-func D (x,v) = {
106- let z = value(indexOf(x, (("\"" + v) + "\":")))
107- let A = takeRight(x, (size(x) - ((((z + size(v)) + 3) + 0) + 2)))
108- A
110+func F (z,b) = {
111+ let B = value(indexOf(z, (("\"" + b) + "\":")))
112+ let C = takeRight(z, (size(z) - ((((B + size(b)) + 3) + 0) + 2)))
113+ C
109114 }
110115
111116
112-func E (F) = {
113- let j = F
114- if ($isInstanceOf(j, "String"))
117+func G (H) = {
118+ let m = H
119+ if ($isInstanceOf(m, "String"))
115120 then {
116- let G = j
117- G
121+ let I = m
122+ I
118123 }
119124 else throw("Sponsored Public Key String expected")
120125 }
121126
122127
123-@Callable(H)
124-func fileCertification (I,J,i,K,L) = {
125- let M = value(H.transactionId)
126- let N = g(I, i)
127- let O = n(i)
128- let P = (this == H.caller)
129- let p = if (P)
130- then toString(addressFromPublicKey(fromBase58String(L)))
131- else toBase58String(H.caller.bytes)
132- let Q = o(p)
133- if ((N != "NONE"))
128+@Callable(J)
129+func setConf (b,K) = {
130+ let L = toString(J.caller)
131+ if (containsElement([g, toString(this)], L))
132+ then if (contains(b, "conf_"))
133+ then [StringEntry(b, K)]
134+ else throw("Entries starting with conf_ only")
135+ else throw("You are not allowed to change this")
136+ }
137+
138+
139+
140+@Callable(J)
141+func fileCertification (M,N,l,O,P) = {
142+ let Q = value(J.transactionId)
143+ let R = j(M, l)
144+ let S = q(l)
145+ let T = (this == J.caller)
146+ let s = if (T)
147+ then toString(addressFromPublicKey(fromBase58String(P)))
148+ else toBase58String(J.caller.bytes)
149+ let U = r(s)
150+ if ((R != "NONE"))
134151 then throw("This entry already exist")
135- else if ((O != "NONE"))
152+ else if ((S != "NONE"))
136153 then throw("This uuid already exist")
137- else if ((size(i) != 36))
154+ else if ((size(l) != 36))
138155 then throw("Uuid should be 36 characters.")
139- else if ((size(I) != 64))
156+ else if ((size(M) != 64))
140157 then throw("Hash should be 64 characters.")
141- else if ((size(J) > 100))
158+ else if ((size(N) > 100))
142159 then throw("Title is too long, 100 characters max.")
143- else if (if (if (contains(I, "\""))
160+ else if (if (if (contains(M, "\""))
144161 then true
145- else contains(J, "\""))
162+ else contains(N, "\""))
146163 then true
147- else contains(K, "\""))
164+ else contains(O, "\""))
148165 then throw("No \" allowed")
149166 else {
150- let A = (((((((("{\"hash\":\"" + I) + "\",\"timestamp\":") + toString(lastBlock.timestamp)) + ",\"title\":\"") + J) + "\",\"ipfs\":\"") + K) + "\"}")
151- if ((Q > 0))
167+ let C = (((((((("{\"hash\":\"" + M) + "\",\"timestamp\":") + toString(lastBlock.timestamp)) + ",\"title\":\"") + N) + "\",\"ipfs\":\"") + O) + "\"}")
168+ if ((U > 0))
152169 then {
153- let R = if ((size(K) != 0))
154- then (1 + f)
170+ let V = if ((size(O) != 0))
171+ then (1 + i)
155172 else 1
156- if ((0 > (Q - R)))
173+ if ((0 > (U - V)))
157174 then throw("Not enough credit")
158- else [StringEntry(i, toBase58String(M)), StringEntry((I + i), toBase58String(M)), StringEntry((J + i), toBase58String(M)), IntegerEntry(("addr_WHITELISTED_" + p), (Q - R)), StringEntry(((("data_fc_" + toBase58String(M)) + "_") + p), A), ScriptTransfer(addressFromStringValue(p), 0, c)]
175+ else [StringEntry(l, toBase58String(Q)), StringEntry((M + l), toBase58String(Q)), StringEntry((N + l), toBase58String(Q)), IntegerEntry(("addr_WHITELISTED_" + s), (U - V)), StringEntry(((("data_fc_" + toBase58String(Q)) + "_") + s), C), ScriptTransfer(addressFromStringValue(s), 0, toBytes(e))]
159176 }
160- else if (!(P))
177+ else if (!(T))
161178 then {
162- let S = value(H.payments[0])
163- let T = value(S.amount)
164- let U = if (isDefined(S.assetId))
165- then value(S.assetId)
179+ let W = value(J.payments[0])
180+ let X = value(W.amount)
181+ let Y = if (isDefined(W.assetId))
182+ then value(W.assetId)
166183 else throw("Waves is not accepted as payment")
167- let V = getIntegerValue(a, ("certification_fee_" + toBase58String(value(U))))
168- let W = if ((size(K) != 0))
169- then (V + (f * V))
170- else V
171- if ((c != U))
184+ let Z = getIntegerValue(c, ("certification_fee_" + toBase58String(value(Y))))
185+ let aa = if ((size(O) != 0))
186+ then (Z + (i * Z))
187+ else Z
188+ if ((toBytes(e) != Y))
172189 then throw("This token is not accepted at the moment")
173- else if (if ((T != W))
174- then (0 >= Q)
190+ else if (if ((X != aa))
191+ then (0 >= U)
175192 else false)
176193 then throw("The price is wrong")
177- else [StringEntry(i, toBase58String(M)), StringEntry((I + i), toBase58String(M)), StringEntry((J + i), toBase58String(M)), StringEntry(((("data_fc_" + toBase58String(M)) + "_") + p), A), ScriptTransfer(addressFromStringValue(b), W, S.assetId)]
194+ else [StringEntry(l, toBase58String(Q)), StringEntry((M + l), toBase58String(Q)), StringEntry((N + l), toBase58String(Q)), StringEntry(((("data_fc_" + toBase58String(Q)) + "_") + s), C), ScriptTransfer(addressFromStringValue(d), aa, W.assetId)]
178195 }
179196 else throw("You are not allowed to do that")
180197 }
181198 }
182199
183200
184201
185-@Callable(H)
186-func revokeCertification (X,L) = {
187- let M = value(H.transactionId)
188- let P = (this == H.caller)
189- let p = if (P)
190- then toString(addressFromPublicKey(fromBase58String(L)))
191- else toBase58String(H.caller.bytes)
192- let N = {
193- let j = getString(this, ((("data_fc_" + X) + "_") + p))
194- if ($isInstanceOf(j, "String"))
202+@Callable(J)
203+func revokeCertification (ab,P) = {
204+ let Q = value(J.transactionId)
205+ let T = (this == J.caller)
206+ let s = if (T)
207+ then toString(addressFromPublicKey(fromBase58String(P)))
208+ else toBase58String(J.caller.bytes)
209+ let R = {
210+ let m = getString(this, ((("data_fc_" + ab) + "_") + s))
211+ if ($isInstanceOf(m, "String"))
195212 then {
196- let k = j
197- k
213+ let n = m
214+ n
198215 }
199216 else "NONE"
200217 }
201- let Y = {
202- let j = getString(this, ("STATUS_FC_" + X))
203- if ($isInstanceOf(j, "String"))
218+ let ac = {
219+ let m = getString(this, ("STATUS_FC_" + ab))
220+ if ($isInstanceOf(m, "String"))
204221 then {
205- let k = j
206- k
222+ let n = m
223+ n
207224 }
208225 else "NONE"
209226 }
210- let Q = o(p)
211- let Z = (((dropRight(N, 1) + ",\"status\":\"REVOKED_") + toBase58String(M)) + "\"}")
212- if ((Y != "NONE"))
227+ let U = r(s)
228+ let ad = (((dropRight(R, 1) + ",\"status\":\"REVOKED_") + toBase58String(Q)) + "\"}")
229+ if ((ac != "NONE"))
213230 then throw("This certification have already been revoked.")
214- else if ((N == "NONE"))
231+ else if ((R == "NONE"))
215232 then throw("You cannot change the status of this certification.")
216- else if ((Q > 0))
217- then [IntegerEntry(("addr_WHITELISTED_" + p), (Q - 1)), StringEntry(("STATUS_FC_" + X), ("REVOKED_" + toBase58String(M))), StringEntry(((("data_fc_" + X) + "_") + p), Z), ScriptTransfer(addressFromStringValue(p), 0, c)]
218- else if (!(P))
233+ else if ((U > 0))
234+ then [IntegerEntry(("addr_WHITELISTED_" + s), (U - 1)), StringEntry(("STATUS_FC_" + ab), ("REVOKED_" + toBase58String(Q))), StringEntry(((("data_fc_" + ab) + "_") + s), ad), ScriptTransfer(addressFromStringValue(s), 0, toBytes(e))]
235+ else if (!(T))
219236 then {
220- let S = value(H.payments[0])
221- let T = value(S.amount)
222- let U = if (isDefined(S.assetId))
223- then value(S.assetId)
237+ let W = value(J.payments[0])
238+ let X = value(W.amount)
239+ let Y = if (isDefined(W.assetId))
240+ then value(W.assetId)
224241 else throw("Waves is not accepted as payment")
225- let V = getIntegerValue(a, ("certification_fee_" + toBase58String(value(U))))
226- if ((c != U))
242+ let Z = getIntegerValue(c, ("certification_fee_" + toBase58String(value(Y))))
243+ if ((toBytes(e) != Y))
227244 then throw("This token is not accepted at the moment")
228- else if (if ((T != V))
229- then (0 >= Q)
245+ else if (if ((X != Z))
246+ then (0 >= U)
230247 else false)
231248 then throw("The price is wrong")
232- else [StringEntry(("STATUS_FC_" + X), ("REVOKED_" + toBase58String(M))), StringEntry(((("data_fc_" + X) + "_") + p), Z), ScriptTransfer(addressFromStringValue(b), T, S.assetId)]
249+ else [StringEntry(("STATUS_FC_" + ab), ("REVOKED_" + toBase58String(Q))), StringEntry(((("data_fc_" + ab) + "_") + s), ad), ScriptTransfer(addressFromStringValue(d), X, W.assetId)]
233250 }
234251 else throw("You are not allowed to do that")
235252 }
236253
237254
238255
239-@Callable(H)
256+@Callable(J)
240257 func usdnSignCredits () = {
241- let S = value(H.payments[0])
242- let p = toBase58String(H.caller.bytes)
243- let aa = value(S.assetId)
244- let T = value(S.amount)
245- let ab = ((T * 2) / 1000000)
246- let Q = o(p)
247- if ((toBase58String(aa) != d))
258+ let W = value(J.payments[0])
259+ let s = toBase58String(J.caller.bytes)
260+ let ae = value(W.assetId)
261+ let X = value(W.amount)
262+ let af = ((X * 2) / 1000000)
263+ let U = r(s)
264+ if ((toBase58String(ae) != f))
248265 then throw("Only USDN can be exchanged")
249- else if (if (((T % 1000000) != 0))
250- then ((T % 1000000) != 500000)
266+ else if (if (((X % 1000000) != 0))
267+ then ((X % 1000000) != 500000)
251268 else false)
252- then throw(((("You can only exchange multiple of 0.5, you sent:" + dropRight(toString(T), 6)) + ".") + takeRight(toString(T), 6)))
253- else [IntegerEntry(("addr_WHITELISTED_" + p), (Q + ab)), ScriptTransfer(addressFromStringValue(b), T, aa)]
269+ then throw(((("You can only exchange multiple of 0.5, you sent:" + dropRight(toString(X), 6)) + ".") + takeRight(toString(X), 6)))
270+ else [IntegerEntry(("addr_WHITELISTED_" + s), (U + af)), ScriptTransfer(addressFromStringValue(d), X, ae)]
254271 }
255272
256273
257-@Verifier(ac)
258-func ad () = {
259- let j = ac
260- if ($isInstanceOf(j, "InvokeScriptTransaction"))
274+
275+@Callable(ag)
276+func whitelistFreeCertifications (ah,X,ai) = {
277+ let L = toString(addressFromPublicKey(ag.callerPublicKey))
278+ let Q = toBase58String(ag.transactionId)
279+ if (containsElement([g], L))
261280 then {
262- let ae = j
263- if (if (if (if ((ae.function == "fileCertification"))
264- then (ae.dApp == this)
281+ let aj = valueOrElse(getInteger(this, (ah + "_free_txq")), 0)
282+ let ak = if (ai)
283+ then (aj + X)
284+ else X
285+[IntegerEntry((ah + "_free_txs"), ak)]
286+ }
287+ else throw("You are not authorized to whitelist txs")
288+ }
289+
290+
291+@Verifier(al)
292+func am () = {
293+ let m = al
294+ if ($isInstanceOf(m, "InvokeScriptTransaction"))
295+ then {
296+ let an = m
297+ if (if (if (if ((an.function == "fileCertification"))
298+ then (an.dApp == this)
265299 else false)
266- then (ae.fee == 500000)
300+ then (an.fee == 500000)
267301 else false)
268- then (ae.feeAssetId == unit)
302+ then (an.feeAssetId == unit)
269303 else false)
270- then sigVerify(ac.bodyBytes, ac.proofs[0], fromBase58String(E(ae.args[4])))
271- else if (if (if (if ((ae.function == "revokeCertification"))
272- then (ae.dApp == this)
304+ then sigVerify(al.bodyBytes, al.proofs[0], fromBase58String(G(an.args[4])))
305+ else if (if (if (if ((an.function == "revokeCertification"))
306+ then (an.dApp == this)
273307 else false)
274- then (ae.fee == 500000)
308+ then (an.fee == 500000)
275309 else false)
276- then (ae.feeAssetId == unit)
310+ then (an.feeAssetId == unit)
277311 else false)
278- then sigVerify(ac.bodyBytes, ac.proofs[0], fromBase58String(E(ae.args[1])))
279- else sigVerify(ac.bodyBytes, ac.proofs[0], ac.senderPublicKey)
312+ then sigVerify(al.bodyBytes, al.proofs[0], fromBase58String(G(an.args[1])))
313+ else sigVerify(al.bodyBytes, al.proofs[0], al.senderPublicKey)
280314 }
281- else sigVerify(ac.bodyBytes, ac.proofs[0], ac.senderPublicKey)
315+ else sigVerify(al.bodyBytes, al.proofs[0], al.senderPublicKey)
282316 }
283317

github/deemru/w8io/3ef1775 
164.09 ms