tx · FuedH1Ww8sf6vetM9UNFy2mwvYmJZQYQTTGeZQa8fp2i

3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335:  -0.01800000 Waves

2024.12.02 18:20 [3397207] smart account 3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335 > SELF 0.00000000 Waves

{ "type": 13, "id": "FuedH1Ww8sf6vetM9UNFy2mwvYmJZQYQTTGeZQa8fp2i", "fee": 1800000, "feeAssetId": null, "timestamp": 1733152855184, "version": 2, "chainId": 84, "sender": "3Mw8EHDvHCbzm6VE777G6EJNQBEe6CeS335", "senderPublicKey": "4f2Ggz6CqZhqr3FaW8dzR6KoddCudvULpuUfh7ew3Yne", "proofs": [ "4orRqf3zJ9QxBzLqfQLYnufh5rcvDUhCx7WuTy9Szwc4wWXvNBb6A6WQmfnoLoqh97bULs8LGHZawakCR6zsUgQS" ], "script": "base64:BgIZCAISAwoBCBIAEgMKAQgSAwoBCBIECgIICCoBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkAAgEJAKwCAgIpUkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50LCBidXQgZ290OiAFBnN0cmluZwkAAgECHlJBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEJYXNCb29sZWFuAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHYm9vbGVhbgUHJG1hdGNoMAUHYm9vbGVhbgkAAgECIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BB2dldEJvb2wBA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBcwUHJG1hdGNoMAkAAgECJndyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcsIGdvdDogSW50AwkAAQIFByRtYXRjaDACBFVuaXQEAXMFByRtYXRjaDAJAAIBAid3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IFVuaXQJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nAQlpc1Rlc3RFbnYACQEHZ2V0Qm9vbAECB1RFU1RFTlYBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgEgc3RhdGljS2V5X2NhbmluZUluY3ViYXRvckFkZHJlc3MAAh1zdGF0aWNfY2FuaW5lSW5jdWJhdG9yQWRkcmVzcwEec3RhdGljS2V5X2NhbmluZUJyZWVkZXJBZGRyZXNzAAIbc3RhdGljX2NhbmluZUJyZWVkZXJBZGRyZXNzARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAhVzdGF0aWNfY291cG9uc0FkZHJlc3MBHnN0YXRpY0tleV9jYW5pbmVTdGFraW5nQWRkcmVzcwACG3N0YXRpY19jYW5pbmVTdGFraW5nQWRkcmVzcwEcc3RhdGljS2V5X2R1Y2tTdGFraW5nQWRkcmVzcwACGHN0YXRpY19mYXJtaW5nQWRkcmVzc05ldwEec3RhdGljS2V5X2R1Y2tJbmN1YmF0b3JBZGRyZXNzAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAhNzdGF0aWNfaXRlbXNBZGRyZXNzASFzdGF0aWNLZXlfY2FuaW5lV2F2ZXNSZWJpcnRoUHJpY2UAAh5zdGF0aWNfY2FuaW5lV2F2ZXNSZWJpcnRoUHJpY2UBIHN0YXRpY0tleV90dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAIdc3RhdGljX3R1cnRsZUluY3ViYXRvckFkZHJlc3MBGXN0YXRpY0tleV9iYWJ5RHVja0FkZHJlc3MAAhZzdGF0aWNfYmFieUR1Y2tBZGRyZXNzAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X2NhbmluZUJyZWVkZXJBZGRyZXNzAAEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBIHN0YXRpY0tleV9jYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAERZ2V0Q291cG9uc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAARdnZXRDYW5pbmVTdGFraW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9jYW5pbmVTdGFraW5nQWRkcmVzcwABFWdldER1Y2tTdGFraW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHHN0YXRpY0tleV9kdWNrU3Rha2luZ0FkZHJlc3MAARdnZXREdWNrSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9kdWNrSW5jdWJhdG9yQWRkcmVzcwABD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEgc3RhdGljS2V5X3R1cnRsZUluY3ViYXRvckFkZHJlc3MAARJnZXRCYWJ5RHVja0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARlzdGF0aWNLZXlfYmFieUR1Y2tBZGRyZXNzAAEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiCQACAQIaVFI6IFZhbHVlIG5vdCBmb3VuZCBpbiBzYyEAC3dhdmVzQW1vdW50CQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBCWdldE9yYWNsZQAJASFzdGF0aWNLZXlfY2FuaW5lV2F2ZXNSZWJpcnRoUHJpY2UAABBkZWxheUZvckhhdGNoaW5nAAIBCWNoZWNrUmVhbAEHYXNzZXRJZAMDCQAAAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwAGCQAAAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAgJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJAAIBAg1ub3QgdmFsaWQgTkZUARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQdwYXltZW50AwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlSQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAlmZWVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFJDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBD2dldFJhbmRvbU51bWJlcgQHb3B0aW9ucwR0eElkFGhhdGNoaW5nRmluaXNoSGVpZ2h0Bm9mZnNldAQPcmFuZG9tU2VlZEJsb2NrCQEFdmFsdWUBCQDtBwEJAGUCBRRoYXRjaGluZ0ZpbmlzaEhlaWdodAABBApyYW5kb21IYXNoCQD3AwEJAMsBAgUEdHhJZAkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYJAGoCCQCyCQIFCnJhbmRvbUhhc2gJAGgCBQZvZmZzZXQACAUHb3B0aW9ucwENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCgCAEFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMZ2V0UmFuZG9tV2luAwJ0eAxmaW5pc2hIZWlnaHQNYmxhY2tsaXN0Q29kZQQBbgkBD2dldFJhbmRvbU51bWJlcgQA6AcFAnR4BQxmaW5pc2hIZWlnaHQAAAQGcmVzdWx0AgdqYWNrcG90CQCUCgIFAW4FBnJlc3VsdAEPZ2V0UmFuZG9tUmV0dXJuAgJ0eAxmaW5pc2hIZWlnaHQEAW4JAQ9nZXRSYW5kb21OdW1iZXIEAAIFAnR4BQxmaW5pc2hIZWlnaHQAAQMJAAACBQFuAAAGBwEVZmluaXNoUmViaXJ0aEludGVybmFsBgZpbml0VHgHYWRkcmVzcxFhZGRpdGlvbmFsUGF5bWVudAZkb3VibGUNYmxhY2tsaXN0Q29kZQZyZXNjdWUEC2ZpbmlzaEJsb2NrCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCDF9maW5pc2hCbG9jawQGc3RhdHVzCQEMdHJ5R2V0U3RyaW5nAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3N0YXR1cwQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEFEWFkZGl0aW9uYWxQYXltZW50AwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50AwkBAiE9AgUGc3RhdHVzAgRvcGVuCQACAQIfcmViaXJ0aCBpcyBmaW5pc2hlZCBvciBub3Qgb3BlbgMJAGYCBQtmaW5pc2hCbG9jawUGaGVpZ2h0CQACAQIeeW91IGNhbm5vdCBmaW5pc2ggcmViaXJ0aCwgeWV0BAZvdXRwdXQJAQxnZXRSYW5kb21XaW4DCQDZBAEFBmluaXRUeAULZmluaXNoQmxvY2sFDWJsYWNrbGlzdENvZGUEA3dpbggFBm91dHB1dAJfMgQGcmFuZG9tCAUGb3V0cHV0Al8xBAR0eElkBQZpbml0VHgEBnJlc3VsdAMJAQIhPQIJALMJAgUDd2luAgdkb2NraW5nBQR1bml0BAVjb2xvcgkAsgICBQN3aW4AAQQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEXZ2V0Q2FuaW5lU3Rha2luZ0FkZHJlc3MAAgxhZGRGcmVlUGVyY2gJAMwIAgUHYWRkcmVzcwkAzAgCBQVjb2xvcgkAzAgCAAEFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEXZ2V0Q2FuaW5lU3Rha2luZ0FkZHJlc3MAAgxhZGRGcmVlUGVyY2gJAMwIAgUHYWRkcmVzcwkAzAgCBQVjb2xvcgkAzAgCAAIFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjEFA3dpbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDd2luAgdqYWNrcG90BARjYWxsCQD8BwQJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIMaXNzdWVKYWNrcG90CQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAkAzAgCAghXV1dXSFdURgUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQRjYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDd2luAglpbmN1YmF0b3IEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MAAglpc3N1ZUZyZWUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MAAglpc3N1ZUZyZWUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACD2lzc3VlRnJlZVR1cnRsZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBnNlY29uZAUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjECCWluY3ViYXRvcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQECIT0CCQCzCQIFA3dpbgIIZHVja2xpbmcFBHVuaXQEBWxldmVsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCBQN3aW4CAV8AAQQKbGV2ZWxGaW5hbAMFBmRvdWJsZQkAaAIAAgUFbGV2ZWwFBWxldmVsBARjYWxsCQD8BwQJARJnZXRCYWJ5RHVja0FkZHJlc3MAAhFpc3N1ZUZyZWVEdWNrbGluZwkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQJAMwIAgUKbGV2ZWxGaW5hbAUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQRjYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDd2luAg50cnRsX2luY3ViYXRvcgQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACD2lzc3VlRnJlZVR1cnRsZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACD2lzc3VlRnJlZVR1cnRsZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAQGc2Vjb25kCQD8BwQJARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAIJaXNzdWVGcmVlCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNuaWwDCQAAAgUGc2Vjb25kBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQIOdHJ0bF9pbmN1YmF0b3IFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBAiE9AgkAswkCBQN3aW4CBGl0ZW0FBHVuaXQECGl0ZW1OYW1lCQCRAwIJALUJAgUDd2luAgEhAAEEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACEmlzc3VlQXJ0ZWZhY3RJbmRleAkAzAgCBQhpdGVtTmFtZQkAzAgCBQdhZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhJpc3N1ZUFydGVmYWN0SW5kZXgJAMwIAgUIaXRlbU5hbWUJAMwIAgUHYWRkcmVzcwkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAQGc2Vjb25kCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhJpc3N1ZUFydGVmYWN0SW5kZXgJAMwIAgUIaXRlbU5hbWUJAMwIAgUHYWRkcmVzcwkAzAgCAAEFA25pbAUDbmlsAwkAAAIFBnNlY29uZAUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjEFA3dpbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBCQCsAgICNFJGQjogU29tZSBlcnJvciBvY2N1cmVkLCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zISAFA3dpbgMJAAACBQZyZXN1bHQFBnJlc3VsdAQOcmV0dXJuVG9TZW5kZXIDBQZyZXNjdWUJAQ9nZXRSYW5kb21SZXR1cm4CCQDZBAEFBmluaXRUeAULZmluaXNoQmxvY2sHBA1yZXR1cm5QYXlsb2FkAwUOcmV0dXJuVG9TZW5kZXIEB2Fzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX2Fzc2V0SWQEBmlzc3VlcgkBCWNoZWNrUmVhbAEFB2Fzc2V0SWQEA2dlbgkBCGFzU3RyaW5nAQkA/AcECQEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MAAg5nZXRHZW5Gcm9tTmFtZQkAzAgCCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUFA25pbAUDbmlsAwkAAAIFA2dlbgUDZ2VuBARjYWxsCQD8BwQFBmlzc3VlcgIOaW5jcmVhc2VSYXJpdHkJAMwIAgkA2AQBBQdhc3NldElkCQDMCAIFA2dlbgUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzAAEFB2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQDOCAIJAM4IAgkAzggCBQZyZXN1bHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIEX3dpbgUDd2luCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMCBmZpbmlzaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3JhbmRvbQUGcmFuZG9tBQNuaWwFDHZhbGlkUGF5bWVudAUNcmV0dXJuUGF5bG9hZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg9SQ1U6IGFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIUc3RhdGljX29yYWNsZUFkZHJlc3MFBm9yYWNsZQUDbmlsAWkBC2luaXRSZWJpcnRoAAQJcG10Q2FuaW5lCQCRAwIIBQFpCHBheW1lbnRzAAAECHBtdFdhdmVzCQCRAwIIBQFpCHBheW1lbnRzAAEEB2Fzc2V0SWQJAQV2YWx1ZQEIBQlwbXRDYW5pbmUHYXNzZXRJZAQGaW5pdFR4CQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFCXBtdENhbmluZQZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQDAwkBAiE9AggFCHBtdFdhdmVzBmFtb3VudAULd2F2ZXNBbW91bnQGCQECIT0CCAUIcG10V2F2ZXMHYXNzZXRJZAUEdW5pdAkAAgECJldhdmVzcGF5bWVudCBpcyBub3QgYXR0YWNoZWQgb3Igd3JvbmchBBBzZW5kVG9BZ2dyZUdhdG9yCQBpAggFCHBtdFdhdmVzBmFtb3VudAAEBAV0b3B1cAkAZQIIBQhwbXRXYXZlcwZhbW91bnQFEHNlbmRUb0FnZ3JlR2F0b3IEB2FkZE1vcmUJAPwHBAkBF2dldENhbmluZVN0YWtpbmdBZGRyZXNzAAIUYWRkV2F2ZXNBbmRTdGFrZU1vcmUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUFdG9wdXAFA25pbAMJAAACBQdhZGRNb3JlBQdhZGRNb3JlBAZpc3N1ZXIJAQljaGVja1JlYWwBBQdhc3NldElkBANnZW4JAQhhc1N0cmluZwEJAPwHBAkBF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAIOZ2V0R2VuRnJvbU5hbWUJAMwIAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZARuYW1lBQNuaWwFA25pbAMJAAACBQNnZW4FA2dlbgQEY2FsbAkA/AcEBQZpc3N1ZXICDHJlZHVjZVJhcml0eQkAzAgCCQDYBAEFB2Fzc2V0SWQJAMwIAgUDZ2VuBQNuaWwFA25pbAMJAAACBQRjYWxsBQRjYWxsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgxfZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFEGRlbGF5Rm9ySGF0Y2hpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3N0YXR1cwIEb3BlbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfYXNzZXRJZAkA2AQBBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUQc2VuZFRvQWdncmVHYXRvcgUEdW5pdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWZpbmlzaFJlYmlydGgBBmluaXRUeAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAAcCAAcBaQETZmluaXNoUmViaXJ0aERvdWJsZQEGaW5pdFR4AwkBASEBAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAEHCQACAQIPSW52YWxpZCBwYXltZW50BAdhc3NldElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Jvb3N0ZXJUeXBlCQEIYXNTdHJpbmcBCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhRjaGVja0FydGVmYWN0RGV0YWlscwkAzAgCCQDYBAEFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFC2Jvb3N0ZXJUeXBlBQtib29zdGVyVHlwZQMJAAACBQtib29zdGVyVHlwZQIOQVJULUdJRlRfRE9VQkwJAM4IAgkAzAgCCQEEQnVybgIFB2Fzc2V0SWQAAQUDbmlsCQEVZmluaXNoUmViaXJ0aEludGVybmFsBgUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwABBgIABwkAAgECLUVycm9yISBXcm9uZyBpdGVtIGF0dGFjaGVkIHRvIGRvdWJsZSByZXdhcmRzIQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFmaW5pc2hSZWJpcnRoSXRlbQIGaW5pdFR4CGl0ZW1Db2RlAwMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABBwQHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtib29zdGVyVHlwZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQtib29zdGVyVHlwZQULYm9vc3RlclR5cGUDCQAAAgULYm9vc3RlclR5cGUCC0FSVC1IV0VSQVNFCQDOCAIJAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEFA25pbAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAQcFCGl0ZW1Db2RlBwMJAAACBQtib29zdGVyVHlwZQIMQVJULUhXUkVTQ1VFCQDOCAIJAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEFA25pbAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAQcCAAYDCQAAAgULYm9vc3RlclR5cGUCDkFSVC1HSUZUX0RPVUJMCQDOCAIJAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEFA25pbAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAYFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAQYCAAcJAAIBAhtFcnJvciEgV3JvbmcgaXRlbSBhdHRhY2hlZCAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQEVZmluaXNoUmViaXJ0aEludGVybmFsBgUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwAABwIABwkAAgECEEludmFsaWQgcGF5bWVudHMBAnR4AQZ2ZXJpZnkAAwkBCWlzVGVzdEVudgAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECWZpcnN0VXNlcgEgURzk/Wb/EmnS8VoUnzuy4vQ7f8HLaCeiNF5sONdX3W0ECnNlY29uZFVzZXIBIFxyDkuu8SFPZuYZRfpqorHtsTYpWV8ZzMyw4U1BiGp9BAl0aGlyZFVzZXIBIKCvkeUteUNhYTISrY65+hhZUZ0tU0k2w9Cj96hgGTtOBA9maXJzdFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJZmlyc3RVc2VyAAEAAAQQc2Vjb25kVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCnNlY29uZFVzZXIAAQAABA90aGlyZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJdGhpcmRVc2VyAAEAAAQPc2lnbmF0dXJlc0NvdW50CQBkAgkAZAIFD2ZpcnN0VXNlclNpZ25lZAUQc2Vjb25kVXNlclNpZ25lZAUPdGhpcmRVc2VyU2lnbmVkBAckbWF0Y2gwBQJ0eAkAZwIFD3NpZ25hdHVyZXNDb3VudAABhk67vQ==", "height": 3397207, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AQ4Mo3otUKzLxveu61ZyyEUcyjuodbu4hKtUNiX1bnWi Next: none Diff:
OldNewDifferences
178178
179179
180180 func getRandomWin (tx,finishHeight,blacklistCode) = {
181- let jackpotRandom = getRandomNumber(200, tx, finishHeight, 1)
182- if ((jackpotRandom == 1))
183- then $Tuple2(jackpotRandom, "jackpot")
184- else {
185- let n = getRandomNumber(1000, tx, finishHeight, 0)
186- let result = if (if ((100 > n))
187- then (blacklistCode != "docking_A")
188- else false)
189- then "docking_A"
190- else if (if ((200 > n))
191- then (blacklistCode != "docking_B")
192- else false)
193- then "docking_B"
194- else if (if ((300 > n))
195- then (blacklistCode != "docking_C")
196- else false)
197- then "docking_C"
198- else if (if ((400 > n))
199- then (blacklistCode != "docking_D")
200- else false)
201- then "docking_D"
202- else if (if ((450 > n))
203- then (blacklistCode != "incubator")
204- else false)
205- then "incubator"
206- else if (if ((490 > n))
207- then (blacklistCode != "duckling_40")
208- else false)
209- then "duckling_40"
210- else if (if ((540 > n))
211- then (blacklistCode != "duckling_20")
212- else false)
213- then "duckling_20"
214- else if (if ((640 > n))
215- then (blacklistCode != "item!ART-FEED5")
216- else false)
217- then "item!ART-FEED5"
218- else if (if ((710 > n))
219- then (blacklistCode != "item!ART-FEED10")
220- else false)
221- then "item!ART-FEED10"
222- else if (if ((740 > n))
223- then (blacklistCode != "item!ART-FEED15")
224- else false)
225- then "item!ART-FEED15"
226- else if (if ((770 > n))
227- then (blacklistCode != "item!ART-FEED20")
228- else false)
229- then "item!ART-FEED20"
230- else if (if ((790 > n))
231- then (blacklistCode != "item!ART-FEED25")
232- else false)
233- then "item!ART-FEED25"
234- else if (if ((810 > n))
235- then (blacklistCode != "item!ART-FEED50")
236- else false)
237- then "item!ART-FEED50"
238- else if (if ((830 > n))
239- then (blacklistCode != "item!ART-FEED100")
240- else false)
241- then "item!ART-FEED100"
242- else if (if ((860 > n))
243- then (blacklistCode != "item!ART-MUTARIUM-G")
244- else false)
245- then "item!ART-MUTARIUM-G"
246- else if (if ((890 > n))
247- then (blacklistCode != "item!ART-MUTARIUM-D")
248- else false)
249- then "item!ART-MUTARIUM-D"
250- else if (if ((910 > n))
251- then (blacklistCode != "item!ART-FREEGENE")
252- else false)
253- then "item!ART-FREEGENE"
254- else if (if ((930 > n))
255- then (blacklistCode != "item!ART-FIXGENE")
256- else false)
257- then "item!ART-FIXGENE"
258- else if (if ((980 > n))
259- then (blacklistCode != "trtl_incubator")
260- else false)
261- then "trtl_incubator"
262- else "item!ART-POTION"
263- $Tuple2(n, result)
264- }
181+ let n = getRandomNumber(1000, tx, finishHeight, 0)
182+ let result = "jackpot"
183+ $Tuple2(n, result)
265184 }
266185
267186
545464 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
546465 match tx {
547466 case _ =>
548- (signaturesCount >= 2)
467+ (signaturesCount >= 1)
549468 }
550469 }
551470
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 getBool (key) = match getBoolean(this, key) {
4242 case b: Boolean =>
4343 b
4444 case _ =>
4545 false
4646 }
4747
4848
4949 func asString (value) = match value {
5050 case s: String =>
5151 s
5252 case s: Int =>
5353 throw("wrong type, expected: String, got: Int")
5454 case s: Unit =>
5555 throw("wrong type, expected: String, got: Unit")
5656 case _ =>
5757 throw("wrong type, expected: String")
5858 }
5959
6060
6161 func isTestEnv () = getBool("TESTENV")
6262
6363
6464 func staticKey_oracleAddress () = "static_oracleAddress"
6565
6666
6767 func staticKey_extraFee () = "static_extraFee"
6868
6969
7070 func staticKey_feeAggregator () = "static_feeAggregator"
7171
7272
7373 func staticKey_canineIncubatorAddress () = "static_canineIncubatorAddress"
7474
7575
7676 func staticKey_canineBreederAddress () = "static_canineBreederAddress"
7777
7878
7979 func staticKey_couponsAddress () = "static_couponsAddress"
8080
8181
8282 func staticKey_canineStakingAddress () = "static_canineStakingAddress"
8383
8484
8585 func staticKey_duckStakingAddress () = "static_farmingAddressNew"
8686
8787
8888 func staticKey_duckIncubatorAddress () = "static_incubatorAddress"
8989
9090
9191 func staticKey_itemsAddress () = "static_itemsAddress"
9292
9393
9494 func staticKey_canineWavesRebirthPrice () = "static_canineWavesRebirthPrice"
9595
9696
9797 func staticKey_turtleIncubatorAddress () = "static_turtleIncubatorAddress"
9898
9999
100100 func staticKey_babyDuckAddress () = "static_babyDuckAddress"
101101
102102
103103 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
104104
105105
106106 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
107107
108108
109109 func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineBreederAddress())))
110110
111111
112112 func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineIncubatorAddress())))
113113
114114
115115 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
116116
117117
118118 func getCanineStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_canineStakingAddress())))
119119
120120
121121 func getDuckStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckStakingAddress())))
122122
123123
124124 func getDuckIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckIncubatorAddress())))
125125
126126
127127 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
128128
129129
130130 func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleIncubatorAddress())))
131131
132132
133133 func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckAddress())))
134134
135135
136136 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
137137 case b: Int =>
138138 b
139139 case _ =>
140140 throw("TR: Value not found in sc!")
141141 }
142142
143143
144144 let wavesAmount = tryGetIntegerExternal(getOracle(), staticKey_canineWavesRebirthPrice())
145145
146146 let delayForHatching = 2
147147
148148 func checkReal (assetId) = if (if ((value(assetInfo(assetId)).issuer == getCanineBreederAddress()))
149149 then true
150150 else (value(assetInfo(assetId)).issuer == getCanineIncubatorAddress()))
151151 then value(assetInfo(assetId)).issuer
152152 else throw("not valid NFT")
153153
154154
155155 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
156156 then throw("RCAP: Please attach waves")
157157 else {
158158 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
159159 if ((payment.amount != feeAmount))
160160 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
161161 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
162162 }
163163
164164
165165 func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
166166 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
167167 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
168168 (toInt(randomHash, (offset * 8)) % options)
169169 }
170170
171171
172172 func tryGetBoolean (key) = match getBoolean(key) {
173173 case b: Boolean =>
174174 b
175175 case _ =>
176176 false
177177 }
178178
179179
180180 func getRandomWin (tx,finishHeight,blacklistCode) = {
181- let jackpotRandom = getRandomNumber(200, tx, finishHeight, 1)
182- if ((jackpotRandom == 1))
183- then $Tuple2(jackpotRandom, "jackpot")
184- else {
185- let n = getRandomNumber(1000, tx, finishHeight, 0)
186- let result = if (if ((100 > n))
187- then (blacklistCode != "docking_A")
188- else false)
189- then "docking_A"
190- else if (if ((200 > n))
191- then (blacklistCode != "docking_B")
192- else false)
193- then "docking_B"
194- else if (if ((300 > n))
195- then (blacklistCode != "docking_C")
196- else false)
197- then "docking_C"
198- else if (if ((400 > n))
199- then (blacklistCode != "docking_D")
200- else false)
201- then "docking_D"
202- else if (if ((450 > n))
203- then (blacklistCode != "incubator")
204- else false)
205- then "incubator"
206- else if (if ((490 > n))
207- then (blacklistCode != "duckling_40")
208- else false)
209- then "duckling_40"
210- else if (if ((540 > n))
211- then (blacklistCode != "duckling_20")
212- else false)
213- then "duckling_20"
214- else if (if ((640 > n))
215- then (blacklistCode != "item!ART-FEED5")
216- else false)
217- then "item!ART-FEED5"
218- else if (if ((710 > n))
219- then (blacklistCode != "item!ART-FEED10")
220- else false)
221- then "item!ART-FEED10"
222- else if (if ((740 > n))
223- then (blacklistCode != "item!ART-FEED15")
224- else false)
225- then "item!ART-FEED15"
226- else if (if ((770 > n))
227- then (blacklistCode != "item!ART-FEED20")
228- else false)
229- then "item!ART-FEED20"
230- else if (if ((790 > n))
231- then (blacklistCode != "item!ART-FEED25")
232- else false)
233- then "item!ART-FEED25"
234- else if (if ((810 > n))
235- then (blacklistCode != "item!ART-FEED50")
236- else false)
237- then "item!ART-FEED50"
238- else if (if ((830 > n))
239- then (blacklistCode != "item!ART-FEED100")
240- else false)
241- then "item!ART-FEED100"
242- else if (if ((860 > n))
243- then (blacklistCode != "item!ART-MUTARIUM-G")
244- else false)
245- then "item!ART-MUTARIUM-G"
246- else if (if ((890 > n))
247- then (blacklistCode != "item!ART-MUTARIUM-D")
248- else false)
249- then "item!ART-MUTARIUM-D"
250- else if (if ((910 > n))
251- then (blacklistCode != "item!ART-FREEGENE")
252- else false)
253- then "item!ART-FREEGENE"
254- else if (if ((930 > n))
255- then (blacklistCode != "item!ART-FIXGENE")
256- else false)
257- then "item!ART-FIXGENE"
258- else if (if ((980 > n))
259- then (blacklistCode != "trtl_incubator")
260- else false)
261- then "trtl_incubator"
262- else "item!ART-POTION"
263- $Tuple2(n, result)
264- }
181+ let n = getRandomNumber(1000, tx, finishHeight, 0)
182+ let result = "jackpot"
183+ $Tuple2(n, result)
265184 }
266185
267186
268187 func getRandomReturn (tx,finishHeight) = {
269188 let n = getRandomNumber(2, tx, finishHeight, 1)
270189 if ((n == 0))
271190 then true
272191 else false
273192 }
274193
275194
276195 func finishRebirthInternal (initTx,address,additionalPayment,double,blacklistCode,rescue) = {
277196 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
278197 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
279198 let validPayment = checkAdditionalPayment(additionalPayment)
280199 if ((validPayment == validPayment))
281200 then if ((status != "open"))
282201 then throw("rebirth is finished or not open")
283202 else if ((finishBlock > height))
284203 then throw("you cannot finish rebirth, yet")
285204 else {
286205 let output = getRandomWin(fromBase58String(initTx), finishBlock, blacklistCode)
287206 let win = output._2
288207 let random = output._1
289208 let txId = initTx
290209 let result = if ((indexOf(win, "docking") != unit))
291210 then {
292211 let color = takeRight(win, 1)
293212 let call = if (!(double))
294213 then {
295214 let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 1], nil)
296215 if ((first == first))
297216 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
298217 else throw("Strict value is not equal to itself.")
299218 }
300219 else {
301220 let first = invoke(getCanineStakingAddress(), "addFreePerch", [address, color, 2], nil)
302221 if ((first == first))
303222 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
304223 else throw("Strict value is not equal to itself.")
305224 }
306225 if ((call == call))
307226 then call
308227 else throw("Strict value is not equal to itself.")
309228 }
310229 else if ((win == "jackpot"))
311230 then {
312231 let call = invoke(getCanineIncubatorAddress(), "issueJackpot", [address, txId, "WWWWHWTF"], nil)
313232 if ((call == call))
314233 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
315234 else throw("Strict value is not equal to itself.")
316235 }
317236 else if ((win == "incubator"))
318237 then {
319238 let call = if (!(double))
320239 then {
321240 let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
322241 if ((first == first))
323242 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
324243 else throw("Strict value is not equal to itself.")
325244 }
326245 else {
327246 let first = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
328247 if ((first == first))
329248 then {
330249 let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
331250 if ((second == second))
332251 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
333252 else throw("Strict value is not equal to itself.")
334253 }
335254 else throw("Strict value is not equal to itself.")
336255 }
337256 if ((call == call))
338257 then call
339258 else throw("Strict value is not equal to itself.")
340259 }
341260 else if ((indexOf(win, "duckling") != unit))
342261 then {
343262 let level = parseIntValue(split(win, "_")[1])
344263 let levelFinal = if (double)
345264 then (2 * level)
346265 else level
347266 let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, levelFinal], nil)
348267 if ((call == call))
349268 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
350269 else throw("Strict value is not equal to itself.")
351270 }
352271 else if ((win == "trtl_incubator"))
353272 then {
354273 let call = if (!(double))
355274 then {
356275 let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
357276 if ((first == first))
358277 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
359278 else throw("Strict value is not equal to itself.")
360279 }
361280 else {
362281 let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
363282 if ((first == first))
364283 then {
365284 let second = invoke(getCanineIncubatorAddress(), "issueFree", [address, txId], nil)
366285 if ((second == second))
367286 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")]
368287 else throw("Strict value is not equal to itself.")
369288 }
370289 else throw("Strict value is not equal to itself.")
371290 }
372291 if ((call == call))
373292 then call
374293 else throw("Strict value is not equal to itself.")
375294 }
376295 else if ((indexOf(win, "item") != unit))
377296 then {
378297 let itemName = split(win, "!")[1]
379298 let call = if (!(double))
380299 then {
381300 let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
382301 if ((first == first))
383302 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
384303 else throw("Strict value is not equal to itself.")
385304 }
386305 else {
387306 let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
388307 if ((first == first))
389308 then {
390309 let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
391310 if ((second == second))
392311 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
393312 else throw("Strict value is not equal to itself.")
394313 }
395314 else throw("Strict value is not equal to itself.")
396315 }
397316 if ((call == call))
398317 then call
399318 else throw("Strict value is not equal to itself.")
400319 }
401320 else throw(("RFB: Some error occured, please contact the admins! " + win))
402321 if ((result == result))
403322 then {
404323 let returnToSender = if (rescue)
405324 then getRandomReturn(fromBase58String(initTx), finishBlock)
406325 else false
407326 let returnPayload = if (returnToSender)
408327 then {
409328 let assetId = fromBase58String(getStringValue((((("address_" + address) + "_initTx_") + initTx) + "_assetId")))
410329 let issuer = checkReal(assetId)
411330 let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
412331 if ((gen == gen))
413332 then {
414333 let call = invoke(issuer, "increaseRarity", [toBase58String(assetId), gen], nil)
415334 if ((call == call))
416335 then [ScriptTransfer(addressFromStringValue(address), 1, assetId)]
417336 else throw("Strict value is not equal to itself.")
418337 }
419338 else throw("Strict value is not equal to itself.")
420339 }
421340 else nil
422341 (((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment) ++ returnPayload)
423342 }
424343 else throw("Strict value is not equal to itself.")
425344 }
426345 else throw("Strict value is not equal to itself.")
427346 }
428347
429348
430349 @Callable(i)
431350 func configureOracle (oracle) = if ((i.caller != this))
432351 then throw("RCU: admin only")
433352 else [StringEntry("static_oracleAddress", oracle)]
434353
435354
436355
437356 @Callable(i)
438357 func initRebirth () = {
439358 let pmtCanine = i.payments[0]
440359 let pmtWaves = i.payments[1]
441360 let assetId = value(pmtCanine.assetId)
442361 let initTx = toBase58String(i.transactionId)
443362 let address = toString(i.caller)
444363 if ((pmtCanine.amount != 1))
445364 then throw("NFT is not attached")
446365 else if (if ((pmtWaves.amount != wavesAmount))
447366 then true
448367 else (pmtWaves.assetId != unit))
449368 then throw("Wavespayment is not attached or wrong!")
450369 else {
451370 let sendToAggreGator = (pmtWaves.amount / 4)
452371 let topup = (pmtWaves.amount - sendToAggreGator)
453372 let addMore = invoke(getCanineStakingAddress(), "addWavesAndStakeMore", nil, [AttachedPayment(unit, topup)])
454373 if ((addMore == addMore))
455374 then {
456375 let issuer = checkReal(assetId)
457376 let gen = asString(invoke(getCanineBreederAddress(), "getGenFromName", [value(assetInfo(assetId)).name], nil))
458377 if ((gen == gen))
459378 then {
460379 let call = invoke(issuer, "reduceRarity", [toBase58String(assetId), gen], nil)
461380 if ((call == call))
462381 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)]
463382 else throw("Strict value is not equal to itself.")
464383 }
465384 else throw("Strict value is not equal to itself.")
466385 }
467386 else throw("Strict value is not equal to itself.")
468387 }
469388 }
470389
471390
472391
473392 @Callable(i)
474393 func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
475394
476395
477396
478397 @Callable(i)
479398 func finishRebirthDouble (initTx) = if (!(if ((size(i.payments) == 2))
480399 then (i.payments[0].amount == 1)
481400 else false))
482401 then throw("Invalid payment")
483402 else {
484403 let assetId = value(i.payments[0].assetId)
485404 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
486405 if ((boosterType == boosterType))
487406 then if ((boosterType == "ART-GIFT_DOUBL"))
488407 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
489408 else throw("Error! Wrong item attached to double rewards!")
490409 else throw("Strict value is not equal to itself.")
491410 }
492411
493412
494413
495414 @Callable(i)
496415 func finishRebirthItem (initTx,itemCode) = if (if ((size(i.payments) == 2))
497416 then (i.payments[0].amount == 1)
498417 else false)
499418 then {
500419 let assetId = value(i.payments[0].assetId)
501420 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
502421 if ((boosterType == boosterType))
503422 then if ((boosterType == "ART-HWERASE"))
504423 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, itemCode, false))
505424 else if ((boosterType == "ART-HWRESCUE"))
506425 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], false, "", true))
507426 else if ((boosterType == "ART-GIFT_DOUBL"))
508427 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true, "", false))
509428 else throw("Error! Wrong item attached ")
510429 else throw("Strict value is not equal to itself.")
511430 }
512431 else if ((size(i.payments) == 1))
513432 then finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false, "", false)
514433 else throw("Invalid payments")
515434
516435
517436 @Verifier(tx)
518437 func verify () = if (isTestEnv())
519438 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
520439 else {
521440 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
522441 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
523442 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
524443 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
525444 then 1
526445 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
527446 then 1
528447 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
529448 then 1
530449 else 0
531450 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
532451 then 1
533452 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
534453 then 1
535454 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
536455 then 1
537456 else 0
538457 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
539458 then 1
540459 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
541460 then 1
542461 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
543462 then 1
544463 else 0
545464 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
546465 match tx {
547466 case _ =>
548- (signaturesCount >= 2)
467+ (signaturesCount >= 1)
549468 }
550469 }
551470

github/deemru/w8io/026f985 
48.89 ms