tx · 84E7rtuxKczjJz5UCiETn867obSjkS5VGcYNLCoh7Qy9

3N1EDicoajLL9nm4Gbm5KoomPzUMa9CcRgc:  -0.01500000 Waves

2024.10.03 12:25 [3310486] smart account 3N1EDicoajLL9nm4Gbm5KoomPzUMa9CcRgc > SELF 0.00000000 Waves

{ "type": 13, "id": "84E7rtuxKczjJz5UCiETn867obSjkS5VGcYNLCoh7Qy9", "fee": 1500000, "feeAssetId": null, "timestamp": 1727947566552, "version": 2, "chainId": 84, "sender": "3N1EDicoajLL9nm4Gbm5KoomPzUMa9CcRgc", "senderPublicKey": "8w3XcvGmSkm4ycfVYRyH1axSp8VaRcmLUc9sW6E8kh83", "proofs": [ "2FFr6dF91KtdScQc9wxHQvcgHkVQEFWEPD1i28UgBK2QWwib5K8Qpi4LgGtA9cx7VurbV5B69sDrTjDW2XxVmiKw" ], "script": "base64:BgIyCAISAwoBCBIECgIIARIDCgEIEgQKAggBEgMKAQgSBAoCCAESAwoBARIDCgEIEgMKAQg5ARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAKAIAQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwECFHN0YXRpY19vcmFjbGVBZGRyZXNzAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAAhtzdGF0aWNfdHVydGxlU3Rha2luZ0FkZHJlc3MBHnN0YXRpY0tleV90dXJ0bGVSZWJpcnRoQWRkcmVzcwACG3N0YXRpY190dXJ0bGVSZWJpcnRoQWRkcmVzcwEVc3RhdGljS2V5X3JvcGVBZGRyZXNzAAISc3RhdGljX3JvcGVBZGRyZXNzARxzdGF0aWNLZXlfbGV2ZWxTeXN0ZW1BZGRyZXNzAAIZc3RhdGljX2xldmVsU3lzdGVtQWRkcmVzcwEWc3RhdGljS2V5X3NwaWNlQXNzZXRJZAACE3N0YXRpY19zcGljZUFzc2V0SWQBFXN0YXRpY0tleV9tYXJrZXRwbGFjZQACGXN0YXRpY19tYXJrZXRwbGFjZUFkZHJlc3MBGXN0YXRpY0tleV9jYXBhY2l0eUFkZHJlc3MAAhZzdGF0aWNfY2FwYWNpdHlBZGRyZXNzARxzdGF0aWNLZXlfdmVnZ0Zhcm1pbmdBZGRyZXNzAAIZc3RhdGljX3ZlZ2dGYXJtaW5nQWRkcmVzcwEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwACE3N0YXRpY19pdGVtc0FkZHJlc3MBHnN0YXRpY0tleV9tdXRhbnRGYXJtaW5nQWRkcmVzcwACG3N0YXRpY19tdXRhbnRGYXJtaW5nQWRkcmVzcwEec3RhdGljS2V5X2NhbmluZUJyZWVkZXJBZGRyZXNzAAIbc3RhdGljX2NhbmluZUJyZWVkZXJBZGRyZXNzAR5zdGF0aWNLZXlfZmVsaW5lQnJlZWRlckFkZHJlc3MAAhtzdGF0aWNfZmVsaW5lQnJlZWRlckFkZHJlc3MBHnN0YXRpY0tleV90dXJ0bGVCcmVlZGVyQWRkcmVzcwACG3N0YXRpY190dXJ0bGVCcmVlZGVyQWRkcmVzcwERZ2V0UmViaXJ0aEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFXN0YXRpY19yZWJpcnRoQWRkcmVzcwETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBEWdldEZhcm1pbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhhzdGF0aWNfZmFybWluZ0FkZHJlc3NOZXcBEmdldEdhbWVEYXBwQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIWc3RhdGljX2dhbWVEYXBwQWRkcmVzcwESZ2V0Q2FwYWNpdHlBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEZc3RhdGljS2V5X2NhcGFjaXR5QWRkcmVzcwABDmdldEJ1cm5BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhJzdGF0aWNfYnVybkFkZHJlc3MBEmdldEJhYnlkdWNrQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIWc3RhdGljX2JhYnlEdWNrQWRkcmVzcwESZ2V0QnJlZWRpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBEGdldE1hc3RlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACFnN0YXRpY19jZk1hc3RlckFkZHJlc3MBF2dldFR1cnRsZVN0YWtpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X3R1cnRsZVN0YWtpbmdBZGRyZXNzAAEXZ2V0VHVydGxlUmViaXJ0aEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlUmViaXJ0aEFkZHJlc3MAAQ5nZXRSb3BlQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9yb3BlQWRkcmVzcwABD2dldFNwaWNlQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfc3BpY2VBc3NldElkAAEVZ2V0TGV2ZWxTeXN0ZW1BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEcc3RhdGljS2V5X2xldmVsU3lzdGVtQWRkcmVzcwABFWdldE1hcmtldFBsYWNlQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9tYXJrZXRwbGFjZQABFWdldFZlZ2dGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHHN0YXRpY0tleV92ZWdnRmFybWluZ0FkZHJlc3MAAQ9nZXRJdGVtc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAEXZ2V0TXV0YW50RmFybWluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfbXV0YW50RmFybWluZ0FkZHJlc3MAARdnZXRDYW5pbmVGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIbc3RhdGljX2NhbmluZVN0YWtpbmdBZGRyZXNzARdnZXRGZWxpbmVGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIbc3RhdGljX2ZlbGluZVN0YWtpbmdBZGRyZXNzARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9jYW5pbmVCcmVlZGVyQWRkcmVzcwABF2dldEZlbGluZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X2ZlbGluZUJyZWVkZXJBZGRyZXNzAAEXZ2V0VHVydGxlQnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlQnJlZWRlckFkZHJlc3MAAAh3QWNjUEtleQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBCWdldE9yYWNsZQACD3N0YXRpY193YXJzUEtleQIbc3RhdGljX3dhcnNQS2V5IG5vdCBkZWZpbmVkAA9zY0NhblVzZUNvdXBvbnMJAMwIAgkBEWdldFJlYmlydGhBZGRyZXNzAAkAzAgCCQETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAMwIAgkBEWdldEZhcm1pbmdBZGRyZXNzAAkAzAgCCQESZ2V0R2FtZURhcHBBZGRyZXNzAAkAzAgCCQESZ2V0QmFieWR1Y2tBZGRyZXNzAAkAzAgCCQESZ2V0QnJlZWRpbmdBZGRyZXNzAAkAzAgCCQEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MACQDMCAIJARdnZXRUdXJ0bGVSZWJpcnRoQWRkcmVzcwAJAMwIAgkBDmdldFJvcGVBZGRyZXNzAAkAzAgCCQEVZ2V0TGV2ZWxTeXN0ZW1BZGRyZXNzAAkAzAgCCQEVZ2V0TWFya2V0UGxhY2VBZGRyZXNzAAkAzAgCCQESZ2V0Q2FwYWNpdHlBZGRyZXNzAAkAzAgCCQEXZ2V0TXV0YW50RmFybWluZ0FkZHJlc3MACQDMCAIJARdnZXRDYW5pbmVGYXJtaW5nQWRkcmVzcwAJAMwIAgkBF2dldEZlbGluZUZhcm1pbmdBZGRyZXNzAAkAzAgCCQEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MACQDMCAIJARdnZXRGZWxpbmVCcmVlZGVyQWRkcmVzcwAJAMwIAgkBF2dldFR1cnRsZUJyZWVkZXJBZGRyZXNzAAkAzAgCBQR0aGlzBQNuaWwBEGNvdXBvbnNVc2VyU3BlbmQBBHVzZXIJAKwCAgUEdXNlcgIGX3NwZW5kARFjb3Vwb25zVXNlckFjdGl2ZQEEdXNlcgkArAICBQR1c2VyAgdfYWN0aXZlARRjb3Vwb25zVXNlckFjdGl2ZU9sZAEEdXNlcgkArAICCQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyAgRfb2xkARBjb3Vwb25zU3BlbmRPblNjAQJzYwkArAICBQJzYwIPX3NwZW5kX2J5X3VzaW5nAR1hY3Rpb25QZXJBZGRyZXNzUGVyVXNlclBlckRheQQEdXNlcgZhY3Rpb24LZGFwcEFkZHJlc3MDZGF5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFC2RhcHBBZGRyZXNzAgFfBQZhY3Rpb24CAV8FBHVzZXICAV8FA2RheQIIX2FjdGlvbnMBI2FjdGlvblBlckFkZHJlc3NQZXJVc2VyTGFzdENoZWNrRGF5AgR1c2VyBmFjdGlvbgkArAICCQCsAgIJAKwCAgUGYWN0aW9uAgFfBQR1c2VyAhJfYWN0aW9uc19jaGVja19kYXkBI2FjdGlvblBlckFkZHJlc3NQZXJVc2VyQW1vdW50SW5BUm93AgR1c2VyBmFjdGlvbgkArAICCQCsAgIJAKwCAgUGYWN0aW9uAgFfBQR1c2VyAhZfYWN0aW9uc19hbW91bnRfaW5fcm93AQ51c2VyRXhwZXJpZW5jZQEEdXNlcgkArAICBQR1c2VyAgtfZXhwZXJpZW5jZQESYWRkQ291cG9uc0ludGVybmFsAgR1c2VyBmFtb3VudAQGa2V5T2xkCQEUY291cG9uc1VzZXJBY3RpdmVPbGQBBQR1c2VyBANrZXkJARFjb3Vwb25zVXNlckFjdGl2ZQEFBHVzZXIECmNvdXBvbnNPbGQJAQ10cnlHZXRJbnRlZ2VyAQUDa2V5BAdjb3Vwb25zCQBkAgUKY291cG9uc09sZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZrZXlPbGQFCmNvdXBvbnNPbGQJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUHY291cG9ucwUDbmlsAAlzdGFydFRzTXMAgIjY+qsxARdjYWxjdWxhdGVEYXlzU2luY2VTdGFydAAEBGRpZmYJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc3RhcnRUc01zBApkYXlzUGFzc2VkCQBpAgUEZGlmZgkAaAIAgKMFAOgHBQpkYXlzUGFzc2VkARBoYXNEb25lVGFzazdEYXlzBQNkYXkHYWRkcmVzcwphY3Rpb25OYW1lDHJld2FyZEFtb3VudBJyZXdhcmRBbW91bnRXZWVrbHkEEXVzZXJFeHBlcmllbmNlS2V5CQEOdXNlckV4cGVyaWVuY2UBBQdhZGRyZXNzBA91c2VyRXhwVGlsbGRhdGUJAQ10cnlHZXRJbnRlZ2VyAQURdXNlckV4cGVyaWVuY2VLZXkEC2NoZWNrRGF5S2V5CQEjYWN0aW9uUGVyQWRkcmVzc1BlclVzZXJMYXN0Q2hlY2tEYXkCBQdhZGRyZXNzBQphY3Rpb25OYW1lBAxkYXlzSW5Sb3dLZXkJASNhY3Rpb25QZXJBZGRyZXNzUGVyVXNlckFtb3VudEluQVJvdwIFB2FkZHJlc3MFCmFjdGlvbk5hbWUEDGxhc3RDaGVja0RheQkBDXRyeUdldEludGVnZXIBBQtjaGVja0RheUtleQQJZGF5c0luUm93CQENdHJ5R2V0SW50ZWdlcgEFDGRheXNJblJvd0tleQQPZGF5c0luUm93VXBkYXRlAwkAAAIFDGxhc3RDaGVja0RheQkAZQIFA2RheQABCQBkAgUJZGF5c0luUm93AAEDCQBmAgkAZQIFA2RheQABBQxsYXN0Q2hlY2tEYXkAAQAABBJsYXN0Q2hlY2tEYXlVcGRhdGUFA2RheQQGcmV3YXJkAwkAAAIFD2RheXNJblJvd1VwZGF0ZQAHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFEnJld2FyZEFtb3VudFdlZWtseQkBD2dldFNwaWNlQXNzZXRJZAAJAMwIAgkBDEludGVnZXJFbnRyeQIFDGRheXNJblJvd0tleQAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDGRheXNJblJvd0tleQUPZGF5c0luUm93VXBkYXRlBQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgULY2hlY2tEYXlLZXkFEmxhc3RDaGVja0RheVVwZGF0ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQxyZXdhcmRBbW91bnQJAQ9nZXRTcGljZUFzc2V0SWQACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF1c2VyRXhwZXJpZW5jZUtleQkAZAIFD3VzZXJFeHBUaWxsZGF0ZQABBQNuaWwFBnJld2FyZAEJcGF5QWN0aW9uBAphY3Rpb25OYW1lC3VzZXJBZGRyZXNzBmFtb3VudANkYXkEC2NvbXBvc2VkS2V5AwkBDXRyeUdldEJvb2xlYW4BCQCsAgIJAKwCAgIFVEFTS18FCmFjdGlvbk5hbWUCBl9FVkVSWQUKYWN0aW9uTmFtZQkArAICCQCsAgIFCmFjdGlvbk5hbWUCAV8JAKQDAQUGYW1vdW50AwkBDXRyeUdldEJvb2xlYW4BCQCsAgICBVRBU0tfBQtjb21wb3NlZEtleQkBEGhhc0RvbmVUYXNrN0RheXMFBQNkYXkJAKUIAQULdXNlckFkZHJlc3MFC2NvbXBvc2VkS2V5CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgVUQVNLXwULY29tcG9zZWRLZXkCDV9SRVdBUkRfREFJTFkJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICBVRBU0tfBQtjb21wb3NlZEtleQIOX1JFV0FSRF9XRUVLTFkFA25pbAEUcmVjb3JkQWN0aW9uSW50ZXJuYWwDCmFjdGlvbk5hbWUNYWRkcmVzc0NhbGxlcgdhZGRyZXNzAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUPc2NDYW5Vc2VDb3Vwb25zBQ1hZGRyZXNzQ2FsbGVyCQACAQI9Q1JBOiBPbmx5IGNlcnRhaW4gc21hcnQgY29udHJhY3RzIGNhbiB1c2UgdGhpcyByZXdhcmQgbW9kdWxlIQQDZGF5CQEXY2FsY3VsYXRlRGF5c1NpbmNlU3RhcnQABAlhY3Rpb25LZXkJAR1hY3Rpb25QZXJBZGRyZXNzUGVyVXNlclBlckRheQQJAKUIAQUHYWRkcmVzcwUKYWN0aW9uTmFtZQkApQgBBQ1hZGRyZXNzQ2FsbGVyCQCkAwEFA2RheQQMdG90YWxBY3Rpb25zCQBkAgkBDXRyeUdldEludGVnZXIBBQlhY3Rpb25LZXkAAQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhY3Rpb25LZXkFDHRvdGFsQWN0aW9ucwUDbmlsCQEJcGF5QWN0aW9uBAUKYWN0aW9uTmFtZQUHYWRkcmVzcwUMdG90YWxBY3Rpb25zBQNkYXkJAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPQ0NPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQphZGRDb3Vwb25zAgR1c2VyBmFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUId0FjY1BLZXkHCQACAQIPQ0FDOiBhZG1pbiBvbmx5AwkAZwIFBmFtb3VudACAreIECQDOCAIJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMCDFZFR0cxMDAwMDAwMAUEdGhpcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEdXNlcgkBEmFkZENvdXBvbnNJbnRlcm5hbAIFBHVzZXIFBmFtb3VudAMJAGcCBQZhbW91bnQAoMIeCQDOCAIJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMCClZFR0c1MDAwMDAFBHRoaXMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXIJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQBaQEMcmVzZXRDaGVhdGVyAQR1c2VyAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQh3QWNjUEtleQcJAAIBAg9DQUM6IGFkbWluIG9ubHkEBmtleU9sZAkBFGNvdXBvbnNVc2VyQWN0aXZlT2xkAQUEdXNlcgQDa2V5CQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyBApjb3Vwb25zT2xkCQENdHJ5R2V0SW50ZWdlcgEFA2tleQQHY291cG9ucwCAvqjQ//////8BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZrZXlPbGQFCmNvdXBvbnNPbGQJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUHY291cG9ucwUDbmlsAWkBEWFkZENvdXBvbnNGYXJtaW5nAgR1c2VyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgkBFWdldFZlZ2dGYXJtaW5nQWRkcmVzcwAJAAIBAhtNZXRob2Qgb25seSBmb3IgZmFybWluZyBzYyEJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQBaQEPYWRkQ291cG9uc0JhdGNoAQViYXRjaAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUId0FjY1BLZXkHCQACAQIPQ0FDOiBhZG1pbiBvbmx5BAtjb3Vwb25zTGlzdAkAtQkCBQViYXRjaAIBOwoBDGhhbmRsZUNvdXBvbgIDYWNjBmNvdXBvbgQKc3BsaXRBcnJheQkAtQkCBQZjb3Vwb24CAToEBHVzZXIJAJEDAgUKc3BsaXRBcnJheQAABAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzcGxpdEFycmF5AAEECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACDGJ1cm5CeUludm9rZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFCGJ1cm5DYWxsBQhidXJuQ2FsbAMJAGcCBQZhbW91bnQAgK3iBAkAzggCCQDOCAIFA2FjYwkBFHJlY29yZEFjdGlvbkludGVybmFsAwIMVkVHRzEwMDAwMDAwBQR0aGlzCQERQGV4dHJOYXRpdmUoMTA2MikBBQR1c2VyCQESYWRkQ291cG9uc0ludGVybmFsAgUEdXNlcgUGYW1vdW50AwkAZwIFBmFtb3VudACgwh4JAM4IAgkAzggCBQNhY2MJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMCClZFR0c1MDAwMDAFBHRoaXMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXIJARJhZGRDb3Vwb25zSW50ZXJuYWwCBQR1c2VyBQZhbW91bnQJAM4IAgUDYWNjCQESYWRkQ291cG9uc0ludGVybmFsAgUEdXNlcgUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgACJGwFC2NvdXBvbnNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxoYW5kbGVDb3Vwb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAFpAQhDRlJlZnVuZAIJcmVjaXBpZW50BmFtb3VudAQJY2ZBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MykCCAUBaQZjYWxsZXICCkNGX0FERFJFU1MEA2tleQkArAICCQCsAgICAmZfBQljZkFkZHJlc3MCDl9zdGFrZV9hZGRyZXNzBAxzdGFrZUFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIJARBnZXRNYXN0ZXJBZGRyZXNzAAUDa2V5AwkBAiE9AgUMc3Rha2VBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkAAgECJkNDUjogVGhpcyBpcyBzb21ldGhpbmcgZmlzaHkgZ29pbmcgb24hCQESYWRkQ291cG9uc0ludGVybmFsAgUJcmVjaXBpZW50BQZhbW91bnQBaQEKdXNlQ291cG9ucwERYW1vdW50VHJ5aW5nVG9QYXkECmludm9raW5nU2MIBQFpBmNhbGxlcgMJAGYCAAAFEWFtb3VudFRyeWluZ1RvUGF5CQACAQIvQ1VDOiBPbmx5IHBvc2l0aXZlIGFtb3VudCBvZiBtb25leSBjYW4gYmUgcGFpZCEDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ9zY0NhblVzZUNvdXBvbnMFCmludm9raW5nU2MJAAIBAj1DVUM6IE9ubHkgY2VydGFpbiBzbWFydCBjb250cmFjdHMgY2FuIHVzZSB0aGlzIGNvdXBvbiBtb2R1bGUhBAR1c2VyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQJa2V5QWN0aXZlCQERY291cG9uc1VzZXJBY3RpdmUBBQR1c2VyBBBhdmFpbGFibGVDb3Vwb25zCQENdHJ5R2V0SW50ZWdlcgEFCWtleUFjdGl2ZQMJAGYCAAAFEGF2YWlsYWJsZUNvdXBvbnMJAAIBAg5DVUM6IEdldCByZWt0IQQJbGVmdFRvUGF5AwkAZgIFEWFtb3VudFRyeWluZ1RvUGF5BRBhdmFpbGFibGVDb3Vwb25zCQBlAgURYW1vdW50VHJ5aW5nVG9QYXkFEGF2YWlsYWJsZUNvdXBvbnMAAAQKYW1vdW50UGFpZAkAZQIFEWFtb3VudFRyeWluZ1RvUGF5BQlsZWZ0VG9QYXkEFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQBlAgUQYXZhaWxhYmxlQ291cG9ucwUKYW1vdW50UGFpZAMJAGYCAAAFFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQACAQIaQ1VDOiBZb3UgdHJ5IHRvIG92ZXJzcGVuZCEECGtleVNwZW5kCQEQY291cG9uc1VzZXJTcGVuZAEFBHVzZXIEBmtleU9sZAkBFGNvdXBvbnNVc2VyQWN0aXZlT2xkAQUEdXNlcgQKa2V5U3BlbmRTYwkBEGNvdXBvbnNTcGVuZE9uU2MBCQClCAEIBQFpBmNhbGxlcgQFdG9wVXAJAPwHBAkBFWdldFZlZ2dGYXJtaW5nQWRkcmVzcwACC3RvcFVwUmV3YXJkCQDMCAIJAGgCCQBpAgUKYW1vdW50UGFpZABkABkFA25pbAUDbmlsAwkAAAIFBXRvcFVwBQV0b3BVcAQKdG90YWxTcGVuZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUIa2V5U3BlbmQFCmFtb3VudFBhaWQEDHRvdGFsU3BlbmRTYwkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUKa2V5U3BlbmRTYwUKYW1vdW50UGFpZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhrZXlTcGVuZAUKdG90YWxTcGVuZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUGa2V5T2xkBRBhdmFpbGFibGVDb3Vwb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlBY3RpdmUFFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprZXlTcGVuZFNjBQx0b3RhbFNwZW5kU2MFA25pbAUKYW1vdW50UGFpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZWNvcmRBY3Rpb24BCmFjdGlvbk5hbWUJARRyZWNvcmRBY3Rpb25JbnRlcm5hbAMFCmFjdGlvbk5hbWUIBQFpBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyAWkBC2luY3JlYXNlRXhwAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyCQEPZ2V0SXRlbXNBZGRyZXNzAAUDbmlsBBF1c2VyRXhwZXJpZW5jZUtleQkBDnVzZXJFeHBlcmllbmNlAQUHYWRkcmVzcwQPdXNlckV4cFRpbGxkYXRlCQENdHJ5R2V0SW50ZWdlcgEFEXVzZXJFeHBlcmllbmNlS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF1c2VyRXhwZXJpZW5jZUtleQkAZAIFD3VzZXJFeHBUaWxsZGF0ZQABBQNuaWwAo7S4eA==", "height": 3310486, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3GAxtEgyBtKKDxPvxTvPShnZ2jm9KvhYsAZiR326s8xQ Next: APvPeWSrwBEgrxT7jjujUUjgUp6jih7yFNBFGuazJdGY 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 tryGetBoolean (key) = match getBoolean(key) {
1313 case b: Boolean =>
1414 b
1515 case _ =>
1616 false
1717 }
1818
1919
2020 func tryGetString (key) = tryGetStringExternal(this, key)
2121
2222
2323 func tryGetInteger (key) = match getInteger(this, key) {
2424 case b: Int =>
2525 b
2626 case _ =>
2727 0
2828 }
2929
3030
3131 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
3232
3333
3434 func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
3535
3636
3737 func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
3838
3939
4040 func staticKey_ropeAddress () = "static_ropeAddress"
4141
4242
4343 func staticKey_levelSystemAddress () = "static_levelSystemAddress"
4444
4545
4646 func staticKey_spiceAssetId () = "static_spiceAssetId"
4747
4848
4949 func staticKey_marketplace () = "static_marketplaceAddress"
5050
5151
5252 func staticKey_capacityAddress () = "static_capacityAddress"
5353
5454
5555 func staticKey_veggFarmingAddress () = "static_veggFarmingAddress"
5656
5757
5858 func staticKey_itemsAddress () = "static_itemsAddress"
5959
6060
6161 func staticKey_mutantFarmingAddress () = "static_mutantFarmingAddress"
6262
6363
6464 func staticKey_canineBreederAddress () = "static_canineBreederAddress"
6565
6666
6767 func staticKey_felineBreederAddress () = "static_felineBreederAddress"
6868
6969
7070 func staticKey_turtleBreederAddress () = "static_turtleBreederAddress"
7171
7272
7373 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
7474
7575
7676 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
7777
7878
7979 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddressNew")))
8080
8181
8282 func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress")))
8383
8484
8585 func getCapacityAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_capacityAddress())))
8686
8787
8888 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
8989
9090
9191 func getBabyduckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
9292
9393
9494 func getBreedingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
9595
9696
9797 func getMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress")))
9898
9999
100100 func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
101101
102102
103103 func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
104104
105105
106106 func getRopeAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_ropeAddress())))
107107
108108
109109 func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
110110
111111
112112 func getLevelSystemAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_levelSystemAddress())))
113113
114114
115115 func getMarketPlaceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_marketplace())))
116116
117117
118118 func getVeggFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_veggFarmingAddress())))
119119
120120
121121 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
122122
123123
124124 func getMutantFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_mutantFarmingAddress())))
125125
126126
127127 func getCanineFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineStakingAddress")))
128128
129129
130130 func getFelineFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineStakingAddress")))
131131
132132
133133 func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineBreederAddress())))
134134
135135
136136 func getFelineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_felineBreederAddress())))
137137
138138
139139 func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleBreederAddress())))
140140
141141
142142 let wAccPKey = fromBase58String(valueOrErrorMessage(getString(getOracle(), "static_warsPKey"), "static_warsPKey not defined"))
143143
144144 let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress(), getBabyduckAddress(), getBreedingAddress(), getTurtleStakingAddress(), getTurtleRebirthAddress(), getRopeAddress(), getLevelSystemAddress(), getMarketPlaceAddress(), getCapacityAddress(), getMutantFarmingAddress(), getCanineFarmingAddress(), getFelineFarmingAddress(), getCanineBreederAddress(), getFelineBreederAddress(), getTurtleBreederAddress(), this]
145145
146146 func couponsUserSpend (user) = (user + "_spend")
147147
148148
149149 func couponsUserActive (user) = (user + "_active")
150150
151151
152152 func couponsUserActiveOld (user) = (couponsUserActive(user) + "_old")
153153
154154
155155 func couponsSpendOnSc (sc) = (sc + "_spend_by_using")
156156
157157
158158 func actionPerAddressPerUserPerDay (user,action,dappAddress,day) = (((((((dappAddress + "_") + action) + "_") + user) + "_") + day) + "_actions")
159159
160160
161161 func actionPerAddressPerUserLastCheckDay (user,action) = (((action + "_") + user) + "_actions_check_day")
162162
163163
164164 func actionPerAddressPerUserAmountInARow (user,action) = (((action + "_") + user) + "_actions_amount_in_row")
165165
166166
167167 func userExperience (user) = (user + "_experience")
168168
169169
170170 func addCouponsInternal (user,amount) = {
171171 let keyOld = couponsUserActiveOld(user)
172172 let key = couponsUserActive(user)
173173 let couponsOld = tryGetInteger(key)
174174 let coupons = (couponsOld + amount)
175175 [IntegerEntry(keyOld, couponsOld), IntegerEntry(key, coupons)]
176176 }
177177
178178
179179 let startTsMs = 1695427200000
180180
181181 func calculateDaysSinceStart () = {
182182 let diff = (lastBlock.timestamp - startTsMs)
183183 let daysPassed = (diff / (86400 * 1000))
184184 daysPassed
185185 }
186186
187187
188188 func hasDoneTask7Days (day,address,actionName,rewardAmount,rewardAmountWeekly) = {
189189 let userExperienceKey = userExperience(address)
190190 let userExpTilldate = tryGetInteger(userExperienceKey)
191191 let checkDayKey = actionPerAddressPerUserLastCheckDay(address, actionName)
192192 let daysInRowKey = actionPerAddressPerUserAmountInARow(address, actionName)
193193 let lastCheckDay = tryGetInteger(checkDayKey)
194194 let daysInRow = tryGetInteger(daysInRowKey)
195195 let daysInRowUpdate = if ((lastCheckDay == (day - 1)))
196196 then (daysInRow + 1)
197197 else if (((day - 1) > lastCheckDay))
198198 then 1
199199 else 0
200200 let lastCheckDayUpdate = day
201201 let reward = if ((daysInRowUpdate == 7))
202202 then [ScriptTransfer(addressFromStringValue(address), rewardAmountWeekly, getSpiceAssetId()), IntegerEntry(daysInRowKey, 0)]
203203 else [IntegerEntry(daysInRowKey, daysInRowUpdate)]
204204 ([IntegerEntry(checkDayKey, lastCheckDayUpdate), ScriptTransfer(addressFromStringValue(address), rewardAmount, getSpiceAssetId()), IntegerEntry(userExperienceKey, (userExpTilldate + 1))] ++ reward)
205205 }
206206
207207
208208 func payAction (actionName,userAddress,amount,day) = {
209209 let composedKey = if (tryGetBoolean((("TASK_" + actionName) + "_EVERY")))
210210 then actionName
211211 else ((actionName + "_") + toString(amount))
212212 if (tryGetBoolean(("TASK_" + composedKey)))
213213 then hasDoneTask7Days(day, toString(userAddress), composedKey, tryGetInteger((("TASK_" + composedKey) + "_REWARD_DAILY")), tryGetInteger((("TASK_" + composedKey) + "_REWARD_WEEKLY")))
214214 else nil
215215 }
216216
217217
218218 func recordActionInternal (actionName,addressCaller,address) = if (!(containsElement(scCanUseCoupons, addressCaller)))
219219 then throw("CRA: Only certain smart contracts can use this reward module!")
220220 else {
221221 let day = calculateDaysSinceStart()
222222 let actionKey = actionPerAddressPerUserPerDay(toString(address), actionName, toString(addressCaller), toString(day))
223223 let totalActions = (tryGetInteger(actionKey) + 1)
224224 ([IntegerEntry(actionKey, totalActions)] ++ payAction(actionName, address, totalActions, day))
225225 }
226226
227227
228228 @Callable(i)
229229 func configureOracle (oracle) = if ((i.caller != this))
230230 then throw("CCO: admin only")
231231 else [StringEntry("static_oracleAddress", oracle)]
232232
233233
234234
235235 @Callable(i)
236236 func addCoupons (user,amount) = if (if ((i.caller != this))
237237 then (i.callerPublicKey != wAccPKey)
238238 else false)
239239 then throw("CAC: admin only")
240240 else if ((amount >= 10000000))
241241 then (recordActionInternal("VEGG10000000", this, addressFromStringValue(user)) ++ addCouponsInternal(user, amount))
242242 else if ((amount >= 500000))
243243 then (recordActionInternal("VEGG500000", this, addressFromStringValue(user)) ++ addCouponsInternal(user, amount))
244244 else addCouponsInternal(user, amount)
245245
246246
247247
248248 @Callable(i)
249249 func resetCheater (user) = if (if ((i.caller != this))
250250 then (i.callerPublicKey != wAccPKey)
251251 else false)
252252 then throw("CAC: admin only")
253253 else {
254254 let keyOld = couponsUserActiveOld(user)
255255 let key = couponsUserActive(user)
256256 let couponsOld = tryGetInteger(key)
257257 let coupons = -100000000
258258 [IntegerEntry(keyOld, couponsOld), IntegerEntry(key, coupons)]
259259 }
260260
261261
262262
263263 @Callable(i)
264264 func addCouponsFarming (user,amount) = if ((i.caller != getVeggFarmingAddress()))
265265 then throw("Method only for farming sc!")
266266 else addCouponsInternal(user, amount)
267267
268268
269269
270270 @Callable(i)
271271 func addCouponsBatch (batch) = if (if ((i.caller != this))
272272 then (i.callerPublicKey != wAccPKey)
273273 else false)
274274 then throw("CAC: admin only")
275275 else {
276276 let couponsList = split(batch, ";")
277277 func handleCoupon (acc,coupon) = {
278278 let splitArray = split(coupon, ":")
279279 let user = splitArray[0]
280280 let amount = parseIntValue(splitArray[1])
281281 let burnCall = invoke(getBurnAddress(), "burnByInvoke", [amount], nil)
282282 if ((burnCall == burnCall))
283283 then if ((amount >= 10000000))
284284 then ((acc ++ recordActionInternal("VEGG10000000", this, addressFromStringValue(user))) ++ addCouponsInternal(user, amount))
285285 else if ((amount >= 500000))
286286 then ((acc ++ recordActionInternal("VEGG500000", this, addressFromStringValue(user))) ++ addCouponsInternal(user, amount))
287287 else (acc ++ addCouponsInternal(user, amount))
288288 else throw("Strict value is not equal to itself.")
289289 }
290290
291291 let $l = couponsList
292292 let $s = size($l)
293293 let $acc0 = nil
294294 func $f0_1 ($a,$i) = if (($i >= $s))
295295 then $a
296296 else handleCoupon($a, $l[$i])
297297
298298 func $f0_2 ($a,$i) = if (($i >= $s))
299299 then $a
300300 else throw("List size exceeds 20")
301301
302302 $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)
303303 }
304304
305305
306306
307307 @Callable(i)
308308 func CFRefund (recipient,amount) = {
309309 let cfAddress = getStringValue(i.caller, "CF_ADDRESS")
310310 let key = (("f_" + cfAddress) + "_stake_address")
311311 let stakeAddress = getStringValue(getMasterAddress(), key)
312312 if ((stakeAddress != toString(i.caller)))
313313 then throw("CCR: This is something fishy going on!")
314314 else addCouponsInternal(recipient, amount)
315315 }
316316
317317
318318
319319 @Callable(i)
320320 func useCoupons (amountTryingToPay) = {
321321 let invokingSc = i.caller
322322 if ((0 > amountTryingToPay))
323323 then throw("CUC: Only positive amount of money can be paid!")
324324 else if (!(containsElement(scCanUseCoupons, invokingSc)))
325325 then throw("CUC: Only certain smart contracts can use this coupon module!")
326326 else {
327327 let user = toString(i.originCaller)
328328 let keyActive = couponsUserActive(user)
329329 let availableCoupons = tryGetInteger(keyActive)
330330 if ((0 > availableCoupons))
331331 then throw("CUC: Get rekt!")
332332 else {
333333 let leftToPay = if ((amountTryingToPay > availableCoupons))
334334 then (amountTryingToPay - availableCoupons)
335335 else 0
336336 let amountPaid = (amountTryingToPay - leftToPay)
337337 let availableCouponsLeft = (availableCoupons - amountPaid)
338338 if ((0 > availableCouponsLeft))
339339 then throw("CUC: You try to overspend!")
340340 else {
341341 let keySpend = couponsUserSpend(user)
342342 let keyOld = couponsUserActiveOld(user)
343343 let keySpendSc = couponsSpendOnSc(toString(i.caller))
344344 let topUp = invoke(getVeggFarmingAddress(), "topUpReward", [((amountPaid / 100) * 25)], nil)
345345 if ((topUp == topUp))
346346 then {
347347 let totalSpend = (tryGetInteger(keySpend) + amountPaid)
348348 let totalSpendSc = (tryGetInteger(keySpendSc) + amountPaid)
349349 $Tuple2([IntegerEntry(keySpend, totalSpend), IntegerEntry(keyOld, availableCoupons), IntegerEntry(keyActive, availableCouponsLeft), IntegerEntry(keySpendSc, totalSpendSc)], amountPaid)
350350 }
351351 else throw("Strict value is not equal to itself.")
352352 }
353353 }
354354 }
355355 }
356356
357357
358358
359359 @Callable(i)
360360 func recordAction (actionName) = recordActionInternal(actionName, i.caller, i.originCaller)
361361
362362
363363
364364 @Callable(i)
365365 func increaseExp (address) = if ((i.caller != getItemsAddress()))
366366 then nil
367367 else {
368368 let userExperienceKey = userExperience(address)
369369 let userExpTilldate = tryGetInteger(userExperienceKey)
370370 [IntegerEntry(userExperienceKey, (userExpTilldate + 1))]
371371 }
372372
373373

github/deemru/w8io/c3f4982 
29.10 ms