tx · CnFRXfNgcownAqcCsiEZbA6z6vzF4oUNoGRpCpriNqVj

3N7CMjvcjb4ycNG2jfoXXx9TcZpP4g2ok7B:  -0.01100000 Waves

2024.10.03 14:08 [3310593] smart account 3N7CMjvcjb4ycNG2jfoXXx9TcZpP4g2ok7B > SELF 0.00000000 Waves

{ "type": 13, "id": "CnFRXfNgcownAqcCsiEZbA6z6vzF4oUNoGRpCpriNqVj", "fee": 1100000, "feeAssetId": null, "timestamp": 1727953761010, "version": 2, "chainId": 84, "sender": "3N7CMjvcjb4ycNG2jfoXXx9TcZpP4g2ok7B", "senderPublicKey": "6EzV6VRuiM5Ei8BoYnLpr67xHPCYGyaX46dZJ2yaYXnW", "proofs": [ "3rxvLcCXGoaMrqw2gAZUskx4ghrzZZfmUQ6tJcX4zXGwBdDmgyueuhkgrW9KNYaT6MkkgBKKcEQQ1ypLAXr7cyS8" ], "script": "base64:BgIfCAISAwoBCBIDCgEBEgQKAgEBEgQKAgEIEgUKAwgBCB4ACWJhc2VQcmljZQCAiXoACGluY3JlYXNlAAEAEGluY3JlYXNlRGVjaW1hbHMAAwEPZHVja0NhcGFjaXR5S2V5AQZkdWNrSWQJAKwCAgIPYWRkZWRfY2FwYWNpdHlfBQZkdWNrSWQBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCWFzQm9vbGVhbgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EB2Jvb2xlYW4FByRtYXRjaDAFB2Jvb2xlYW4JAAIBAiJDQUI6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBCb29sZWFuARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAISc3RhdGljX2h1bnRBZGRyZXNzARRzdGF0aWNLZXlfZWdnQXNzZXRJZAACEXN0YXRpY19lZ2dBc3NldElkARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAhVzdGF0aWNfY291cG9uc0FkZHJlc3MBHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAhlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAhJzdGF0aWNfYnVybkFkZHJlc3MBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAERZ2V0Q291cG9uc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFHN0YXRpY0tleV9lZ2dBc3NldElkAAEPZ2V0RHVja0NhcGFjaXR5AQZkdWNrSWQJAQ10cnlHZXRJbnRlZ2VyAQkBD2R1Y2tDYXBhY2l0eUtleQEFBmR1Y2tJZAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAQ5nZXRIdW50QWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9odW50QWRkcmVzcwABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABFWdldFJlZkNvbnRyYWN0QWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAQ5nZXRCdXJuQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9idXJuQWRkcmVzcwABDGtleUR1Y2tPd25lcgEHYXNzZXRJZAkArAICCQCsAgICBWR1Y2tfBQdhc3NldElkAgZfb3duZXIBBmNvbW1vbgQFbmZ0SWQIcGF5bWVudHMNYWRkZWRDYXBhY2l0eQ5yZWZlcmVyQWRkcmVzcwQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQVuZnRJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuBAhjYXBhY2l0eQkBD2dldER1Y2tDYXBhY2l0eQEFBW5mdElkBA10b3RhbENhcGFjaXR5CQBkAgUIY2FwYWNpdHkFDWFkZGVkQ2FwYWNpdHkEBGRpZmYJAQVhc0ludAEJAPwHBAUEdGhpcwIRY2FsY3VsYXRlRGlmZkVnZ3MJAMwIAgUIY2FwYWNpdHkJAMwIAgUNdG90YWxDYXBhY2l0eQUDbmlsBQNuaWwDCQAAAgUEZGlmZgUEZGlmZgQTYW1vdW50UGFpZEJ5Q291cG9ucwkBBWFzSW50AQkA/AcECQERZ2V0Q291cG9uc0FkZHJlc3MAAgp1c2VDb3Vwb25zCQDMCAIFBGRpZmYFA25pbAUDbmlsAwkAAAIFE2Ftb3VudFBhaWRCeUNvdXBvbnMFE2Ftb3VudFBhaWRCeUNvdXBvbnMECWxlZnRUb1BheQkAZQIFBGRpZmYFE2Ftb3VudFBhaWRCeUNvdXBvbnMEC3BheW1lbnRMZWZ0AwkBAiE9AgUJbGVmdFRvUGF5AAAECmVnZ1BheW1lbnQJAQV2YWx1ZQEJAJEDAgUIcGF5bWVudHMJAGUCCQCQAwEFCHBheW1lbnRzAAEDCQECIT0CCAUKZWdnUGF5bWVudAdhc3NldElkCQENZ2V0RWdnQXNzZXRJZAAJAAIBCQCsAgICQUNCUjogWW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQDYBAEJAQ1nZXRFZ2dBc3NldElkAAMJAQIhPQIIBQplZ2dQYXltZW50BmFtb3VudAUJbGVmdFRvUGF5CQACAQkArAICAkJDQlI6IFRvIGJyZWVkIHlvdSBjdXJyZW50bHkgbmVlZCB0aGUgZm9sbG93aW5nIGFtb3VudCBvZiBFR0dsZXRzOiAJAKQDAQUJbGVmdFRvUGF5BBVyZWZlcmVyUmV3YXJkRm9yUGVyY2gJAGsDBQlsZWZ0VG9QYXkABQBkBAdyZWZDYWxsCQEJYXNCb29sZWFuAQkA/AcECQEVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAIKcmVmUGF5bWVudAkAzAgCBQ5yZWZlcmVyQWRkcmVzcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0RWdnQXNzZXRJZAAFFXJlZmVyZXJSZXdhcmRGb3JQZXJjaAUDbmlsAwkAAAIFB3JlZkNhbGwFB3JlZkNhbGwEBnRvQnVybgMFB3JlZkNhbGwJAGUCBQlsZWZ0VG9QYXkFFXJlZmVyZXJSZXdhcmRGb3JQZXJjaAUJbGVmdFRvUGF5BAhidXJuQ2FsbAkA/AcECQEOZ2V0QnVybkFkZHJlc3MAAhRidXJuQXR0YWNoZWRQYXltZW50cwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0RWdnQXNzZXRJZAAFBnRvQnVybgUDbmlsAwkAAAIFCGJ1cm5DYWxsBQhidXJuQ2FsbAUJbGVmdFRvUGF5CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAADCQAAAgULcGF5bWVudExlZnQFC3BheW1lbnRMZWZ0BAVkZWJ1ZwkAuQkCCQDMCAIJAKwCAgIMb2xkQ2FwYWNpdHk9CQCkAwEFCGNhcGFjaXR5CQDMCAIJAKwCAgIMbmV3Q2FwYWNpdHk9CQCkAwEFDXRvdGFsQ2FwYWNpdHkJAMwIAgkArAICAg1kaWZmQ2FwYWNpdHk9CQCkAwEFDWFkZGVkQ2FwYWNpdHkJAMwIAgkArAICAglkaWZmUGFpZD0JAKQDAQUEZGlmZgUDbmlsAgE7CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPZHVja0NhcGFjaXR5S2V5AQUFbmZ0SWQFDXRvdGFsQ2FwYWNpdHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAQ9kdWNrQ2FwYWNpdHlLZXkBBQVuZnRJZAIHX2RlYnVnXwkApAMBBQZoZWlnaHQFBWRlYnVnBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBB3BheW1lbnQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGUNDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcQ0NBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAUBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg9DQ086IGFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAUGb3JhY2xlBQNuaWwBaQEXY2FsY3VsYXRlVG90YWxQcmljZUVnZ3MBBGVnZ3MEB3Bvd1BhcnQJAGUCCQBsBgkAZAIA6AcFCGluY3JlYXNlBRBpbmNyZWFzZURlY2ltYWxzCQBkAgUEZWdncwABAAAACAUGSEFMRlVQAIDC1y8EBXByaWNlCQBpAgkAaQIJAGgCBQliYXNlUHJpY2UFB3Bvd1BhcnQFCGluY3JlYXNlAKCNBgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFlBSSUNFX0NBTENVTEFUSU9OX1BPV18JAKQDAQUEZWdncwUHcG93UGFydAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJQUklDRV9DQUxDVUxBVElPTl8JAKQDAQUEZWdncwUFcHJpY2UFA25pbAUFcHJpY2UBaQERY2FsY3VsYXRlRGlmZkVnZ3MCB29sZEVnZ3MHbmV3RWdncwQLYWxyZWFkeVBhaWQJAQVhc0ludAEJAPwHBAUEdGhpcwIXY2FsY3VsYXRlVG90YWxQcmljZUVnZ3MJAMwIAgUHb2xkRWdncwUDbmlsBQNuaWwDCQAAAgULYWxyZWFkeVBhaWQFC2FscmVhZHlQYWlkBAp0b3RhbFRvUGF5CQEFYXNJbnQBCQD8BwQFBHRoaXMCF2NhbGN1bGF0ZVRvdGFsUHJpY2VFZ2dzCQDMCAIFB25ld0VnZ3MFA25pbAUDbmlsAwkAAAIFCnRvdGFsVG9QYXkFCnRvdGFsVG9QYXkEBGRpZmYJAGUCBQp0b3RhbFRvUGF5BQthbHJlYWR5UGFpZAQFZGVidWcJALkJAgkAzAgCCQCsAgICCG9sZFBhaWQ9CQCkAwEFC2FscmVhZHlQYWlkCQDMCAIJAKwCAgIIbmV3UGFpZD0JAKQDAQUKdG90YWxUb1BheQUDbmlsAgE7CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgISREVCVUdfQ0FMQ1VMQVRJT05TBQVkZWJ1ZwUDbmlsBQRkaWZmCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWFkZENhcGFjaXR5VG9EdWNrAg1hZGRlZENhcGFjaXR5DnJlZmVyZXJBZGRyZXNzBApuZnRQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAEEC2R1Y2tBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQpuZnRQYXltZW50B2Fzc2V0SWQEDHJlY29yZEFjdGlvbgkA/AcECQERZ2V0Q291cG9uc0FkZHJlc3MAAgxyZWNvcmRBY3Rpb24JAMwIAgIIUkVDSEFSR0UFA25pbAUDbmlsAwkAAAIFDHJlY29yZEFjdGlvbgUMcmVjb3JkQWN0aW9uAwkBAiE9AggFCm5mdFBheW1lbnQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkCQDOCAIJAM4IAgkBBmNvbW1vbgQFC2R1Y2tBc3NldElkCAUBaQhwYXltZW50cwUNYWRkZWRDYXBhY2l0eQUOcmVmZXJlckFkZHJlc3MJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJAQV2YWx1ZQEIBQpuZnRQYXltZW50B2Fzc2V0SWQFA25pbAUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF2FkZENhcGFjaXR5VG9EdWNrSW5IdW50AwVuZnRJZA1hZGRlZENhcGFjaXR5DnJlZmVyZXJBZGRyZXNzBAtvd25lckluSHVudAkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBDmdldEh1bnRBZGRyZXNzAAkBDGtleUR1Y2tPd25lcgEFBW5mdElkBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwAABAxyZWNvcmRBY3Rpb24JAPwHBAkBEWdldENvdXBvbnNBZGRyZXNzAAIMcmVjb3JkQWN0aW9uCQDMCAICCFJFQ0hBUkdFBQNuaWwFA25pbAMJAAACBQxyZWNvcmRBY3Rpb24FDHJlY29yZEFjdGlvbgMJAQIhPQIFC293bmVySW5IdW50CQClCAEIBQFpBmNhbGxlcgkAAgECLENCUjogWW91IGNhbiBvbmx5IGFkZCBjYXBhY2l0eSB0byBvd24gZHVja3MhCQDOCAIJAQZjb21tb24EBQVuZnRJZAgFAWkIcGF5bWVudHMFDWFkZGVkQ2FwYWNpdHkFDnJlZmVyZXJBZGRyZXNzBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4A5LmsNw==", "height": 3310593, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 5QL2dksHCnmnf32kEDHNN7Y7bR7bazbyxn32foqimfua Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let basePrice = 2000000
5+
6+let increase = 1
7+
8+let increaseDecimals = 3
9+
10+func duckCapacityKey (duckId) = ("added_capacity_" + duckId)
11+
12+
13+func tryGetStringExternal (address,key) = match getString(address, key) {
14+ case a: String =>
15+ a
16+ case _ =>
17+ ""
18+}
19+
20+
21+func tryGetString (key) = tryGetStringExternal(this, key)
22+
23+
24+func tryGetInteger (key) = match getInteger(this, key) {
25+ case b: Int =>
26+ b
27+ case _ =>
28+ 0
29+}
30+
31+
32+func asInt (value) = match value {
33+ case int: Int =>
34+ int
35+ case _ =>
36+ throw("wrong type, expected: Int")
37+}
38+
39+
40+func asBoolean (value) = match value {
41+ case boolean: Boolean =>
42+ boolean
43+ case _ =>
44+ throw("CAB: wrong type, expected: Boolean")
45+}
46+
47+
48+func staticKey_oracleAddress () = "static_oracleAddress"
49+
50+
51+func staticKey_extraFee () = "static_extraFee"
52+
53+
54+func staticKey_breederAddress () = "static_breederAddress"
55+
56+
57+func staticKey_huntAddress () = "static_huntAddress"
58+
59+
60+func staticKey_eggAssetId () = "static_eggAssetId"
61+
62+
63+func staticKey_feeAggregator () = "static_feeAggregator"
64+
65+
66+func staticKey_couponsAddress () = "static_couponsAddress"
67+
68+
69+func staticKey_refContractAddress () = "static_refContractAddress"
70+
71+
72+func staticKey_burnAddress () = "static_burnAddress"
73+
74+
75+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
76+
77+
78+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
79+
80+
81+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
82+
83+
84+func getDuckCapacity (duckId) = tryGetInteger(duckCapacityKey(duckId))
85+
86+
87+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
88+
89+
90+func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_huntAddress())))
91+
92+
93+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
94+
95+
96+func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
97+
98+
99+func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
100+
101+
102+func keyDuckOwner (assetId) = (("duck_" + assetId) + "_owner")
103+
104+
105+func common (nftId,payments,addedCapacity,refererAddress) = {
106+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [nftId], nil))
107+ if ((children == children))
108+ then {
109+ let capacity = getDuckCapacity(nftId)
110+ let totalCapacity = (capacity + addedCapacity)
111+ let diff = asInt(invoke(this, "calculateDiffEggs", [capacity, totalCapacity], nil))
112+ if ((diff == diff))
113+ then {
114+ let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [diff], nil))
115+ if ((amountPaidByCoupons == amountPaidByCoupons))
116+ then {
117+ let leftToPay = (diff - amountPaidByCoupons)
118+ let paymentLeft = if ((leftToPay != 0))
119+ then {
120+ let eggPayment = value(payments[(size(payments) - 1)])
121+ if ((eggPayment.assetId != getEggAssetId()))
122+ then throw(("CBR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
123+ else if ((eggPayment.amount != leftToPay))
124+ then throw(("CBR: To breed you currently need the following amount of EGGlets: " + toString(leftToPay)))
125+ else {
126+ let refererRewardForPerch = fraction(leftToPay, 5, 100)
127+ let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
128+ if ((refCall == refCall))
129+ then {
130+ let toBurn = if (refCall)
131+ then (leftToPay - refererRewardForPerch)
132+ else leftToPay
133+ let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
134+ if ((burnCall == burnCall))
135+ then leftToPay
136+ else throw("Strict value is not equal to itself.")
137+ }
138+ else throw("Strict value is not equal to itself.")
139+ }
140+ }
141+ else 0
142+ if ((paymentLeft == paymentLeft))
143+ then {
144+ let debug = makeString([("oldCapacity=" + toString(capacity)), ("newCapacity=" + toString(totalCapacity)), ("diffCapacity=" + toString(addedCapacity)), ("diffPaid=" + toString(diff))], ";")
145+[IntegerEntry(duckCapacityKey(nftId), totalCapacity), StringEntry(((duckCapacityKey(nftId) + "_debug_") + toString(height)), debug)]
146+ }
147+ else throw("Strict value is not equal to itself.")
148+ }
149+ else throw("Strict value is not equal to itself.")
150+ }
151+ else throw("Strict value is not equal to itself.")
152+ }
153+ else throw("Strict value is not equal to itself.")
154+ }
155+
156+
157+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
158+ then throw("CCAP: Please attach waves")
159+ else {
160+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
161+ if ((payment.amount != feeAmount))
162+ then throw((("CCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
163+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
164+ }
165+
166+
167+@Callable(i)
168+func configureOracle (oracle) = if ((i.caller != this))
169+ then throw("CCO: admin only")
170+ else [StringEntry(staticKey_oracleAddress(), oracle)]
171+
172+
173+
174+@Callable(i)
175+func calculateTotalPriceEggs (eggs) = {
176+ let powPart = (pow((1000 + increase), increaseDecimals, (eggs + 1), 0, 8, HALFUP) - 100000000)
177+ let price = (((basePrice * powPart) / increase) / 100000)
178+ $Tuple2([IntegerEntry(("PRICE_CALCULATION_POW_" + toString(eggs)), powPart), IntegerEntry(("PRICE_CALCULATION_" + toString(eggs)), price)], price)
179+ }
180+
181+
182+
183+@Callable(i)
184+func calculateDiffEggs (oldEggs,newEggs) = {
185+ let alreadyPaid = asInt(invoke(this, "calculateTotalPriceEggs", [oldEggs], nil))
186+ if ((alreadyPaid == alreadyPaid))
187+ then {
188+ let totalToPay = asInt(invoke(this, "calculateTotalPriceEggs", [newEggs], nil))
189+ if ((totalToPay == totalToPay))
190+ then {
191+ let diff = (totalToPay - alreadyPaid)
192+ let debug = makeString([("oldPaid=" + toString(alreadyPaid)), ("newPaid=" + toString(totalToPay))], ";")
193+ $Tuple2([StringEntry("DEBUG_CALCULATIONS", debug)], diff)
194+ }
195+ else throw("Strict value is not equal to itself.")
196+ }
197+ else throw("Strict value is not equal to itself.")
198+ }
199+
200+
201+
202+@Callable(i)
203+func addCapacityToDuck (addedCapacity,refererAddress) = {
204+ let nftPayment = value(i.payments[0])
205+ let validPayment = checkAdditionalPayment(i.payments[1])
206+ let duckAssetId = toBase58String(value(nftPayment.assetId))
207+ let recordAction = invoke(getCouponsAddress(), "recordAction", ["RECHARGE"], nil)
208+ if ((recordAction == recordAction))
209+ then if ((nftPayment.amount != 1))
210+ then throw("NFT is not attached")
211+ else ((common(duckAssetId, i.payments, addedCapacity, refererAddress) ++ [ScriptTransfer(i.caller, 1, value(nftPayment.assetId))]) ++ validPayment)
212+ else throw("Strict value is not equal to itself.")
213+ }
214+
215+
216+
217+@Callable(i)
218+func addCapacityToDuckInHunt (nftId,addedCapacity,refererAddress) = {
219+ let ownerInHunt = tryGetStringExternal(getHuntAddress(), keyDuckOwner(nftId))
220+ let validPayment = checkAdditionalPayment(i.payments[0])
221+ let recordAction = invoke(getCouponsAddress(), "recordAction", ["RECHARGE"], nil)
222+ if ((recordAction == recordAction))
223+ then if ((ownerInHunt != toString(i.caller)))
224+ then throw("CBR: You can only add capacity to own ducks!")
225+ else (common(nftId, i.payments, addedCapacity, refererAddress) ++ validPayment)
226+ else throw("Strict value is not equal to itself.")
227+ }
228+
229+

github/deemru/w8io/c3f4982 
17.12 ms