tx · 3GAxtEgyBtKKDxPvxTvPShnZ2jm9KvhYsAZiR326s8xQ

3N1EDicoajLL9nm4Gbm5KoomPzUMa9CcRgc:  -0.01500000 Waves

2024.10.03 11:51 [3310453] smart account 3N1EDicoajLL9nm4Gbm5KoomPzUMa9CcRgc > SELF 0.00000000 Waves

{ "type": 13, "id": "3GAxtEgyBtKKDxPvxTvPShnZ2jm9KvhYsAZiR326s8xQ", "fee": 1500000, "feeAssetId": null, "timestamp": 1727945543103, "version": 2, "chainId": 84, "sender": "3N1EDicoajLL9nm4Gbm5KoomPzUMa9CcRgc", "senderPublicKey": "8w3XcvGmSkm4ycfVYRyH1axSp8VaRcmLUc9sW6E8kh83", "proofs": [ "3BhJqhAgEUpZJZJHsSgvDnpxm5WuatRWSQihgTJvUqqEeEU1xhTRCKvsdo6sJJwghy2syyijkGRvZoLGTdP28mXg" ], "script": "base64:BgIyCAISAwoBCBIECgIIARIDCgEIEgQKAggBEgMKAQgSBAoCCAESAwoBARIDCgEIEgMKAQg5ARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAKAIAQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwECFHN0YXRpY19vcmFjbGVBZGRyZXNzAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAAhtzdGF0aWNfdHVydGxlU3Rha2luZ0FkZHJlc3MBHnN0YXRpY0tleV90dXJ0bGVSZWJpcnRoQWRkcmVzcwACG3N0YXRpY190dXJ0bGVSZWJpcnRoQWRkcmVzcwEVc3RhdGljS2V5X3JvcGVBZGRyZXNzAAISc3RhdGljX3JvcGVBZGRyZXNzARxzdGF0aWNLZXlfbGV2ZWxTeXN0ZW1BZGRyZXNzAAIZc3RhdGljX2xldmVsU3lzdGVtQWRkcmVzcwEWc3RhdGljS2V5X3NwaWNlQXNzZXRJZAACE3N0YXRpY19zcGljZUFzc2V0SWQBFXN0YXRpY0tleV9tYXJrZXRwbGFjZQACGXN0YXRpY19tYXJrZXRwbGFjZUFkZHJlc3MBGXN0YXRpY0tleV9jYXBhY2l0eUFkZHJlc3MAAhZzdGF0aWNfY2FwYWNpdHlBZGRyZXNzARxzdGF0aWNLZXlfdmVnZ0Zhcm1pbmdBZGRyZXNzAAIZc3RhdGljX3ZlZ2dGYXJtaW5nQWRkcmVzcwEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwACE3N0YXRpY19pdGVtc0FkZHJlc3MBHnN0YXRpY0tleV9tdXRhbnRGYXJtaW5nQWRkcmVzcwACG3N0YXRpY19tdXRhbnRGYXJtaW5nQWRkcmVzcwEec3RhdGljS2V5X2NhbmluZUJyZWVkZXJBZGRyZXNzAAIbc3RhdGljX2NhbmluZUJyZWVkZXJBZGRyZXNzAR5zdGF0aWNLZXlfZmVsaW5lQnJlZWRlckFkZHJlc3MAAhtzdGF0aWNfZmVsaW5lQnJlZWRlckFkZHJlc3MBHnN0YXRpY0tleV90dXJ0bGVCcmVlZGVyQWRkcmVzcwACG3N0YXRpY190dXJ0bGVCcmVlZGVyQWRkcmVzcwERZ2V0UmViaXJ0aEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFXN0YXRpY19yZWJpcnRoQWRkcmVzcwETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBEWdldEZhcm1pbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhhzdGF0aWNfZmFybWluZ0FkZHJlc3NOZXcBEmdldEdhbWVEYXBwQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIWc3RhdGljX2dhbWVEYXBwQWRkcmVzcwESZ2V0Q2FwYWNpdHlBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEZc3RhdGljS2V5X2NhcGFjaXR5QWRkcmVzcwABDmdldEJ1cm5BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhJzdGF0aWNfYnVybkFkZHJlc3MBEmdldEJhYnlkdWNrQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIWc3RhdGljX2JhYnlEdWNrQWRkcmVzcwESZ2V0QnJlZWRpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBEGdldE1hc3RlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFnN0YXRpY19jZk1hc3RlckFkZHJlc3MBF2dldFR1cnRsZVN0YWtpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X3R1cnRsZVN0YWtpbmdBZGRyZXNzAAEXZ2V0VHVydGxlUmViaXJ0aEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlUmViaXJ0aEFkZHJlc3MAAQ5nZXRSb3BlQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9yb3BlQWRkcmVzcwABD2dldFNwaWNlQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfc3BpY2VBc3NldElkAAEVZ2V0TGV2ZWxTeXN0ZW1BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEcc3RhdGljS2V5X2xldmVsU3lzdGVtQWRkcmVzcwABFWdldE1hcmtldFBsYWNlQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9tYXJrZXRwbGFjZQABFWdldFZlZ2dGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHHN0YXRpY0tleV92ZWdnRmFybWluZ0FkZHJlc3MAAQ9nZXRJdGVtc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAEXZ2V0TXV0YW50RmFybWluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfbXV0YW50RmFybWluZ0FkZHJlc3MAARdnZXRDYW5pbmVGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIbc3RhdGljX2NhbmluZVN0YWtpbmdBZGRyZXNzARdnZXRGZWxpbmVGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIbc3RhdGljX2ZlbGluZVN0YWtpbmdBZGRyZXNzARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9jYW5pbmVCcmVlZGVyQWRkcmVzcwABF2dldEZlbGluZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X2ZlbGluZUJyZWVkZXJBZGRyZXNzAAEXZ2V0VHVydGxlQnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlQnJlZWRlckFkZHJlc3MAAAh3QWNjUEtleQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBCWdldE9yYWNsZQACD3N0YXRpY193YXJzUEtleQIbc3RhdGljX3dhcnNQS2V5IG5vdCBkZWZpbmVkAA9zY0NhblVzZUNvdXBvbnMJAMwIAgkBEWdldFJlYmlydGhBZGRyZXNzAAkAzAgCCQETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAMwIAgkBEWdldEZhcm1pbmdBZGRyZXNzAAkAzAgCCQESZ2V0R2FtZURhcHBBZGRyZXNzAAkAzAgCCQESZ2V0QmFieWR1Y2tBZGRyZXNzAAkAzAgCCQESZ2V0QnJlZWRpbmdBZGRyZXNzAAkAzAgCCQEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MACQDMCAIJARdnZXRUdXJ0bGVSZWJpcnRoQWRkcmVzcwAJAMwIAgkBDmdldFJvcGVBZGRyZXNzAAkAzAgCCQEVZ2V0TGV2ZWxTeXN0ZW1BZGRyZXNzAAkAzAgCCQEVZ2V0TWFya2V0UGxhY2VBZGRyZXNzAAkAzAgCCQESZ2V0Q2FwYWNpdHlBZGRyZXNzAAkAzAgCCQEXZ2V0TXV0YW50RmFybWluZ0FkZHJlc3MACQDMCAIJARdnZXRDYW5pbmVGYXJtaW5nQWRkcmVzcwAJAMwIAgkBF2dldEZlbGluZUZhcm1pbmdBZGRyZXNzAAkAzAgCCQEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MACQDMCAIJARdnZXRGZWxpbmVCcmVlZGVyQWRkcmVzcwAJAMwIAgkBF2dldFR1cnRsZUJyZWVkZXJBZGRyZXNzAAkAzAgCBQR0aGlzBQNuaWwBEGNvdXBvbnNVc2VyU3BlbmQBBHVzZXIJAKwCAgUEdXNlcgIGX3NwZW5kARFjb3Vwb25zVXNlckFjdGl2ZQEEdXNlcgkArAICBQR1c2VyAgdfYWN0aXZlARRjb3Vwb25zVXNlckFjdGl2ZU9sZAEEdXNlcgkArAICCQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyAgRfb2xkARBjb3Vwb25zU3BlbmRPblNjAQJzYwkArAICBQJzYwIPX3NwZW5kX2J5X3VzaW5nAR1hY3Rpb25QZXJBZGRyZXNzUGVyVXNlclBlckRheQQEdXNlcgZhY3Rpb24LZGFwcEFkZHJlc3MDZGF5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFC2RhcHBBZGRyZXNzAgFfBQZhY3Rpb24CAV8FBHVzZXICAV8FA2RheQIIX2FjdGlvbnMBI2FjdGlvblBlckFkZHJlc3NQZXJVc2VyTGFzdENoZWNrRGF5AgR1c2VyBmFjdGlvbgkArAICCQCsAgIJAKwCAgUGYWN0aW9uAgFfBQR1c2VyAhJfYWN0aW9uc19jaGVja19kYXkBI2FjdGlvblBlckFkZHJlc3NQZXJVc2VyQW1vdW50SW5BUm93AgR1c2VyBmFjdGlvbgkArAICCQCsAgIJAKwCAgUGYWN0aW9uAgFfBQR1c2VyAhZfYWN0aW9uc19hbW91bnRfaW5fcm93AQ51c2VyRXhwZXJpZW5jZQEEdXNlcgkArAICBQR1c2VyAgtfZXhwZXJpZW5jZQESYWRkQ291cG9uc0ludGVybmFsAgR1c2VyBmFtb3VudAQGa2V5T2xkCQEUY291cG9uc1VzZXJBY3RpdmVPbGQBBQR1c2VyBANrZXkJARFjb3Vwb25zVXNlckFjdGl2ZQEFBHVzZXIECmNvdXBvbnNPbGQJAQ10cnlHZXRJbnRlZ2VyAQUDa2V5BAdjb3Vwb25zCQBkAgUKY291cG9uc09sZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZrZXlPbGQFCmNvdXBvbnNPbGQJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUHY291cG9ucwUDbmlsAAlzdGFydFRzTXMAgIjY+qsxARdjYWxjdWxhdGVEYXlzU2luY2VTdGFydAAEBGRpZmYJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc3RhcnRUc01zBApkYXlzUGFzc2VkCQBpAgUEZGlmZgkAaAIAgKMFAOgHBQpkYXlzUGFzc2VkARBoYXNEb25lVGFzazdEYXlzBQNkYXkHYWRkcmVzcwphY3Rpb25OYW1lDHJld2FyZEFtb3VudBJyZXdhcmRBbW91bnRXZWVrbHkEEXVzZXJFeHBlcmllbmNlS2V5CQEOdXNlckV4cGVyaWVuY2UBBQdhZGRyZXNzBA91c2VyRXhwVGlsbGRhdGUJAQ10cnlHZXRJbnRlZ2VyAQURdXNlckV4cGVyaWVuY2VLZXkEC2NoZWNrRGF5S2V5CQEjYWN0aW9uUGVyQWRkcmVzc1BlclVzZXJMYXN0Q2hlY2tEYXkCBQdhZGRyZXNzBQphY3Rpb25OYW1lBAxkYXlzSW5Sb3dLZXkJASNhY3Rpb25QZXJBZGRyZXNzUGVyVXNlckFtb3VudEluQVJvdwIFB2FkZHJlc3MFCmFjdGlvbk5hbWUEDGxhc3RDaGVja0RheQkBDXRyeUdldEludGVnZXIBBQtjaGVja0RheUtleQQJZGF5c0luUm93CQENdHJ5R2V0SW50ZWdlcgEFDGRheXNJblJvd0tleQQPZGF5c0luUm93VXBkYXRlAwkAAAIFDGxhc3RDaGVja0RheQkAZQIFA2RheQABCQBkAgUJZGF5c0luUm93AAEDCQBmAgkAZQIFA2RheQABBQxsYXN0Q2hlY2tEYXkAAQAABBJsYXN0Q2hlY2tEYXlVcGRhdGUFA2RheQQGcmV3YXJkAwkAAAIFD2RheXNJblJvd1VwZGF0ZQAHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFEnJld2FyZEFtb3VudFdlZWtseQkBD2dldFNwaWNlQXNzZXRJZAAJAMwIAgkBDEludGVnZXJFbnRyeQIFDGRheXNJblJvd0tleQAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDGRheXNJblJvd0tleQUPZGF5c0luUm93VXBkYXRlBQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgULY2hlY2tEYXlLZXkFEmxhc3RDaGVja0RheVVwZGF0ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQxyZXdhcmRBbW91bnQJAQ9nZXRTcGljZUFzc2V0SWQACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF1c2VyRXhwZXJpZW5jZUtleQkAZAIFD3VzZXJFeHBUaWxsZGF0ZQABBQNuaWwFBnJld2FyZAEJcGF5QWN0aW9uBAphY3Rpb25OYW1lC3VzZXJBZGRyZXNzBmFtb3VudANkYXkEC2NvbXBvc2VkS2V5AwkBDXRyeUdldEJvb2xlYW4BCQCsAgIJAKwCAgIFVEFTS18FCmFjdGlvbk5hbWUCBl9FVkVSWQUKYWN0aW9uTmFtZQkArAICCQCsAgIFCmFjdGlvbk5hbWUCAV8JAKQDAQUGYW1vdW50AwkBDXRyeUdldEJvb2xlYW4BCQCsAgICBVRBU0tfBQtjb21wb3NlZEtleQkBEGhhc0RvbmVUYXNrN0RheXMFBQNkYXkJAKUIAQULdXNlckFkZHJlc3MFC2NvbXBvc2VkS2V5CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgVUQVNLXwULY29tcG9zZWRLZXkCDV9SRVdBUkRfREFJTFkJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICBVRBU0tfBQtjb21wb3NlZEtleQIOX1JFV0FSRF9XRUVLTFkFA25pbAEUcmVjb3JkQWN0aW9uSW50ZXJuYWwDCmFjdGlvbk5hbWUNYWRkcmVzc0NhbGxlcgdhZGRyZXNzAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUPc2NDYW5Vc2VDb3Vwb25zBQ1hZGRyZXNzQ2FsbGVyCQACAQI9Q1JBOiBPbmx5IGNlcnRhaW4gc21hcnQgY29udHJhY3RzIGNhbiB1c2UgdGhpcyByZXdhcmQgbW9kdWxlIQQDZGF5CQEXY2FsY3VsYXRlRGF5c1NpbmNlU3RhcnQABAlhY3Rpb25LZXkJAR1hY3Rpb25QZXJBZGRyZXNzUGVyVXNlclBlckRheQQJAKUIAQUHYWRkcmVzcwUKYWN0aW9uTmFtZQkApQgBBQ1hZGRyZXNzQ2FsbGVyCQCkAwEFA2RheQQMdG90YWxBY3Rpb25zCQBkAgkBDXRyeUdldEludGVnZXIBBQlhY3Rpb25LZXkAAQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhY3Rpb25LZXkFDHRvdGFsQWN0aW9ucwUDbmlsCQEJcGF5QWN0aW9uBAUKYWN0aW9uTmFtZQUHYWRkcmVzcwUMdG90YWxBY3Rpb25zBQNkYXkJAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPQ0NPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQphZGRDb3Vwb25zAgR1c2VyBmFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUId0FjY1BLZXkHCQACAQIPQ0FDOiBhZG1pbiBvbmx5AwkAZwIFBmFtb3VudACAreIECQDOCAIJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMCDFZFR0cxMDAwMDAwMAUEdGhpcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEdXNlcgkBEmFkZENvdXBvbnNJbnRlcm5hbAIFBHVzZXIFBmFtb3VudAMJAGcCBQZhbW91bnQAoMIeCQDOCAIJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMCClZFR0c1MDAwMDAFBHRoaXMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXIJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQBaQEMcmVzZXRDaGVhdGVyAQR1c2VyAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQh3QWNjUEtleQcJAAIBAg9DQUM6IGFkbWluIG9ubHkEBmtleU9sZAkBFGNvdXBvbnNVc2VyQWN0aXZlT2xkAQUEdXNlcgQDa2V5CQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyBApjb3Vwb25zT2xkCQENdHJ5R2V0SW50ZWdlcgEFA2tleQQHY291cG9ucwCAvqjQ//////8BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZrZXlPbGQFCmNvdXBvbnNPbGQJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUHY291cG9ucwUDbmlsAWkBEWFkZENvdXBvbnNGYXJtaW5nAgR1c2VyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgkBFWdldFZlZ2dGYXJtaW5nQWRkcmVzcwAJAAIBAhtNZXRob2Qgb25seSBmb3IgZmFybWluZyBzYyEJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQBaQEPYWRkQ291cG9uc0JhdGNoAQViYXRjaAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUId0FjY1BLZXkHCQACAQIPQ0FDOiBhZG1pbiBvbmx5BAtjb3Vwb25zTGlzdAkAtQkCBQViYXRjaAIBOwoBDGhhbmRsZUNvdXBvbgIDYWNjBmNvdXBvbgQKc3BsaXRBcnJheQkAtQkCBQZjb3Vwb24CAToEBHVzZXIJAJEDAgUKc3BsaXRBcnJheQAABAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzcGxpdEFycmF5AAEECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACDGJ1cm5CeUludm9rZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFCGJ1cm5DYWxsBQhidXJuQ2FsbAMJAGcCBQZhbW91bnQAgK3iBAkAzggCCQDOCAIFA2FjYwkBFHJlY29yZEFjdGlvbkludGVybmFsAwIMVkVHRzEwMDAwMDAwBQR0aGlzCQERQGV4dHJOYXRpdmUoMTA2MikBBQR1c2VyCQESYWRkQ291cG9uc0ludGVybmFsAgUEdXNlcgUGYW1vdW50AwkAZwIFBmFtb3VudACgwh4JAM4IAgkAzggCBQNhY2MJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMCClZFR0c1MDAwMDAFBHRoaXMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXIJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQJAM4IAgUDYWNjCQESYWRkQ291cG9uc0ludGVybmFsAgUEdXNlcgUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgACJGwFC2NvdXBvbnNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxoYW5kbGVDb3Vwb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAFpAQhDRlJlZnVuZAIJcmVjaXBpZW50BmFtb3VudAQJY2ZBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MykCCAUBaQZjYWxsZXICCkNGX0FERFJFU1MEA2tleQkArAICCQCsAgICAmZfBQljZkFkZHJlc3MCDl9zdGFrZV9hZGRyZXNzBAxzdGFrZUFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIJARBnZXRNYXN0ZXJBZGRyZXNzAAUDa2V5AwkBAiE9AgUMc3Rha2VBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkAAgECJkNDUjogVGhpcyBpcyBzb21ldGhpbmcgZmlzaHkgZ29pbmcgb24hCQESYWRkQ291cG9uc0ludGVybmFsAgUJcmVjaXBpZW50BQZhbW91bnQBaQEKdXNlQ291cG9ucwERYW1vdW50VHJ5aW5nVG9QYXkECmludm9raW5nU2MIBQFpBmNhbGxlcgMJAGYCAAAFEWFtb3VudFRyeWluZ1RvUGF5CQACAQIvQ1VDOiBPbmx5IHBvc2l0aXZlIGFtb3VudCBvZiBtb25leSBjYW4gYmUgcGFpZCEDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ9zY0NhblVzZUNvdXBvbnMFCmludm9raW5nU2MJAAIBAj1DVUM6IE9ubHkgY2VydGFpbiBzbWFydCBjb250cmFjdHMgY2FuIHVzZSB0aGlzIGNvdXBvbiBtb2R1bGUhBAR1c2VyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQJa2V5QWN0aXZlCQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyBBBhdmFpbGFibGVDb3Vwb25zCQENdHJ5R2V0SW50ZWdlcgEFCWtleUFjdGl2ZQMJAGYCAAAFEGF2YWlsYWJsZUNvdXBvbnMJAAIBAg5DVUM6IEdldCByZWt0IQQJbGVmdFRvUGF5AwkAZgIFEWFtb3VudFRyeWluZ1RvUGF5BRBhdmFpbGFibGVDb3Vwb25zCQBlAgURYW1vdW50VHJ5aW5nVG9QYXkFEGF2YWlsYWJsZUNvdXBvbnMAAAQKYW1vdW50UGFpZAkAZQIFEWFtb3VudFRyeWluZ1RvUGF5BQlsZWZ0VG9QYXkEFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQBlAgUQYXZhaWxhYmxlQ291cG9ucwUKYW1vdW50UGFpZAMJAGYCAAAFFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQACAQIaQ1VDOiBZb3UgdHJ5IHRvIG92ZXJzcGVuZCEECGtleVNwZW5kCQEQY291cG9uc1VzZXJTcGVuZAEFBHVzZXIEBmtleU9sZAkBFGNvdXBvbnNVc2VyQWN0aXZlT2xkAQUEdXNlcgQKa2V5U3BlbmRTYwkBEGNvdXBvbnNTcGVuZE9uU2MBCQClCAEIBQFpBmNhbGxlcgQFdG9wVXAJAPwHBAkBFWdldFZlZ2dGYXJtaW5nQWRkcmVzcwACC3RvcFVwUmV3YXJkCQDMCAIJAGgCCQBpAgUKYW1vdW50UGFpZABkABkFA25pbAUDbmlsAwkAAAIFBXRvcFVwBQV0b3BVcAQKdG90YWxTcGVuZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUIa2V5U3BlbmQFCmFtb3VudFBhaWQEDHRvdGFsU3BlbmRTYwkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUKa2V5U3BlbmRTYwUKYW1vdW50UGFpZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhrZXlTcGVuZAUKdG90YWxTcGVuZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUGa2V5T2xkBRBhdmFpbGFibGVDb3Vwb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlBY3RpdmUFFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprZXlTcGVuZFNjBQx0b3RhbFNwZW5kU2MFA25pbAUKYW1vdW50UGFpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZWNvcmRBY3Rpb24BCmFjdGlvbk5hbWUJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMFCmFjdGlvbk5hbWUIBQFpBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyAWkBC2luY3JlYXNlRXhwAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyCQEPZ2V0SXRlbXNBZGRyZXNzAAUDbmlsBBF1c2VyRXhwZXJpZW5jZUtleQkBDnVzZXJFeHBlcmllbmNlAQUHYWRkcmVzcwQPdXNlckV4cFRpbGxkYXRlCQENdHJ5R2V0SW50ZWdlcgEFEXVzZXJFeHBlcmllbmNlS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF1c2VyRXhwZXJpZW5jZUtleQkAZAIFD3VzZXJFeHBUaWxsZGF0ZQABBQNuaWwAo7S4eA==", "height": 3310453, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 84E7rtuxKczjJz5UCiETn867obSjkS5VGcYNLCoh7Qy9 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func tryGetStringExternal (address,key) = match getString(address, key) {
5+ case a: String =>
6+ a
7+ case _ =>
8+ ""
9+}
10+
11+
12+func tryGetBoolean (key) = match getBoolean(key) {
13+ case b: Boolean =>
14+ b
15+ case _ =>
16+ false
17+}
18+
19+
20+func tryGetString (key) = tryGetStringExternal(this, key)
21+
22+
23+func tryGetInteger (key) = match getInteger(this, key) {
24+ case b: Int =>
25+ b
26+ case _ =>
27+ 0
28+}
29+
30+
31+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
32+
33+
34+func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
35+
36+
37+func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
38+
39+
40+func staticKey_ropeAddress () = "static_ropeAddress"
41+
42+
43+func staticKey_levelSystemAddress () = "static_levelSystemAddress"
44+
45+
46+func staticKey_spiceAssetId () = "static_spiceAssetId"
47+
48+
49+func staticKey_marketplace () = "static_marketplaceAddress"
50+
51+
52+func staticKey_capacityAddress () = "static_capacityAddress"
53+
54+
55+func staticKey_veggFarmingAddress () = "static_veggFarmingAddress"
56+
57+
58+func staticKey_itemsAddress () = "static_itemsAddress"
59+
60+
61+func staticKey_mutantFarmingAddress () = "static_mutantFarmingAddress"
62+
63+
64+func staticKey_canineBreederAddress () = "static_canineBreederAddress"
65+
66+
67+func staticKey_felineBreederAddress () = "static_felineBreederAddress"
68+
69+
70+func staticKey_turtleBreederAddress () = "static_turtleBreederAddress"
71+
72+
73+func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
74+
75+
76+func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
77+
78+
79+func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddressNew")))
80+
81+
82+func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress")))
83+
84+
85+func getCapacityAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_capacityAddress())))
86+
87+
88+func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
89+
90+
91+func getBabyduckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
92+
93+
94+func getBreedingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
95+
96+
97+func getMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress")))
98+
99+
100+func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
101+
102+
103+func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
104+
105+
106+func getRopeAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_ropeAddress())))
107+
108+
109+func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
110+
111+
112+func getLevelSystemAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_levelSystemAddress())))
113+
114+
115+func getMarketPlaceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_marketplace())))
116+
117+
118+func getVeggFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_veggFarmingAddress())))
119+
120+
121+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
122+
123+
124+func getMutantFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_mutantFarmingAddress())))
125+
126+
127+func getCanineFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineStakingAddress")))
128+
129+
130+func getFelineFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineStakingAddress")))
131+
132+
133+func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineBreederAddress())))
134+
135+
136+func getFelineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_felineBreederAddress())))
137+
138+
139+func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleBreederAddress())))
140+
141+
142+let wAccPKey = fromBase58String(valueOrErrorMessage(getString(getOracle(), "static_warsPKey"), "static_warsPKey not defined"))
143+
144+let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress(), getBabyduckAddress(), getBreedingAddress(), getTurtleStakingAddress(), getTurtleRebirthAddress(), getRopeAddress(), getLevelSystemAddress(), getMarketPlaceAddress(), getCapacityAddress(), getMutantFarmingAddress(), getCanineFarmingAddress(), getFelineFarmingAddress(), getCanineBreederAddress(), getFelineBreederAddress(), getTurtleBreederAddress(), this]
145+
146+func couponsUserSpend (user) = (user + "_spend")
147+
148+
149+func couponsUserActive (user) = (user + "_active")
150+
151+
152+func couponsUserActiveOld (user) = (couponsUserActive(user) + "_old")
153+
154+
155+func couponsSpendOnSc (sc) = (sc + "_spend_by_using")
156+
157+
158+func actionPerAddressPerUserPerDay (user,action,dappAddress,day) = (((((((dappAddress + "_") + action) + "_") + user) + "_") + day) + "_actions")
159+
160+
161+func actionPerAddressPerUserLastCheckDay (user,action) = (((action + "_") + user) + "_actions_check_day")
162+
163+
164+func actionPerAddressPerUserAmountInARow (user,action) = (((action + "_") + user) + "_actions_amount_in_row")
165+
166+
167+func userExperience (user) = (user + "_experience")
168+
169+
170+func addCouponsInternal (user,amount) = {
171+ let keyOld = couponsUserActiveOld(user)
172+ let key = couponsUserActive(user)
173+ let couponsOld = tryGetInteger(key)
174+ let coupons = (couponsOld + amount)
175+[IntegerEntry(keyOld, couponsOld), IntegerEntry(key, coupons)]
176+ }
177+
178+
179+let startTsMs = 1695427200000
180+
181+func calculateDaysSinceStart () = {
182+ let diff = (lastBlock.timestamp - startTsMs)
183+ let daysPassed = (diff / (86400 * 1000))
184+ daysPassed
185+ }
186+
187+
188+func hasDoneTask7Days (day,address,actionName,rewardAmount,rewardAmountWeekly) = {
189+ let userExperienceKey = userExperience(address)
190+ let userExpTilldate = tryGetInteger(userExperienceKey)
191+ let checkDayKey = actionPerAddressPerUserLastCheckDay(address, actionName)
192+ let daysInRowKey = actionPerAddressPerUserAmountInARow(address, actionName)
193+ let lastCheckDay = tryGetInteger(checkDayKey)
194+ let daysInRow = tryGetInteger(daysInRowKey)
195+ let daysInRowUpdate = if ((lastCheckDay == (day - 1)))
196+ then (daysInRow + 1)
197+ else if (((day - 1) > lastCheckDay))
198+ then 1
199+ else 0
200+ let lastCheckDayUpdate = day
201+ let reward = if ((daysInRowUpdate == 7))
202+ then [ScriptTransfer(addressFromStringValue(address), rewardAmountWeekly, getSpiceAssetId()), IntegerEntry(daysInRowKey, 0)]
203+ else [IntegerEntry(daysInRowKey, daysInRowUpdate)]
204+ ([IntegerEntry(checkDayKey, lastCheckDayUpdate), ScriptTransfer(addressFromStringValue(address), rewardAmount, getSpiceAssetId()), IntegerEntry(userExperienceKey, (userExpTilldate + 1))] ++ reward)
205+ }
206+
207+
208+func payAction (actionName,userAddress,amount,day) = {
209+ let composedKey = if (tryGetBoolean((("TASK_" + actionName) + "_EVERY")))
210+ then actionName
211+ else ((actionName + "_") + toString(amount))
212+ if (tryGetBoolean(("TASK_" + composedKey)))
213+ then hasDoneTask7Days(day, toString(userAddress), composedKey, tryGetInteger((("TASK_" + composedKey) + "_REWARD_DAILY")), tryGetInteger((("TASK_" + composedKey) + "_REWARD_WEEKLY")))
214+ else nil
215+ }
216+
217+
218+func recordActionInternal (actionName,addressCaller,address) = if (!(containsElement(scCanUseCoupons, addressCaller)))
219+ then throw("CRA: Only certain smart contracts can use this reward module!")
220+ else {
221+ let day = calculateDaysSinceStart()
222+ let actionKey = actionPerAddressPerUserPerDay(toString(address), actionName, toString(addressCaller), toString(day))
223+ let totalActions = (tryGetInteger(actionKey) + 1)
224+ ([IntegerEntry(actionKey, totalActions)] ++ payAction(actionName, address, totalActions, day))
225+ }
226+
227+
228+@Callable(i)
229+func configureOracle (oracle) = if ((i.caller != this))
230+ then throw("CCO: admin only")
231+ else [StringEntry("static_oracleAddress", oracle)]
232+
233+
234+
235+@Callable(i)
236+func addCoupons (user,amount) = if (if ((i.caller != this))
237+ then (i.callerPublicKey != wAccPKey)
238+ else false)
239+ then throw("CAC: admin only")
240+ else if ((amount >= 10000000))
241+ then (recordActionInternal("VEGG10000000", this, addressFromStringValue(user)) ++ addCouponsInternal(user, amount))
242+ else if ((amount >= 500000))
243+ then (recordActionInternal("VEGG500000", this, addressFromStringValue(user)) ++ addCouponsInternal(user, amount))
244+ else addCouponsInternal(user, amount)
245+
246+
247+
248+@Callable(i)
249+func resetCheater (user) = if (if ((i.caller != this))
250+ then (i.callerPublicKey != wAccPKey)
251+ else false)
252+ then throw("CAC: admin only")
253+ else {
254+ let keyOld = couponsUserActiveOld(user)
255+ let key = couponsUserActive(user)
256+ let couponsOld = tryGetInteger(key)
257+ let coupons = -100000000
258+[IntegerEntry(keyOld, couponsOld), IntegerEntry(key, coupons)]
259+ }
260+
261+
262+
263+@Callable(i)
264+func addCouponsFarming (user,amount) = if ((i.caller != getVeggFarmingAddress()))
265+ then throw("Method only for farming sc!")
266+ else addCouponsInternal(user, amount)
267+
268+
269+
270+@Callable(i)
271+func addCouponsBatch (batch) = if (if ((i.caller != this))
272+ then (i.callerPublicKey != wAccPKey)
273+ else false)
274+ then throw("CAC: admin only")
275+ else {
276+ let couponsList = split(batch, ";")
277+ func handleCoupon (acc,coupon) = {
278+ let splitArray = split(coupon, ":")
279+ let user = splitArray[0]
280+ let amount = parseIntValue(splitArray[1])
281+ let burnCall = invoke(getBurnAddress(), "burnByInvoke", [amount], nil)
282+ if ((burnCall == burnCall))
283+ then if ((amount >= 10000000))
284+ then ((acc ++ recordActionInternal("VEGG10000000", this, addressFromStringValue(user))) ++ addCouponsInternal(user, amount))
285+ else if ((amount >= 500000))
286+ then ((acc ++ recordActionInternal("VEGG500000", this, addressFromStringValue(user))) ++ addCouponsInternal(user, amount))
287+ else (acc ++ addCouponsInternal(user, amount))
288+ else throw("Strict value is not equal to itself.")
289+ }
290+
291+ let $l = couponsList
292+ let $s = size($l)
293+ let $acc0 = nil
294+ func $f0_1 ($a,$i) = if (($i >= $s))
295+ then $a
296+ else handleCoupon($a, $l[$i])
297+
298+ func $f0_2 ($a,$i) = if (($i >= $s))
299+ then $a
300+ else throw("List size exceeds 20")
301+
302+ $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)
303+ }
304+
305+
306+
307+@Callable(i)
308+func CFRefund (recipient,amount) = {
309+ let cfAddress = getStringValue(i.caller, "CF_ADDRESS")
310+ let key = (("f_" + cfAddress) + "_stake_address")
311+ let stakeAddress = getStringValue(getMasterAddress(), key)
312+ if ((stakeAddress != toString(i.caller)))
313+ then throw("CCR: This is something fishy going on!")
314+ else addCouponsInternal(recipient, amount)
315+ }
316+
317+
318+
319+@Callable(i)
320+func useCoupons (amountTryingToPay) = {
321+ let invokingSc = i.caller
322+ if ((0 > amountTryingToPay))
323+ then throw("CUC: Only positive amount of money can be paid!")
324+ else if (!(containsElement(scCanUseCoupons, invokingSc)))
325+ then throw("CUC: Only certain smart contracts can use this coupon module!")
326+ else {
327+ let user = toString(i.originCaller)
328+ let keyActive = couponsUserActive(user)
329+ let availableCoupons = tryGetInteger(keyActive)
330+ if ((0 > availableCoupons))
331+ then throw("CUC: Get rekt!")
332+ else {
333+ let leftToPay = if ((amountTryingToPay > availableCoupons))
334+ then (amountTryingToPay - availableCoupons)
335+ else 0
336+ let amountPaid = (amountTryingToPay - leftToPay)
337+ let availableCouponsLeft = (availableCoupons - amountPaid)
338+ if ((0 > availableCouponsLeft))
339+ then throw("CUC: You try to overspend!")
340+ else {
341+ let keySpend = couponsUserSpend(user)
342+ let keyOld = couponsUserActiveOld(user)
343+ let keySpendSc = couponsSpendOnSc(toString(i.caller))
344+ let topUp = invoke(getVeggFarmingAddress(), "topUpReward", [((amountPaid / 100) * 25)], nil)
345+ if ((topUp == topUp))
346+ then {
347+ let totalSpend = (tryGetInteger(keySpend) + amountPaid)
348+ let totalSpendSc = (tryGetInteger(keySpendSc) + amountPaid)
349+ $Tuple2([IntegerEntry(keySpend, totalSpend), IntegerEntry(keyOld, availableCoupons), IntegerEntry(keyActive, availableCouponsLeft), IntegerEntry(keySpendSc, totalSpendSc)], amountPaid)
350+ }
351+ else throw("Strict value is not equal to itself.")
352+ }
353+ }
354+ }
355+ }
356+
357+
358+
359+@Callable(i)
360+func recordAction (actionName) = recordActionInternal(actionName, i.caller, i.originCaller)
361+
362+
363+
364+@Callable(i)
365+func increaseExp (address) = if ((i.caller != getItemsAddress()))
366+ then nil
367+ else {
368+ let userExperienceKey = userExperience(address)
369+ let userExpTilldate = tryGetInteger(userExperienceKey)
370+[IntegerEntry(userExperienceKey, (userExpTilldate + 1))]
371+ }
372+
373+

github/deemru/w8io/c3f4982 
18.16 ms