tx · 4eNK2nKeRnFW6PuNpn6GrwLa73KAcy2gcjJ4RdouAyZv

3N1Nb8gVFi3S4Cvt2sBZj7XPkPiWYqKdTfp:  -0.01900000 Waves

2024.10.03 12:23 [3310484] smart account 3N1Nb8gVFi3S4Cvt2sBZj7XPkPiWYqKdTfp > SELF 0.00000000 Waves

{ "type": 13, "id": "4eNK2nKeRnFW6PuNpn6GrwLa73KAcy2gcjJ4RdouAyZv", "fee": 1900000, "feeAssetId": null, "timestamp": 1727947450929, "version": 2, "chainId": 84, "sender": "3N1Nb8gVFi3S4Cvt2sBZj7XPkPiWYqKdTfp", "senderPublicKey": "8FVyd1UAAKDWDWsLPFgQp4THUXha3DRBmZ9ceTQMMzFk", "proofs": [ "58umFFd358pzZJFfYqvEXPhS5n3ULBfmUoC4X7otziacypa2vuCzWTQatyENk9m7UKjyzX7ndjyJ88ccM9cWTnZn" ], "script": "base64:BgIWCAISAwoBCBIDCgEIEgMKAQgSAwoBCC8BFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkAAgEJAKwCAgIpUkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50LCBidXQgZ290OiAFBnN0cmluZwkAAgECHlJBSTogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEJYXNCb29sZWFuAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHYm9vbGVhbgUHJG1hdGNoMAUHYm9vbGVhbgkAAgECIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBcwUHJG1hdGNoMAkAAgECJndyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcsIGdvdDogSW50AwkAAQIFByRtYXRjaDACBFVuaXQEAXMFByRtYXRjaDAJAAIBAid3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nLCBnb3Q6IFVuaXQJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARRzdGF0aWNLZXlfZWdnQXNzZXRJZAACEXN0YXRpY19lZ2dBc3NldElkARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAhJzdGF0aWNfYnVybkFkZHJlc3MBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgEgc3RhdGljS2V5X3R1cnRsZUluY3ViYXRvckFkZHJlc3MAAh1zdGF0aWNfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwEec3RhdGljS2V5X3R1cnRsZUJyZWVkZXJBZGRyZXNzAAIbc3RhdGljX3R1cnRsZUJyZWVkZXJBZGRyZXNzARZzdGF0aWNLZXlfc3BpY2VBc3NldElkAAITc3RhdGljX3NwaWNlQXNzZXRJZAEcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwACGXN0YXRpY19yZWZDb250cmFjdEFkZHJlc3MBGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwACFXN0YXRpY19jb3Vwb25zQWRkcmVzcwEec3RhdGljS2V5X3R1cnRsZVN0YWtpbmdBZGRyZXNzAAIbc3RhdGljX3R1cnRsZVN0YWtpbmdBZGRyZXNzARxzdGF0aWNLZXlfZHVja1N0YWtpbmdBZGRyZXNzAAIYc3RhdGljX2Zhcm1pbmdBZGRyZXNzTmV3AR5zdGF0aWNLZXlfZHVja0luY3ViYXRvckFkZHJlc3MAAhdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwACE3N0YXRpY19pdGVtc0FkZHJlc3MBIXN0YXRpY0tleV90dXJ0bGVTcGljZVJlYmlydGhQcmljZQACHnN0YXRpY190dXJ0bGVTcGljZVJlYmlydGhQcmljZQEhc3RhdGljS2V5X3R1cnRsZVdhdmVzUmViaXJ0aFByaWNlAAIec3RhdGljX3R1cnRsZVdhdmVzUmViaXJ0aFByaWNlAR9zdGF0aWNLZXlfdHVydGxlRWdnUmViaXJ0aFByaWNlAAIcc3RhdGljX3R1cnRsZUVnZ1JlYmlydGhQcmljZQEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFHN0YXRpY0tleV9lZ2dBc3NldElkAAEOZ2V0QnVybkFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAARBnZXRGZWVBZ2dyZWdhdG9yAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAARdnZXRUdXJ0bGVCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV90dXJ0bGVCcmVlZGVyQWRkcmVzcwABGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJASBzdGF0aWNLZXlfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwABD2dldFNwaWNlQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfc3BpY2VBc3NldElkAAEVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwABEWdldENvdXBvbnNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAARVnZXREdWNrU3Rha2luZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARxzdGF0aWNLZXlfZHVja1N0YWtpbmdBZGRyZXNzAAEXZ2V0RHVja0luY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfZHVja0luY3ViYXRvckFkZHJlc3MAAQ9nZXRJdGVtc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiCQACAQIaVFI6IFZhbHVlIG5vdCBmb3VuZCBpbiBzYyEAC3NwaWNlQW1vdW50CQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBCWdldE9yYWNsZQAJASFzdGF0aWNLZXlfdHVydGxlU3BpY2VSZWJpcnRoUHJpY2UAAAllZ2dBbW91bnQJARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBH3N0YXRpY0tleV90dXJ0bGVFZ2dSZWJpcnRoUHJpY2UAAAt3YXZlc0Ftb3VudAkBFXRyeUdldEludGVnZXJFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEhc3RhdGljS2V5X3R1cnRsZVdhdmVzUmViaXJ0aFByaWNlAAAQZGVsYXlGb3JIYXRjaGluZwACAQ9jaGVja1JlYWxUdXJ0bGUBB2Fzc2V0SWQDAwkAAAIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQGaXNzdWVyCQEXZ2V0VHVydGxlQnJlZWRlckFkZHJlc3MABgkAAAIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQGaXNzdWVyCQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwAGCQACAQINbm90IHZhbGlkIE5GVAEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEHcGF5bWVudAMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIZUkNBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQJZmVlQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCCQEJZ2V0T3JhY2xlAAkBEnN0YXRpY0tleV9leHRyYUZlZQADCQECIT0CCAUHcGF5bWVudAZhbW91bnQFCWZlZUFtb3VudAkAAgEJAKwCAgkArAICAhxSQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQCkAwEFCWZlZUFtb3VudAITIGFtb3VudCBvZiB3YXZlbGV0cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFCWZlZUFtb3VudAUEdW5pdAUDbmlsAQ9nZXRSYW5kb21OdW1iZXIEB29wdGlvbnMEdHhJZBRoYXRjaGluZ0ZpbmlzaEhlaWdodAZvZmZzZXQED3JhbmRvbVNlZWRCbG9jawkBBXZhbHVlAQkA7QcBCQBlAgUUaGF0Y2hpbmdGaW5pc2hIZWlnaHQAAQQKcmFuZG9tSGFzaAkA9wMBCQDLAQIFBHR4SWQJAQV2YWx1ZQEIBQ9yYW5kb21TZWVkQmxvY2sDdnJmCQBqAgkAsgkCBQpyYW5kb21IYXNoCQBoAgUGb2Zmc2V0AAgFB29wdGlvbnMBDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAoAgBBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDGdldFJhbmRvbVdpbgICdHgMZmluaXNoSGVpZ2h0BA5qYWNrcG90RW5hYmxlZAkBDXRyeUdldEJvb2xlYW4BAg9KQUNLUE9UX0VOQUJMRUQEDWphY2twb3RSYW5kb20JAQ9nZXRSYW5kb21OdW1iZXIEAKwCBQJ0eAUMZmluaXNoSGVpZ2h0AAEDAwkAAAIFDWphY2twb3RSYW5kb20AAQUOamFja3BvdEVuYWJsZWQHCQCUCgIFDWphY2twb3RSYW5kb20CB2phY2twb3QEAW4JAQ9nZXRSYW5kb21OdW1iZXIEAOgHBQJ0eAUMZmluaXNoSGVpZ2h0AAAEBnJlc3VsdAMJAGYCACgFAW4CFGl0ZW0hQVJULUZJUkVfU0hJRUxEAwkAZgIAUAUBbgISaXRlbSFBUlQtRklSRV9UQUlMAwkAZgIAZAUBbgIRaXRlbSFBUlQtRlJFRUdFTkUDCQBmAgCWAQUBbgIHYmVhY2hfUgMJAGYCAMgBBQFuAgdiZWFjaF9TAwkAZgIA+gEFAW4CB2JlYWNoX0cDCQBmAgCsAgUBbgIHYmVhY2hfRAMJAGYCAPwCBQFuAhNpdGVtIUFSVC1NVVRBUklVTS1HAwkAZgIAkAMFAW4CDml0ZW0hQVJULUZFRUQ1AwkAZgIA2AQFAW4CD2l0ZW0hQVJULUZFRUQxMAMJAGYCAOwEBQFuAg9pdGVtIUFSVC1GRUVEMTUDCQBmAgCABQUBbgIPaXRlbSFBUlQtRkVFRDIwAwkAZgIAlAUFAW4CD2l0ZW0hQVJULUZFRUQyNQMJAGYCAKgFBQFuAg9pdGVtIUFSVC1GRUVENTADCQBmAgD4BQUBbgIQaXRlbSFBUlQtRkVFRDEwMAMJAGYCAIwGBQFuAgdwZXJjaF9HAwkAZgIAoAYFAW4CB3BlcmNoX1kDCQBmAgC0BgUBbgIHcGVyY2hfUgMJAGYCAMgGBQFuAgdwZXJjaF9CAwkAZgIA8AYFAW4CE2l0ZW0hQVJULU1VVEFSSVVNLUQDCQBmAgCsBwUBbgIJaW5jdWJhdG9yAg5kdWNrX2luY3ViYXRvcgkAlAoCBQFuBQZyZXN1bHQBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAQGaW5pdFR4B2FkZHJlc3MRYWRkaXRpb25hbFBheW1lbnQGZG91YmxlBAtmaW5pc2hCbG9jawkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgxfZmluaXNoQmxvY2sEBnN0YXR1cwkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBBRFhZGRpdGlvbmFsUGF5bWVudAMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAQMcmVjb3JkQWN0aW9uCQD8BwQJARFnZXRDb3Vwb25zQWRkcmVzcwACDHJlY29yZEFjdGlvbgkAzAgCAg1SRUJJUlRIVFVSVExFBQNuaWwFA25pbAMJAAACBQxyZWNvcmRBY3Rpb24FDHJlY29yZEFjdGlvbgMJAQIhPQIFBnN0YXR1cwIEb3BlbgkAAgECH3JlYmlydGggaXMgZmluaXNoZWQgb3Igbm90IG9wZW4DCQBmAgULZmluaXNoQmxvY2sFBmhlaWdodAkAAgECHnlvdSBjYW5ub3QgZmluaXNoIHJlYmlydGgsIHlldAQGb3V0cHV0CQEMZ2V0UmFuZG9tV2luAgkA2QQBBQZpbml0VHgFC2ZpbmlzaEJsb2NrBAN3aW4IBQZvdXRwdXQCXzIEBnJhbmRvbQgFBm91dHB1dAJfMQQEdHhJZAUGaW5pdFR4BAZyZXN1bHQDCQECIT0CCQCzCQIFA3dpbgIFcGVyY2gFBHVuaXQEBWNvbG9yCQCyAgIFA3dpbgABBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJARVnZXREdWNrU3Rha2luZ0FkZHJlc3MAAgxhZGRGcmVlUGVyY2gJAMwIAgUHYWRkcmVzcwkAzAgCBQVjb2xvcgkAzAgCAAEFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEVZ2V0RHVja1N0YWtpbmdBZGRyZXNzAAIMYWRkRnJlZVBlcmNoCQDMCAIFB2FkZHJlc3MJAMwIAgUFY29sb3IJAMwIAgACBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xBQN3aW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBAiE9AgkAswkCBQN3aW4CBWJlYWNoBQR1bml0BAVjb2xvcgkAsgICBQN3aW4AAQQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MAAgxhZGRGcmVlQmVhY2gJAMwIAgUHYWRkcmVzcwkAzAgCBQVjb2xvcgUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARdnZXRUdXJ0bGVTdGFraW5nQWRkcmVzcwACDGFkZEZyZWVCZWFjaAkAzAgCBQdhZGRyZXNzCQDMCAIFBWNvbG9yBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MAAgxhZGRGcmVlQmVhY2gJAMwIAgUHYWRkcmVzcwkAzAgCBQVjb2xvcgUDbmlsBQNuaWwDCQAAAgUGc2Vjb25kBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQUDd2luBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQN3aW4CB2phY2twb3QEBGNhbGwJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAgxpc3N1ZUphY2twb3QJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkCQDMCAIJAQt2YWx1ZU9yRWxzZQIJAKIIAQIMSkFDS1BPVF9OQU1FAghXV1dXWE1BUwUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQRjYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDd2luAglpbmN1YmF0b3IEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEXZ2V0RHVja0luY3ViYXRvckFkZHJlc3MAAhlpc3N1ZUZyZWVEdWNrRGVmaW5lZEdlbmVzCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAkAzAgCAghaWlpaWlpaWgUDbmlsBQNuaWwDCQAAAgUGc2Vjb25kBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQIOZHVja19pbmN1YmF0b3IFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIOZHVja19pbmN1YmF0b3IEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBF2dldER1Y2tJbmN1YmF0b3JBZGRyZXNzAAIZaXNzdWVGcmVlRHVja0RlZmluZWRHZW5lcwkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQJAMwIAgIIWlpaWlpaWloFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEXZ2V0RHVja0luY3ViYXRvckFkZHJlc3MAAhlpc3N1ZUZyZWVEdWNrRGVmaW5lZEdlbmVzCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAkAzAgCAghaWlpaWlpaWgUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0BAZzZWNvbmQJAPwHBAkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MAAg9pc3N1ZUZyZWVUdXJ0bGUJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xAglpbmN1YmF0b3IFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBAiE9AgkAswkCBQN3aW4CBGl0ZW0FBHVuaXQECGl0ZW1OYW1lCQCRAwIJALUJAgUDd2luAgEhAAEEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACEmlzc3VlQXJ0ZWZhY3RJbmRleAkAzAgCBQhpdGVtTmFtZQkAzAgCBQdhZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhJpc3N1ZUFydGVmYWN0SW5kZXgJAMwIAgUIaXRlbU5hbWUJAMwIAgUHYWRkcmVzcwkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAQGc2Vjb25kCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhJpc3N1ZUFydGVmYWN0SW5kZXgJAMwIAgUIaXRlbU5hbWUJAMwIAgUHYWRkcmVzcwkAzAgCAAEFA25pbAUDbmlsAwkAAAIFBnNlY29uZAUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjEFA3dpbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAjNSRkI6IFNvbWUgZXJyb3Igb2NjdXJlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucyEJAM4IAgkAzggCBQZyZXN1bHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIEX3dpbgUDd2luCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMCBmZpbmlzaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3JhbmRvbQUGcmFuZG9tBQNuaWwFDHZhbGlkUGF5bWVudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg9SQ1U6IGFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIUc3RhdGljX29yYWNsZUFkZHJlc3MFBm9yYWNsZQUDbmlsAWkBC2luaXRSZWJpcnRoAQ5yZWZlcmVyQWRkcmVzcwQJcG10VHVydGxlCQCRAwIIBQFpCHBheW1lbnRzAAAECHBtdFdhdmVzCQCRAwIIBQFpCHBheW1lbnRzAAEECHBtdFNwaWNlCQCRAwIIBQFpCHBheW1lbnRzAAIEB2Fzc2V0SWQJAQV2YWx1ZQEIBQlwbXRUdXJ0bGUHYXNzZXRJZAQGaW5pdFR4CQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFCXBtdFR1cnRsZQZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQDAwkBAiE9AggFCHBtdFdhdmVzBmFtb3VudAULd2F2ZXNBbW91bnQGCQECIT0CCAUIcG10V2F2ZXMHYXNzZXRJZAUEdW5pdAkAAgECJldhdmVzcGF5bWVudCBpcyBub3QgYXR0YWNoZWQgb3Igd3JvbmchAwMJAQIhPQIIBQhwbXRTcGljZQZhbW91bnQFC3NwaWNlQW1vdW50BgkBAiE9AggFCHBtdFNwaWNlB2Fzc2V0SWQJAQ9nZXRTcGljZUFzc2V0SWQACQACAQImU3BpY2VQYXltZW50IGlzIG5vdCBhdHRhY2hlZCBvciB3cm9uZyEEE2Ftb3VudFBhaWRCeUNvdXBvbnMJAQVhc0ludAEJAPwHBAkBEWdldENvdXBvbnNBZGRyZXNzAAIKdXNlQ291cG9ucwkAzAgCBQllZ2dBbW91bnQFA25pbAUDbmlsAwkAAAIFE2Ftb3VudFBhaWRCeUNvdXBvbnMFE2Ftb3VudFBhaWRCeUNvdXBvbnMECWxlZnRUb1BheQkAZQIFCWVnZ0Ftb3VudAUTYW1vdW50UGFpZEJ5Q291cG9ucwQFdG9wdXAJAPwHBAkBF2dldFR1cnRsZVN0YWtpbmdBZGRyZXNzAAILdG9wVXBSZXdhcmQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBD2dldFNwaWNlQXNzZXRJZAAIBQhwbXRTcGljZQZhbW91bnQFA25pbAMJAAACBQV0b3B1cAUFdG9wdXAEB3BheW1lbnQDCQECIT0CBQlsZWZ0VG9QYXkAAAQGcG10RWdnCQCRAwIIBQFpCHBheW1lbnRzAAMECmZlZVBheW1lbnQJAQV2YWx1ZQEFBnBtdEVnZwMJAQIhPQIIBQpmZWVQYXltZW50B2Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAAgECJFlvdSBuZWVkIHRvIGF0dGFjaCBFR0cgdG9rZW5zIGFzIGZlZQMJAQIhPQIIBQpmZWVQYXltZW50BmFtb3VudAUJbGVmdFRvUGF5CQACAQkArAICAkBZb3UgbmVlZCB0byBhdHRhY2ggdGhlIGZvbGxvd2luZyBhbW91bnQgb2YgRUdHIHRva2VucyBhcyBmZWU6IDAuCQCkAwEFCWxlZnRUb1BheQQVcmVmZXJlclJld2FyZEZvclBlcmNoCQBrAwUJbGVmdFRvUGF5AAUAZAQHcmVmQ2FsbAkBCWFzQm9vbGVhbgEJAPwHBAkBFWdldFJlZkNvbnRyYWN0QWRkcmVzcwACCnJlZlBheW1lbnQJAMwIAgUOcmVmZXJlckFkZHJlc3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABRVyZWZlcmVyUmV3YXJkRm9yUGVyY2gFA25pbAMJAAACBQdyZWZDYWxsBQdyZWZDYWxsBAZ0b0J1cm4DBQdyZWZDYWxsCQBlAgUJbGVmdFRvUGF5BRVyZWZlcmVyUmV3YXJkRm9yUGVyY2gFCWxlZnRUb1BheQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABQZ0b0J1cm4FA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwFCWxlZnRUb1BheQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFB3BheW1lbnQFB3BheW1lbnQECnJlYWxUdXJ0bGUJAQ9jaGVja1JlYWxUdXJ0bGUBBQdhc3NldElkAwkAAAIFCnJlYWxUdXJ0bGUFCnJlYWxUdXJ0bGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCDF9maW5pc2hCbG9jawkAZAIFBmhlaWdodAUQZGVsYXlGb3JIYXRjaGluZwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4Agdfc3RhdHVzAgRvcGVuCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9hc3NldElkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IACAUIcG10V2F2ZXMGYW1vdW50BQR1bml0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENZmluaXNoUmViaXJ0aAEGaW5pdFR4CQEVZmluaXNoUmViaXJ0aEludGVybmFsBAUGaW5pdFR4CQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwAABwFpARNmaW5pc2hSZWJpcnRoRG91YmxlAQZpbml0VHgDCQEBIQEDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQcJAAIBAg9JbnZhbGlkIHBheW1lbnQEB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYm9vc3RlclR5cGUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgULYm9vc3RlclR5cGUFC2Jvb3N0ZXJUeXBlAwkAAAIFC2Jvb3N0ZXJUeXBlAg5BUlQtR0lGVF9ET1VCTAkAzggCCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABBQNuaWwJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwEBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAEGCQACAQItRXJyb3IhIFdyb25nIGl0ZW0gYXR0YWNoZWQgdG8gZG91YmxlIHJld2FyZHMhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAGNbbyk=", "height": 3310484, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9WBRPJvwWwNXTBp9k8ANYTRaxSxxiTmz3SyUeLW8kaZ3 Next: BKEj7jdrrE3NuCrEhHNewzpuoUR1Uo3jr1oxoBv8hkwv 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_eggAssetId () = "static_eggAssetId"
5757
5858
5959 func staticKey_burnAddress () = "static_burnAddress"
6060
6161
6262 func staticKey_extraFee () = "static_extraFee"
6363
6464
6565 func staticKey_feeAggregator () = "static_feeAggregator"
6666
6767
6868 func staticKey_turtleIncubatorAddress () = "static_turtleIncubatorAddress"
6969
7070
7171 func staticKey_turtleBreederAddress () = "static_turtleBreederAddress"
7272
7373
7474 func staticKey_spiceAssetId () = "static_spiceAssetId"
7575
7676
7777 func staticKey_refContractAddress () = "static_refContractAddress"
7878
7979
8080 func staticKey_couponsAddress () = "static_couponsAddress"
8181
8282
8383 func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
8484
8585
8686 func staticKey_duckStakingAddress () = "static_farmingAddressNew"
8787
8888
8989 func staticKey_duckIncubatorAddress () = "static_incubatorAddress"
9090
9191
9292 func staticKey_itemsAddress () = "static_itemsAddress"
9393
9494
9595 func staticKey_turtleSpiceRebirthPrice () = "static_turtleSpiceRebirthPrice"
9696
9797
9898 func staticKey_turtleWavesRebirthPrice () = "static_turtleWavesRebirthPrice"
9999
100100
101101 func staticKey_turtleEggRebirthPrice () = "static_turtleEggRebirthPrice"
102102
103103
104104 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
105105
106106
107107 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
108108
109109
110110 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
111111
112112
113113 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
114114
115115
116116 func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleBreederAddress())))
117117
118118
119119 func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleIncubatorAddress())))
120120
121121
122122 func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
123123
124124
125125 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
126126
127127
128128 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
129129
130130
131131 func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
132132
133133
134134 func getDuckStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckStakingAddress())))
135135
136136
137137 func getDuckIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckIncubatorAddress())))
138138
139139
140140 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
141141
142142
143143 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
144144 case b: Int =>
145145 b
146146 case _ =>
147147 throw("TR: Value not found in sc!")
148148 }
149149
150150
151151 let spiceAmount = tryGetIntegerExternal(getOracle(), staticKey_turtleSpiceRebirthPrice())
152152
153153 let eggAmount = tryGetIntegerExternal(getOracle(), staticKey_turtleEggRebirthPrice())
154154
155155 let wavesAmount = tryGetIntegerExternal(getOracle(), staticKey_turtleWavesRebirthPrice())
156156
157157 let delayForHatching = 2
158158
159159 func checkRealTurtle (assetId) = if (if ((value(assetInfo(assetId)).issuer == getTurtleBreederAddress()))
160160 then true
161161 else (value(assetInfo(assetId)).issuer == getTurtleIncubatorAddress()))
162162 then true
163163 else throw("not valid NFT")
164164
165165
166166 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
167167 then throw("RCAP: Please attach waves")
168168 else {
169169 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
170170 if ((payment.amount != feeAmount))
171171 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
172172 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
173173 }
174174
175175
176176 func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
177177 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
178178 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
179179 (toInt(randomHash, (offset * 8)) % options)
180180 }
181181
182182
183183 func tryGetBoolean (key) = match getBoolean(key) {
184184 case b: Boolean =>
185185 b
186186 case _ =>
187187 false
188188 }
189189
190190
191191 func getRandomWin (tx,finishHeight) = {
192192 let jackpotEnabled = tryGetBoolean("JACKPOT_ENABLED")
193193 let jackpotRandom = getRandomNumber(300, tx, finishHeight, 1)
194194 if (if ((jackpotRandom == 1))
195195 then jackpotEnabled
196196 else false)
197197 then $Tuple2(jackpotRandom, "jackpot")
198198 else {
199199 let n = getRandomNumber(1000, tx, finishHeight, 0)
200200 let result = if ((40 > n))
201201 then "item!ART-FIRE_SHIELD"
202202 else if ((80 > n))
203203 then "item!ART-FIRE_TAIL"
204204 else if ((100 > n))
205205 then "item!ART-FREEGENE"
206206 else if ((150 > n))
207207 then "beach_R"
208208 else if ((200 > n))
209209 then "beach_S"
210210 else if ((250 > n))
211211 then "beach_G"
212212 else if ((300 > n))
213213 then "beach_D"
214214 else if ((380 > n))
215215 then "item!ART-MUTARIUM-G"
216216 else if ((400 > n))
217217 then "item!ART-FEED5"
218218 else if ((600 > n))
219219 then "item!ART-FEED10"
220220 else if ((620 > n))
221221 then "item!ART-FEED15"
222222 else if ((640 > n))
223223 then "item!ART-FEED20"
224224 else if ((660 > n))
225225 then "item!ART-FEED25"
226226 else if ((680 > n))
227227 then "item!ART-FEED50"
228228 else if ((760 > n))
229229 then "item!ART-FEED100"
230230 else if ((780 > n))
231231 then "perch_G"
232232 else if ((800 > n))
233233 then "perch_Y"
234234 else if ((820 > n))
235235 then "perch_R"
236236 else if ((840 > n))
237237 then "perch_B"
238238 else if ((880 > n))
239239 then "item!ART-MUTARIUM-D"
240240 else if ((940 > n))
241241 then "incubator"
242242 else "duck_incubator"
243243 $Tuple2(n, result)
244244 }
245245 }
246246
247247
248248 func finishRebirthInternal (initTx,address,additionalPayment,double) = {
249249 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
250250 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
251251 let validPayment = checkAdditionalPayment(additionalPayment)
252252 if ((validPayment == validPayment))
253253 then {
254254 let recordAction = invoke(getCouponsAddress(), "recordAction", ["REBIRTHTURTLE"], nil)
255255 if ((recordAction == recordAction))
256256 then if ((status != "open"))
257257 then throw("rebirth is finished or not open")
258258 else if ((finishBlock > height))
259259 then throw("you cannot finish rebirth, yet")
260260 else {
261261 let output = getRandomWin(fromBase58String(initTx), finishBlock)
262262 let win = output._2
263263 let random = output._1
264264 let txId = initTx
265265 let result = if ((indexOf(win, "perch") != unit))
266266 then {
267267 let color = takeRight(win, 1)
268268 let call = if (!(double))
269269 then {
270270 let first = invoke(getDuckStakingAddress(), "addFreePerch", [address, color, 1], nil)
271271 if ((first == first))
272272 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
273273 else throw("Strict value is not equal to itself.")
274274 }
275275 else {
276276 let first = invoke(getDuckStakingAddress(), "addFreePerch", [address, color, 2], nil)
277277 if ((first == first))
278278 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
279279 else throw("Strict value is not equal to itself.")
280280 }
281281 if ((call == call))
282282 then call
283283 else throw("Strict value is not equal to itself.")
284284 }
285285 else if ((indexOf(win, "beach") != unit))
286286 then {
287287 let color = takeRight(win, 1)
288288 let call = if (!(double))
289289 then {
290290 let first = invoke(getTurtleStakingAddress(), "addFreeBeach", [address, color], nil)
291291 if ((first == first))
292292 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
293293 else throw("Strict value is not equal to itself.")
294294 }
295295 else {
296296 let first = invoke(getTurtleStakingAddress(), "addFreeBeach", [address, color], nil)
297297 if ((first == first))
298298 then {
299299 let second = invoke(getTurtleStakingAddress(), "addFreeBeach", [address, color], nil)
300300 if ((second == second))
301301 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
302302 else throw("Strict value is not equal to itself.")
303303 }
304304 else throw("Strict value is not equal to itself.")
305305 }
306306 if ((call == call))
307307 then call
308308 else throw("Strict value is not equal to itself.")
309309 }
310310 else if ((win == "jackpot"))
311311 then {
312312 let call = invoke(getTurtleIncubatorAddress(), "issueJackpot", [address, txId, valueOrElse(getString("JACKPOT_NAME"), "WWWWXMAS")], nil)
313313 if ((call == call))
314314 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
315315 else throw("Strict value is not equal to itself.")
316316 }
317317 else if ((win == "incubator"))
318318 then {
319319 let call = if (!(double))
320320 then {
321321 let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
322322 if ((first == first))
323323 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
324324 else throw("Strict value is not equal to itself.")
325325 }
326326 else {
327327 let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
328328 if ((first == first))
329329 then {
330330 let second = invoke(getDuckIncubatorAddress(), "issueFreeDuckDefinedGenes", [address, txId, "ZZZZZZZZ"], nil)
331331 if ((second == second))
332332 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "duck_incubator")]
333333 else throw("Strict value is not equal to itself.")
334334 }
335335 else throw("Strict value is not equal to itself.")
336336 }
337337 if ((call == call))
338338 then call
339339 else throw("Strict value is not equal to itself.")
340340 }
341341 else if ((win == "duck_incubator"))
342342 then {
343343 let call = if (!(double))
344344 then {
345345 let first = invoke(getDuckIncubatorAddress(), "issueFreeDuckDefinedGenes", [address, txId, "ZZZZZZZZ"], nil)
346346 if ((first == first))
347347 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
348348 else throw("Strict value is not equal to itself.")
349349 }
350350 else {
351351 let first = invoke(getDuckIncubatorAddress(), "issueFreeDuckDefinedGenes", [address, txId, "ZZZZZZZZ"], nil)
352352 if ((first == first))
353353 then {
354354 let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
355355 if ((second == second))
356356 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else throw("Strict value is not equal to itself.")
360360 }
361361 if ((call == call))
362362 then call
363363 else throw("Strict value is not equal to itself.")
364364 }
365365 else if ((indexOf(win, "item") != unit))
366366 then {
367367 let itemName = split(win, "!")[1]
368368 let call = if (!(double))
369369 then {
370370 let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
371371 if ((first == first))
372372 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
373373 else throw("Strict value is not equal to itself.")
374374 }
375375 else {
376376 let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
377377 if ((first == first))
378378 then {
379379 let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
380380 if ((second == second))
381381 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
382382 else throw("Strict value is not equal to itself.")
383383 }
384384 else throw("Strict value is not equal to itself.")
385385 }
386386 if ((call == call))
387387 then call
388388 else throw("Strict value is not equal to itself.")
389389 }
390390 else throw("RFB: Some error occured, please contact the admins!")
391391 ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment)
392392 }
393393 else throw("Strict value is not equal to itself.")
394394 }
395395 else throw("Strict value is not equal to itself.")
396396 }
397397
398398
399399 @Callable(i)
400400 func configureOracle (oracle) = if ((i.caller != this))
401401 then throw("RCU: admin only")
402402 else [StringEntry("static_oracleAddress", oracle)]
403403
404404
405405
406406 @Callable(i)
407407 func initRebirth (refererAddress) = {
408408 let pmtTurtle = i.payments[0]
409409 let pmtWaves = i.payments[1]
410410 let pmtSpice = i.payments[2]
411411 let assetId = value(pmtTurtle.assetId)
412412 let initTx = toBase58String(i.transactionId)
413413 let address = toString(i.caller)
414414 if ((pmtTurtle.amount != 1))
415415 then throw("NFT is not attached")
416416 else if (if ((pmtWaves.amount != wavesAmount))
417417 then true
418418 else (pmtWaves.assetId != unit))
419419 then throw("Wavespayment is not attached or wrong!")
420420 else if (if ((pmtSpice.amount != spiceAmount))
421421 then true
422422 else (pmtSpice.assetId != getSpiceAssetId()))
423423 then throw("SpicePayment is not attached or wrong!")
424424 else {
425425 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [eggAmount], nil))
426426 if ((amountPaidByCoupons == amountPaidByCoupons))
427427 then {
428428 let leftToPay = (eggAmount - amountPaidByCoupons)
429429 let topup = invoke(getTurtleStakingAddress(), "topUpReward", nil, [AttachedPayment(getSpiceAssetId(), pmtSpice.amount)])
430430 if ((topup == topup))
431431 then {
432432 let payment = if ((leftToPay != 0))
433433 then {
434434 let pmtEgg = i.payments[3]
435435 let feePayment = value(pmtEgg)
436436 if ((feePayment.assetId != getEggAssetId()))
437437 then throw("You need to attach EGG tokens as fee")
438438 else if ((feePayment.amount != leftToPay))
439439 then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(leftToPay)))
440440 else {
441441 let refererRewardForPerch = fraction(leftToPay, 5, 100)
442442 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
443443 if ((refCall == refCall))
444444 then {
445445 let toBurn = if (refCall)
446446 then (leftToPay - refererRewardForPerch)
447447 else leftToPay
448448 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
449449 if ((burnCall == burnCall))
450450 then leftToPay
451451 else throw("Strict value is not equal to itself.")
452452 }
453453 else throw("Strict value is not equal to itself.")
454454 }
455455 }
456456 else 0
457457 if ((payment == payment))
458458 then {
459459 let realTurtle = checkRealTurtle(assetId)
460460 if ((realTurtle == realTurtle))
461461 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(), pmtWaves.amount, unit)]
462462 else throw("Strict value is not equal to itself.")
463463 }
464464 else throw("Strict value is not equal to itself.")
465465 }
466466 else throw("Strict value is not equal to itself.")
467467 }
468468 else throw("Strict value is not equal to itself.")
469469 }
470470 }
471471
472472
473473
474474 @Callable(i)
475475 func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false)
476476
477477
478478
479479 @Callable(i)
480480 func finishRebirthDouble (initTx) = if (!(if ((size(i.payments) == 2))
481481 then (i.payments[0].amount == 1)
482482 else false))
483483 then throw("Invalid payment")
484484 else {
485485 let assetId = value(i.payments[0].assetId)
486486 let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
487487 if ((boosterType == boosterType))
488488 then if ((boosterType == "ART-GIFT_DOUBL"))
489489 then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true))
490490 else throw("Error! Wrong item attached to double rewards!")
491491 else throw("Strict value is not equal to itself.")
492492 }
493493
494494

github/deemru/w8io/026f985 
44.99 ms