tx · 4xsVdBshJfVZjMV7QrxDN3YRRJX9nTdY7nN1fG81xmog

3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335:  -0.01800000 Waves

2024.10.07 20:22 [3316717] smart account 3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335 > SELF 0.00000000 Waves

{ "type": 13, "id": "4xsVdBshJfVZjMV7QrxDN3YRRJX9nTdY7nN1fG81xmog", "fee": 1800000, "feeAssetId": null, "timestamp": 1728321764872, "version": 2, "chainId": 84, "sender": "3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335", "senderPublicKey": "4f2Ggz6CqZhqr3FaW8dzR6KoddCudvULpuUfh7ew3Yne", "proofs": [ "5SFrRVjPkLtXdnxkueBU2NxQ2Z7MWyDj6He2ahgEFB3ieJN3aYLazRLX723nby65ieLssjfm3JvmzZMwjAe9fVrv" ], "script": "base64:BgIZCAISAwoBCBIAEgMKAQgSAwoBCBIECgIICCgBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkAAgEJAKwCAgIpUkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50LCBidXQgZ290OiAFBnN0cmluZwkAAgECHlJBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEJYXNCb29sZWFuAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHYm9vbGVhbgUHJG1hdGNoMAUHYm9vbGVhbgkAAgECIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBcwUHJG1hdGNoMAkAAgECJndyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcsIGdvdDogSW50AwkAAQIFByRtYXRjaDACBFVuaXQEAXMFByRtYXRjaDAJAAIBAid3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IFVuaXQJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAIUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IBIHN0YXRpY0tleV9jYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIdc3RhdGljX2NhbmluZUluY3ViYXRvckFkZHJlc3MBHnN0YXRpY0tleV9jYW5pbmVCcmVlZGVyQWRkcmVzcwACG3N0YXRpY19jYW5pbmVCcmVlZGVyQWRkcmVzcwEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAIVc3RhdGljX2NvdXBvbnNBZGRyZXNzAR5zdGF0aWNLZXlfY2FuaW5lU3Rha2luZ0FkZHJlc3MAAhtzdGF0aWNfY2FuaW5lU3Rha2luZ0FkZHJlc3MBHHN0YXRpY0tleV9kdWNrU3Rha2luZ0FkZHJlc3MAAhhzdGF0aWNfZmFybWluZ0FkZHJlc3NOZXcBHnN0YXRpY0tleV9kdWNrSW5jdWJhdG9yQWRkcmVzcwACF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAITc3RhdGljX2l0ZW1zQWRkcmVzcwEhc3RhdGljS2V5X2NhbmluZVdhdmVzUmViaXJ0aFByaWNlAAIec3RhdGljX2NhbmluZVdhdmVzUmViaXJ0aFByaWNlASBzdGF0aWNLZXlfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwACHXN0YXRpY190dXJ0bGVJbmN1YmF0b3JBZGRyZXNzARlzdGF0aWNLZXlfYmFieUR1Y2tBZGRyZXNzAAIWc3RhdGljX2JhYnlEdWNrQWRkcmVzcwEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAARBnZXRGZWVBZ2dyZWdhdG9yAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9jYW5pbmVCcmVlZGVyQWRkcmVzcwABGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJASBzdGF0aWNLZXlfY2FuaW5lSW5jdWJhdG9yQWRkcmVzcwABEWdldENvdXBvbnNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAEXZ2V0Q2FuaW5lU3Rha2luZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfY2FuaW5lU3Rha2luZ0FkZHJlc3MAARVnZXREdWNrU3Rha2luZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARxzdGF0aWNLZXlfZHVja1N0YWtpbmdBZGRyZXNzAAEXZ2V0RHVja0luY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfZHVja0luY3ViYXRvckFkZHJlc3MAAQ9nZXRJdGVtc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBIHN0YXRpY0tleV90dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAESZ2V0QmFieUR1Y2tBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEZc3RhdGljS2V5X2JhYnlEdWNrQWRkcmVzcwABFXRyeUdldEludGVnZXJFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgkAAgECGlRSOiBWYWx1ZSBub3QgZm91bmQgaW4gc2MhAAt3YXZlc0Ftb3VudAkBFXRyeUdldEludGVnZXJFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEhc3RhdGljS2V5X2NhbmluZVdhdmVzUmViaXJ0aFByaWNlAAAQZGVsYXlGb3JIYXRjaGluZwACAQljaGVja1JlYWwBB2Fzc2V0SWQDAwkAAAIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQGaXNzdWVyCQEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MABgkAAAIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQGaXNzdWVyCQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwAICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQGaXNzdWVyCQACAQINbm90IHZhbGlkIE5GVAEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEHcGF5bWVudAMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIZUkNBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQJZmVlQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCCQEJZ2V0T3JhY2xlAAkBEnN0YXRpY0tleV9leHRyYUZlZQADCQECIT0CCAUHcGF5bWVudAZhbW91bnQFCWZlZUFtb3VudAkAAgEJAKwCAgkArAICAhxSQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQCkAwEFCWZlZUFtb3VudAITIGFtb3VudCBvZiB3YXZlbGV0cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFCWZlZUFtb3VudAUEdW5pdAUDbmlsAQ9nZXRSYW5kb21OdW1iZXIEB29wdGlvbnMEdHhJZBRoYXRjaGluZ0ZpbmlzaEhlaWdodAZvZmZzZXQED3JhbmRvbVNlZWRCbG9jawkBBXZhbHVlAQkA7QcBCQBlAgUUaGF0Y2hpbmdGaW5pc2hIZWlnaHQAAQQKcmFuZG9tSGFzaAkA9wMBCQDLAQIFBHR4SWQJAQV2YWx1ZQEIBQ9yYW5kb21TZWVkQmxvY2sDdnJmCQBqAgkAsgkCBQpyYW5kb21IYXNoCQBoAgUGb2Zmc2V0AAgFB29wdGlvbnMBDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAoAgBBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDGdldFJhbmRvbVdpbgMCdHgMZmluaXNoSGVpZ2h0DWJsYWNrbGlzdENvZGUEAW4JAQ9nZXRSYW5kb21OdW1iZXIEAOgHBQJ0eAUMZmluaXNoSGVpZ2h0AAAEBnJlc3VsdAMDCQBmAgBkBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAglkb2NraW5nX0EHAglkb2NraW5nX0EDAwkAZgIAyAEFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCCWRvY2tpbmdfQgcCCWRvY2tpbmdfQgMDCQBmAgCsAgUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIJZG9ja2luZ19DBwIJZG9ja2luZ19DAwMJAGYCAJADBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAglkb2NraW5nX0QHAglkb2NraW5nX0QDAwkAZgIAwgMFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCCWluY3ViYXRvcgcCCWluY3ViYXRvcgMDCQBmAgDqAwUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQILZHVja2xpbmdfNDAHAgtkdWNrbGluZ180MAMDCQBmAgCcBAUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQILZHVja2xpbmdfMjAHAgtkdWNrbGluZ18yMAMDCQBmAgCABQUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIOaXRlbSFBUlQtRkVFRDUHAg5pdGVtIUFSVC1GRUVENQMDCQBmAgDGBQUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIPaXRlbSFBUlQtRkVFRDEwBwIPaXRlbSFBUlQtRkVFRDEwAwMJAGYCAOQFBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAg9pdGVtIUFSVC1GRUVEMTUHAg9pdGVtIUFSVC1GRUVEMTUDAwkAZgIAggYFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCD2l0ZW0hQVJULUZFRUQyMAcCD2l0ZW0hQVJULUZFRUQyMAMDCQBmAgCWBgUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQIPaXRlbSFBUlQtRkVFRDI1BwIPaXRlbSFBUlQtRkVFRDI1AwMJAGYCAKoGBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAg9pdGVtIUFSVC1GRUVENTAHAg9pdGVtIUFSVC1GRUVENTADAwkAZgIAvgYFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCEGl0ZW0hQVJULUZFRUQxMDAHAhBpdGVtIUFSVC1GRUVEMTAwAwMJAGYCANwGBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAhNpdGVtIUFSVC1NVVRBUklVTS1HBwITaXRlbSFBUlQtTVVUQVJJVU0tRwMDCQBmAgD6BgUBbgkBAiE9AgUNYmxhY2tsaXN0Q29kZQITaXRlbSFBUlQtTVVUQVJJVU0tRAcCE2l0ZW0hQVJULU1VVEFSSVVNLUQDAwkAZgIAjgcFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCEWl0ZW0hQVJULUZSRUVHRU5FBwIRaXRlbSFBUlQtRlJFRUdFTkUDAwkAZgIAogcFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCEGl0ZW0hQVJULUZJWEdFTkUHAhBpdGVtIUFSVC1GSVhHRU5FAwMJAGYCANQHBQFuCQECIT0CBQ1ibGFja2xpc3RDb2RlAg50cnRsX2luY3ViYXRvcgcCDnRydGxfaW5jdWJhdG9yAg9pdGVtIUFSVC1QT1RJT04JAJQKAgUBbgUGcmVzdWx0AQ9nZXRSYW5kb21SZXR1cm4CAnR4DGZpbmlzaEhlaWdodAQBbgkBD2dldFJhbmRvbU51bWJlcgQAAgUCdHgFDGZpbmlzaEhlaWdodAABAwkAAAIFAW4AAAYHARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBmluaXRUeAdhZGRyZXNzEWFkZGl0aW9uYWxQYXltZW50BmRvdWJsZQ1ibGFja2xpc3RDb2RlBnJlc2N1ZQQLZmluaXNoQmxvY2sJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIMX2ZpbmlzaEJsb2NrBAZzdGF0dXMJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4Agdfc3RhdHVzBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQURYWRkaXRpb25hbFBheW1lbnQDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQDCQECIT0CBQZzdGF0dXMCBG9wZW4JAAIBAh9yZWJpcnRoIGlzIGZpbmlzaGVkIG9yIG5vdCBvcGVuAwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBAh55b3UgY2Fubm90IGZpbmlzaCByZWJpcnRoLCB5ZXQEBm91dHB1dAkBDGdldFJhbmRvbVdpbgMJANkEAQUGaW5pdFR4BQtmaW5pc2hCbG9jawUNYmxhY2tsaXN0Q29kZQQDd2luCAUGb3V0cHV0Al8yBAZyYW5kb20IBQZvdXRwdXQCXzEEBHR4SWQFBmluaXRUeAQGcmVzdWx0AwkBAiE9AgkAswkCBQN3aW4CB2RvY2tpbmcFBHVuaXQEBWNvbG9yCQCyAgIFA3dpbgABBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJARdnZXRDYW5pbmVTdGFraW5nQWRkcmVzcwACDGFkZEZyZWVQZXJjaAkAzAgCBQdhZGRyZXNzCQDMCAIFBWNvbG9yCQDMCAIAAQUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARdnZXRDYW5pbmVTdGFraW5nQWRkcmVzcwACDGFkZEZyZWVQZXJjaAkAzAgCBQdhZGRyZXNzCQDMCAIFBWNvbG9yCQDMCAIAAgUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQUDd2luBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQN3aW4CCWluY3ViYXRvcgQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwACCWlzc3VlRnJlZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwACCWlzc3VlRnJlZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAQGc2Vjb25kCQD8BwQJARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAIPaXNzdWVGcmVlVHVydGxlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUGc2Vjb25kBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQIJaW5jdWJhdG9yBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAQIhPQIJALMJAgUDd2luAghkdWNrbGluZwUEdW5pdAQFbGV2ZWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFA3dpbgIBXwABBApsZXZlbEZpbmFsAwUGZG91YmxlCQBoAgACBQVsZXZlbAUFbGV2ZWwEBGNhbGwJAPwHBAkBEmdldEJhYnlEdWNrQWRkcmVzcwACEWlzc3VlRnJlZUR1Y2tsaW5nCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAkAzAgCBQpsZXZlbEZpbmFsBQNuaWwFA25pbAMJAAACBQRjYWxsBQRjYWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBGNhbGwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQN3aW4CDnRydGxfaW5jdWJhdG9yBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAIPaXNzdWVGcmVlVHVydGxlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAIPaXNzdWVGcmVlVHVydGxlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0BAZzZWNvbmQJAPwHBAkBGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MAAglpc3N1ZUZyZWUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xAg50cnRsX2luY3ViYXRvcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQECIT0CCQCzCQIFA3dpbgIEaXRlbQUEdW5pdAQIaXRlbU5hbWUJAJEDAgkAtQkCBQN3aW4CASEAAQQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAISaXNzdWVBcnRlZmFjdEluZGV4CQDMCAIFCGl0ZW1OYW1lCQDMCAIFB2FkZHJlc3MJAMwIAgAABQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACEmlzc3VlQXJ0ZWZhY3RJbmRleAkAzAgCBQhpdGVtTmFtZQkAzAgCBQdhZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0BAZzZWNvbmQJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACEmlzc3VlQXJ0ZWZhY3RJbmRleAkAzAgCBQhpdGVtTmFtZQkAzAgCBQdhZGRyZXNzCQDMCAIAAQUDbmlsBQNuaWwDCQAAAgUGc2Vjb25kBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQUDd2luBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgEJAKwCAgI0UkZCOiBTb21lIGVycm9yIG9jY3VyZWQsIHBsZWFzZSBjb250YWN0IHRoZSBhZG1pbnMhIAUDd2luAwkAAAIFBnJlc3VsdAUGcmVzdWx0BA5yZXR1cm5Ub1NlbmRlcgkBD2dldFJhbmRvbVJldHVybgIJANkEAQUGaW5pdFR4BQtmaW5pc2hCbG9jawQNcmV0dXJuUGF5bG9hZAMFDnJldHVyblRvU2VuZGVyBAdhc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9hc3NldElkBAZpc3N1ZXIJAQljaGVja1JlYWwBBQdhc3NldElkBANnZW4JAQhhc1N0cmluZwEJAPwHBAkBF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAIOZ2V0R2VuRnJvbU5hbWUJAMwIAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZARuYW1lBQNuaWwFA25pbAMJAAACBQNnZW4FA2dlbgQEY2FsbAkA/AcEBQZpc3N1ZXICDmluY3JlYXNlUmFyaXR5CQDMCAIJANgEAQUHYXNzZXRJZAkAzAgCBQNnZW4FA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwABBQdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAzggCCQDOCAIJAM4IAgUGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBF93aW4FA3dpbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4Agdfc3RhdHVzAgZmaW5pc2gJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yYW5kb20FBnJhbmRvbQUDbmlsBQx2YWxpZFBheW1lbnQFDXJldHVyblBheWxvYWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPUkNVOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpAQtpbml0UmViaXJ0aAAECXBtdENhbmluZQkAkQMCCAUBaQhwYXltZW50cwAABAhwbXRXYXZlcwkAkQMCCAUBaQhwYXltZW50cwABBAdhc3NldElkCQEFdmFsdWUBCAUJcG10Q2FuaW5lB2Fzc2V0SWQEBmluaXRUeAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQlwbXRDYW5pbmUGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkAwMJAQIhPQIIBQhwbXRXYXZlcwZhbW91bnQFC3dhdmVzQW1vdW50BgkBAiE9AggFCHBtdFdhdmVzB2Fzc2V0SWQFBHVuaXQJAAIBAiZXYXZlc3BheW1lbnQgaXMgbm90IGF0dGFjaGVkIG9yIHdyb25nIQQQc2VuZFRvQWdncmVHYXRvcgkAaQIIBQhwbXRXYXZlcwZhbW91bnQABAQFdG9wdXAJAGUCCAUIcG10V2F2ZXMGYW1vdW50BRBzZW5kVG9BZ2dyZUdhdG9yBAdhZGRNb3JlCQD8BwQJARdnZXRDYW5pbmVTdGFraW5nQWRkcmVzcwACFGFkZFdhdmVzQW5kU3Rha2VNb3JlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFBXRvcHVwBQNuaWwDCQAAAgUHYWRkTW9yZQUHYWRkTW9yZQQGaXNzdWVyCQEJY2hlY2tSZWFsAQUHYXNzZXRJZAQDZ2VuCQEIYXNTdHJpbmcBCQD8BwQJARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwACDmdldEdlbkZyb21OYW1lCQDMCAIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEbmFtZQUDbmlsBQNuaWwDCQAAAgUDZ2VuBQNnZW4EBGNhbGwJAPwHBAUGaXNzdWVyAgxyZWR1Y2VSYXJpdHkJAMwIAgkA2AQBBQdhc3NldElkCQDMCAIFA2dlbgUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIMX2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BRBkZWxheUZvckhhdGNoaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMCBG9wZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX2Fzc2V0SWQJANgEAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFEHNlbmRUb0FnZ3JlR2F0b3IFBHVuaXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1maW5pc2hSZWJpcnRoAQZpbml0VHgJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAAHAgAHAWkBE2ZpbmlzaFJlYmlydGhEb3VibGUBBmluaXRUeAMJAQEhAQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABBwkAAgECD0ludmFsaWQgcGF5bWVudAQHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtib29zdGVyVHlwZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQtib29zdGVyVHlwZQULYm9vc3RlclR5cGUDCQAAAgULYm9vc3RlclR5cGUCDkFSVC1HSUZUX0RPVUJMCQDOCAIJAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEFA25pbAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAQYCAAcJAAIBAi1FcnJvciEgV3JvbmcgaXRlbSBhdHRhY2hlZCB0byBkb3VibGUgcmV3YXJkcyEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERZmluaXNoUmViaXJ0aEl0ZW0CBmluaXRUeAhpdGVtQ29kZQMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQcEB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYm9vc3RlclR5cGUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgULYm9vc3RlclR5cGUFC2Jvb3N0ZXJUeXBlAwkAAAIFC2Jvb3N0ZXJUeXBlAgtBUlQtSFdFUkFTRQkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEHBQhpdGVtQ29kZQcDCQAAAgULYm9vc3RlclR5cGUCDEFSVC1IV1JFU0NVRQkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEHAgAGAwkAAAIFC2Jvb3N0ZXJUeXBlAg5BUlQtR0lGVF9ET1VCTAkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEGAgAHCQACAQIbRXJyb3IhIFdyb25nIGl0ZW0gYXR0YWNoZWQgCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAAcCAAcJAAIBAhBJbnZhbGlkIHBheW1lbnRzABS4yB8=", "height": 3316717, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none 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 tryGetInteger (key) = match getInteger(this, key) {
13+ case b: Int =>
14+ b
15+ case _ =>
16+ 0
17+}
18+
19+
20+func tryGetString (key) = tryGetStringExternal(this, key)
21+
22+
23+func asInt (value) = match value {
24+ case int: Int =>
25+ int
26+ case string: String =>
27+ throw(("RAI: wrong type, expected: Int, but got: " + string))
28+ case _ =>
29+ throw("RAI: wrong type, expected: Int")
30+}
31+
32+
33+func asBoolean (value) = match value {
34+ case boolean: Boolean =>
35+ boolean
36+ case _ =>
37+ throw("FAB: wrong type, expected: Boolean")
38+}
39+
40+
41+func asString (value) = match value {
42+ case s: String =>
43+ s
44+ case s: Int =>
45+ throw("wrong type, expected: String, got: Int")
46+ case s: Unit =>
47+ throw("wrong type, expected: String, got: Unit")
48+ case _ =>
49+ throw("wrong type, expected: String")
50+}
51+
52+
53+func staticKey_oracleAddress () = "static_oracleAddress"
54+
55+
56+func staticKey_extraFee () = "static_extraFee"
57+
58+
59+func staticKey_feeAggregator () = "static_feeAggregator"
60+
61+
62+func staticKey_canineIncubatorAddress () = "static_canineIncubatorAddress"
63+
64+
65+func staticKey_canineBreederAddress () = "static_canineBreederAddress"
66+
67+
68+func staticKey_couponsAddress () = "static_couponsAddress"
69+
70+
71+func staticKey_canineStakingAddress () = "static_canineStakingAddress"
72+
73+
74+func staticKey_duckStakingAddress () = "static_farmingAddressNew"
75+
76+
77+func staticKey_duckIncubatorAddress () = "static_incubatorAddress"
78+
79+
80+func staticKey_itemsAddress () = "static_itemsAddress"
81+
82+
83+func staticKey_canineWavesRebirthPrice () = "static_canineWavesRebirthPrice"
84+
85+
86+func staticKey_turtleIncubatorAddress () = "static_turtleIncubatorAddress"
87+
88+
89+func staticKey_babyDuckAddress () = "static_babyDuckAddress"
90+
91+
92+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
93+
94+
95+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
96+
97+
98+func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineBreederAddress())))
99+
100+
101+func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineIncubatorAddress())))
102+
103+
104+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
105+
106+
107+func getCanineStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineStakingAddress())))
108+
109+
110+func getDuckStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckStakingAddress())))
111+
112+
113+func getDuckIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckIncubatorAddress())))
114+
115+
116+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
117+
118+
119+func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleIncubatorAddress())))
120+
121+
122+func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckAddress())))
123+
124+
125+func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
126+ case b: Int =>
127+ b
128+ case _ =>
129+ throw("TR: Value not found in sc!")
130+}
131+
132+
133+let wavesAmount = tryGetIntegerExternal(getOracle(), staticKey_canineWavesRebirthPrice())
134+
135+let delayForHatching = 2
136+
137+func checkReal (assetId) = if (if ((value(assetInfo(assetId)).issuer == getCanineBreederAddress()))
138+ then true
139+ else (value(assetInfo(assetId)).issuer == getCanineIncubatorAddress()))
140+ then value(assetInfo(assetId)).issuer
141+ else throw("not valid NFT")
142+
143+
144+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
145+ then throw("RCAP: Please attach waves")
146+ else {
147+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
148+ if ((payment.amount != feeAmount))
149+ then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
150+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
151+ }
152+
153+
154+func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
155+ let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
156+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
157+ (toInt(randomHash, (offset * 8)) % options)
158+ }
159+
160+
161+func tryGetBoolean (key) = match getBoolean(key) {
162+ case b: Boolean =>
163+ b
164+ case _ =>
165+ false
166+}
167+
168+
169+func getRandomWin (tx,finishHeight,blacklistCode) = {
170+ let n = getRandomNumber(1000, tx, finishHeight, 0)
171+ let result = if (if ((100 > n))
172+ then (blacklistCode != "docking_A")
173+ else false)
174+ then "docking_A"
175+ else if (if ((200 > n))
176+ then (blacklistCode != "docking_B")
177+ else false)
178+ then "docking_B"
179+ else if (if ((300 > n))
180+ then (blacklistCode != "docking_C")
181+ else false)
182+ then "docking_C"
183+ else if (if ((400 > n))
184+ then (blacklistCode != "docking_D")
185+ else false)
186+ then "docking_D"
187+ else if (if ((450 > n))
188+ then (blacklistCode != "incubator")
189+ else false)
190+ then "incubator"
191+ else if (if ((490 > n))
192+ then (blacklistCode != "duckling_40")
193+ else false)
194+ then "duckling_40"
195+ else if (if ((540 > n))
196+ then (blacklistCode != "duckling_20")
197+ else false)
198+ then "duckling_20"
199+ else if (if ((640 > n))
200+ then (blacklistCode != "item!ART-FEED5")
201+ else false)
202+ then "item!ART-FEED5"
203+ else if (if ((710 > n))
204+ then (blacklistCode != "item!ART-FEED10")
205+ else false)
206+ then "item!ART-FEED10"
207+ else if (if ((740 > n))
208+ then (blacklistCode != "item!ART-FEED15")
209+ else false)
210+ then "item!ART-FEED15"
211+ else if (if ((770 > n))
212+ then (blacklistCode != "item!ART-FEED20")
213+ else false)
214+ then "item!ART-FEED20"
215+ else if (if ((790 > n))
216+ then (blacklistCode != "item!ART-FEED25")
217+ else false)
218+ then "item!ART-FEED25"
219+ else if (if ((810 > n))
220+ then (blacklistCode != "item!ART-FEED50")
221+ else false)
222+ then "item!ART-FEED50"
223+ else if (if ((830 > n))
224+ then (blacklistCode != "item!ART-FEED100")
225+ else false)
226+ then "item!ART-FEED100"
227+ else if (if ((860 > n))
228+ then (blacklistCode != "item!ART-MUTARIUM-G")
229+ else false)
230+ then "item!ART-MUTARIUM-G"
231+ else if (if ((890 > n))
232+ then (blacklistCode != "item!ART-MUTARIUM-D")
233+ else false)
234+ then "item!ART-MUTARIUM-D"
235+ else if (if ((910 > n))
236+ then (blacklistCode != "item!ART-FREEGENE")
237+ else false)
238+ then "item!ART-FREEGENE"
239+ else if (if ((930 > n))
240+ then (blacklistCode != "item!ART-FIXGENE")
241+ else false)
242+ then "item!ART-FIXGENE"
243+ else if (if ((980 > n))
244+ then (blacklistCode != "trtl_incubator")
245+ else false)
246+ then "trtl_incubator"
247+ else "item!ART-POTION"
248+ $Tuple2(n, result)
249+ }
250+
251+
252+func getRandomReturn (tx,finishHeight) = {
253+ let n = getRandomNumber(2, tx, finishHeight, 1)
254+ if ((n == 0))
255+ then true
256+ else false
257+ }
258+
259+
260+func finishRebirthInternal (initTx,address,additionalPayment,double,blacklistCode,rescue) = {
261+ let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
262+ let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
263+ let validPayment = checkAdditionalPayment(additionalPayment)
264+ if ((validPayment == validPayment))
265+ then if ((status != "open"))
266+ then throw("rebirth is finished or not open")
267+ else if ((finishBlock > height))
268+ then throw("you cannot finish rebirth, yet")
269+ else {
270+ let output = getRandomWin(fromBase58String(initTx), finishBlock, blacklistCode)
271+ let win = output._2
272+ let random = output._1
273+ let txId = initTx
274+ let result = if ((indexOf(win, "docking") != unit))
275+ then {
276+ let color = takeRight(win, 1)
277+ let call = if (!(double))
278+ then {
279+ let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 1], nil)
280+ if ((first == first))
281+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
282+ else throw("Strict value is not equal to itself.")
283+ }
284+ else {
285+ let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 2], nil)
286+ if ((first == first))
287+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
288+ else throw("Strict value is not equal to itself.")
289+ }
290+ if ((call == call))
291+ then call
292+ else throw("Strict value is not equal to itself.")
293+ }
294+ else if ((win == "incubator"))
295+ then {
296+ let call = if (!(double))
297+ then {
298+ let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
299+ if ((first == first))
300+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
301+ else throw("Strict value is not equal to itself.")
302+ }
303+ else {
304+ let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
305+ if ((first == first))
306+ then {
307+ let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
308+ if ((second == second))
309+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
310+ else throw("Strict value is not equal to itself.")
311+ }
312+ else throw("Strict value is not equal to itself.")
313+ }
314+ if ((call == call))
315+ then call
316+ else throw("Strict value is not equal to itself.")
317+ }
318+ else if ((indexOf(win, "duckling") != unit))
319+ then {
320+ let level = parseIntValue(split(win, "_")[1])
321+ let levelFinal = if (double)
322+ then (2 * level)
323+ else level
324+ let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
325+ if ((call == call))
326+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
327+ else throw("Strict value is not equal to itself.")
328+ }
329+ else if ((win == "trtl_incubator"))
330+ then {
331+ let call = if (!(double))
332+ then {
333+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
334+ if ((first == first))
335+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
336+ else throw("Strict value is not equal to itself.")
337+ }
338+ else {
339+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
340+ if ((first == first))
341+ then {
342+ let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
343+ if ((second == second))
344+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "trtl_incubator")]
345+ else throw("Strict value is not equal to itself.")
346+ }
347+ else throw("Strict value is not equal to itself.")
348+ }
349+ if ((call == call))
350+ then call
351+ else throw("Strict value is not equal to itself.")
352+ }
353+ else if ((indexOf(win, "item") != unit))
354+ then {
355+ let itemName = split(win, "!")[1]
356+ let call = if (!(double))
357+ then {
358+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
359+ if ((first == first))
360+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
361+ else throw("Strict value is not equal to itself.")
362+ }
363+ else {
364+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
365+ if ((first == first))
366+ then {
367+ let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
368+ if ((second == second))
369+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
370+ else throw("Strict value is not equal to itself.")
371+ }
372+ else throw("Strict value is not equal to itself.")
373+ }
374+ if ((call == call))
375+ then call
376+ else throw("Strict value is not equal to itself.")
377+ }
378+ else throw(("RFB: Some error occured, please contact the admins! " + win))
379+ if ((result == result))
380+ then {
381+ let returnToSender = getRandomReturn(fromBase58String(initTx), finishBlock)
382+ let returnPayload = if (returnToSender)
383+ then {
384+ let assetId = fromBase58String(getStringValue((((("address_" + address) + "_initTx_") + initTx) + "_assetId")))
385+ let issuer = checkReal(assetId)
386+ let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
387+ if ((gen == gen))
388+ then {
389+ let call = invoke(issuer, "increaseRarity", [toBase58String(assetId), gen], nil)
390+ if ((call == call))
391+ then [ScriptTransfer(addressFromStringValue(address), 1, assetId)]
392+ else throw("Strict value is not equal to itself.")
393+ }
394+ else throw("Strict value is not equal to itself.")
395+ }
396+ else nil
397+ (((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment) ++ returnPayload)
398+ }
399+ else throw("Strict value is not equal to itself.")
400+ }
401+ else throw("Strict value is not equal to itself.")
402+ }
403+
404+
405+@Callable(i)
406+func configureOracle (oracle) = if ((i.caller != this))
407+ then throw("RCU: admin only")
408+ else [StringEntry("static_oracleAddress", oracle)]
409+
410+
411+
412+@Callable(i)
413+func initRebirth () = {
414+ let pmtCanine = i.payments[0]
415+ let pmtWaves = i.payments[1]
416+ let assetId = value(pmtCanine.assetId)
417+ let initTx = toBase58String(i.transactionId)
418+ let address = toString(i.caller)
419+ if ((pmtCanine.amount != 1))
420+ then throw("NFT is not attached")
421+ else if (if ((pmtWaves.amount != wavesAmount))
422+ then true
423+ else (pmtWaves.assetId != unit))
424+ then throw("Wavespayment is not attached or wrong!")
425+ else {
426+ let sendToAggreGator = (pmtWaves.amount / 4)
427+ let topup = (pmtWaves.amount - sendToAggreGator)
428+ let addMore = invoke(getCanineStakingAddress(), "addWavesAndStakeMore", nil, [AttachedPayment(unit, topup)])
429+ if ((addMore == addMore))
430+ then {
431+ let issuer = checkReal(assetId)
432+ let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
433+ if ((gen == gen))
434+ then {
435+ let call = invoke(issuer, "reduceRarity", [toBase58String(assetId), gen], nil)
436+ if ((call == call))
437+ then [IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId)), ScriptTransfer(getFeeAggregator(), sendToAggreGator, unit)]
438+ else throw("Strict value is not equal to itself.")
439+ }
440+ else throw("Strict value is not equal to itself.")
441+ }
442+ else throw("Strict value is not equal to itself.")
443+ }
444+ }
445+
446+
447+
448+@Callable(i)
449+func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
450+
451+
452+
453+@Callable(i)
454+func finishRebirthDouble (initTx) = if (!(if ((size(i.payments) == 2))
455+ then (i.payments[0].amount == 1)
456+ else false))
457+ then throw("Invalid payment")
458+ else {
459+ let assetId = value(i.payments[0].assetId)
460+ let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
461+ if ((boosterType == boosterType))
462+ then if ((boosterType == "ART-GIFT_DOUBL"))
463+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
464+ else throw("Error! Wrong item attached to double rewards!")
465+ else throw("Strict value is not equal to itself.")
466+ }
467+
468+
469+
470+@Callable(i)
471+func finishRebirthItem (initTx,itemCode) = if (if ((size(i.payments) == 2))
472+ then (i.payments[0].amount == 1)
473+ else false)
474+ then {
475+ let assetId = value(i.payments[0].assetId)
476+ let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
477+ if ((boosterType == boosterType))
478+ then if ((boosterType == "ART-HWERASE"))
479+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, itemCode, false))
480+ else if ((boosterType == "ART-HWRESCUE"))
481+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, "", true))
482+ else if ((boosterType == "ART-GIFT_DOUBL"))
483+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
484+ else throw("Error! Wrong item attached ")
485+ else throw("Strict value is not equal to itself.")
486+ }
487+ else if ((size(i.payments) == 1))
488+ then finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
489+ else throw("Invalid payments")
490+
491+

github/deemru/w8io/c3f4982 
25.44 ms