tx · 37dtpMsNKmzRL3vZ5DjMRCrVuvg6eLpJcsRfr8yisabj

3N26gCrijWPWiTMtJnMTr6w7aYjTHvFrb9W:  -0.01800000 Waves

2024.12.31 03:01 [3437939] smart account 3N26gCrijWPWiTMtJnMTr6w7aYjTHvFrb9W > SELF 0.00000000 Waves

{ "type": 13, "id": "37dtpMsNKmzRL3vZ5DjMRCrVuvg6eLpJcsRfr8yisabj", "fee": 1800000, "feeAssetId": null, "timestamp": 1735603436655, "version": 2, "chainId": 84, "sender": "3N26gCrijWPWiTMtJnMTr6w7aYjTHvFrb9W", "senderPublicKey": "2TcsKvByVqLpuS2moS4EDghATgPre6iVgcXjBcGtmZVL", "proofs": [ "2QNpzVvYARLYJotfPTcuZqkHY6fu454WqtHj26sMQYwtdEa31VyAk1aZNRndmKgPD86hqZaVB43wZotgy8uMSQV5" ], "script": "base64:BgIZCAISAwoBCBIAEgMKAQgSAwoBCBIECgIICCoBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkAAgEJAKwCAgIpUkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50LCBidXQgZ290OiAFBnN0cmluZwkAAgECHlJBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEJYXNCb29sZWFuAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHYm9vbGVhbgUHJG1hdGNoMAUHYm9vbGVhbgkAAgECIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBcwUHJG1hdGNoMAkAAgECJndyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcsIGdvdDogSW50AwkAAQIFByRtYXRjaDACBFVuaXQEAXMFByRtYXRjaDAJAAIBAid3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IFVuaXQJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAIUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IBIHN0YXRpY0tleV9jYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIdc3RhdGljX2ZlbGluZUluY3ViYXRvckFkZHJlc3MBHnN0YXRpY0tleV9jYW5pbmVCcmVlZGVyQWRkcmVzcwACG3N0YXRpY19mZWxpbmVCcmVlZGVyQWRkcmVzcwEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAIVc3RhdGljX2NvdXBvbnNBZGRyZXNzAR5zdGF0aWNLZXlfY2FuaW5lU3Rha2luZ0FkZHJlc3MAAhtzdGF0aWNfZmVsaW5lU3Rha2luZ0FkZHJlc3MBHHN0YXRpY0tleV9kdWNrU3Rha2luZ0FkZHJlc3MAAhhzdGF0aWNfZmFybWluZ0FkZHJlc3NOZXcBHnN0YXRpY0tleV9kdWNrSW5jdWJhdG9yQWRkcmVzcwACF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAITc3RhdGljX2l0ZW1zQWRkcmVzcwEhc3RhdGljS2V5X2NhbmluZVdhdmVzUmViaXJ0aFByaWNlAAIdc3RhdGljX2ZlbGluZVBldGVSZWJpcnRoUHJpY2UBIHN0YXRpY0tleV90dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAIdc3RhdGljX3R1cnRsZUluY3ViYXRvckFkZHJlc3MBGXN0YXRpY0tleV9iYWJ5RHVja0FkZHJlc3MAAhZzdGF0aWNfYmFieUR1Y2tBZGRyZXNzARVzdGF0aWNLZXlfcGV0ZUFzc2V0SWQAAhJzdGF0aWNfcGV0ZUFzc2V0SWQBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfY2FuaW5lQnJlZWRlckFkZHJlc3MAARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEgc3RhdGljS2V5X2NhbmluZUluY3ViYXRvckFkZHJlc3MAARFnZXRDb3Vwb25zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwABF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X2NhbmluZVN0YWtpbmdBZGRyZXNzAAEVZ2V0RHVja1N0YWtpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEcc3RhdGljS2V5X2R1Y2tTdGFraW5nQWRkcmVzcwABF2dldER1Y2tJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X2R1Y2tJbmN1YmF0b3JBZGRyZXNzAAEPZ2V0SXRlbXNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwABGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJASBzdGF0aWNLZXlfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwABEmdldEJhYnlEdWNrQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGXN0YXRpY0tleV9iYWJ5RHVja0FkZHJlc3MAAQ5nZXRQZXRlQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARVzdGF0aWNLZXlfcGV0ZUFzc2V0SWQAARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIJAAIBAhpUUjogVmFsdWUgbm90IGZvdW5kIGluIHNjIQALd2F2ZXNBbW91bnQJARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBIXN0YXRpY0tleV9jYW5pbmVXYXZlc1JlYmlydGhQcmljZQAAEGRlbGF5Rm9ySGF0Y2hpbmcAAgEJY2hlY2tSZWFsAQdhc3NldElkAwMJAAACCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgkBF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAYJAAACCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgkBGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MACAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgkAAgECDW5vdCB2YWxpZCBORlQBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBB3BheW1lbnQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGVJDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcUkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAEPZ2V0UmFuZG9tTnVtYmVyBAdvcHRpb25zBHR4SWQUaGF0Y2hpbmdGaW5pc2hIZWlnaHQGb2Zmc2V0BA9yYW5kb21TZWVkQmxvY2sJAQV2YWx1ZQEJAO0HAQkAZQIFFGhhdGNoaW5nRmluaXNoSGVpZ2h0AAEECnJhbmRvbUhhc2gJAPcDAQkAywECBQR0eElkCQEFdmFsdWUBCAUPcmFuZG9tU2VlZEJsb2NrA3ZyZgkAagIJALIJAgUKcmFuZG9tSGFzaAkAaAIFBm9mZnNldAAIBQdvcHRpb25zAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAKAIAQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQ9nZXRSYW5kb21SZXR1cm4CAnR4DGZpbmlzaEhlaWdodAQBbgkBD2dldFJhbmRvbU51bWJlcgQAAgUCdHgFDGZpbmlzaEhlaWdodAABAwkAAAIFAW4AAAYHAQxnZXRSYW5kb21XaW4DAnR4DGZpbmlzaEhlaWdodA1ibGFja2xpc3RDb2RlBA1qYWNrcG90UmFuZG9tCQEPZ2V0UmFuZG9tTnVtYmVyBACsAgUCdHgFDGZpbmlzaEhlaWdodAABAwkAAAIFDWphY2twb3RSYW5kb20AAQkAlAoCBQ1qYWNrcG90UmFuZG9tAgdqYWNrcG90BAFuCQEPZ2V0UmFuZG9tTnVtYmVyBADoBwUCdHgFDGZpbmlzaEhlaWdodAAABAZyZXN1bHQDAwkAZgIA9AMFAW4JAQIhPQIFDWJsYWNrbGlzdENvZGUCCWluY3ViYXRvcgcCCWluY3ViYXRvcgIOdHJ0bF9pbmN1YmF0b3IJAJQKAgUBbgUGcmVzdWx0ARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBmluaXRUeAdhZGRyZXNzEWFkZGl0aW9uYWxQYXltZW50BmRvdWJsZQ1ibGFja2xpc3RDb2RlBnJlc2N1ZQQLZmluaXNoQmxvY2sJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIMX2ZpbmlzaEJsb2NrBAZzdGF0dXMJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4Agdfc3RhdHVzBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQURYWRkaXRpb25hbFBheW1lbnQDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQDCQECIT0CBQZzdGF0dXMCBG9wZW4JAAIBAh9yZWJpcnRoIGlzIGZpbmlzaGVkIG9yIG5vdCBvcGVuAwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBAh55b3UgY2Fubm90IGZpbmlzaCByZWJpcnRoLCB5ZXQEBm91dHB1dAkBDGdldFJhbmRvbVdpbgMJANkEAQUGaW5pdFR4BQtmaW5pc2hCbG9jawUNYmxhY2tsaXN0Q29kZQQDd2luCAUGb3V0cHV0Al8yBAZyYW5kb20IBQZvdXRwdXQCXzEEBHR4SWQFBmluaXRUeAQGcmVzdWx0AwkBAiE9AgkAswkCBQN3aW4CBmdyb3VuZAUEdW5pdAQFY29sb3IJALICAgUDd2luAAEEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAIMYWRkRnJlZVBlcmNoCQDMCAIFB2FkZHJlc3MJAMwIAgUFY29sb3IJAMwIAgABBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAIMYWRkRnJlZVBlcmNoCQDMCAIFB2FkZHJlc3MJAMwIAgUFY29sb3IJAMwIAgACBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xBQN3aW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIHamFja3BvdAQEY2FsbAkA/AcECQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwACDGlzc3VlSmFja3BvdAkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQJAMwIAgIIV1dGU0FOVEEFA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUEY2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIJaW5jdWJhdG9yBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIJaXNzdWVGcmVlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIJaXNzdWVGcmVlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0BAZzZWNvbmQJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xAglpbmN1YmF0b3IFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBAiE9AgkAswkCBQN3aW4CCGR1Y2tsaW5nBQR1bml0BAVsZXZlbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUDd2luAgFfAAEECmxldmVsRmluYWwDBQZkb3VibGUJAGgCAAIFBWxldmVsBQVsZXZlbAQEY2FsbAkA/AcECQESZ2V0QmFieUR1Y2tBZGRyZXNzAAIRaXNzdWVGcmVlRHVja2xpbmcJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkCQDMCAIFCmxldmVsRmluYWwFA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUEY2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIOdHJ0bF9pbmN1YmF0b3IEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwACCWlzc3VlRnJlZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBnNlY29uZAUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjECDnRydGxfaW5jdWJhdG9yBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAQIhPQIJALMJAgUDd2luAgRpdGVtBQR1bml0BAhpdGVtTmFtZQkAkQMCCQC1CQIFA3dpbgIBIQABBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhJpc3N1ZUFydGVmYWN0SW5kZXgJAMwIAgUIaXRlbU5hbWUJAMwIAgUHYWRkcmVzcwkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAISaXNzdWVBcnRlZmFjdEluZGV4CQDMCAIFCGl0ZW1OYW1lCQDMCAIFB2FkZHJlc3MJAMwIAgAABQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAISaXNzdWVBcnRlZmFjdEluZGV4CQDMCAIFCGl0ZW1OYW1lCQDMCAIFB2FkZHJlc3MJAMwIAgABBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xBQN3aW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQkArAICAjRSRkI6IFNvbWUgZXJyb3Igb2NjdXJlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucyEgBQN3aW4DCQAAAgUGcmVzdWx0BQZyZXN1bHQEDnJldHVyblRvU2VuZGVyAwUGcmVzY3VlCQEPZ2V0UmFuZG9tUmV0dXJuAgkA2QQBBQZpbml0VHgFC2ZpbmlzaEJsb2NrBwQNcmV0dXJuUGF5bG9hZAMFDnJldHVyblRvU2VuZGVyBAdhc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9hc3NldElkBAZpc3N1ZXIJAQljaGVja1JlYWwBBQdhc3NldElkBANnZW4JAQhhc1N0cmluZwEJAPwHBAkBF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAIOZ2V0R2VuRnJvbU5hbWUJAMwIAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZARuYW1lBQNuaWwFA25pbAMJAAACBQNnZW4FA2dlbgQEY2FsbAkA/AcEBQZpc3N1ZXICDmluY3JlYXNlUmFyaXR5CQDMCAIJANgEAQUHYXNzZXRJZAkAzAgCBQNnZW4FA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwABBQdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAzggCCQDOCAIFBnJlc3VsdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgRfd2luBQN3aW4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3N0YXR1cwIGZmluaXNoCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmFuZG9tBQZyYW5kb20FA25pbAUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECD1JDVTogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlBQNuaWwBaQELaW5pdFJlYmlydGgABAlwbXRDYW5pbmUJAJEDAggFAWkIcGF5bWVudHMAAAQHcG10UGV0ZQkAkQMCCAUBaQhwYXltZW50cwABBAVleHRyYQkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAIDCQAAAgUFZXh0cmEFBWV4dHJhBAdhc3NldElkCQEFdmFsdWUBCAUJcG10Q2FuaW5lB2Fzc2V0SWQEBmluaXRUeAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQlwbXRDYW5pbmUGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkAwMJAQIhPQIIBQdwbXRQZXRlBmFtb3VudAULd2F2ZXNBbW91bnQGCQECIT0CCAUHcG10UGV0ZQdhc3NldElkCQEOZ2V0UGV0ZUFzc2V0SWQACQACAQImUGV0ZSBwYXltZW50IGlzIG5vdCBhdHRhY2hlZCBvciB3cm9uZyEEEHNlbmRUb0FnZ3JlR2F0b3IJAGkCCAUHcG10UGV0ZQZhbW91bnQABAQFdG9wdXAJAGUCCAUHcG10UGV0ZQZhbW91bnQFEHNlbmRUb0FnZ3JlR2F0b3IEB2FkZE1vcmUJAPwHBAkBF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAITYWRkUGV0ZUFuZFN0YWtlTW9yZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOZ2V0UGV0ZUFzc2V0SWQABQV0b3B1cAUDbmlsAwkAAAIFB2FkZE1vcmUFB2FkZE1vcmUEBmlzc3VlcgkBCWNoZWNrUmVhbAEFB2Fzc2V0SWQEA2dlbgkBCGFzU3RyaW5nAQkA/AcECQEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MAAg5nZXRHZW5Gcm9tTmFtZQkAzAgCCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUFA25pbAUDbmlsAwkAAAIFA2dlbgUDZ2VuBARjYWxsCQD8BwQFBmlzc3VlcgIMcmVkdWNlUmFyaXR5CQDMCAIJANgEAQUHYXNzZXRJZAkAzAgCBQNnZW4FA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIMX2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BRBkZWxheUZvckhhdGNoaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMCBG9wZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX2Fzc2V0SWQJANgEAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFEHNlbmRUb0FnZ3JlR2F0b3IJAQ5nZXRQZXRlQXNzZXRJZAAFA25pbAUFZXh0cmEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENZmluaXNoUmViaXJ0aAEGaW5pdFR4CQEVZmluaXNoUmViaXJ0aEludGVybmFsBgUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwAABwIABwFpARNmaW5pc2hSZWJpcnRoRG91YmxlAQZpbml0VHgDCQEBIQEDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQcJAAIBAg9JbnZhbGlkIHBheW1lbnQEB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYm9vc3RlclR5cGUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgULYm9vc3RlclR5cGUFC2Jvb3N0ZXJUeXBlAwkAAAIFC2Jvb3N0ZXJUeXBlAg5BUlQtR0lGVF9ET1VCTAkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEGAgAHCQACAQItRXJyb3IhIFdyb25nIGl0ZW0gYXR0YWNoZWQgdG8gZG91YmxlIHJld2FyZHMhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWZpbmlzaFJlYmlydGhJdGVtAgZpbml0VHgIaXRlbUNvZGUDAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAEHBAdhc3NldElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Jvb3N0ZXJUeXBlCQEIYXNTdHJpbmcBCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhRjaGVja0FydGVmYWN0RGV0YWlscwkAzAgCCQDYBAEFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFC2Jvb3N0ZXJUeXBlBQtib29zdGVyVHlwZQMJAAACBQtib29zdGVyVHlwZQILQVJULUhXRVJBU0UJAM4IAgkAzAgCCQEEQnVybgIFB2Fzc2V0SWQAAQUDbmlsCQEVZmluaXNoUmViaXJ0aEludGVybmFsBgUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwABBwUIaXRlbUNvZGUHAwkAAAIFC2Jvb3N0ZXJUeXBlAgxBUlQtSFdSRVNDVUUJAM4IAgkAzAgCCQEEQnVybgIFB2Fzc2V0SWQAAQUDbmlsCQEVZmluaXNoUmViaXJ0aEludGVybmFsBgUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwABBwIABgMJAAACBQtib29zdGVyVHlwZQIOQVJULUdJRlRfRE9VQkwJAM4IAgkAzAgCCQEEQnVybgIFB2Fzc2V0SWQAAQUDbmlsCQEVZmluaXNoUmViaXJ0aEludGVybmFsBgUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwABBgIABwkAAgECG0Vycm9yISBXcm9uZyBpdGVtIGF0dGFjaGVkIAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwGBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAAHAgAHCQACAQIQSW52YWxpZCBwYXltZW50cwB6YkFA", "height": 3437939, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3cC6ZKYXwLmGipt6hNmRAqGPmJMgh2NGSrD4Am4PxX6Q Next: none Diff:
OldNewDifferences
172172 }
173173
174174
175-func getRandomWin (tx,finishHeight) = {
176- let n = getRandomNumber(1000, tx, finishHeight, 0)
177- let result = if ((100 > n))
178- then "battleground_A"
179- else if ((200 > n))
180- then "battleground_B"
181- else if ((300 > n))
182- then "battleground_C"
183- else if ((400 > n))
184- then "battleground_D"
185- else if ((450 > n))
186- then "incubator"
187- else if ((490 > n))
188- then "duckling_40"
189- else if ((540 > n))
190- then "duckling_20"
191- else if ((640 > n))
192- then "item!ART-FEED5"
193- else if ((710 > n))
194- then "item!ART-FEED10"
195- else if ((740 > n))
196- then "item!ART-FEED15"
197- else if ((770 > n))
198- then "item!ART-FEED20"
199- else if ((790 > n))
200- then "item!ART-FEED25"
201- else if ((810 > n))
202- then "item!ART-FEED50"
203- else if ((830 > n))
204- then "item!ART-FEED100"
205- else if ((860 > n))
206- then "item!ART-MUTARIUM-G"
207- else if ((890 > n))
208- then "item!ART-MUTARIUM-D"
209- else if ((910 > n))
210- then "item!ART-FREEGENE"
211- else if ((930 > n))
212- then "item!ART-FIXGENE"
213- else if ((980 > n))
214- then "trtl_incubator"
215- else "item!ART-FEED500"
216- $Tuple2(n, result)
175+func getRandomReturn (tx,finishHeight) = {
176+ let n = getRandomNumber(2, tx, finishHeight, 1)
177+ if ((n == 0))
178+ then true
179+ else false
217180 }
218181
219182
220-func finishRebirthInternal (initTx,address,additionalPayment,double) = {
183+func getRandomWin (tx,finishHeight,blacklistCode) = {
184+ let jackpotRandom = getRandomNumber(300, tx, finishHeight, 1)
185+ if ((jackpotRandom == 1))
186+ then $Tuple2(jackpotRandom, "jackpot")
187+ else {
188+ let n = getRandomNumber(1000, tx, finishHeight, 0)
189+ let result = if (if ((500 > n))
190+ then (blacklistCode != "incubator")
191+ else false)
192+ then "incubator"
193+ else "trtl_incubator"
194+ $Tuple2(n, result)
195+ }
196+ }
197+
198+
199+func finishRebirthInternal (initTx,address,additionalPayment,double,blacklistCode,rescue) = {
221200 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
222201 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
223202 let validPayment = checkAdditionalPayment(additionalPayment)
227206 else if ((finishBlock > height))
228207 then throw("you cannot finish rebirth, yet")
229208 else {
230- let output = getRandomWin(fromBase58String(initTx), finishBlock)
209+ let output = getRandomWin(fromBase58String(initTx), finishBlock, blacklistCode)
231210 let win = output._2
232211 let random = output._1
233212 let txId = initTx
251230 then call
252231 else throw("Strict value is not equal to itself.")
253232 }
254- else if ((win == "incubator"))
233+ else if ((win == "jackpot"))
255234 then {
256- let call = if (!(double))
235+ let call = invoke(getCanineIncubatorAddress(), "issueJackpot", [address, txId, "WWFSANTA"], nil)
236+ if ((call == call))
237+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
238+ else throw("Strict value is not equal to itself.")
239+ }
240+ else if ((win == "incubator"))
241+ then {
242+ let call = if (!(double))
243+ then {
244+ let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
245+ if ((first == first))
246+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
247+ else throw("Strict value is not equal to itself.")
248+ }
249+ else {
250+ let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
251+ if ((first == first))
252+ then {
253+ let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
254+ if ((second == second))
255+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
256+ else throw("Strict value is not equal to itself.")
257+ }
258+ else throw("Strict value is not equal to itself.")
259+ }
260+ if ((call == call))
261+ then call
262+ else throw("Strict value is not equal to itself.")
263+ }
264+ else if ((indexOf(win, "duckling") != unit))
257265 then {
258- let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
259- if ((first == first))
260- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
266+ let level = parseIntValue(split(win, "_")[1])
267+ let levelFinal = if (double)
268+ then (2 * level)
269+ else level
270+ let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
271+ if ((call == call))
272+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
261273 else throw("Strict value is not equal to itself.")
262274 }
263- else {
264- let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
265- if ((first == first))
266- then {
267- let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
268- if ((second == second))
269- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
270- else throw("Strict value is not equal to itself.")
271- }
272- else throw("Strict value is not equal to itself.")
273- }
274- if ((call == call))
275- then call
276- else throw("Strict value is not equal to itself.")
277- }
278- else if ((indexOf(win, "duckling") != unit))
279- then {
280- let level = parseIntValue(split(win, "_")[1])
281- let levelFinal = if (double)
282- then (2 * level)
283- else level
284- let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
285- if ((call == call))
286- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
287- else throw("Strict value is not equal to itself.")
288- }
289- else if ((win == "trtl_incubator"))
290- then {
291- let call = if (!(double))
292- then {
293- let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
294- if ((first == first))
295- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
296- else throw("Strict value is not equal to itself.")
297- }
298- else {
299- let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
300- if ((first == first))
301- then {
302- let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
303- if ((second == second))
304- 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")]
305- else throw("Strict value is not equal to itself.")
306- }
307- else throw("Strict value is not equal to itself.")
308- }
309- if ((call == call))
310- then call
311- else throw("Strict value is not equal to itself.")
312- }
313- else if ((indexOf(win, "item") != unit))
275+ else if ((win == "trtl_incubator"))
314276 then {
315- let itemName = split(win, "!")[1]
316277 let call = if (!(double))
317278 then {
318- let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
279+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
319280 if ((first == first))
320281 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
321282 else throw("Strict value is not equal to itself.")
322283 }
323284 else {
324- let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
285+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
325286 if ((first == first))
326287 then {
327- let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
288+ let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
328289 if ((second == second))
329- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
290+ 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")]
330291 else throw("Strict value is not equal to itself.")
331292 }
332293 else throw("Strict value is not equal to itself.")
335296 then call
336297 else throw("Strict value is not equal to itself.")
337298 }
338- else throw(("RFB: Some error occured, please contact the admins! " + win))
299+ else if ((indexOf(win, "item") != unit))
300+ then {
301+ let itemName = split(win, "!")[1]
302+ let call = if (!(double))
303+ then {
304+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
305+ if ((first == first))
306+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
307+ else throw("Strict value is not equal to itself.")
308+ }
309+ else {
310+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
311+ if ((first == first))
312+ then {
313+ let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
314+ if ((second == second))
315+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
316+ else throw("Strict value is not equal to itself.")
317+ }
318+ else throw("Strict value is not equal to itself.")
319+ }
320+ if ((call == call))
321+ then call
322+ else throw("Strict value is not equal to itself.")
323+ }
324+ else throw(("RFB: Some error occured, please contact the admins! " + win))
339325 if ((result == result))
340- then ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment)
326+ then {
327+ let returnToSender = if (rescue)
328+ then getRandomReturn(fromBase58String(initTx), finishBlock)
329+ else false
330+ let returnPayload = if (returnToSender)
331+ then {
332+ let assetId = fromBase58String(getStringValue((((("address_" + address) + "_initTx_") + initTx) + "_assetId")))
333+ let issuer = checkReal(assetId)
334+ let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
335+ if ((gen == gen))
336+ then {
337+ let call = invoke(issuer, "increaseRarity", [toBase58String(assetId), gen], nil)
338+ if ((call == call))
339+ then [ScriptTransfer(addressFromStringValue(address), 1, assetId)]
340+ else throw("Strict value is not equal to itself.")
341+ }
342+ else throw("Strict value is not equal to itself.")
343+ }
344+ else nil
345+ ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment)
346+ }
341347 else throw("Strict value is not equal to itself.")
342348 }
343349 else throw("Strict value is not equal to itself.")
393399
394400
395401 @Callable(i)
396-func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false)
402+func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
397403
398404
399405
407413 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
408414 if ((boosterType == boosterType))
409415 then if ((boosterType == "ART-GIFT_DOUBL"))
410- then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true))
416+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
411417 else throw("Error! Wrong item attached to double rewards!")
412418 else throw("Strict value is not equal to itself.")
413419 }
420+
421+
422+
423+@Callable(i)
424+func finishRebirthItem (initTx,itemCode) = if (if ((size(i.payments) == 2))
425+ then (i.payments[0].amount == 1)
426+ else false)
427+ then {
428+ let assetId = value(i.payments[0].assetId)
429+ let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
430+ if ((boosterType == boosterType))
431+ then if ((boosterType == "ART-HWERASE"))
432+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, itemCode, false))
433+ else if ((boosterType == "ART-HWRESCUE"))
434+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, "", true))
435+ else if ((boosterType == "ART-GIFT_DOUBL"))
436+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
437+ else throw("Error! Wrong item attached ")
438+ else throw("Strict value is not equal to itself.")
439+ }
440+ else if ((size(i.payments) == 1))
441+ then finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
442+ else throw("Invalid payments")
414443
415444
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 tryGetInteger (key) = match getInteger(this, key) {
1313 case b: Int =>
1414 b
1515 case _ =>
1616 0
1717 }
1818
1919
2020 func tryGetString (key) = tryGetStringExternal(this, key)
2121
2222
2323 func asInt (value) = match value {
2424 case int: Int =>
2525 int
2626 case string: String =>
2727 throw(("RAI: wrong type, expected: Int, but got: " + string))
2828 case _ =>
2929 throw("RAI: wrong type, expected: Int")
3030 }
3131
3232
3333 func asBoolean (value) = match value {
3434 case boolean: Boolean =>
3535 boolean
3636 case _ =>
3737 throw("FAB: wrong type, expected: Boolean")
3838 }
3939
4040
4141 func asString (value) = match value {
4242 case s: String =>
4343 s
4444 case s: Int =>
4545 throw("wrong type, expected: String, got: Int")
4646 case s: Unit =>
4747 throw("wrong type, expected: String, got: Unit")
4848 case _ =>
4949 throw("wrong type, expected: String")
5050 }
5151
5252
5353 func staticKey_oracleAddress () = "static_oracleAddress"
5454
5555
5656 func staticKey_extraFee () = "static_extraFee"
5757
5858
5959 func staticKey_feeAggregator () = "static_feeAggregator"
6060
6161
6262 func staticKey_canineIncubatorAddress () = "static_felineIncubatorAddress"
6363
6464
6565 func staticKey_canineBreederAddress () = "static_felineBreederAddress"
6666
6767
6868 func staticKey_couponsAddress () = "static_couponsAddress"
6969
7070
7171 func staticKey_canineStakingAddress () = "static_felineStakingAddress"
7272
7373
7474 func staticKey_duckStakingAddress () = "static_farmingAddressNew"
7575
7676
7777 func staticKey_duckIncubatorAddress () = "static_incubatorAddress"
7878
7979
8080 func staticKey_itemsAddress () = "static_itemsAddress"
8181
8282
8383 func staticKey_canineWavesRebirthPrice () = "static_felinePeteRebirthPrice"
8484
8585
8686 func staticKey_turtleIncubatorAddress () = "static_turtleIncubatorAddress"
8787
8888
8989 func staticKey_babyDuckAddress () = "static_babyDuckAddress"
9090
9191
9292 func staticKey_peteAssetId () = "static_peteAssetId"
9393
9494
9595 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
9696
9797
9898 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
9999
100100
101101 func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineBreederAddress())))
102102
103103
104104 func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineIncubatorAddress())))
105105
106106
107107 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
108108
109109
110110 func getCanineStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineStakingAddress())))
111111
112112
113113 func getDuckStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckStakingAddress())))
114114
115115
116116 func getDuckIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckIncubatorAddress())))
117117
118118
119119 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
120120
121121
122122 func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleIncubatorAddress())))
123123
124124
125125 func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckAddress())))
126126
127127
128128 func getPeteAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_peteAssetId()))
129129
130130
131131 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
132132 case b: Int =>
133133 b
134134 case _ =>
135135 throw("TR: Value not found in sc!")
136136 }
137137
138138
139139 let wavesAmount = tryGetIntegerExternal(getOracle(), staticKey_canineWavesRebirthPrice())
140140
141141 let delayForHatching = 2
142142
143143 func checkReal (assetId) = if (if ((value(assetInfo(assetId)).issuer == getCanineBreederAddress()))
144144 then true
145145 else (value(assetInfo(assetId)).issuer == getCanineIncubatorAddress()))
146146 then value(assetInfo(assetId)).issuer
147147 else throw("not valid NFT")
148148
149149
150150 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
151151 then throw("RCAP: Please attach waves")
152152 else {
153153 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
154154 if ((payment.amount != feeAmount))
155155 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
156156 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
157157 }
158158
159159
160160 func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
161161 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
162162 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
163163 (toInt(randomHash, (offset * 8)) % options)
164164 }
165165
166166
167167 func tryGetBoolean (key) = match getBoolean(key) {
168168 case b: Boolean =>
169169 b
170170 case _ =>
171171 false
172172 }
173173
174174
175-func getRandomWin (tx,finishHeight) = {
176- let n = getRandomNumber(1000, tx, finishHeight, 0)
177- let result = if ((100 > n))
178- then "battleground_A"
179- else if ((200 > n))
180- then "battleground_B"
181- else if ((300 > n))
182- then "battleground_C"
183- else if ((400 > n))
184- then "battleground_D"
185- else if ((450 > n))
186- then "incubator"
187- else if ((490 > n))
188- then "duckling_40"
189- else if ((540 > n))
190- then "duckling_20"
191- else if ((640 > n))
192- then "item!ART-FEED5"
193- else if ((710 > n))
194- then "item!ART-FEED10"
195- else if ((740 > n))
196- then "item!ART-FEED15"
197- else if ((770 > n))
198- then "item!ART-FEED20"
199- else if ((790 > n))
200- then "item!ART-FEED25"
201- else if ((810 > n))
202- then "item!ART-FEED50"
203- else if ((830 > n))
204- then "item!ART-FEED100"
205- else if ((860 > n))
206- then "item!ART-MUTARIUM-G"
207- else if ((890 > n))
208- then "item!ART-MUTARIUM-D"
209- else if ((910 > n))
210- then "item!ART-FREEGENE"
211- else if ((930 > n))
212- then "item!ART-FIXGENE"
213- else if ((980 > n))
214- then "trtl_incubator"
215- else "item!ART-FEED500"
216- $Tuple2(n, result)
175+func getRandomReturn (tx,finishHeight) = {
176+ let n = getRandomNumber(2, tx, finishHeight, 1)
177+ if ((n == 0))
178+ then true
179+ else false
217180 }
218181
219182
220-func finishRebirthInternal (initTx,address,additionalPayment,double) = {
183+func getRandomWin (tx,finishHeight,blacklistCode) = {
184+ let jackpotRandom = getRandomNumber(300, tx, finishHeight, 1)
185+ if ((jackpotRandom == 1))
186+ then $Tuple2(jackpotRandom, "jackpot")
187+ else {
188+ let n = getRandomNumber(1000, tx, finishHeight, 0)
189+ let result = if (if ((500 > n))
190+ then (blacklistCode != "incubator")
191+ else false)
192+ then "incubator"
193+ else "trtl_incubator"
194+ $Tuple2(n, result)
195+ }
196+ }
197+
198+
199+func finishRebirthInternal (initTx,address,additionalPayment,double,blacklistCode,rescue) = {
221200 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
222201 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
223202 let validPayment = checkAdditionalPayment(additionalPayment)
224203 if ((validPayment == validPayment))
225204 then if ((status != "open"))
226205 then throw("rebirth is finished or not open")
227206 else if ((finishBlock > height))
228207 then throw("you cannot finish rebirth, yet")
229208 else {
230- let output = getRandomWin(fromBase58String(initTx), finishBlock)
209+ let output = getRandomWin(fromBase58String(initTx), finishBlock, blacklistCode)
231210 let win = output._2
232211 let random = output._1
233212 let txId = initTx
234213 let result = if ((indexOf(win, "ground") != unit))
235214 then {
236215 let color = takeRight(win, 1)
237216 let call = if (!(double))
238217 then {
239218 let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 1], nil)
240219 if ((first == first))
241220 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
242221 else throw("Strict value is not equal to itself.")
243222 }
244223 else {
245224 let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 2], nil)
246225 if ((first == first))
247226 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
248227 else throw("Strict value is not equal to itself.")
249228 }
250229 if ((call == call))
251230 then call
252231 else throw("Strict value is not equal to itself.")
253232 }
254- else if ((win == "incubator"))
233+ else if ((win == "jackpot"))
255234 then {
256- let call = if (!(double))
235+ let call = invoke(getCanineIncubatorAddress(), "issueJackpot", [address, txId, "WWFSANTA"], nil)
236+ if ((call == call))
237+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
238+ else throw("Strict value is not equal to itself.")
239+ }
240+ else if ((win == "incubator"))
241+ then {
242+ let call = if (!(double))
243+ then {
244+ let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
245+ if ((first == first))
246+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
247+ else throw("Strict value is not equal to itself.")
248+ }
249+ else {
250+ let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
251+ if ((first == first))
252+ then {
253+ let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
254+ if ((second == second))
255+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
256+ else throw("Strict value is not equal to itself.")
257+ }
258+ else throw("Strict value is not equal to itself.")
259+ }
260+ if ((call == call))
261+ then call
262+ else throw("Strict value is not equal to itself.")
263+ }
264+ else if ((indexOf(win, "duckling") != unit))
257265 then {
258- let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
259- if ((first == first))
260- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
266+ let level = parseIntValue(split(win, "_")[1])
267+ let levelFinal = if (double)
268+ then (2 * level)
269+ else level
270+ let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
271+ if ((call == call))
272+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
261273 else throw("Strict value is not equal to itself.")
262274 }
263- else {
264- let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
265- if ((first == first))
266- then {
267- let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
268- if ((second == second))
269- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
270- else throw("Strict value is not equal to itself.")
271- }
272- else throw("Strict value is not equal to itself.")
273- }
274- if ((call == call))
275- then call
276- else throw("Strict value is not equal to itself.")
277- }
278- else if ((indexOf(win, "duckling") != unit))
279- then {
280- let level = parseIntValue(split(win, "_")[1])
281- let levelFinal = if (double)
282- then (2 * level)
283- else level
284- let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
285- if ((call == call))
286- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
287- else throw("Strict value is not equal to itself.")
288- }
289- else if ((win == "trtl_incubator"))
290- then {
291- let call = if (!(double))
292- then {
293- let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
294- if ((first == first))
295- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
296- else throw("Strict value is not equal to itself.")
297- }
298- else {
299- let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
300- if ((first == first))
301- then {
302- let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
303- if ((second == second))
304- 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")]
305- else throw("Strict value is not equal to itself.")
306- }
307- else throw("Strict value is not equal to itself.")
308- }
309- if ((call == call))
310- then call
311- else throw("Strict value is not equal to itself.")
312- }
313- else if ((indexOf(win, "item") != unit))
275+ else if ((win == "trtl_incubator"))
314276 then {
315- let itemName = split(win, "!")[1]
316277 let call = if (!(double))
317278 then {
318- let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
279+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
319280 if ((first == first))
320281 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
321282 else throw("Strict value is not equal to itself.")
322283 }
323284 else {
324- let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
285+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
325286 if ((first == first))
326287 then {
327- let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
288+ let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
328289 if ((second == second))
329- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
290+ 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")]
330291 else throw("Strict value is not equal to itself.")
331292 }
332293 else throw("Strict value is not equal to itself.")
333294 }
334295 if ((call == call))
335296 then call
336297 else throw("Strict value is not equal to itself.")
337298 }
338- else throw(("RFB: Some error occured, please contact the admins! " + win))
299+ else if ((indexOf(win, "item") != unit))
300+ then {
301+ let itemName = split(win, "!")[1]
302+ let call = if (!(double))
303+ then {
304+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
305+ if ((first == first))
306+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
307+ else throw("Strict value is not equal to itself.")
308+ }
309+ else {
310+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
311+ if ((first == first))
312+ then {
313+ let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
314+ if ((second == second))
315+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
316+ else throw("Strict value is not equal to itself.")
317+ }
318+ else throw("Strict value is not equal to itself.")
319+ }
320+ if ((call == call))
321+ then call
322+ else throw("Strict value is not equal to itself.")
323+ }
324+ else throw(("RFB: Some error occured, please contact the admins! " + win))
339325 if ((result == result))
340- then ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment)
326+ then {
327+ let returnToSender = if (rescue)
328+ then getRandomReturn(fromBase58String(initTx), finishBlock)
329+ else false
330+ let returnPayload = if (returnToSender)
331+ then {
332+ let assetId = fromBase58String(getStringValue((((("address_" + address) + "_initTx_") + initTx) + "_assetId")))
333+ let issuer = checkReal(assetId)
334+ let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
335+ if ((gen == gen))
336+ then {
337+ let call = invoke(issuer, "increaseRarity", [toBase58String(assetId), gen], nil)
338+ if ((call == call))
339+ then [ScriptTransfer(addressFromStringValue(address), 1, assetId)]
340+ else throw("Strict value is not equal to itself.")
341+ }
342+ else throw("Strict value is not equal to itself.")
343+ }
344+ else nil
345+ ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment)
346+ }
341347 else throw("Strict value is not equal to itself.")
342348 }
343349 else throw("Strict value is not equal to itself.")
344350 }
345351
346352
347353 @Callable(i)
348354 func configureOracle (oracle) = if ((i.caller != this))
349355 then throw("RCU: admin only")
350356 else [StringEntry("static_oracleAddress", oracle)]
351357
352358
353359
354360 @Callable(i)
355361 func initRebirth () = {
356362 let pmtCanine = i.payments[0]
357363 let pmtPete = i.payments[1]
358364 let extra = checkAdditionalPayment(i.payments[2])
359365 if ((extra == extra))
360366 then {
361367 let assetId = value(pmtCanine.assetId)
362368 let initTx = toBase58String(i.transactionId)
363369 let address = toString(i.caller)
364370 if ((pmtCanine.amount != 1))
365371 then throw("NFT is not attached")
366372 else if (if ((pmtPete.amount != wavesAmount))
367373 then true
368374 else (pmtPete.assetId != getPeteAssetId()))
369375 then throw("Pete payment is not attached or wrong!")
370376 else {
371377 let sendToAggreGator = (pmtPete.amount / 4)
372378 let topup = (pmtPete.amount - sendToAggreGator)
373379 let addMore = invoke(getCanineStakingAddress(), "addPeteAndStakeMore", nil, [AttachedPayment(getPeteAssetId(), topup)])
374380 if ((addMore == addMore))
375381 then {
376382 let issuer = checkReal(assetId)
377383 let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
378384 if ((gen == gen))
379385 then {
380386 let call = invoke(issuer, "reduceRarity", [toBase58String(assetId), gen], nil)
381387 if ((call == call))
382388 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, getPeteAssetId())] ++ extra)
383389 else throw("Strict value is not equal to itself.")
384390 }
385391 else throw("Strict value is not equal to itself.")
386392 }
387393 else throw("Strict value is not equal to itself.")
388394 }
389395 }
390396 else throw("Strict value is not equal to itself.")
391397 }
392398
393399
394400
395401 @Callable(i)
396-func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false)
402+func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
397403
398404
399405
400406 @Callable(i)
401407 func finishRebirthDouble (initTx) = if (!(if ((size(i.payments) == 2))
402408 then (i.payments[0].amount == 1)
403409 else false))
404410 then throw("Invalid payment")
405411 else {
406412 let assetId = value(i.payments[0].assetId)
407413 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
408414 if ((boosterType == boosterType))
409415 then if ((boosterType == "ART-GIFT_DOUBL"))
410- then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true))
416+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
411417 else throw("Error! Wrong item attached to double rewards!")
412418 else throw("Strict value is not equal to itself.")
413419 }
420+
421+
422+
423+@Callable(i)
424+func finishRebirthItem (initTx,itemCode) = if (if ((size(i.payments) == 2))
425+ then (i.payments[0].amount == 1)
426+ else false)
427+ then {
428+ let assetId = value(i.payments[0].assetId)
429+ let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
430+ if ((boosterType == boosterType))
431+ then if ((boosterType == "ART-HWERASE"))
432+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, itemCode, false))
433+ else if ((boosterType == "ART-HWRESCUE"))
434+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, "", true))
435+ else if ((boosterType == "ART-GIFT_DOUBL"))
436+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
437+ else throw("Error! Wrong item attached ")
438+ else throw("Strict value is not equal to itself.")
439+ }
440+ else if ((size(i.payments) == 1))
441+ then finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
442+ else throw("Invalid payments")
414443
415444

github/deemru/w8io/169f3d6 
55.10 ms