tx · 4piAUSAxDixK9c1R6cVFgnGG4DxGmPAPHcoNAjrxRcRz

3PRAEZqBjrUDaDvv45HGWPb94DhD6UuZfWg:  -0.00700000 Waves

2023.09.20 13:19 [3829369] smart account 3PRAEZqBjrUDaDvv45HGWPb94DhD6UuZfWg > SELF 0.00000000 Waves

{ "type": 13, "id": "4piAUSAxDixK9c1R6cVFgnGG4DxGmPAPHcoNAjrxRcRz", "fee": 700000, "feeAssetId": null, "timestamp": 1695205214167, "version": 1, "sender": "3PRAEZqBjrUDaDvv45HGWPb94DhD6UuZfWg", "senderPublicKey": "DWfBoSph5SQ9fuKvBjSecymWnfmRnBFh9FYg2QEV6bwS", "proofs": [ "5BMkdkceVZFfz8EWyzG4fJvJjotJmCG9nQxAmoFYEAc2cH2JJCieDcKKk8DqfAMzQwTyTi1tgKWbCGJ3MGfiqNRH" ], "script": "base64:BgIXCAISBAoCCAESBgoECAEBBBIDCgEIEgAXABJjb25maWdBZGRyZXNzU3RvcmUCBmNvbmZpZwANY29uZmlnQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRJjb25maWdBZGRyZXNzU3RvcmUCH2NoaWxkOiBjb25maWcgYWRkcmVzcyBub3QgZm91bmQCFmludmFsaWQgY29uZmlnIGFkZHJlc3MABkhFSUdIVAUGaGVpZ2h0AQ5vcEFsbG93ZWRTdG9yZQECb3AJAKwCAgkArAICAgNvcF8FAm9wAghfYWxsb3dlZAANdm90aW5nUmVzdWx0cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhZjb250cmFjdF92b3RpbmdfcmVzdWx0AhlubyBjb250cmFjdF92b3RpbmdfcmVzdWx0Ah5pbnZhbGlkIGNvbnRyYWN0X3ZvdGluZ19yZXN1bHQBFXdhdmVsZXRzUGVyQmxvY2tTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhNfd2F2ZWxldHNfcGVyX2Jsb2NrARBzdGFydEhlaWdodFN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCDV9zdGFydF9oZWlnaHQBDGNsYWltZWRTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhB3YXZlbGV0c19jbGFpbWVkAQ9jbGFpbWVkVVNEU3RvcmUBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIRX3VzZHRsZXRzX2NsYWltZWQBEW1heENsYWltYWJsZVN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCDl9tYXhfY2xhaW1hYmxlARZtYXhDbGFpbWFibGVJc1VTRFN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCFV9tYXhfY2xhaW1hYmxlX2lzX3VzZAAIc3VtU3RvcmUCFndhdmVsZXRzX3Blcl9ibG9ja19zdW0ACG1heFN0b3JlAhZ3YXZlbGV0c19wZXJfYmxvY2tfbWF4AAdtYXhpbXVtCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCFndhdmVsZXRzX3Blcl9ibG9ja19tYXgAsNDJWgAGb3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBC3ZhbHVlT3JFbHNlAgkAoggBAgZvcmFjbGUCIzNQS2tvaktkZDZCQnpUZjFSWGJRVmZVRHJhTkZYWEhLelFGAhZpbnZhbGlkIG9yYWNsZSBhZGRyZXNzAA53YXZlUHJpY2VTdG9yZQkBC3ZhbHVlT3JFbHNlAgkAoggBAg53YXZlLXByaWNlLWtleQIXJXMlc19fcHJpY2VfX1dBVkVTLVVTRFQACXdhdmVQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUOd2F2ZVByaWNlU3RvcmUCIFdBVkVTIHByaWNlIGlzIG5vdCBpbiB0aGUgT3JhY2xlAAdkaWdpdHM4AIDC1y8BCndhdmVzVG9VU0QBBXdhdmVzCQBrAwUFd2F2ZXMFCXdhdmVQcmljZQUHZGlnaXRzOAEKdXNkVG9XYXZlcwEFd2F2ZXMJAGsDBQV3YXZlcwUHZGlnaXRzOAUJd2F2ZVByaWNlAAZvbGRTdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIc3VtU3RvcmUAAAEMYXZhaWxhYmxlTm93AQJ0bwQIcGVyQmxvY2sJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFXdhdmVsZXRzUGVyQmxvY2tTdG9yZQEFAnRvAAAEBXRvdGFsAwkAAAIFCHBlckJsb2NrAAAAAAQKZmlyc3RCbG9jawkBBXZhbHVlAQkAnwgBCQEQc3RhcnRIZWlnaHRTdG9yZQEFAnRvBAZibG9ja3MJAGUCBQZIRUlHSFQFCmZpcnN0QmxvY2sJAGgCBQhwZXJCbG9jawUGYmxvY2tzBAxjbGFpbWVkV0FWRVMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGNsYWltZWRTdG9yZQEFAnRvAAAECXJlc3RXYXZlcwkAZQIFBXRvdGFsBQxjbGFpbWVkV0FWRVMEDG1heENsYWltYWJsZQkAnwgBCQERbWF4Q2xhaW1hYmxlU3RvcmUBBQJ0bwMJAQlpc0RlZmluZWQBBQxtYXhDbGFpbWFibGUEEW1heENsYWltYWJsZVZhbHVlCQEFdmFsdWUBBQxtYXhDbGFpbWFibGUDCQELdmFsdWVPckVsc2UCCQCgCAEJARZtYXhDbGFpbWFibGVJc1VTRFN0b3JlAQUCdG8HBApjbGFpbWVkVVNECQELdmFsdWVPckVsc2UCCQCfCAEJAQ9jbGFpbWVkVVNEU3RvcmUBBQJ0bwkBCndhdmVzVG9VU0QBBQxjbGFpbWVkV0FWRVMEB3Jlc3RVU0QJAGUCBRFtYXhDbGFpbWFibGVWYWx1ZQUKY2xhaW1lZFVTRAQOcmVzdFVzZEluV2F2ZXMJAQp1c2RUb1dhdmVzAQUHcmVzdFVTRAkAlwMBCQDMCAIFDnJlc3RVc2RJbldhdmVzCQDMCAIFCXJlc3RXYXZlcwUDbmlsBAVncmFudAkAlwMBCQDMCAIFBXRvdGFsCQDMCAIFEW1heENsYWltYWJsZVZhbHVlBQNuaWwJAGUCBQVncmFudAUMY2xhaW1lZFdBVkVTBQlyZXN0V2F2ZXMBE3NldFNjaGVkdWxlSW50ZXJuYWwFAnRvEHdhdmVsZXRzUGVyQmxvY2sMbWF4Q2xhaW1hYmxlEWlzTWF4Q2xhaW1hYmxlVVNEA3N1bQQDYWRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUCdG8JAKwCAgIRaW52YWxpZCBhZGRyZXNzOiAFAnRvAwkAAAIFA2FkcgUDYWRyAwkAZgIAAAUQd2F2ZWxldHNQZXJCbG9jawkAAgECH3dhdmVsZXRzUGVyQmxvY2sgc2hvdWxkIGJlID49IDADAwURaXNNYXhDbGFpbWFibGVVU0QJAGYCAJBOBRB3YXZlbGV0c1BlckJsb2NrBwkAAgECNDEwMDAwIHdhdmVsZXRzIGlzIGEgbWluaW11biB0byB1c2Ugd2l0aGluIFVTRCBsaW1pdHMDAwURaXNNYXhDbGFpbWFibGVVU0QJAGYCAMCEPQUMbWF4Q2xhaW1hYmxlBwkAAgECLlVTRCBsaW1pdHMgc2hvdWxkIHN0YXJ0cyBmcm9tIDEwMDAwMDAgdXNkdGxldHMEDXBlckJsb2NrU3RvcmUJARV3YXZlbGV0c1BlckJsb2NrU3RvcmUBBQJ0bwQLb2xkUGVyQmxvY2sJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNcGVyQmxvY2tTdG9yZQAABAZuZXdTdW0JAGQCCQBlAgUDc3VtBQtvbGRQZXJCbG9jawUQd2F2ZWxldHNQZXJCbG9jawQMaGVpZ2h0U3RvcmUxCQEQc3RhcnRIZWlnaHRTdG9yZQEFAnRvBAdjbGFpbWVkCQEMY2xhaW1lZFN0b3JlAQUCdG8DCQBmAgUGbmV3U3VtBQdtYXhpbXVtCQACAQIQbWF4aW11bSBleGNlZWRlZAQSbWF4Q2xhaW1hYmxlU3RvcmUxCQERbWF4Q2xhaW1hYmxlU3RvcmUBBQJ0bwQXbWF4Q2xhaW1hYmxlSXNVU0RTdG9yZTEJARZtYXhDbGFpbWFibGVJc1VTRFN0b3JlAQUCdG8EEW1heENsYWltYWJsZUVudHJ5AwkAAAIFDG1heENsYWltYWJsZQAABQNuaWwDCQBmAgAABQxtYXhDbGFpbWFibGUJAMwIAgkBC0RlbGV0ZUVudHJ5AQUSbWF4Q2xhaW1hYmxlU3RvcmUxCQDMCAIJAQtEZWxldGVFbnRyeQEFF21heENsYWltYWJsZUlzVVNEU3RvcmUxBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFEm1heENsYWltYWJsZVN0b3JlMQUMbWF4Q2xhaW1hYmxlCQDMCAIJAQxCb29sZWFuRW50cnkCBRdtYXhDbGFpbWFibGVJc1VTRFN0b3JlMQURaXNNYXhDbGFpbWFibGVVU0QFA25pbAQRYXZhaWxhYmxlTm93V2F2ZXMJAQxhdmFpbGFibGVOb3cBBQJ0bwkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFDXBlckJsb2NrU3RvcmUFEHdhdmVsZXRzUGVyQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFDGhlaWdodFN0b3JlMQUGSEVJR0hUCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdjbGFpbWVkCQEBLQEFEWF2YWlsYWJsZU5vd1dhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPY2xhaW1lZFVTRFN0b3JlAQUCdG8JAQEtAQkBCndhdmVzVG9VU0QBBRFhdmFpbGFibGVOb3dXYXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUIc3VtU3RvcmUFBm5ld1N1bQUDbmlsBRFtYXhDbGFpbWFibGVFbnRyeQUGbmV3U3VtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFpAQpzZXRTY2VkdWxlAgJ0bxB3YXZlbGV0c1BlckJsb2NrAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIGZGVuaWVkCQETc2V0U2NoZWR1bGVJbnRlcm5hbAUFAnRvBRB3YXZlbGV0c1BlckJsb2NrAAAHBQZvbGRTdW0BaQELc2V0U2NoZWR1bGUEAnRvEHdhdmVsZXRzUGVyQmxvY2sMbWF4Q2xhaW1hYmxlEWlzTWF4Q2xhaW1hYmxlVVNEAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIGZGVuaWVkCQETc2V0U2NoZWR1bGVJbnRlcm5hbAUFAnRvBRB3YXZlbGV0c1BlckJsb2NrBQxtYXhDbGFpbWFibGUFEWlzTWF4Q2xhaW1hYmxlVVNEBQZvbGRTdW0BaQEQc2V0TXVsdGlTY2hlZHVsZQEJc2NoZWR1bGVzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIGZGVuaWVkCgEEZm9sZAIDYWNjCHNjaGVkdWxlAwkAAAIFCHNjaGVkdWxlAgAJAAIBAhFpbnZhbGlkIHNjaGVkdWxlcwQFcGFydHMJALUJAgUIc2NoZWR1bGUCAT0DCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAippbnZhbGlkIGZvcm1hdDogYWRyPXdhdmVsZXRzUGVyQmxvY2tbLG1heF0EAnRvCQCRAwIFBXBhcnRzAAAEDWJsb2NrTWF4UGFydHMJALUJAgkAkQMCBQVwYXJ0cwABAgEsBAh3YXZlbGV0cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNYmxvY2tNYXhQYXJ0cwAACQCsAgICGWludmFsaWQgd2F2ZXRldHMgbnVtYmVyOiAJAJEDAgUNYmxvY2tNYXhQYXJ0cwAABAskdDA1NTgwNTk0NgMJAAACCQCQAwEFDWJsb2NrTWF4UGFydHMAAgQNbWF4QW5kVXNkUGFydAkAtQkCCQCRAwIFDWJsb2NrTWF4UGFydHMAAQIBJAkAlAoCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1tYXhBbmRVc2RQYXJ0AAAJAKwCAgIUaW52YWxpZCBtYXggbnVtYmVyOiAJAJEDAgUNbWF4QW5kVXNkUGFydAAACQAAAgkAkAMBBQ1tYXhBbmRVc2RQYXJ0AAIJAJQKAgAABwQMbWF4Q2xhaW1hYmxlCAULJHQwNTU4MDU5NDYCXzEEEWlzTWF4Q2xhaW1hYmxlVVNECAULJHQwNTU4MDU5NDYCXzIECyR0MDU5NjQ1OTk2BQNhY2MEBGNtZHMIBQskdDA1OTY0NTk5NgJfMQQDc3VtCAULJHQwNTk2NDU5OTYCXzIECWFkZHJlc3NlcwgFCyR0MDU5NjQ1OTk2Al8zAwkBCWlzRGVmaW5lZAEJAM8IAgUJYWRkcmVzc2VzBQJ0bwkAAgEJAKwCAgILZHVibGljYXRlOiAFAnRvBAskdDA2MDg3NjE4MgkBE3NldFNjaGVkdWxlSW50ZXJuYWwFBQJ0bwUId2F2ZWxldHMFDG1heENsYWltYWJsZQURaXNNYXhDbGFpbWFibGVVU0QFA3N1bQQHbmV3Q21kcwgFCyR0MDYwODc2MTgyAl8xBAZuZXdTdW0IBQskdDA2MDg3NjE4MgJfMgkAlQoDCQDOCAIFBGNtZHMFB25ld0NtZHMFBm5ld1N1bQkAzggCBQlhZGRyZXNzZXMJAMwIAgUCdG8FA25pbAQLJHQwNjI0NzYzMjMKAAIkbAkAtQkCBQlzY2hlZHVsZXMCAXwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUGb2xkU3VtBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQEY21kcwgFCyR0MDYyNDc2MzIzAl8xBANzdW0IBQskdDA2MjQ3NjMyMwJfMgQCeF8IBQskdDA2MjQ3NjMyMwJfMwkAlAoCBQRjbWRzBQNzdW0BaQEFQ2xhaW0ABAV0b0FkcggFAWkGY2FsbGVyBAJ0bwkApQgBBQV0b0FkcgQBYQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARV3YXZlbGV0c1BlckJsb2NrU3RvcmUBBQJ0bwIRYWRkcmVzcyBub3QgZm91bmQDCQAAAgUBYQUBYQQGYW1vdW50CQEMYXZhaWxhYmxlTm93AQUCdG8EB3BheW1lbnQJAJcDAQkAzAgCCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAzAgCBQZhbW91bnQFA25pbAMJAGcCAAAFB3BheW1lbnQJAAIBAhBub3RoaW5nIHRvIGNsYWltBA1jbGFpbWVkU3RvcmUxCQEMY2xhaW1lZFN0b3JlAQUCdG8EB2NsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNY2xhaW1lZFN0b3JlMQAABBBjbGFpbWVkVVNEU3RvcmUxCQEPY2xhaW1lZFVTRFN0b3JlAQUCdG8ECmNsYWltZWRVU0QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUQY2xhaW1lZFVTRFN0b3JlMQkBCndhdmVzVG9VU0QBBQdjbGFpbWVkBApwYXltZW50VVNECQEKd2F2ZXNUb1VTRAEFB3BheW1lbnQDAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEWbWF4Q2xhaW1hYmxlSXNVU0RTdG9yZQEFAnRvBwkAZgIAHgUKcGF5bWVudFVTRAcJAAIBAhR1c2QgYW1vdW50IHRvbyBzbWFsbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQV0b0FkcgUHcGF5bWVudAUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNY2xhaW1lZFN0b3JlMQkAZAIFB2NsYWltZWQFB3BheW1lbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGNsYWltZWRVU0RTdG9yZTEJAGQCBQpjbGFpbWVkVVNEBQpwYXltZW50VVNEBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAhieVZvdGluZwQHZW5hYmxlZAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ1jb25maWdBZGRyZXNzCQEOb3BBbGxvd2VkU3RvcmUBAhljaGlsZF9nb3Zlcm5hbmNlX2FwcGx5X3R4BgMJAQEhAQUHZW5hYmxlZAkAAgECK3R4IGFwcGxpY2F0aW9uIHRocm93IGdvdmVybmFuY2Ugbm90IGVuYWJsZWQJAGcCBQZoZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXZvdGluZ1Jlc3VsdHMJAKwCAgkArAICCQCsAgICGXByb3Bvc2FsX2FsbG93X2Jyb2FkY2FzdF8JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BgUIYnlWb3RpbmeXdV2e", "chainId": 87, "height": 3829369, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EM3pbjaJU4kPMXeUv4W4nKEtKgY2KcrLgw1u4YgDaWwi Next: 5xmAWeALcZEyvbiL63ebeKoHCgVBWBsjqk4C3LTK9anH Diff:
OldNewDifferences
2121 func claimedStore (address) = (address + "wavelets_claimed")
2222
2323
24-func claimedUSDStore (address) = (address + "_wavelets_claimed_usd")
24+func claimedUSDStore (address) = (address + "_usdtlets_claimed")
2525
2626
27-func maxClaimableStore (address) = (address + "_wavelets_max_claimable")
27+func maxClaimableStore (address) = (address + "_max_claimable")
2828
2929
30-func maxClaimableIsUSDStore (address) = (address + "_wavelets_max_claimable_is_usd")
30+func maxClaimableIsUSDStore (address) = (address + "_max_claimable_is_usd")
3131
3232
3333 let sumStore = "wavelets_per_block_sum"
5858 then 0
5959 else {
6060 let firstBlock = value(getInteger(startHeightStore(to)))
61- let blocks = (height - firstBlock)
61+ let blocks = (HEIGHT - firstBlock)
6262 (perBlock * blocks)
6363 }
6464 let claimedWAVES = valueOrElse(getInteger(claimedStore(to)), 0)
9292 then (10000 > waveletsPerBlock)
9393 else false)
9494 then throw("10000 wavelets is a minimun to use within USD limits")
95- else {
96- let perBlockStore = waveletsPerBlockStore(to)
97- let oldPerBlock = valueOrElse(getInteger(perBlockStore), 0)
98- let newSum = ((sum - oldPerBlock) + waveletsPerBlock)
99- let heightStore1 = startHeightStore(to)
100- let claimed = claimedStore(to)
101- if ((newSum > maximum))
102- then throw("maximum exceeded")
103- else {
104- let maxClaimableStore1 = maxClaimableStore(to)
105- let maxClaimableIsUSDStore1 = maxClaimableIsUSDStore(to)
106- let maxClaimableEntry = if ((maxClaimable == 0))
107- then nil
108- else if ((0 > maxClaimable))
109- then [DeleteEntry(maxClaimableStore1), DeleteEntry(maxClaimableIsUSDStore1)]
110- else [IntegerEntry(maxClaimableStore1, maxClaimable), BooleanEntry(maxClaimableIsUSDStore1, isMaxClaimableUSD)]
111- $Tuple2(([IntegerEntry(perBlockStore, waveletsPerBlock), IntegerEntry(heightStore1, height), IntegerEntry(claimed, -(availableNow(to))), IntegerEntry(sumStore, newSum)] ++ maxClaimableEntry), newSum)
112- }
113- }
95+ else if (if (isMaxClaimableUSD)
96+ then (1000000 > maxClaimable)
97+ else false)
98+ then throw("USD limits should starts from 1000000 usdtlets")
99+ else {
100+ let perBlockStore = waveletsPerBlockStore(to)
101+ let oldPerBlock = valueOrElse(getInteger(perBlockStore), 0)
102+ let newSum = ((sum - oldPerBlock) + waveletsPerBlock)
103+ let heightStore1 = startHeightStore(to)
104+ let claimed = claimedStore(to)
105+ if ((newSum > maximum))
106+ then throw("maximum exceeded")
107+ else {
108+ let maxClaimableStore1 = maxClaimableStore(to)
109+ let maxClaimableIsUSDStore1 = maxClaimableIsUSDStore(to)
110+ let maxClaimableEntry = if ((maxClaimable == 0))
111+ then nil
112+ else if ((0 > maxClaimable))
113+ then [DeleteEntry(maxClaimableStore1), DeleteEntry(maxClaimableIsUSDStore1)]
114+ else [IntegerEntry(maxClaimableStore1, maxClaimable), BooleanEntry(maxClaimableIsUSDStore1, isMaxClaimableUSD)]
115+ let availableNowWaves = availableNow(to)
116+ $Tuple2(([IntegerEntry(perBlockStore, waveletsPerBlock), IntegerEntry(heightStore1, HEIGHT), IntegerEntry(claimed, -(availableNowWaves)), IntegerEntry(claimedUSDStore(to), -(wavesToUSD(availableNowWaves))), IntegerEntry(sumStore, newSum)] ++ maxClaimableEntry), newSum)
117+ }
118+ }
114119 else throw("Strict value is not equal to itself.")
115120 }
116121
143148 let to = parts[0]
144149 let blockMaxParts = split(parts[1], ",")
145150 let wavelets = valueOrErrorMessage(parseInt(blockMaxParts[0]), ("invalid wavetets number: " + blockMaxParts[0]))
146- let $t053645730 = if ((size(blockMaxParts) == 2))
151+ let $t055805946 = if ((size(blockMaxParts) == 2))
147152 then {
148153 let maxAndUsdPart = split(blockMaxParts[1], "$")
149154 $Tuple2(valueOrErrorMessage(parseInt(maxAndUsdPart[0]), ("invalid max number: " + maxAndUsdPart[0])), (size(maxAndUsdPart) == 2))
150155 }
151156 else $Tuple2(0, false)
152- let maxClaimable = $t053645730._1
153- let isMaxClaimableUSD = $t053645730._2
154- let $t057485780 = acc
155- let cmds = $t057485780._1
156- let sum = $t057485780._2
157- let addresses = $t057485780._3
157+ let maxClaimable = $t055805946._1
158+ let isMaxClaimableUSD = $t055805946._2
159+ let $t059645996 = acc
160+ let cmds = $t059645996._1
161+ let sum = $t059645996._2
162+ let addresses = $t059645996._3
158163 if (isDefined(indexOf(addresses, to)))
159164 then throw(("dublicate: " + to))
160165 else {
161- let $t058715966 = setScheduleInternal(to, wavelets, maxClaimable, isMaxClaimableUSD, sum)
162- let newCmds = $t058715966._1
163- let newSum = $t058715966._2
166+ let $t060876182 = setScheduleInternal(to, wavelets, maxClaimable, isMaxClaimableUSD, sum)
167+ let newCmds = $t060876182._1
168+ let newSum = $t060876182._2
164169 $Tuple3((cmds ++ newCmds), newSum, (addresses ++ [to]))
165170 }
166171 }
167172 }
168173
169- let $t060316107 = {
174+ let $t062476323 = {
170175 let $l = split(schedules, "|")
171176 let $s = size($l)
172177 let $acc0 = $Tuple3(nil, oldSum, nil)
180185
181186 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
182187 }
183- let cmds = $t060316107._1
184- let sum = $t060316107._2
185- let x_ = $t060316107._3
188+ let cmds = $t062476323._1
189+ let sum = $t062476323._2
190+ let x_ = $t062476323._3
186191 $Tuple2(cmds, sum)
187192 }
188193
205210 let claimedUSDStore1 = claimedUSDStore(to)
206211 let claimedUSD = valueOrElse(getInteger(claimedUSDStore1), wavesToUSD(claimed))
207212 let paymentUSD = wavesToUSD(payment)
208-[ScriptTransfer(toAdr, payment, unit), IntegerEntry(claimedStore1, (claimed + payment)), IntegerEntry(claimedUSDStore1, (claimedUSD + paymentUSD))]
213+ if (if (valueOrElse(getBoolean(maxClaimableIsUSDStore(to)), false))
214+ then (30 > paymentUSD)
215+ else false)
216+ then throw("usd amount too small")
217+ else [ScriptTransfer(toAdr, payment, unit), IntegerEntry(claimedStore1, (claimed + payment)), IntegerEntry(claimedUSDStore1, (claimedUSD + paymentUSD))]
209218 }
210219 }
211220 else throw("Strict value is not equal to itself.")
212221 }
213222
214223
224+@Verifier(tx)
225+func verify () = {
226+ let byVoting = {
227+ let enabled = valueOrElse(getBoolean(configAddress, opAllowedStore("child_governance_apply_tx")), true)
228+ if (!(enabled))
229+ then throw("tx application throw governance not enabled")
230+ else (height >= getIntegerValue(votingResults, ((("proposal_allow_broadcast_" + toString(this)) + "_") + toBase58String(tx.id))))
231+ }
232+ if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
233+ then true
234+ else byVoting
235+ }
236+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let configAddressStore = "config"
55
66 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "child: config address not found")), "invalid config address")
77
88 let HEIGHT = height
99
1010 func opAllowedStore (op) = (("op_" + op) + "_allowed")
1111
1212
1313 let votingResults = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_voting_result"), "no contract_voting_result")), "invalid contract_voting_result")
1414
1515 func waveletsPerBlockStore (address) = (address + "_wavelets_per_block")
1616
1717
1818 func startHeightStore (address) = (address + "_start_height")
1919
2020
2121 func claimedStore (address) = (address + "wavelets_claimed")
2222
2323
24-func claimedUSDStore (address) = (address + "_wavelets_claimed_usd")
24+func claimedUSDStore (address) = (address + "_usdtlets_claimed")
2525
2626
27-func maxClaimableStore (address) = (address + "_wavelets_max_claimable")
27+func maxClaimableStore (address) = (address + "_max_claimable")
2828
2929
30-func maxClaimableIsUSDStore (address) = (address + "_wavelets_max_claimable_is_usd")
30+func maxClaimableIsUSDStore (address) = (address + "_max_claimable_is_usd")
3131
3232
3333 let sumStore = "wavelets_per_block_sum"
3434
3535 let maxStore = "wavelets_per_block_max"
3636
3737 let maximum = valueOrElse(getInteger(this, "wavelets_per_block_max"), 189950000)
3838
3939 let oracle = valueOrErrorMessage(addressFromString(valueOrElse(getString("oracle"), "3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF")), "invalid oracle address")
4040
4141 let wavePriceStore = valueOrElse(getString("wave-price-key"), "%s%s__price__WAVES-USDT")
4242
4343 let wavePrice = valueOrErrorMessage(getInteger(oracle, wavePriceStore), "WAVES price is not in the Oracle")
4444
4545 let digits8 = 100000000
4646
4747 func wavesToUSD (waves) = fraction(waves, wavePrice, digits8)
4848
4949
5050 func usdToWaves (waves) = fraction(waves, digits8, wavePrice)
5151
5252
5353 let oldSum = valueOrElse(getInteger(sumStore), 0)
5454
5555 func availableNow (to) = {
5656 let perBlock = valueOrElse(getInteger(waveletsPerBlockStore(to)), 0)
5757 let total = if ((perBlock == 0))
5858 then 0
5959 else {
6060 let firstBlock = value(getInteger(startHeightStore(to)))
61- let blocks = (height - firstBlock)
61+ let blocks = (HEIGHT - firstBlock)
6262 (perBlock * blocks)
6363 }
6464 let claimedWAVES = valueOrElse(getInteger(claimedStore(to)), 0)
6565 let restWaves = (total - claimedWAVES)
6666 let maxClaimable = getInteger(maxClaimableStore(to))
6767 if (isDefined(maxClaimable))
6868 then {
6969 let maxClaimableValue = value(maxClaimable)
7070 if (valueOrElse(getBoolean(maxClaimableIsUSDStore(to)), false))
7171 then {
7272 let claimedUSD = valueOrElse(getInteger(claimedUSDStore(to)), wavesToUSD(claimedWAVES))
7373 let restUSD = (maxClaimableValue - claimedUSD)
7474 let restUsdInWaves = usdToWaves(restUSD)
7575 min([restUsdInWaves, restWaves])
7676 }
7777 else {
7878 let grant = min([total, maxClaimableValue])
7979 (grant - claimedWAVES)
8080 }
8181 }
8282 else restWaves
8383 }
8484
8585
8686 func setScheduleInternal (to,waveletsPerBlock,maxClaimable,isMaxClaimableUSD,sum) = {
8787 let adr = valueOrErrorMessage(addressFromString(to), ("invalid address: " + to))
8888 if ((adr == adr))
8989 then if ((0 > waveletsPerBlock))
9090 then throw("waveletsPerBlock should be >= 0")
9191 else if (if (isMaxClaimableUSD)
9292 then (10000 > waveletsPerBlock)
9393 else false)
9494 then throw("10000 wavelets is a minimun to use within USD limits")
95- else {
96- let perBlockStore = waveletsPerBlockStore(to)
97- let oldPerBlock = valueOrElse(getInteger(perBlockStore), 0)
98- let newSum = ((sum - oldPerBlock) + waveletsPerBlock)
99- let heightStore1 = startHeightStore(to)
100- let claimed = claimedStore(to)
101- if ((newSum > maximum))
102- then throw("maximum exceeded")
103- else {
104- let maxClaimableStore1 = maxClaimableStore(to)
105- let maxClaimableIsUSDStore1 = maxClaimableIsUSDStore(to)
106- let maxClaimableEntry = if ((maxClaimable == 0))
107- then nil
108- else if ((0 > maxClaimable))
109- then [DeleteEntry(maxClaimableStore1), DeleteEntry(maxClaimableIsUSDStore1)]
110- else [IntegerEntry(maxClaimableStore1, maxClaimable), BooleanEntry(maxClaimableIsUSDStore1, isMaxClaimableUSD)]
111- $Tuple2(([IntegerEntry(perBlockStore, waveletsPerBlock), IntegerEntry(heightStore1, height), IntegerEntry(claimed, -(availableNow(to))), IntegerEntry(sumStore, newSum)] ++ maxClaimableEntry), newSum)
112- }
113- }
95+ else if (if (isMaxClaimableUSD)
96+ then (1000000 > maxClaimable)
97+ else false)
98+ then throw("USD limits should starts from 1000000 usdtlets")
99+ else {
100+ let perBlockStore = waveletsPerBlockStore(to)
101+ let oldPerBlock = valueOrElse(getInteger(perBlockStore), 0)
102+ let newSum = ((sum - oldPerBlock) + waveletsPerBlock)
103+ let heightStore1 = startHeightStore(to)
104+ let claimed = claimedStore(to)
105+ if ((newSum > maximum))
106+ then throw("maximum exceeded")
107+ else {
108+ let maxClaimableStore1 = maxClaimableStore(to)
109+ let maxClaimableIsUSDStore1 = maxClaimableIsUSDStore(to)
110+ let maxClaimableEntry = if ((maxClaimable == 0))
111+ then nil
112+ else if ((0 > maxClaimable))
113+ then [DeleteEntry(maxClaimableStore1), DeleteEntry(maxClaimableIsUSDStore1)]
114+ else [IntegerEntry(maxClaimableStore1, maxClaimable), BooleanEntry(maxClaimableIsUSDStore1, isMaxClaimableUSD)]
115+ let availableNowWaves = availableNow(to)
116+ $Tuple2(([IntegerEntry(perBlockStore, waveletsPerBlock), IntegerEntry(heightStore1, HEIGHT), IntegerEntry(claimed, -(availableNowWaves)), IntegerEntry(claimedUSDStore(to), -(wavesToUSD(availableNowWaves))), IntegerEntry(sumStore, newSum)] ++ maxClaimableEntry), newSum)
117+ }
118+ }
114119 else throw("Strict value is not equal to itself.")
115120 }
116121
117122
118123 @Callable(i)
119124 func setScedule (to,waveletsPerBlock) = if ((i.caller != this))
120125 then throw("denied")
121126 else setScheduleInternal(to, waveletsPerBlock, 0, false, oldSum)
122127
123128
124129
125130 @Callable(i)
126131 func setSchedule (to,waveletsPerBlock,maxClaimable,isMaxClaimableUSD) = if ((i.caller != this))
127132 then throw("denied")
128133 else setScheduleInternal(to, waveletsPerBlock, maxClaimable, isMaxClaimableUSD, oldSum)
129134
130135
131136
132137 @Callable(i)
133138 func setMultiSchedule (schedules) = if ((i.caller != this))
134139 then throw("denied")
135140 else {
136141 func fold (acc,schedule) = if ((schedule == ""))
137142 then throw("invalid schedules")
138143 else {
139144 let parts = split(schedule, "=")
140145 if ((size(parts) != 2))
141146 then throw("invalid format: adr=waveletsPerBlock[,max]")
142147 else {
143148 let to = parts[0]
144149 let blockMaxParts = split(parts[1], ",")
145150 let wavelets = valueOrErrorMessage(parseInt(blockMaxParts[0]), ("invalid wavetets number: " + blockMaxParts[0]))
146- let $t053645730 = if ((size(blockMaxParts) == 2))
151+ let $t055805946 = if ((size(blockMaxParts) == 2))
147152 then {
148153 let maxAndUsdPart = split(blockMaxParts[1], "$")
149154 $Tuple2(valueOrErrorMessage(parseInt(maxAndUsdPart[0]), ("invalid max number: " + maxAndUsdPart[0])), (size(maxAndUsdPart) == 2))
150155 }
151156 else $Tuple2(0, false)
152- let maxClaimable = $t053645730._1
153- let isMaxClaimableUSD = $t053645730._2
154- let $t057485780 = acc
155- let cmds = $t057485780._1
156- let sum = $t057485780._2
157- let addresses = $t057485780._3
157+ let maxClaimable = $t055805946._1
158+ let isMaxClaimableUSD = $t055805946._2
159+ let $t059645996 = acc
160+ let cmds = $t059645996._1
161+ let sum = $t059645996._2
162+ let addresses = $t059645996._3
158163 if (isDefined(indexOf(addresses, to)))
159164 then throw(("dublicate: " + to))
160165 else {
161- let $t058715966 = setScheduleInternal(to, wavelets, maxClaimable, isMaxClaimableUSD, sum)
162- let newCmds = $t058715966._1
163- let newSum = $t058715966._2
166+ let $t060876182 = setScheduleInternal(to, wavelets, maxClaimable, isMaxClaimableUSD, sum)
167+ let newCmds = $t060876182._1
168+ let newSum = $t060876182._2
164169 $Tuple3((cmds ++ newCmds), newSum, (addresses ++ [to]))
165170 }
166171 }
167172 }
168173
169- let $t060316107 = {
174+ let $t062476323 = {
170175 let $l = split(schedules, "|")
171176 let $s = size($l)
172177 let $acc0 = $Tuple3(nil, oldSum, nil)
173178 func $f0_1 ($a,$i) = if (($i >= $s))
174179 then $a
175180 else fold($a, $l[$i])
176181
177182 func $f0_2 ($a,$i) = if (($i >= $s))
178183 then $a
179184 else throw("List size exceeds 20")
180185
181186 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
182187 }
183- let cmds = $t060316107._1
184- let sum = $t060316107._2
185- let x_ = $t060316107._3
188+ let cmds = $t062476323._1
189+ let sum = $t062476323._2
190+ let x_ = $t062476323._3
186191 $Tuple2(cmds, sum)
187192 }
188193
189194
190195
191196 @Callable(i)
192197 func Claim () = {
193198 let toAdr = i.caller
194199 let to = toString(toAdr)
195200 let a = valueOrErrorMessage(getInteger(waveletsPerBlockStore(to)), "address not found")
196201 if ((a == a))
197202 then {
198203 let amount = availableNow(to)
199204 let payment = min([wavesBalance(this).available, amount])
200205 if ((0 >= payment))
201206 then throw("nothing to claim")
202207 else {
203208 let claimedStore1 = claimedStore(to)
204209 let claimed = valueOrElse(getInteger(claimedStore1), 0)
205210 let claimedUSDStore1 = claimedUSDStore(to)
206211 let claimedUSD = valueOrElse(getInteger(claimedUSDStore1), wavesToUSD(claimed))
207212 let paymentUSD = wavesToUSD(payment)
208-[ScriptTransfer(toAdr, payment, unit), IntegerEntry(claimedStore1, (claimed + payment)), IntegerEntry(claimedUSDStore1, (claimedUSD + paymentUSD))]
213+ if (if (valueOrElse(getBoolean(maxClaimableIsUSDStore(to)), false))
214+ then (30 > paymentUSD)
215+ else false)
216+ then throw("usd amount too small")
217+ else [ScriptTransfer(toAdr, payment, unit), IntegerEntry(claimedStore1, (claimed + payment)), IntegerEntry(claimedUSDStore1, (claimedUSD + paymentUSD))]
209218 }
210219 }
211220 else throw("Strict value is not equal to itself.")
212221 }
213222
214223
224+@Verifier(tx)
225+func verify () = {
226+ let byVoting = {
227+ let enabled = valueOrElse(getBoolean(configAddress, opAllowedStore("child_governance_apply_tx")), true)
228+ if (!(enabled))
229+ then throw("tx application throw governance not enabled")
230+ else (height >= getIntegerValue(votingResults, ((("proposal_allow_broadcast_" + toString(this)) + "_") + toBase58String(tx.id))))
231+ }
232+ if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
233+ then true
234+ else byVoting
235+ }
236+

github/deemru/w8io/3ef1775 
42.44 ms