tx · 67X1F6bteVmT41HWWBREGDpdSZ7VKX2x4oRbEXpVdkvb 3P6dr3R6kKCsiRd1ebPx8XM4r1qdmUyHAN8: -0.01000000 Waves 2023.10.09 17:59 [3857100] smart account 3P6dr3R6kKCsiRd1ebPx8XM4r1qdmUyHAN8 > SELF 0.00000000 Waves
{ "type": 13, "id": "67X1F6bteVmT41HWWBREGDpdSZ7VKX2x4oRbEXpVdkvb", "fee": 1000000, "feeAssetId": null, "timestamp": 1696863624664, "version": 2, "chainId": 87, "sender": "3P6dr3R6kKCsiRd1ebPx8XM4r1qdmUyHAN8", "senderPublicKey": "vY1FCJzCg2SfN3TDjYuqm3CTqHZjo4mCfLxx8UcRQkK", "proofs": [ "2dH2hK98cEGzWAusGJqf6nTPWHTq5Xjds9y9VU4JguKpzyE5mK5VJ7Qx7E8U4MgxgerSGKP2HJYMzVfCoxBYPDVU" ], "script": "base64:BgIXCAISAwoBCBIGCgQIAQEIEgYKBAgBAQgVARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yARRzdGF0aWNLZXlfZWdnQXNzZXRJZAACEXN0YXRpY19lZ2dBc3NldElkARdzdGF0aWNLZXlfYmFja2VuZFB1YktleQACFHN0YXRpY19iYWNrZW5kUHViS2V5ARxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAIZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwEVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAISc3RhdGljX2J1cm5BZGRyZXNzARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAhVzdGF0aWNfY291cG9uc0FkZHJlc3MBCGVnZ0lkS2V5AgVlZ2dJZAR1c2VyCQCsAgIJAKwCAgkArAICAgZlZ2dJZF8FBWVnZ0lkAgFfBQR1c2VyARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABDWdldEVnZ0Fzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAARBnZXRCYWNrZW5kUHViS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9iYWNrZW5kUHViS2V5AAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwABDmdldEJ1cm5BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAERZ2V0Q291cG9uc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAQ9nZXRCYWNrZW5kUHJvb2YDBWVnZ0lkBXByaWNlCGRpc3RhbmNlCQC5CQIJAMwIAgUFZWdnSWQJAMwIAgkApAMBBQVwcmljZQkAzAgCCQCkAwEFCGRpc3RhbmNlBQNuaWwCATsBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCB3BheW1lbnQGYW1vdW50AwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlSQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQZhbW91bnQJAAIBCQCsAgIJAKwCAgIcUkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQZhbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQZhbW91bnQFBHVuaXQFA25pbAEJYXNCb29sZWFuAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHYm9vbGVhbgUHJG1hdGNoMAUHYm9vbGVhbgkAAgECIVRJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogQm9vbGVhbgEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIeRkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AwFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECD1JDTzogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MABQZvcmFjbGUFA25pbAFpAQdidXlSb3BlBAVlZ2dJZAVwcmljZQhkaXN0YW5jZRBiYWNrZW5kU2lnbmF0dXJlBA1hZGRyZXNzU3RyaW5nCQClCAEIBQFpBmNhbGxlcgQMYmFja2VuZFByb29mCQEPZ2V0QmFja2VuZFByb29mAwUFZWdnSWQFBXByaWNlBQhkaXN0YW5jZQQGZXhpc3RzCQEMdHJ5R2V0U3RyaW5nAQkBCGVnZ0lkS2V5AgUFZWdnSWQJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAloYWxmUHJpY2UJAGkCBQVwcmljZQACBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AgkAkQMCCAUBaQhwYXltZW50cwABBQVwcmljZQMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAMJAQEhAQkAxBMDCQCbAwEFDGJhY2tlbmRQcm9vZgkA2QQBBRBiYWNrZW5kU2lnbmF0dXJlCQEQZ2V0QmFja2VuZFB1YktleQAJAAIBAh9SQlI6IEludmFsaWQgcHJvb2YgZnJvbSBiYWNrZW5kAwkAZgIFCGRpc3RhbmNlAOgHCQACAQI0UkJSOiBZb3UgY2FuIG9ubHkgbWF4aW11bSBib29zdCAxMDAwbWV0ZXJzIGRpc3RhbmNlIQQJbGVmdFRvUGF5AwkAAAIIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyBBNhbW91bnRQYWlkQnlDb3Vwb25zCQEFYXNJbnQBCQD8BwQJARFnZXRDb3Vwb25zQWRkcmVzcwACCnVzZUNvdXBvbnMJAMwIAgUJaGFsZlByaWNlBQNuaWwFA25pbAMJAAACBRNhbW91bnRQYWlkQnlDb3Vwb25zBRNhbW91bnRQYWlkQnlDb3Vwb25zCQBlAgUJaGFsZlByaWNlBRNhbW91bnRQYWlkQnlDb3Vwb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQloYWxmUHJpY2UEB3BheW1lbnQDCQECIT0CBQlsZWZ0VG9QYXkAAAQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAAgEJAKwCAgJBUkJSOiBZb3UgY2FuIGF0dGFjaCBvbmx5IEVHRyB0b2tlbnMgd2l0aCB0aGUgZm9sbG93aW5nIGFzc2V0IGlkOiAJANgEAQkBDWdldEVnZ0Fzc2V0SWQAAwkAZgIFCWxlZnRUb1BheQgFDGZpcnN0UGF5bWVudAZhbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAkdSQlI6IFRvIHJvcGUgYSBlZ2cgeW91IGN1cnJlbnRseSBuZWVkIHRoZSBmb2xsb3dpbmcgYW1vdW50IG9mIEVHR2xldHM6IAkApAMBBQlsZWZ0VG9QYXkCASAJAKUIAQgFAWkGY2FsbGVyBBVyZWZlcmVyUmV3YXJkRm9yYmVhY2gAAAQGdG9CdXJuBQlsZWZ0VG9QYXkECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACFGJ1cm5BdHRhY2hlZFBheW1lbnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRFZ2dBc3NldElkAAUGdG9CdXJuBQNuaWwDCQAAAgUIYnVybkNhbGwFCGJ1cm5DYWxsBQlsZWZ0VG9QYXkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAMJAAACBQdwYXltZW50BQdwYXltZW50BAZyZWZ1bmQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCWxlZnRUb1BheQkBDWdldEVnZ0Fzc2V0SWQABQNuaWwEDHJlY29yZEFjdGlvbgkA/AcECQERZ2V0Q291cG9uc0FkZHJlc3MAAgxyZWNvcmRBY3Rpb24JAMwIAgIEUk9QRQUDbmlsBQNuaWwDCQAAAgUMcmVjb3JkQWN0aW9uBQxyZWNvcmRBY3Rpb24DCQECIT0CBQZleGlzdHMCAAkAAgECN1JCUjogUm9wZSB3YXMgYWxyZWFkeSBib3VnaHQgZm9yIHRoaXMgZWdnIGJ5IHRoaXMgdXNlciEJAM4IAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQhlZ2dJZEtleQIFBWVnZ0lkCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkArAICCQCsAgIJAKQDAQUFcHJpY2UCATsJAKQDAQUIZGlzdGFuY2UFA25pbAUMdmFsaWRQYXltZW50BQZyZWZ1bmQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPYnV5Um9wZUludmVydGVkBAVlZ2dJZAVwcmljZQhkaXN0YW5jZRBiYWNrZW5kU2lnbmF0dXJlBA1hZGRyZXNzU3RyaW5nCQClCAEIBQFpBmNhbGxlcgQMYmFja2VuZFByb29mCQEPZ2V0QmFja2VuZFByb29mAwUFZWdnSWQFBXByaWNlBQhkaXN0YW5jZQQGZXhpc3RzCQEMdHJ5R2V0U3RyaW5nAQkBCGVnZ0lkS2V5AgUFZWdnSWQJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAloYWxmUHJpY2UJAGkCBQVwcmljZQACBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AgkAkQMCCAUBaQhwYXltZW50cwAABQVwcmljZQMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAMJAQEhAQkAxBMDCQCbAwEFDGJhY2tlbmRQcm9vZgkA2QQBBRBiYWNrZW5kU2lnbmF0dXJlCQEQZ2V0QmFja2VuZFB1YktleQAJAAIBAh9SQlI6IEludmFsaWQgcHJvb2YgZnJvbSBiYWNrZW5kAwkAZgIFCGRpc3RhbmNlAOgHCQACAQI0UkJSOiBZb3UgY2FuIG9ubHkgbWF4aW11bSBib29zdCAxMDAwbWV0ZXJzIGRpc3RhbmNlIQQJbGVmdFRvUGF5AwkAAAIIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyBBNhbW91bnRQYWlkQnlDb3Vwb25zCQEFYXNJbnQBCQD8BwQJARFnZXRDb3Vwb25zQWRkcmVzcwACCnVzZUNvdXBvbnMJAMwIAgUJaGFsZlByaWNlBQNuaWwFA25pbAMJAAACBRNhbW91bnRQYWlkQnlDb3Vwb25zBRNhbW91bnRQYWlkQnlDb3Vwb25zCQBlAgUJaGFsZlByaWNlBRNhbW91bnRQYWlkQnlDb3Vwb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQloYWxmUHJpY2UEBnJlZnVuZAMJAQIhPQIFCWxlZnRUb1BheQAABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQMJAQIhPQIIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQACAQkArAICAkFSQlI6IFlvdSBjYW4gYXR0YWNoIG9ubHkgRUdHIHRva2VucyB3aXRoIHRoZSBmb2xsb3dpbmcgYXNzZXQgaWQ6IAkA2AQBCQENZ2V0RWdnQXNzZXRJZAADCQBmAgUJbGVmdFRvUGF5CAUMZmlyc3RQYXltZW50BmFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICR1JCUjogVG8gcm9wZSBhIGVnZyB5b3UgY3VycmVudGx5IG5lZWQgdGhlIGZvbGxvd2luZyBhbW91bnQgb2YgRUdHbGV0czogCQCkAwEFCWxlZnRUb1BheQIBIAkApQgBCAUBaQZjYWxsZXIEFXJlZmVyZXJSZXdhcmRGb3JiZWFjaAAABAZ0b0J1cm4FCWxlZnRUb1BheQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABQZ0b0J1cm4FA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFCWxlZnRUb1BheQkBDWdldEVnZ0Fzc2V0SWQABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQZyZWZ1bmQFBnJlZnVuZAQMcmVjb3JkQWN0aW9uCQD8BwQJARFnZXRDb3Vwb25zQWRkcmVzcwACDHJlY29yZEFjdGlvbgkAzAgCAgRST1BFBQNuaWwFA25pbAMJAAACBQxyZWNvcmRBY3Rpb24FDHJlY29yZEFjdGlvbgMJAQIhPQIFBmV4aXN0cwIACQACAQI3UkJSOiBSb3BlIHdhcyBhbHJlYWR5IGJvdWdodCBmb3IgdGhpcyBlZ2cgYnkgdGhpcyB1c2VyIQkAzggCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCGVnZ0lkS2V5AgUFZWdnSWQJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQCsAgIJAKwCAgkApAMBBQVwcmljZQIBOwkApAMBBQhkaXN0YW5jZQUDbmlsBQx2YWxpZFBheW1lbnQFBnJlZnVuZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAe6dXk", "height": 3857100, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BLWzfYAp25dmRKFzcvYiyqzhGd1z9qzC8PVBBWfP9k8b Next: BUBG9dQsFJJsoxSrf5A7PCYLrZ2JjV5fxNEWA9HKDofh Diff:
Old | New | Differences | |
---|---|---|---|
166 | 166 | else throw("Strict value is not equal to itself.") | |
167 | 167 | } | |
168 | 168 | else halfPrice | |
169 | - | let | |
169 | + | let refund = if ((leftToPay != 0)) | |
170 | 170 | then { | |
171 | 171 | let firstPayment = value(i.payments[1]) | |
172 | 172 | if ((firstPayment.assetId != getEggAssetId())) | |
178 | 178 | let toBurn = leftToPay | |
179 | 179 | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)]) | |
180 | 180 | if ((burnCall == burnCall)) | |
181 | - | then leftToPay | |
181 | + | then [ScriptTransfer(i.caller, (i.payments[1].amount - leftToPay), getEggAssetId())] | |
182 | 182 | else throw("Strict value is not equal to itself.") | |
183 | 183 | } | |
184 | 184 | } | |
185 | - | else | |
186 | - | if (( | |
185 | + | else nil | |
186 | + | if ((refund == refund)) | |
187 | 187 | then { | |
188 | - | let refund = [ScriptTransfer(i.caller, (i.payments[1].amount - leftToPay), getEggAssetId())] | |
189 | 188 | let recordAction = invoke(getCouponsAddress(), "recordAction", ["ROPE"], nil) | |
190 | 189 | if ((recordAction == recordAction)) | |
191 | 190 | then if ((exists != "")) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func staticKey_oracleAddress () = "static_oracleAddress" | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func staticKey_feeAggregator () = "static_feeAggregator" | |
8 | 8 | ||
9 | 9 | ||
10 | 10 | func staticKey_eggAssetId () = "static_eggAssetId" | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func staticKey_backendPubKey () = "static_backendPubKey" | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func staticKey_refContractAddress () = "static_refContractAddress" | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func staticKey_burnAddress () = "static_burnAddress" | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func staticKey_couponsAddress () = "static_couponsAddress" | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | func eggIdKey (eggId,user) = ((("eggId_" + eggId) + "_") + user) | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func tryGetStringExternal (address,key) = match getString(address, key) { | |
29 | 29 | case a: String => | |
30 | 30 | a | |
31 | 31 | case _ => | |
32 | 32 | "" | |
33 | 33 | } | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func tryGetString (key) = tryGetStringExternal(this, key) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress()))) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId())) | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func getBackendPubKey () = fromBase58String(getStringValue(getOracle(), staticKey_backendPubKey())) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator()))) | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress()))) | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress()))) | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress()))) | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func getBackendProof (eggId,price,distance) = makeString([eggId, toString(price), toString(distance)], ";") | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func checkAdditionalPayment (payment,amount) = if (isDefined(payment.assetId)) | |
64 | 64 | then throw("RCAP: Please attach waves") | |
65 | 65 | else if ((payment.amount != amount)) | |
66 | 66 | then throw((("RCAP: Please attach exactly " + toString(amount)) + " amount of wavelets")) | |
67 | 67 | else [ScriptTransfer(getFeeAggregator(), amount, unit)] | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | func asBoolean (value) = match value { | |
71 | 71 | case boolean: Boolean => | |
72 | 72 | boolean | |
73 | 73 | case _ => | |
74 | 74 | throw("TI: wrong type, expected: Boolean") | |
75 | 75 | } | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func asInt (value) = match value { | |
79 | 79 | case int: Int => | |
80 | 80 | int | |
81 | 81 | case _ => | |
82 | 82 | throw("FAI: wrong type, expected: Int") | |
83 | 83 | } | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | @Callable(i) | |
87 | 87 | func configureOracle (oracle) = if ((i.caller != this)) | |
88 | 88 | then throw("RCO: admin only") | |
89 | 89 | else [StringEntry(staticKey_oracleAddress(), oracle)] | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | ||
93 | 93 | @Callable(i) | |
94 | 94 | func buyRope (eggId,price,distance,backendSignature) = { | |
95 | 95 | let addressString = toString(i.caller) | |
96 | 96 | let backendProof = getBackendProof(eggId, price, distance) | |
97 | 97 | let exists = tryGetString(eggIdKey(eggId, toString(i.originCaller))) | |
98 | 98 | let halfPrice = (price / 2) | |
99 | 99 | let validPayment = checkAdditionalPayment(i.payments[1], price) | |
100 | 100 | if ((validPayment == validPayment)) | |
101 | 101 | then if (!(sigVerify_8Kb(toBytes(backendProof), fromBase58String(backendSignature), getBackendPubKey()))) | |
102 | 102 | then throw("RBR: Invalid proof from backend") | |
103 | 103 | else if ((distance > 1000)) | |
104 | 104 | then throw("RBR: You can only maximum boost 1000meters distance!") | |
105 | 105 | else { | |
106 | 106 | let leftToPay = if ((i.originCaller == i.caller)) | |
107 | 107 | then { | |
108 | 108 | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [halfPrice], nil)) | |
109 | 109 | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
110 | 110 | then (halfPrice - amountPaidByCoupons) | |
111 | 111 | else throw("Strict value is not equal to itself.") | |
112 | 112 | } | |
113 | 113 | else halfPrice | |
114 | 114 | let payment = if ((leftToPay != 0)) | |
115 | 115 | then { | |
116 | 116 | let firstPayment = value(i.payments[0]) | |
117 | 117 | if ((firstPayment.assetId != getEggAssetId())) | |
118 | 118 | then throw(("RBR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
119 | 119 | else if ((leftToPay > firstPayment.amount)) | |
120 | 120 | then throw(((("RBR: To rope a egg you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
121 | 121 | else { | |
122 | 122 | let refererRewardForbeach = 0 | |
123 | 123 | let toBurn = leftToPay | |
124 | 124 | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)]) | |
125 | 125 | if ((burnCall == burnCall)) | |
126 | 126 | then leftToPay | |
127 | 127 | else throw("Strict value is not equal to itself.") | |
128 | 128 | } | |
129 | 129 | } | |
130 | 130 | else 0 | |
131 | 131 | if ((payment == payment)) | |
132 | 132 | then { | |
133 | 133 | let refund = [ScriptTransfer(i.caller, (i.payments[0].amount - leftToPay), getEggAssetId())] | |
134 | 134 | let recordAction = invoke(getCouponsAddress(), "recordAction", ["ROPE"], nil) | |
135 | 135 | if ((recordAction == recordAction)) | |
136 | 136 | then if ((exists != "")) | |
137 | 137 | then throw("RBR: Rope was already bought for this egg by this user!") | |
138 | 138 | else (([StringEntry(eggIdKey(eggId, toString(i.originCaller)), ((toString(price) + ";") + toString(distance)))] ++ validPayment) ++ refund) | |
139 | 139 | else throw("Strict value is not equal to itself.") | |
140 | 140 | } | |
141 | 141 | else throw("Strict value is not equal to itself.") | |
142 | 142 | } | |
143 | 143 | else throw("Strict value is not equal to itself.") | |
144 | 144 | } | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | ||
148 | 148 | @Callable(i) | |
149 | 149 | func buyRopeInverted (eggId,price,distance,backendSignature) = { | |
150 | 150 | let addressString = toString(i.caller) | |
151 | 151 | let backendProof = getBackendProof(eggId, price, distance) | |
152 | 152 | let exists = tryGetString(eggIdKey(eggId, toString(i.originCaller))) | |
153 | 153 | let halfPrice = (price / 2) | |
154 | 154 | let validPayment = checkAdditionalPayment(i.payments[0], price) | |
155 | 155 | if ((validPayment == validPayment)) | |
156 | 156 | then if (!(sigVerify_8Kb(toBytes(backendProof), fromBase58String(backendSignature), getBackendPubKey()))) | |
157 | 157 | then throw("RBR: Invalid proof from backend") | |
158 | 158 | else if ((distance > 1000)) | |
159 | 159 | then throw("RBR: You can only maximum boost 1000meters distance!") | |
160 | 160 | else { | |
161 | 161 | let leftToPay = if ((i.originCaller == i.caller)) | |
162 | 162 | then { | |
163 | 163 | let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [halfPrice], nil)) | |
164 | 164 | if ((amountPaidByCoupons == amountPaidByCoupons)) | |
165 | 165 | then (halfPrice - amountPaidByCoupons) | |
166 | 166 | else throw("Strict value is not equal to itself.") | |
167 | 167 | } | |
168 | 168 | else halfPrice | |
169 | - | let | |
169 | + | let refund = if ((leftToPay != 0)) | |
170 | 170 | then { | |
171 | 171 | let firstPayment = value(i.payments[1]) | |
172 | 172 | if ((firstPayment.assetId != getEggAssetId())) | |
173 | 173 | then throw(("RBR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId()))) | |
174 | 174 | else if ((leftToPay > firstPayment.amount)) | |
175 | 175 | then throw(((("RBR: To rope a egg you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller))) | |
176 | 176 | else { | |
177 | 177 | let refererRewardForbeach = 0 | |
178 | 178 | let toBurn = leftToPay | |
179 | 179 | let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)]) | |
180 | 180 | if ((burnCall == burnCall)) | |
181 | - | then leftToPay | |
181 | + | then [ScriptTransfer(i.caller, (i.payments[1].amount - leftToPay), getEggAssetId())] | |
182 | 182 | else throw("Strict value is not equal to itself.") | |
183 | 183 | } | |
184 | 184 | } | |
185 | - | else | |
186 | - | if (( | |
185 | + | else nil | |
186 | + | if ((refund == refund)) | |
187 | 187 | then { | |
188 | - | let refund = [ScriptTransfer(i.caller, (i.payments[1].amount - leftToPay), getEggAssetId())] | |
189 | 188 | let recordAction = invoke(getCouponsAddress(), "recordAction", ["ROPE"], nil) | |
190 | 189 | if ((recordAction == recordAction)) | |
191 | 190 | then if ((exists != "")) | |
192 | 191 | then throw("RBR: Rope was already bought for this egg by this user!") | |
193 | 192 | else (([StringEntry(eggIdKey(eggId, toString(i.originCaller)), ((toString(price) + ";") + toString(distance)))] ++ validPayment) ++ refund) | |
194 | 193 | else throw("Strict value is not equal to itself.") | |
195 | 194 | } | |
196 | 195 | else throw("Strict value is not equal to itself.") | |
197 | 196 | } | |
198 | 197 | else throw("Strict value is not equal to itself.") | |
199 | 198 | } | |
200 | 199 | ||
201 | 200 |
github/deemru/w8io/3ef1775 146.72 ms ◑