tx · 5MgExG4wEsehYKca3bgKNECGeRAXf9hhQ58or7GjtDx4

3P7aVqHv6fXkYuS4sRW2K17ENZMsbXi3sPV:  -0.01000000 Waves

2023.09.23 23:34 [3834324] smart account 3P7aVqHv6fXkYuS4sRW2K17ENZMsbXi3sPV > SELF 0.00000000 Waves

{ "type": 13, "id": "5MgExG4wEsehYKca3bgKNECGeRAXf9hhQ58or7GjtDx4", "fee": 1000000, "feeAssetId": null, "timestamp": 1695501407770, "version": 2, "chainId": 87, "sender": "3P7aVqHv6fXkYuS4sRW2K17ENZMsbXi3sPV", "senderPublicKey": "5SevHzYFiymbFWe1GPt6nNYccPnfTbMft1DqZWfRH8GN", "proofs": [ "RXdGj3BF7SENaN95jF73ikh9GU82JtQF8k3zb8qPyJkXFGQEivY2swyD4Mbq5bZ4yDjt4iQPRSNiGfi1qFmw53G" ], "script": "base64:BgIiCAISAwoBCBIECgIIARIDCgEIEgQKAggBEgMKAQESAwoBCCEBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQIUc3RhdGljX29yYWNsZUFkZHJlc3MBHnN0YXRpY0tleV90dXJ0bGVTdGFraW5nQWRkcmVzcwACG3N0YXRpY190dXJ0bGVTdGFraW5nQWRkcmVzcwEec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAIbc3RhdGljX3R1cnRsZVJlYmlydGhBZGRyZXNzARVzdGF0aWNLZXlfcm9wZUFkZHJlc3MAAhJzdGF0aWNfcm9wZUFkZHJlc3MBHHN0YXRpY0tleV9sZXZlbFN5c3RlbUFkZHJlc3MAAhlzdGF0aWNfbGV2ZWxTeXN0ZW1BZGRyZXNzARZzdGF0aWNLZXlfc3BpY2VBc3NldElkAAITc3RhdGljX3NwaWNlQXNzZXRJZAERZ2V0UmViaXJ0aEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFXN0YXRpY19yZWJpcnRoQWRkcmVzcwETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBEWdldEZhcm1pbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfZmFybWluZ0FkZHJlc3MBEmdldEdhbWVEYXBwQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIWc3RhdGljX2dhbWVEYXBwQWRkcmVzcwEOZ2V0QnVybkFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACEnN0YXRpY19idXJuQWRkcmVzcwESZ2V0QmFieWR1Y2tBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhZzdGF0aWNfYmFieUR1Y2tBZGRyZXNzARJnZXRCcmVlZGluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEQZ2V0TWFzdGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIWc3RhdGljX2NmTWFzdGVyQWRkcmVzcwEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAARdnZXRUdXJ0bGVSZWJpcnRoQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV90dXJ0bGVSZWJpcnRoQWRkcmVzcwABDmdldFJvcGVBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEVc3RhdGljS2V5X3JvcGVBZGRyZXNzAAEPZ2V0U3BpY2VBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9zcGljZUFzc2V0SWQAARVnZXRMZXZlbFN5c3RlbUFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARxzdGF0aWNLZXlfbGV2ZWxTeXN0ZW1BZGRyZXNzAAAId0FjY1BLZXkJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQlnZXRPcmFjbGUAAg9zdGF0aWNfd2Fyc1BLZXkCG3N0YXRpY193YXJzUEtleSBub3QgZGVmaW5lZAAPc2NDYW5Vc2VDb3Vwb25zCQDMCAIJARFnZXRSZWJpcnRoQWRkcmVzcwAJAMwIAgkBE2dldEluY3ViYXRvckFkZHJlc3MACQDMCAIJARFnZXRGYXJtaW5nQWRkcmVzcwAJAMwIAgkBEmdldEdhbWVEYXBwQWRkcmVzcwAJAMwIAgkBEmdldEJhYnlkdWNrQWRkcmVzcwAJAMwIAgkBEmdldEJyZWVkaW5nQWRkcmVzcwAJAMwIAgkBF2dldFR1cnRsZVN0YWtpbmdBZGRyZXNzAAkAzAgCCQEXZ2V0VHVydGxlUmViaXJ0aEFkZHJlc3MACQDMCAIJAQ5nZXRSb3BlQWRkcmVzcwAJAMwIAgkBFWdldExldmVsU3lzdGVtQWRkcmVzcwAFA25pbAEQY291cG9uc1VzZXJTcGVuZAEEdXNlcgkArAICBQR1c2VyAgZfc3BlbmQBEWNvdXBvbnNVc2VyQWN0aXZlAQR1c2VyCQCsAgIFBHVzZXICB19hY3RpdmUBFGNvdXBvbnNVc2VyQWN0aXZlT2xkAQR1c2VyCQCsAgIJARFjb3Vwb25zVXNlckFjdGl2ZQEFBHVzZXICBF9vbGQBEGNvdXBvbnNTcGVuZE9uU2MBAnNjCQCsAgIFAnNjAg9fc3BlbmRfYnlfdXNpbmcBF2FjdGlvblBlckFkZHJlc3NQZXJVc2VyAwR1c2VyBmFjdGlvbgtkYXBwQWRkcmVzcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFC2RhcHBBZGRyZXNzAgFfBQZhY3Rpb24CAV8FBHVzZXICCF9hY3Rpb25zARJhZGRDb3Vwb25zSW50ZXJuYWwCBHVzZXIGYW1vdW50BAZrZXlPbGQJARRjb3Vwb25zVXNlckFjdGl2ZU9sZAEFBHVzZXIEA2tleQkBEWNvdXBvbnNVc2VyQWN0aXZlAQUEdXNlcgQKY291cG9uc09sZAkBDXRyeUdldEludGVnZXIBBQNrZXkEB2NvdXBvbnMJAGQCBQpjb3Vwb25zT2xkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFBmtleU9sZAUKY291cG9uc09sZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQdjb3Vwb25zBQNuaWwACXN0YXJ0VHNNcwCAiNj6qzEBF2NhbGN1bGF0ZURheXNTaW5jZVN0YXJ0AAQEZGlmZgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzdGFydFRzTXMECmRheXNQYXNzZWQJAGkCBQRkaWZmCQBoAgCAowUA6AcFCmRheXNQYXNzZWQBCXBheUFjdGlvbgMKYWN0aW9uTmFtZQt1c2VyQWRkcmVzcwZhbW91bnQDCQAAAgUKYWN0aW9uTmFtZQIEUk9QRQMJAAACBQZhbW91bnQABQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwCA4esXCQEPZ2V0U3BpY2VBc3NldElkAAUDbmlsAwkAAAIFBmFtb3VudAAKCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzAICjw0cJAQ9nZXRTcGljZUFzc2V0SWQABQNuaWwDCQAAAgUGYW1vdW50AA8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MAgMaGjwEJAQ9nZXRTcGljZUFzc2V0SWQABQNuaWwFA25pbAMJAAACBQphY3Rpb25OYW1lAgdSRUJJUlRIAwkAAAIFBmFtb3VudAABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzAIDC1y8JAQ9nZXRTcGljZUFzc2V0SWQABQNuaWwFA25pbAMJAAACBQphY3Rpb25OYW1lAgdMRVZFTFVQCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzAIDKte4BCQEPZ2V0U3BpY2VBc3NldElkAAUDbmlsBQNuaWwGAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPQ0NPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQphZGRDb3Vwb25zAgR1c2VyBmFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUId0FjY1BLZXkHCQACAQIPQ0FDOiBhZG1pbiBvbmx5CQESYWRkQ291cG9uc0ludGVybmFsAgUEdXNlcgUGYW1vdW50AWkBD2FkZENvdXBvbnNCYXRjaAEFYmF0Y2gDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFCHdBY2NQS2V5BwkAAgECD0NBQzogYWRtaW4gb25seQQLY291cG9uc0xpc3QJALUJAgUFYmF0Y2gCATsKAQxoYW5kbGVDb3Vwb24CA2FjYwZjb3Vwb24ECnNwbGl0QXJyYXkJALUJAgUGY291cG9uAgE6BAR1c2VyCQCRAwIFCnNwbGl0QXJyYXkAAAQGYW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3BsaXRBcnJheQABBAhidXJuQ2FsbAkA/AcECQEOZ2V0QnVybkFkZHJlc3MAAgxidXJuQnlJbnZva2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwJAM4IAgUDYWNjCQESYWRkQ291cG9uc0ludGVybmFsAgUEdXNlcgUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgACJGwFC2NvdXBvbnNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxoYW5kbGVDb3Vwb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAFpAQhDRlJlZnVuZAIJcmVjaXBpZW50BmFtb3VudAQJY2ZBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MykCCAUBaQZjYWxsZXICCkNGX0FERFJFU1MEA2tleQkArAICCQCsAgICAmZfBQljZkFkZHJlc3MCDl9zdGFrZV9hZGRyZXNzBAxzdGFrZUFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIJARBnZXRNYXN0ZXJBZGRyZXNzAAUDa2V5AwkBAiE9AgUMc3Rha2VBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkAAgECJkNDUjogVGhpcyBpcyBzb21ldGhpbmcgZmlzaHkgZ29pbmcgb24hCQESYWRkQ291cG9uc0ludGVybmFsAgUJcmVjaXBpZW50BQZhbW91bnQBaQEKdXNlQ291cG9ucwERYW1vdW50VHJ5aW5nVG9QYXkECmludm9raW5nU2MIBQFpBmNhbGxlcgMJAGYCAAAFEWFtb3VudFRyeWluZ1RvUGF5CQACAQIvQ1VDOiBPbmx5IHBvc2l0aXZlIGFtb3VudCBvZiBtb25leSBjYW4gYmUgcGFpZCEDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ9zY0NhblVzZUNvdXBvbnMFCmludm9raW5nU2MJAAIBAj1DVUM6IE9ubHkgY2VydGFpbiBzbWFydCBjb250cmFjdHMgY2FuIHVzZSB0aGlzIGNvdXBvbiBtb2R1bGUhBAR1c2VyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQJa2V5QWN0aXZlCQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyBBBhdmFpbGFibGVDb3Vwb25zCQENdHJ5R2V0SW50ZWdlcgEFCWtleUFjdGl2ZQMJAGYCAAAFEGF2YWlsYWJsZUNvdXBvbnMJAAIBAg5DVUM6IEdldCByZWt0IQQJbGVmdFRvUGF5AwkAZgIFEWFtb3VudFRyeWluZ1RvUGF5BRBhdmFpbGFibGVDb3Vwb25zCQBlAgURYW1vdW50VHJ5aW5nVG9QYXkFEGF2YWlsYWJsZUNvdXBvbnMAAAQKYW1vdW50UGFpZAkAZQIFEWFtb3VudFRyeWluZ1RvUGF5BQlsZWZ0VG9QYXkEFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQBlAgUQYXZhaWxhYmxlQ291cG9ucwUKYW1vdW50UGFpZAMJAGYCAAAFFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQACAQIaQ1VDOiBZb3UgdHJ5IHRvIG92ZXJzcGVuZCEECGtleVNwZW5kCQEQY291cG9uc1VzZXJTcGVuZAEFBHVzZXIEBmtleU9sZAkBFGNvdXBvbnNVc2VyQWN0aXZlT2xkAQUEdXNlcgQKa2V5U3BlbmRTYwkBEGNvdXBvbnNTcGVuZE9uU2MBCQClCAEIBQFpBmNhbGxlcgQKdG90YWxTcGVuZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUIa2V5U3BlbmQFCmFtb3VudFBhaWQEDHRvdGFsU3BlbmRTYwkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUKa2V5U3BlbmRTYwUKYW1vdW50UGFpZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhrZXlTcGVuZAUKdG90YWxTcGVuZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUGa2V5T2xkBRBhdmFpbGFibGVDb3Vwb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlBY3RpdmUFFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprZXlTcGVuZFNjBQx0b3RhbFNwZW5kU2MFA25pbAUKYW1vdW50UGFpZAFpAQxyZWNvcmRBY3Rpb24BCmFjdGlvbk5hbWUDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ9zY0NhblVzZUNvdXBvbnMIBQFpBmNhbGxlcgkAAgECPUNSQTogT25seSBjZXJ0YWluIHNtYXJ0IGNvbnRyYWN0cyBjYW4gdXNlIHRoaXMgcmV3YXJkIG1vZHVsZSEEA2RheQkBF2NhbGN1bGF0ZURheXNTaW5jZVN0YXJ0AAQJYWN0aW9uS2V5CQEXYWN0aW9uUGVyQWRkcmVzc1BlclVzZXIDCQClCAEIBQFpDG9yaWdpbkNhbGxlcgUKYWN0aW9uTmFtZQkApQgBCAUBaQZjYWxsZXIEDHRvdGFsQWN0aW9ucwkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUJYWN0aW9uS2V5AAEJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYWN0aW9uS2V5BQx0b3RhbEFjdGlvbnMFA25pbAkBCXBheUFjdGlvbgMFCmFjdGlvbk5hbWUIBQFpDG9yaWdpbkNhbGxlcgUMdG90YWxBY3Rpb25zAEZ7rf8=", "height": 3834324, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4vNMb5yNRgaNLSrEhyfu2tKbzsTXrUbtRTieJVYEKsqD Next: 8VB4UVAAPKNLJPoKT7mS9ojGxiwyRM4Pt7ZVjA5Ffdes Diff:
OldNewDifferences
3030
3131
3232 func staticKey_ropeAddress () = "static_ropeAddress"
33+
34+
35+func staticKey_levelSystemAddress () = "static_levelSystemAddress"
3336
3437
3538 func staticKey_spiceAssetId () = "static_spiceAssetId"
7174 func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
7275
7376
77+func getLevelSystemAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_levelSystemAddress())))
78+
79+
7480 let wAccPKey = fromBase58String(valueOrErrorMessage(getString(getOracle(), "static_warsPKey"), "static_warsPKey not defined"))
7581
76-let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress(), getBabyduckAddress(), getBreedingAddress(), getTurtleStakingAddress(), getTurtleRebirthAddress(), getRopeAddress()]
82+let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress(), getBabyduckAddress(), getBreedingAddress(), getTurtleStakingAddress(), getTurtleRebirthAddress(), getRopeAddress(), getLevelSystemAddress()]
7783
7884 func couponsUserSpend (user) = (user + "_spend")
7985
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetString (key) = tryGetStringExternal(this, key)
1313
1414
1515 func tryGetInteger (key) = match getInteger(this, key) {
1616 case b: Int =>
1717 b
1818 case _ =>
1919 0
2020 }
2121
2222
2323 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
2424
2525
2626 func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
2727
2828
2929 func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
3030
3131
3232 func staticKey_ropeAddress () = "static_ropeAddress"
33+
34+
35+func staticKey_levelSystemAddress () = "static_levelSystemAddress"
3336
3437
3538 func staticKey_spiceAssetId () = "static_spiceAssetId"
3639
3740
3841 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
3942
4043
4144 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
4245
4346
4447 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress")))
4548
4649
4750 func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress")))
4851
4952
5053 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
5154
5255
5356 func getBabyduckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
5457
5558
5659 func getBreedingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
5760
5861
5962 func getMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress")))
6063
6164
6265 func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
6366
6467
6568 func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
6669
6770
6871 func getRopeAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_ropeAddress())))
6972
7073
7174 func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
7275
7376
77+func getLevelSystemAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_levelSystemAddress())))
78+
79+
7480 let wAccPKey = fromBase58String(valueOrErrorMessage(getString(getOracle(), "static_warsPKey"), "static_warsPKey not defined"))
7581
76-let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress(), getBabyduckAddress(), getBreedingAddress(), getTurtleStakingAddress(), getTurtleRebirthAddress(), getRopeAddress()]
82+let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress(), getBabyduckAddress(), getBreedingAddress(), getTurtleStakingAddress(), getTurtleRebirthAddress(), getRopeAddress(), getLevelSystemAddress()]
7783
7884 func couponsUserSpend (user) = (user + "_spend")
7985
8086
8187 func couponsUserActive (user) = (user + "_active")
8288
8389
8490 func couponsUserActiveOld (user) = (couponsUserActive(user) + "_old")
8591
8692
8793 func couponsSpendOnSc (sc) = (sc + "_spend_by_using")
8894
8995
9096 func actionPerAddressPerUser (user,action,dappAddress) = (((((dappAddress + "_") + action) + "_") + user) + "_actions")
9197
9298
9399 func addCouponsInternal (user,amount) = {
94100 let keyOld = couponsUserActiveOld(user)
95101 let key = couponsUserActive(user)
96102 let couponsOld = tryGetInteger(key)
97103 let coupons = (couponsOld + amount)
98104 [IntegerEntry(keyOld, couponsOld), IntegerEntry(key, coupons)]
99105 }
100106
101107
102108 let startTsMs = 1695427200000
103109
104110 func calculateDaysSinceStart () = {
105111 let diff = (lastBlock.timestamp - startTsMs)
106112 let daysPassed = (diff / (86400 * 1000))
107113 daysPassed
108114 }
109115
110116
111117 func payAction (actionName,userAddress,amount) = if ((actionName == "ROPE"))
112118 then if ((amount == 5))
113119 then [ScriptTransfer(userAddress, 50000000, getSpiceAssetId())]
114120 else if ((amount == 10))
115121 then [ScriptTransfer(userAddress, 150000000, getSpiceAssetId())]
116122 else if ((amount == 15))
117123 then [ScriptTransfer(userAddress, 300000000, getSpiceAssetId())]
118124 else nil
119125 else if ((actionName == "REBIRTH"))
120126 then if ((amount == 1))
121127 then [ScriptTransfer(userAddress, 100000000, getSpiceAssetId())]
122128 else nil
123129 else if ((actionName == "LEVELUP"))
124130 then [ScriptTransfer(userAddress, 500000000, getSpiceAssetId())]
125131 else nil
126132
127133
128134 @Callable(i)
129135 func configureOracle (oracle) = if ((i.caller != this))
130136 then throw("CCO: admin only")
131137 else [StringEntry("static_oracleAddress", oracle)]
132138
133139
134140
135141 @Callable(i)
136142 func addCoupons (user,amount) = if (if ((i.caller != this))
137143 then (i.callerPublicKey != wAccPKey)
138144 else false)
139145 then throw("CAC: admin only")
140146 else addCouponsInternal(user, amount)
141147
142148
143149
144150 @Callable(i)
145151 func addCouponsBatch (batch) = if (if ((i.caller != this))
146152 then (i.callerPublicKey != wAccPKey)
147153 else false)
148154 then throw("CAC: admin only")
149155 else {
150156 let couponsList = split(batch, ";")
151157 func handleCoupon (acc,coupon) = {
152158 let splitArray = split(coupon, ":")
153159 let user = splitArray[0]
154160 let amount = parseIntValue(splitArray[1])
155161 let burnCall = invoke(getBurnAddress(), "burnByInvoke", [amount], nil)
156162 if ((burnCall == burnCall))
157163 then (acc ++ addCouponsInternal(user, amount))
158164 else throw("Strict value is not equal to itself.")
159165 }
160166
161167 let $l = couponsList
162168 let $s = size($l)
163169 let $acc0 = nil
164170 func $f0_1 ($a,$i) = if (($i >= $s))
165171 then $a
166172 else handleCoupon($a, $l[$i])
167173
168174 func $f0_2 ($a,$i) = if (($i >= $s))
169175 then $a
170176 else throw("List size exceeds 20")
171177
172178 $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)
173179 }
174180
175181
176182
177183 @Callable(i)
178184 func CFRefund (recipient,amount) = {
179185 let cfAddress = getStringValue(i.caller, "CF_ADDRESS")
180186 let key = (("f_" + cfAddress) + "_stake_address")
181187 let stakeAddress = getStringValue(getMasterAddress(), key)
182188 if ((stakeAddress != toString(i.caller)))
183189 then throw("CCR: This is something fishy going on!")
184190 else addCouponsInternal(recipient, amount)
185191 }
186192
187193
188194
189195 @Callable(i)
190196 func useCoupons (amountTryingToPay) = {
191197 let invokingSc = i.caller
192198 if ((0 > amountTryingToPay))
193199 then throw("CUC: Only positive amount of money can be paid!")
194200 else if (!(containsElement(scCanUseCoupons, invokingSc)))
195201 then throw("CUC: Only certain smart contracts can use this coupon module!")
196202 else {
197203 let user = toString(i.originCaller)
198204 let keyActive = couponsUserActive(user)
199205 let availableCoupons = tryGetInteger(keyActive)
200206 if ((0 > availableCoupons))
201207 then throw("CUC: Get rekt!")
202208 else {
203209 let leftToPay = if ((amountTryingToPay > availableCoupons))
204210 then (amountTryingToPay - availableCoupons)
205211 else 0
206212 let amountPaid = (amountTryingToPay - leftToPay)
207213 let availableCouponsLeft = (availableCoupons - amountPaid)
208214 if ((0 > availableCouponsLeft))
209215 then throw("CUC: You try to overspend!")
210216 else {
211217 let keySpend = couponsUserSpend(user)
212218 let keyOld = couponsUserActiveOld(user)
213219 let keySpendSc = couponsSpendOnSc(toString(i.caller))
214220 let totalSpend = (tryGetInteger(keySpend) + amountPaid)
215221 let totalSpendSc = (tryGetInteger(keySpendSc) + amountPaid)
216222 $Tuple2([IntegerEntry(keySpend, totalSpend), IntegerEntry(keyOld, availableCoupons), IntegerEntry(keyActive, availableCouponsLeft), IntegerEntry(keySpendSc, totalSpendSc)], amountPaid)
217223 }
218224 }
219225 }
220226 }
221227
222228
223229
224230 @Callable(i)
225231 func recordAction (actionName) = if (!(containsElement(scCanUseCoupons, i.caller)))
226232 then throw("CRA: Only certain smart contracts can use this reward module!")
227233 else {
228234 let day = calculateDaysSinceStart()
229235 let actionKey = actionPerAddressPerUser(toString(i.originCaller), actionName, toString(i.caller))
230236 let totalActions = (tryGetInteger(actionKey) + 1)
231237 ([IntegerEntry(actionKey, totalActions)] ++ payAction(actionName, i.originCaller, totalActions))
232238 }
233239
234240

github/deemru/w8io/3ef1775 
38.41 ms