tx · 6LH7Em5P9eY5Kctqsv5GZAAVn3yNVSMoZHCJP41E3dfq

3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks:  -0.01500000 Waves

2022.11.19 20:52 [3389735] smart account 3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks > SELF 0.00000000 Waves

{ "type": 13, "id": "6LH7Em5P9eY5Kctqsv5GZAAVn3yNVSMoZHCJP41E3dfq", "fee": 1500000, "feeAssetId": null, "timestamp": 1668880348652, "version": 2, "chainId": 87, "sender": "3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks", "senderPublicKey": "XrNmTusDFaLSz3wAjmdfcyC5h6uYyVbpdh18758UpFv", "proofs": [ "4xgEn9FFWdkoS2awqvX6zA8Q2GhDtysUW5RdKMvNfx5RyunVZXa4oaQYVzQFXWjCRHSpJy9BmeCXZHWpiWsv945h" ], "script": "base64:BgJMCAISAwoBCBIECgIBCBIECgIBCBIDCgEIEgMKAQgSBAoCCAgSBQoDCAEBEgMKAQgSABIAEgASBAoCCAgSAwoBARIAEgMKAQESAwoBCCMBEGtleUFydGVmYWN0T3duZXICDGFydGVmYWN0TmFtZQVvd25lcgkArAICCQCsAgIJAKwCAgUMYXJ0ZWZhY3ROYW1lAgFfBQVvd25lcgIGX293bmVyARBrZXlVbnN0YWtlSGVpZ2h0AgxhcnRlZmFjdE5hbWUKYXJ0ZWZhY3RJZAkArAICCQCsAgIJAKwCAgUMYXJ0ZWZhY3ROYW1lAgFfBQphcnRlZmFjdElkAg9fdW5zdGFrZV9oZWlnaHQBFGtleUV4dGVybmFsQm9vc3REdWNrAQZkdWNrSWQJAKwCAgUGZHVja0lkAhRfZHVja19leHRlcm5hbF9ib29zdAEXa2V5RXh0ZXJuYWxCb29zdEFkZHJlc3MBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIUX3VzZXJfZXh0ZXJuYWxfYm9vc3QBGWdldFByb2Nlc3NGaW5pc2hIZWlnaHRLZXkCB2FkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBXwkA2AQBBQR0eElkAgNfZmgACmRldkFkZHJlc3MBGgFXF3fYQk8hOgpGT8vir4YiaxOc51un3nx7AAplZ2dzTmVlZGVkCQBoAgADAIDC1y8ADmFydGVmYWN0c0xpbWl0CQBkAgCtAgDYBAAJZnJlZUdlbmVzCQDMCAICAUEJAMwIAgIBQgkAzAgCAgFDCQDMCAICAUQJAMwIAgIBRQkAzAgCAgFGBQNuaWwADG9sZEFydGVmYWN0cwkAzAgCAghBUlQtTEFLRQkAzAgCAglBUlQtSE9VU0UJAMwIAgIMQVJULUJJR0hPVVNFCQDMCAICC0FSVC1GSVhHRU5FCQDMCAICDEFSVC1GUkVFR0VORQkAzAgCAgpBUlQtTUlSUk9SCQDMCAICCEFSVC1QT01QCQDMCAICCEFSVC1DQVBFCQDMCAICB0FSVC1IQVQJAMwIAgIOQVJULUNVU1RPTURVQ0sFA25pbAAJYXJ0ZWZhY3RzCQDMCAICCkFSVC1YTUlTVEwJAMwIAgIIQVJULVhIQVQJAMwIAgIKQVJULVhTQ0FSRgkAzAgCAgxBUlQtWFNXRUFURVIJAMwIAgIJQVJULVhTT0NLCQDMCAICCUFSVC1YVFJFRQUDbmlsAAthbGxBcnRlZmFjdAkAzggCBQlhcnRlZmFjdHMFDG9sZEFydGVmYWN0cwENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCbCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAQ9nZXRSYW5kb21OdW1iZXIECHZhcmlhbnRzBHR4SWQMZmluaXNoSGVpZ2h0Bm9mZnNldAQPcmFuZG9tU2VlZEJsb2NrCQEFdmFsdWUBCQDtBwEJAGUCBQxmaW5pc2hIZWlnaHQAAQQKcmFuZG9tSGFzaAkA9wMBCQDLAQIJAMsBAgEEHEF95gUEdHhJZAkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYJAGoCCQCyCQIFCnJhbmRvbUhhc2gFBm9mZnNldAUIdmFyaWFudHMBEWdldFJhbmRvbUFydGVmYWN0AgVib3hJZAFoBAxyYW5kb21OdW1iZXIJAQ9nZXRSYW5kb21OdW1iZXIEAAYFBWJveElkBQFoAAEJAJEDAgUJYXJ0ZWZhY3RzBQxyYW5kb21OdW1iZXIBDmdldFJhbmRvbUdlbmVzAgR0eElkAWgEDHJhbmRvbU51bWJlcgkBD2dldFJhbmRvbU51bWJlcgQABgUEdHhJZAUBaAACCQCRAwIFCWZyZWVHZW5lcwUMcmFuZG9tTnVtYmVyARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwECFHN0YXRpY19vcmFjbGVBZGRyZXNzARFnZXRCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIVc3RhdGljX2JyZWVkZXJBZGRyZXNzAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIRc3RhdGljX2VnZ0Fzc2V0SWQBE2dldFRydXN0ZWRDb250cmFjdHMACQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIXc3RhdGljX3RydXN0ZWRDb250cmFjdHMBEWdldFJlYmlydGhBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfcmViaXJ0aEFkZHJlc3MBCHByaWNlS2V5AQRpdGVtCQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0BCG1heFNhbGVzAQRpdGVtCQCsAgIJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQIKX21heF9zYWxlcwEEc2FsZQEEaXRlbQkArAICCQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0CBV9zYWxlAQ5ncm93UGVyY2VudGFnZQEEaXRlbQkArAICCQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0CE19ncm93aW5nX3BlcmNlbnRhZ2UBBHNvbGQBBGl0ZW0JAKwCAgkArAICAhBkaXJlY3RfY29zbWV0aWNfBQRpdGVtAgVfc29sZAEJbGFzdFByaWNlAQRpdGVtCQCsAgIJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQILX2xhc3RfcHJpY2UBF3RyeUdldENvc21ldGljSXRlbVByaWNlAQRpdGVtBANrZXkJAQhwcmljZUtleQEFBGl0ZW0EByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQkAAgECMElUR0NJUDogVGhpcyBpdGVtIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN0b3JlIQEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIcd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEObWFuaXB1bGF0ZU5hbWUDCWFzc2V0TmFtZQhwb3NpdGlvbgRjaGFyCQCsAgIJAKwCAgkArwICBQlhc3NldE5hbWUJAGUCBQhwb3NpdGlvbgABBQRjaGFyCQCyAgIFCWFzc2V0TmFtZQkAZQIAEAUIcG9zaXRpb24BEGl0ZW1Jc0luQ29vbERvd24CDGFydGVmYWN0TmFtZQphcnRlZmFjdElkBBF1bnN0YWtlSGVpZ2h0TGFzdAkBDXRyeUdldEludGVnZXIBCQEQa2V5VW5zdGFrZUhlaWdodAIFDGFydGVmYWN0TmFtZQUKYXJ0ZWZhY3RJZAQOY29vbGRvd25QZXJpb2QA8AEDCQBmAgUGaGVpZ2h0CQBkAgURdW5zdGFrZUhlaWdodExhc3QFDmNvb2xkb3duUGVyaW9kBwYQAWkBDWRpcmVjdEJ1eUl0ZW0BCGl0ZW1OYW1lBAliYXNlUHJpY2UJARd0cnlHZXRDb3NtZXRpY0l0ZW1QcmljZQEFCGl0ZW1OYW1lBARncm93CQENdHJ5R2V0SW50ZWdlcgEJAQ5ncm93UGVyY2VudGFnZQEFCGl0ZW1OYW1lAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgEJAQRzYWxlAQUIaXRlbU5hbWUJAAIBCQCsAgICH0lEQkk6IEl0ZW0gbm90IGZvciBzYWxlIGFueW1vcmUJAQRzYWxlAQUIaXRlbU5hbWUEDW1heFNhbGVzVmFsdWUJAQ10cnlHZXRJbnRlZ2VyAQkBCG1heFNhbGVzAQUIaXRlbU5hbWUECXNvbGRWYWx1ZQkBDXRyeUdldEludGVnZXIBCQEEc29sZAEFCGl0ZW1OYW1lBAVwcmljZQMJAAACBQRncm93AAAFCWJhc2VQcmljZQkAZAIFCWJhc2VQcmljZQkAaAIJAGkCBQliYXNlUHJpY2UAZAkAaAIFCXNvbGRWYWx1ZQUEZ3JvdwMDCQECIT0CBQ1tYXhTYWxlc1ZhbHVlAAAJAGcCBQlzb2xkVmFsdWUFDW1heFNhbGVzVmFsdWUHCQACAQIYSURCSTogTWF4IGVkaXRpb25zIHNvbGQhBBNhbW91bnRQYWlkQnlDb3Vwb25zAAAECWxlZnRUb1BheQkAZQIFBXByaWNlBRNhbW91bnRQYWlkQnlDb3Vwb25zBAdwYXltZW50AwkBAiE9AgUJbGVmdFRvUGF5AAAEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQIBQxmaXJzdFBheW1lbnQGYW1vdW50AwkBAiE9AggFDGZpcnN0UGF5bWVudAdhc3NldElkCQENZ2V0RWdnQXNzZXRJZAAJAAIBCQCsAgICQklEQkk6IFlvdSBjYW4gYXR0YWNoIG9ubHkgRUdHIHRva2VucyB3aXRoIHRoZSBmb2xsb3dpbmcgYXNzZXQgaWQ6IAkA2AQBCQENZ2V0RWdnQXNzZXRJZAADCQECIT0CBQZhbW91bnQFCWxlZnRUb1BheQkAAgEJAKwCAgIqSURCSTogUGxlYXNlIGF0dGFjaCB0aGUgZXhhY3QgYXNzZXQgYW1vdW50CQCkAwEFBXByaWNlBQlsZWZ0VG9QYXkAAAMJAAACBQdwYXltZW50BQdwYXltZW50BAd0eElkU3RyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEB2FkZHJlc3MIBQFpDG9yaWdpbkNhbGxlcgQIYXJ0ZWZhY3QJAMMIBwUIaXRlbU5hbWUJAKwCAgIiTkZUIGFydGVmYWN0IG9mIFdhdmVzIER1Y2tzIGdhbWU6IAUIaXRlbU5hbWUAAQAABwUEdW5pdAAABAphcnRlZmFjdElkCQC4CAEFCGFydGVmYWN0CQCUCgIJAMwIAgUIYXJ0ZWZhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICCWFydGVmYWN0XwkA2AQBBQphcnRlZmFjdElkAgVfdHlwZQUIaXRlbU5hbWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlsYXN0UHJpY2UBBQhpdGVtTmFtZQUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQRzb2xkAQUIaXRlbU5hbWUJAGQCBQlzb2xkVmFsdWUAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzAAEFCmFydGVmYWN0SWQFA25pbAkA2AQBBQphcnRlZmFjdElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD21hbmlwdWxhdGVCb29zdAIFYm9vc3QGZHVja0lkBBBhbGxvd2VkQ29udHJhY3RzCQETZ2V0VHJ1c3RlZENvbnRyYWN0cwAEFGFsbG93ZWRDb250cmFjdHNMaXN0CQC1CQIFEGFsbG93ZWRDb250cmFjdHMCATsECmRhcHBUb0NhbGwJAKUIAQgFAWkGY2FsbGVyAwkAAAIJAM8IAgUUYWxsb3dlZENvbnRyYWN0c0xpc3QFCmRhcHBUb0NhbGwFBHVuaXQJAAIBAjRJTUI6IFRoaXMgc21hcnQgY29udHJhY3QgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgYm9vc3QhBANrZXkJARRrZXlFeHRlcm5hbEJvb3N0RHVjawEFBmR1Y2tJZAQLYWN0aXZlQm9vc3QJAQ10cnlHZXRJbnRlZ2VyAQUDa2V5BAhuZXdCb29zdAkAZAIFC2FjdGl2ZUJvb3N0BQVib29zdAMJAGYCAAAFCG5ld0Jvb3N0CQACAQJASU1COiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGJvb3N0LCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zIQkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQhuZXdCb29zdAUDbmlsAWkBFm1hbmlwdWxhdGVCb29zdEFjY291bnQCBWJvb3N0B2FkZHJlc3MEEGFsbG93ZWRDb250cmFjdHMJARNnZXRUcnVzdGVkQ29udHJhY3RzAAQUYWxsb3dlZENvbnRyYWN0c0xpc3QJALUJAgUQYWxsb3dlZENvbnRyYWN0cwIBOwQKZGFwcFRvQ2FsbAkApQgBCAUBaQZjYWxsZXIDCQAAAgkAzwgCBRRhbGxvd2VkQ29udHJhY3RzTGlzdAUKZGFwcFRvQ2FsbAUEdW5pdAkAAgECNUlNQkE6IFRoaXMgc21hcnQgY29udHJhY3QgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgYm9vc3QhBANrZXkJARdrZXlFeHRlcm5hbEJvb3N0QWRkcmVzcwEFB2FkZHJlc3MEC2FjdGl2ZUJvb3N0CQENdHJ5R2V0SW50ZWdlcgEFA2tleQQIbmV3Qm9vc3QJAGQCBQthY3RpdmVCb29zdAUFYm9vc3QDCQBmAgAABQhuZXdCb29zdAkAAgECQUlNQkE6IFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYm9vc3QsIHBsZWFzZSBjb250YWN0IHRoZSBhZG1pbnMhCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFCG5ld0Jvb3N0BQNuaWwBaQEUY2hlY2tBcnRlZmFjdERldGFpbHMBB2Fzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQJYXNzZXROYW1lCQEFdmFsdWUBCAUFYXNzZXQEbmFtZQMDAwkBD2NvbnRhaW5zRWxlbWVudAIFC2FsbEFydGVmYWN0BQlhc3NldE5hbWUGCQEJaXNEZWZpbmVkAQkBF3RyeUdldENvc21ldGljSXRlbVByaWNlAQUJYXNzZXROYW1lCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwcJAJQKAgUDbmlsBQlhc3NldE5hbWUJAAIBAhBJbnZhbGlkIGFydGVmYWN0AWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlBQNuaWwBaQEaY2FsY3VsYXRlRmFybWluZ1Bvd2VyQm9vc3QCBmR1Y2tJZAdhZGRyZXNzBBFleHRlcm5hbEJvb3N0RHVjawkBDXRyeUdldEludGVnZXIBCQEUa2V5RXh0ZXJuYWxCb29zdER1Y2sBBQZkdWNrSWQEFGV4dGVybmFsQm9vc3RBZGRyZXNzCQENdHJ5R2V0SW50ZWdlcgEJARdrZXlFeHRlcm5hbEJvb3N0QWRkcmVzcwEFB2FkZHJlc3MECnRvdGFsQm9vc3QJAGQCBRFleHRlcm5hbEJvb3N0RHVjawUUZXh0ZXJuYWxCb29zdEFkZHJlc3MJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZkdWNrSWQCC19sYXN0X2Jvb3N0BQp0b3RhbEJvb3N0BQNuaWwFCnRvdGFsQm9vc3QBaQEJZml4ZWRHZW5lAwd0eElkU3RyD3BhcmVudEZpeGVkR2VuZRFwb3NpdGlvbkZpeGVkR2VuZQQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDGZpcnN0QXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQDCQECIT0CCAUMZmlyc3RQYXltZW50BmFtb3VudAABCQACAQITTkZUIGlzIG5vdCBhdHRhY2hlZAQIYXJ0ZWZhY3QJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUMZmlyc3RBc3NldElkBQNuaWwFA25pbAMJAAACBQhhcnRlZmFjdAUIYXJ0ZWZhY3QDCQECIT0CBQhhcnRlZmFjdAILQVJULUZJWEdFTkUJAAIBAilZb3UgbmVlZCB0byBhdHRhY2ggYSBBUlQtRklYR0VORSBhcnRlZmFjdAQEdHhJZAkA2QQBBQd0eElkU3RyBA9maW5pc2hIZWlnaHRLZXkJARlnZXRQcm9jZXNzRmluaXNoSGVpZ2h0S2V5AgkApQgBCAUBaQZjYWxsZXIFBHR4SWQEE3Byb2Nlc3NGaW5pc2hIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIJARFnZXRCcmVlZGVyQWRkcmVzcwAFD2ZpbmlzaEhlaWdodEtleQQPZHVja0dlbmVzU3RyaW5nCQEIYXNTdHJpbmcBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACDGdlbmVyYXRlRHVjawkAzAgCBQR0eElkCQDMCAIFE3Byb2Nlc3NGaW5pc2hIZWlnaHQJAMwIAgUPcGFyZW50Rml4ZWRHZW5lCQDMCAIFEXBvc2l0aW9uRml4ZWRHZW5lCQDMCAICAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFD2R1Y2tHZW5lc1N0cmluZwUPZHVja0dlbmVzU3RyaW5nBARjYWxsCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACF2ZpbmlzaER1Y2tIYXRjaGluZ0l0ZW1zCQDMCAIFB3R4SWRTdHIJAMwIAgUPZHVja0dlbmVzU3RyaW5nBQNuaWwFA25pbAMJAAACBQRjYWxsBQRjYWxsCQDMCAIJAQRCdXJuAgkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkAAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhmcmVlR2VuZQEHdHhJZFN0cgQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDGZpcnN0QXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQDCQECIT0CCAUMZmlyc3RQYXltZW50BmFtb3VudAABCQACAQITTkZUIGlzIG5vdCBhdHRhY2hlZAQIYXJ0ZWZhY3QJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUMZmlyc3RBc3NldElkBQNuaWwFA25pbAMJAAACBQhhcnRlZmFjdAUIYXJ0ZWZhY3QDCQECIT0CBQhhcnRlZmFjdAIMQVJULUZSRUVHRU5FCQACAQIqWW91IG5lZWQgdG8gYXR0YWNoIGEgQVJULUZSRUVHRU5FIGFydGVmYWN0BAR0eElkCQDZBAEFB3R4SWRTdHIED2ZpbmlzaEhlaWdodEtleQkBGWdldFByb2Nlc3NGaW5pc2hIZWlnaHRLZXkCCQClCAEIBQFpBmNhbGxlcgUEdHhJZAQTcHJvY2Vzc0ZpbmlzaEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgkBEWdldEJyZWVkZXJBZGRyZXNzAAUPZmluaXNoSGVpZ2h0S2V5BAxzZWxlY3RlZEdlbmUJAQ5nZXRSYW5kb21HZW5lcwIFBHR4SWQFE3Byb2Nlc3NGaW5pc2hIZWlnaHQEDnJhbmRvbVBvc2l0aW9uCQEPZ2V0UmFuZG9tTnVtYmVyBAAHBQR0eElkBRNwcm9jZXNzRmluaXNoSGVpZ2h0AAMED2R1Y2tHZW5lc1N0cmluZwkBCGFzU3RyaW5nAQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAgxnZW5lcmF0ZUR1Y2sJAMwIAgUEdHhJZAkAzAgCBRNwcm9jZXNzRmluaXNoSGVpZ2h0CQDMCAIAAAkAzAgCAAAJAMwIAgUMc2VsZWN0ZWRHZW5lCQDMCAIFDnJhbmRvbVBvc2l0aW9uBQNuaWwFA25pbAMJAAACBQ9kdWNrR2VuZXNTdHJpbmcFD2R1Y2tHZW5lc1N0cmluZwQEY2FsbAkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhdmaW5pc2hEdWNrSGF0Y2hpbmdJdGVtcwkAzAgCBQd0eElkU3RyCQDMCAIFD2R1Y2tHZW5lc1N0cmluZwUDbmlsBQNuaWwDCQAAAgUEY2FsbAUEY2FsbAkAzAgCCQEEQnVybgIJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAABBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY29weUR1Y2sABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAxmaXJzdEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBAhjaGlsZHJlbgkBBWFzSW50AQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFDGZpcnN0QXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuAwMJAQIhPQIIBQxmaXJzdFBheW1lbnQGYW1vdW50AAEGCQECIT0CCAUNc2Vjb25kUGF5bWVudAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQECGFydGVmYWN0CQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQkBBXZhbHVlAQgFDXNlY29uZFBheW1lbnQHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUIYXJ0ZWZhY3QFCGFydGVmYWN0AwkBAiE9AgUIYXJ0ZWZhY3QCCkFSVC1NSVJST1IJAAIBAihZb3UgbmVlZCB0byBhdHRhY2ggYSBBUlQtTUlSUk9SIGFydGVmYWN0BAduZnRJbmZvCQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAQJYXNzZXQxR2VuCQC1CQIIBQduZnRJbmZvBG5hbWUCAAMDCQAAAgkAkQMCBQlhc3NldDFHZW4ADgIBRwYJAAACCQCRAwIFCWFzc2V0MUdlbgAOAgFKCQACAQIaWW91IGNhbid0IG1pcnJvciB0aGlzIGR1Y2sEB2R1Y2tHZW4IBQduZnRJbmZvBG5hbWUEBGNhbGwJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWY3JlYXRlRHVja1NwZWNpYWxHZW5lcwkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIFB2R1Y2tHZW4JAMwIAgUIY2hpbGRyZW4FA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAkAzAgCCQEEQnVybgIJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQAAQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWFkZEFydGVGYWN0VG9EdWNrAAQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDXNlY29uZFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQMZmlyc3RBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAMDCQECIT0CCAUMZmlyc3RQYXltZW50BmFtb3VudAABBgkBAiE9AggFDXNlY29uZFBheW1lbnQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkBAhjaGlsZHJlbgkBBWFzSW50AQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFDGZpcnN0QXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuAwkAAAIFCGNoaWxkcmVuAAAJAAIBAiRZb3UgY2FuIG9ubHkgcGljayBhIHN0ZXJpbGUgTkZULWR1Y2sECGFydGVmYWN0CQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQkBBXZhbHVlAQgFDXNlY29uZFBheW1lbnQHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUIYXJ0ZWZhY3QFCGFydGVmYWN0AwMJAQIhPQIFCGFydGVmYWN0AghBUlQtWEhBVAkBAiE9AgUIYXJ0ZWZhY3QCCEFSVC1QT01QBwkAAgECMllvdSBuZWVkIHRvIGF0dGFjaCBhIEFSVC1YSEFUIG9yIEFSVC1QT01QIGFydGVmYWN0BAduZnRJbmZvCQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAQJYXNzZXQxR2VuCQC1CQIIBQduZnRJbmZvBG5hbWUCAAMDCQAAAgkAkQMCBQlhc3NldDFHZW4ADgIBRwYJAAACCQCRAwIFCWFzc2V0MUdlbgAOAgFKCQACAQIaWW91IGNhbid0IG1pcnJvciB0aGlzIGR1Y2sDAwkAAAIJAJEDAgUJYXNzZXQxR2VuAAUCAVMGCQAAAgkAkQMCBQlhc3NldDFHZW4ABQIBVAkAAgECH3lvdSBhbHJlYWR5IGF0dGFjaGVkIGEgYXJ0ZWZhY3QEBGNoYXIDCQAAAgUIYXJ0ZWZhY3QCCEFSVC1YSEFUAgFUAwkAAAIFCGFydGVmYWN0AghBUlQtUE9NUAIBUwkAAgECD05vIGNoYXIgZGVmaW5lZAQKb2xkRHVja0dlbggFB25mdEluZm8EbmFtZQQKb2xkRmFybUdlbgkBCGFzU3RyaW5nAQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAg5nZXRHZW5Gcm9tTmFtZQkAzAgCBQpvbGREdWNrR2VuBQNuaWwFA25pbAMJAAACBQpvbGRGYXJtR2VuBQpvbGRGYXJtR2VuBAdkdWNrR2VuCQEObWFuaXB1bGF0ZU5hbWUDBQpvbGREdWNrR2VuAAYFBGNoYXIEBGNhbGwJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWY3JlYXRlRHVja1NwZWNpYWxHZW5lcwkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIFB2R1Y2tHZW4JAMwIAgUIY2hpbGRyZW4FA25pbAUDbmlsAwkAAAIFBGNhbGwFBGNhbGwECmNhbGxSZWR1Y2UJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIMcmVkdWNlUmFyaXR5CQDMCAIFDGZpcnN0QXNzZXRJZAkAzAgCBQpvbGRGYXJtR2VuBQNuaWwFA25pbAMJAAACBQpjYWxsUmVkdWNlBQpjYWxsUmVkdWNlCQDMCAIJAQRCdXJuAgkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkAAEJAMwIAgkBBEJ1cm4CCQEFdmFsdWUBCAUNc2Vjb25kUGF5bWVudAdhc3NldElkAAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdwcmVJbml0AAkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3RhdGljX0FSVC1MQUtFX2Zhcm1pbmdTbG90cwDIAQkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3RhdGljX0FSVC1MQUtFX2Zhcm1pbmdCb29zdAACCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh1zdGF0aWNfQVJULUhPVVNFX2Zhcm1pbmdTbG90cwAECQDMCAIJAQxJbnRlZ2VyRW50cnkCAh1zdGF0aWNfQVJULUhPVVNFX2Zhcm1pbmdCb29zdAAeCQDMCAIJAQxJbnRlZ2VyRW50cnkCAiBzdGF0aWNfQVJULUJJR0hPVVNFX2Zhcm1pbmdTbG90cwAKCQDMCAIJAQxJbnRlZ2VyRW50cnkCAiBzdGF0aWNfQVJULUJJR0hPVVNFX2Zhcm1pbmdCb29zdAAPBQNuaWwBaQENaXNzdWVBcnRlZmFjdAIEdHlwZQhyZWNlaXZlcgMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBEWdldFJlYmlydGhBZGRyZXNzAAcJAAIBAgphZG1pbiBvbmx5BAd0eElkU3RyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEB2FkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQhyZWNlaXZlcgQIYXJ0ZWZhY3QJAMMIBwUEdHlwZQIqTkZUIGFydGVmYWN0IG9mIFdhdmVzIER1Y2tzIGdhbWUuIERyb3AgIzIuAAEAAAcFBHVuaXQAAAQKYXJ0ZWZhY3RJZAkAuAgBBQhhcnRlZmFjdAkAlAoCCQDMCAIFCGFydGVmYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAglhcnRlZmFjdF8JANgEAQUKYXJ0ZWZhY3RJZAIFX3R5cGUFBHR5cGUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUHYWRkcmVzcwABBQphcnRlZmFjdElkBQNuaWwJANgEAQUKYXJ0ZWZhY3RJZAFpAQdzZXRMb2NrAQFuAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAzAgCCQEMSW50ZWdlckVudHJ5AgINZ2xvYmFsX2xvY2tlZAUBbgUDbmlsCQACAQIKYWRtaW4gb25seQFpAQtidXlBcnRlZmFjdAADCQBmAggFCWxhc3RCbG9jawl0aW1lc3RhbXAAgMyNwtwvCQACAQIhVGhlcmUgYXJlIG5vIGFjdGl2ZSBzYWxlcyBub3cuLi4gAwkAZgIJAQ10cnlHZXRJbnRlZ2VyAQINZ2xvYmFsX2xvY2tlZAAACQACAQIeY29udHJhY3QgaXMgdGVtcG9yYXJpbHkgbG9ja2VkAwkAZwIJAQ10cnlHZXRJbnRlZ2VyAQIQZ2xvYmFsX2FydEFtb3VudAUOYXJ0ZWZhY3RzTGltaXQJAAIBAhJTT0xET1VUISEhIEh1cnJheSEDAwkAZgIAgP7vgNwvCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEFCmRldkFkZHJlc3MHCQACAQIMVG9vIGVhcmx5Li4uBAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQACAQkArAICAjxZb3UgY2FuIGF0dGFjaCBvbmx5IEVHRyB0b2tlbnMgd2l0aCB0aGUgZm9sbG93aW5nIGFzc2V0IGlkOiAJANgEAQkBDWdldEVnZ0Fzc2V0SWQAAwkAZgIFCmVnZ3NOZWVkZWQIBQxmaXJzdFBheW1lbnQGYW1vdW50CQACAQkArAICAkRUbyBoYXRjaCBhIGR1Y2sgeW91IGN1cnJlbnRseSBuZWVkIHRoZSBmb2xsb3dpbmcgYW1vdW50IG9mIEVHR2xldHM6IAkApAMBBQplZ2dzTmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQCB19zdGF0dXMCB3N0YXJ0ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQCDV9maW5pc2hIZWlnaHQJAGQCBQZoZWlnaHQAAgkAzAgCCQEMSW50ZWdlckVudHJ5AgIQZ2xvYmFsX2FydEFtb3VudAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQIQZ2xvYmFsX2FydEFtb3VudAABBQNuaWwBaQESc2V0R2xvYmFsQXJ0QW1vdW50AQluZXdBbW91bnQDAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAAACCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQUKZGV2QWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQZ2xvYmFsX2FydEFtb3VudAUJbmV3QW1vdW50BQNuaWwJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAFpAQ1jbGFpbUFydGVmYWN0AQhib3hJZFN0cgQEdHhJZAkA2QQBBQhib3hJZFN0cgQJc3RhdHVzS2V5CQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwUIYm94SWRTdHICB19zdGF0dXMECWhlaWdodEtleQkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8FCGJveElkU3RyAg1fZmluaXNoSGVpZ2h0AwkBAiE9AgkBEUBleHRyTmF0aXZlKDEwNTgpAQUJc3RhdHVzS2V5AgdzdGFydGVkCQACAQIPY2xhaW1lZCBhbHJlYWR5AwkAZgIJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlaWdodEtleQUGaGVpZ2h0CQACAQIUeW91IGNhbm5vdCBjbGFpbSB5ZXQEB2FydFR5cGUJARFnZXRSYW5kb21BcnRlZmFjdAIFBHR4SWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlaWdodEtleQQFYXNzZXQJAMMIBwUHYXJ0VHlwZQIiQXJ0ZWZhY3Qgb2YgV2F2ZXMgRHVja3MgbWV0YXZlcnNlLgABAAAHBQR1bml0CQERQGV4dHJOYXRpdmUoMTA1NSkBBQloZWlnaHRLZXkEB2Fzc2V0SWQJALgIAQUFYXNzZXQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJc3RhdHVzS2V5BQdhcnRUeXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfBQhib3hJZFN0cgILX2FydGVmYWN0SWQJANgEAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJANgEAQUHYXNzZXRJZAIFX3R5cGUFB2FydFR5cGUJAMwIAgUFYXNzZXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXn18Je3", "height": 3389735, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GFH1sCds8wbgQmyaFbo9G2FbwTBcBsWZmddCA3eM7XU2 Next: HYDyawFpepNbCK5BgaD4mra8BvYFSjvse4LsfrTqdeEY Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
55
66
77 func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
88
99
1010 func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
1111
1212
1313 func keyExternalBoostAddress (address) = (address + "_user_external_boost")
1414
1515
1616 func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
1717
1818
1919 let devAddress = base58'3P44yqcpfhPF2iC1nptm2ZJCTaN7VYhz9og'
2020
2121 let eggsNeeded = (3 * 100000000)
2222
2323 let artefactsLimit = (301 + 600)
2424
2525 let freeGenes = ["A", "B", "C", "D", "E", "F"]
2626
2727 let oldArtefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"]
2828
2929 let artefacts = ["ART-XMISTL", "ART-XHAT", "ART-XSCARF", "ART-XSWEATER", "ART-XSOCK", "ART-XTREE"]
3030
3131 let allArtefact = (artefacts ++ oldArtefacts)
3232
3333 func tryGetBoolean (key) = match getBoolean(this, key) {
3434 case b: Boolean =>
3535 b
3636 case _ =>
3737 false
3838 }
3939
4040
4141 func tryGetString (key) = match getString(this, key) {
4242 case a: String =>
4343 a
4444 case _ =>
4545 ""
4646 }
4747
4848
4949 func tryGetInteger (key) = match getInteger(this, key) {
5050 case a: Int =>
5151 a
5252 case _ =>
5353 0
5454 }
5555
5656
5757 func getRandomNumber (variants,txId,finishHeight,offset) = {
5858 let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
5959 let randomHash = sha256(((base58'items' + txId) + value(randomSeedBlock.vrf)))
6060 (toInt(randomHash, offset) % variants)
6161 }
6262
6363
6464 func getRandomArtefact (boxId,h) = {
6565 let randomNumber = getRandomNumber(6, boxId, h, 1)
6666 artefacts[randomNumber]
6767 }
6868
6969
7070 func getRandomGenes (txId,h) = {
7171 let randomNumber = getRandomNumber(6, txId, h, 2)
7272 freeGenes[randomNumber]
7373 }
7474
7575
7676 func tryGetStringExternal (address,key) = match getString(address, key) {
7777 case a: String =>
7878 a
7979 case _ =>
8080 ""
8181 }
8282
8383
8484 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
8585
8686
8787 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
8888
8989
9090 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
9191
9292
9393 func getTrustedContracts () = tryGetStringExternal(getOracle(), "static_trustedContracts")
9494
9595
9696 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
9797
9898
9999 func priceKey (item) = ("direct_cosmetic_" + item)
100100
101101
102102 func maxSales (item) = (("direct_cosmetic_" + item) + "_max_sales")
103103
104104
105105 func sale (item) = (("direct_cosmetic_" + item) + "_sale")
106106
107107
108108 func growPercentage (item) = (("direct_cosmetic_" + item) + "_growing_percentage")
109109
110110
111111 func sold (item) = (("direct_cosmetic_" + item) + "_sold")
112112
113113
114114 func lastPrice (item) = (("direct_cosmetic_" + item) + "_last_price")
115115
116116
117117 func tryGetCosmeticItemPrice (item) = {
118118 let key = priceKey(item)
119119 match getInteger(this, key) {
120120 case a: Int =>
121121 a
122122 case _ =>
123123 throw("ITGCIP: This item is not available in the store!")
124124 }
125125 }
126126
127127
128128 func asString (value) = match value {
129129 case string: String =>
130130 string
131131 case _ =>
132132 throw("wrong type, expected: String")
133133 }
134134
135135
136136 func asInt (value) = match value {
137137 case int: Int =>
138138 int
139139 case _ =>
140140 throw("wrong type, expected: Int")
141141 }
142142
143143
144144 func manipulateName (assetName,position,char) = ((take(assetName, (position - 1)) + char) + takeRight(assetName, (16 - position)))
145145
146146
147147 func itemIsInCoolDown (artefactName,artefactId) = {
148148 let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
149149 let cooldownPeriod = 240
150150 if ((height > (unstakeHeightLast + cooldownPeriod)))
151151 then false
152152 else true
153153 }
154154
155155
156156 @Callable(i)
157157 func directBuyItem (itemName) = {
158158 let basePrice = tryGetCosmeticItemPrice(itemName)
159159 let grow = tryGetInteger(growPercentage(itemName))
160160 if (!(tryGetBoolean(sale(itemName))))
161161 then throw(("IDBI: Item not for sale anymore" + sale(itemName)))
162162 else {
163163 let maxSalesValue = tryGetInteger(maxSales(itemName))
164164 let soldValue = tryGetInteger(sold(itemName))
165165 let price = if ((grow == 0))
166166 then basePrice
167167 else (basePrice + ((basePrice / 100) * (soldValue * grow)))
168168 if (if ((maxSalesValue != 0))
169169 then (soldValue >= maxSalesValue)
170170 else false)
171171 then throw("IDBI: Max editions sold!")
172172 else {
173173 let amountPaidByCoupons = 0
174174 let leftToPay = (price - amountPaidByCoupons)
175175 let payment = if ((leftToPay != 0))
176176 then {
177177 let firstPayment = value(i.payments[0])
178178 let amount = firstPayment.amount
179179 if ((firstPayment.assetId != getEggAssetId()))
180180 then throw(("IDBI: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
181181 else if ((amount != leftToPay))
182182 then throw(("IDBI: Please attach the exact asset amount" + toString(price)))
183183 else leftToPay
184184 }
185185 else 0
186186 if ((payment == payment))
187187 then {
188188 let txIdStr = toBase58String(i.transactionId)
189189 let address = i.originCaller
190190 let artefact = Issue(itemName, ("NFT artefact of Waves Ducks game: " + itemName), 1, 0, false, unit, 0)
191191 let artefactId = calculateAssetId(artefact)
192192 $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), itemName), IntegerEntry(lastPrice(itemName), price), IntegerEntry(sold(itemName), (soldValue + 1)), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
193193 }
194194 else throw("Strict value is not equal to itself.")
195195 }
196196 }
197197 }
198198
199199
200200
201201 @Callable(i)
202202 func manipulateBoost (boost,duckId) = {
203203 let allowedContracts = getTrustedContracts()
204204 let allowedContractsList = split(allowedContracts, ";")
205205 let dappToCall = toString(i.caller)
206206 if ((indexOf(allowedContractsList, dappToCall) == unit))
207207 then throw("IMB: This smart contract can't manipulate the boost!")
208208 else {
209209 let key = keyExternalBoostDuck(duckId)
210210 let activeBoost = tryGetInteger(key)
211211 let newBoost = (activeBoost + boost)
212212 if ((0 > newBoost))
213213 then throw("IMB: Something went wrong with boost, please contact the admins!")
214214 else [IntegerEntry(key, newBoost)]
215215 }
216216 }
217217
218218
219219
220220 @Callable(i)
221221 func manipulateBoostAccount (boost,address) = {
222222 let allowedContracts = getTrustedContracts()
223223 let allowedContractsList = split(allowedContracts, ";")
224224 let dappToCall = toString(i.caller)
225225 if ((indexOf(allowedContractsList, dappToCall) == unit))
226226 then throw("IMBA: This smart contract can't manipulate the boost!")
227227 else {
228228 let key = keyExternalBoostAddress(address)
229229 let activeBoost = tryGetInteger(key)
230230 let newBoost = (activeBoost + boost)
231231 if ((0 > newBoost))
232232 then throw("IMBA: Something went wrong with boost, please contact the admins!")
233233 else [IntegerEntry(key, newBoost)]
234234 }
235235 }
236236
237237
238238
239239 @Callable(i)
240240 func checkArtefactDetails (assetId) = {
241241 let asset = value(assetInfo(fromBase58String(assetId)))
242242 let assetName = value(asset.name)
243243 if (if (if (containsElement(allArtefact, assetName))
244244 then true
245245 else isDefined(tryGetCosmeticItemPrice(assetName)))
246246 then (asset.issuer == this)
247247 else false)
248248 then $Tuple2(nil, assetName)
249249 else throw("Invalid artefact")
250250 }
251251
252252
253253
254254 @Callable(i)
255255 func configureOracle (oracle) = if ((i.caller != this))
256256 then throw("admin only")
257257 else [StringEntry("static_oracleAddress", oracle)]
258258
259259
260260
261261 @Callable(i)
262262 func calculateFarmingPowerBoost (duckId,address) = {
263263 let externalBoostDuck = tryGetInteger(keyExternalBoostDuck(duckId))
264264 let externalBoostAddress = tryGetInteger(keyExternalBoostAddress(address))
265265 let totalBoost = (externalBoostDuck + externalBoostAddress)
266266 $Tuple2([IntegerEntry((duckId + "_last_boost"), totalBoost)], totalBoost)
267267 }
268268
269269
270270
271271 @Callable(i)
272272 func fixedGene (txIdStr,parentFixedGene,positionFixedGene) = {
273273 let firstPayment = value(i.payments[0])
274274 let firstAssetId = toBase58String(value(firstPayment.assetId))
275275 if ((firstPayment.amount != 1))
276276 then throw("NFT is not attached")
277277 else {
278278 let artefact = asString(invoke(this, "checkArtefactDetails", [firstAssetId], nil))
279279 if ((artefact == artefact))
280280 then if ((artefact != "ART-FIXGENE"))
281281 then throw("You need to attach a ART-FIXGENE artefact")
282282 else {
283283 let txId = fromBase58String(txIdStr)
284284 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
285285 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
286286 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txId, processFinishHeight, parentFixedGene, positionFixedGene, "", 0], nil))
287287 if ((duckGenesString == duckGenesString))
288288 then {
289289 let call = invoke(getBreederAddress(), "finishDuckHatchingItems", [txIdStr, duckGenesString], nil)
290290 if ((call == call))
291291 then [Burn(value(firstPayment.assetId), 1)]
292292 else throw("Strict value is not equal to itself.")
293293 }
294294 else throw("Strict value is not equal to itself.")
295295 }
296296 else throw("Strict value is not equal to itself.")
297297 }
298298 }
299299
300300
301301
302302 @Callable(i)
303303 func freeGene (txIdStr) = {
304304 let firstPayment = value(i.payments[0])
305305 let firstAssetId = toBase58String(value(firstPayment.assetId))
306306 if ((firstPayment.amount != 1))
307307 then throw("NFT is not attached")
308308 else {
309309 let artefact = asString(invoke(this, "checkArtefactDetails", [firstAssetId], nil))
310310 if ((artefact == artefact))
311311 then if ((artefact != "ART-FREEGENE"))
312312 then throw("You need to attach a ART-FREEGENE artefact")
313313 else {
314314 let txId = fromBase58String(txIdStr)
315315 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
316316 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
317317 let selectedGene = getRandomGenes(txId, processFinishHeight)
318318 let randomPosition = getRandomNumber(7, txId, processFinishHeight, 3)
319319 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txId, processFinishHeight, 0, 0, selectedGene, randomPosition], nil))
320320 if ((duckGenesString == duckGenesString))
321321 then {
322322 let call = invoke(getBreederAddress(), "finishDuckHatchingItems", [txIdStr, duckGenesString], nil)
323323 if ((call == call))
324324 then [Burn(value(firstPayment.assetId), 1)]
325325 else throw("Strict value is not equal to itself.")
326326 }
327327 else throw("Strict value is not equal to itself.")
328328 }
329329 else throw("Strict value is not equal to itself.")
330330 }
331331 }
332332
333333
334334
335335 @Callable(i)
336336 func copyDuck () = {
337337 let firstPayment = value(i.payments[0])
338338 let secondPayment = value(i.payments[1])
339339 let firstAssetId = toBase58String(value(firstPayment.assetId))
340340 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [firstAssetId], nil))
341341 if ((children == children))
342342 then if (if ((firstPayment.amount != 1))
343343 then true
344344 else (secondPayment.amount != 1))
345345 then throw("NFT is not attached")
346346 else {
347347 let artefact = asString(invoke(this, "checkArtefactDetails", [toBase58String(value(secondPayment.assetId))], nil))
348348 if ((artefact == artefact))
349349 then if ((artefact != "ART-MIRROR"))
350350 then throw("You need to attach a ART-MIRROR artefact")
351351 else {
352352 let nftInfo = value(assetInfo(value(firstPayment.assetId)))
353353 let asset1Gen = split(nftInfo.name, "")
354354 if (if ((asset1Gen[14] == "G"))
355355 then true
356356 else (asset1Gen[14] == "J"))
357357 then throw("You can't mirror this duck")
358358 else {
359359 let duckGen = nftInfo.name
360360 let call = invoke(getBreederAddress(), "createDuckSpecialGenes", [i.caller.bytes, duckGen, children], nil)
361361 if ((call == call))
362362 then [ScriptTransfer(i.caller, 1, firstPayment.assetId), Burn(value(secondPayment.assetId), 1)]
363363 else throw("Strict value is not equal to itself.")
364364 }
365365 }
366366 else throw("Strict value is not equal to itself.")
367367 }
368368 else throw("Strict value is not equal to itself.")
369369 }
370370
371371
372372
373373 @Callable(i)
374374 func addArteFactToDuck () = {
375375 let firstPayment = value(i.payments[0])
376376 let secondPayment = value(i.payments[1])
377377 let firstAssetId = toBase58String(value(firstPayment.assetId))
378378 if (if ((firstPayment.amount != 1))
379379 then true
380380 else (secondPayment.amount != 1))
381381 then throw("NFT is not attached")
382382 else {
383383 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [firstAssetId], nil))
384384 if ((children == children))
385385 then if ((children == 0))
386386 then throw("You can only pick a sterile NFT-duck")
387387 else {
388388 let artefact = asString(invoke(this, "checkArtefactDetails", [toBase58String(value(secondPayment.assetId))], nil))
389389 if ((artefact == artefact))
390390 then if (if ((artefact != "ART-XHAT"))
391391 then (artefact != "ART-POMP")
392392 else false)
393393 then throw("You need to attach a ART-XHAT or ART-POMP artefact")
394394 else {
395395 let nftInfo = value(assetInfo(value(firstPayment.assetId)))
396396 let asset1Gen = split(nftInfo.name, "")
397397 if (if ((asset1Gen[14] == "G"))
398398 then true
399399 else (asset1Gen[14] == "J"))
400400 then throw("You can't mirror this duck")
401401 else if (if ((asset1Gen[5] == "S"))
402402 then true
403403 else (asset1Gen[5] == "T"))
404404 then throw("you already attached a artefact")
405405 else {
406406 let char = if ((artefact == "ART-XHAT"))
407407 then "T"
408408 else if ((artefact == "ART-POMP"))
409409 then "S"
410410 else throw("No char defined")
411411 let oldDuckGen = nftInfo.name
412412 let oldFarmGen = asString(invoke(getBreederAddress(), "getGenFromName", [oldDuckGen], nil))
413413 if ((oldFarmGen == oldFarmGen))
414414 then {
415415 let duckGen = manipulateName(oldDuckGen, 6, char)
416416 let call = invoke(getBreederAddress(), "createDuckSpecialGenes", [i.caller.bytes, duckGen, children], nil)
417417 if ((call == call))
418418 then {
419419 let callReduce = invoke(getBreederAddress(), "reduceRarity", [firstAssetId, oldFarmGen], nil)
420420 if ((callReduce == callReduce))
421421 then [Burn(value(firstPayment.assetId), 1), Burn(value(secondPayment.assetId), 1)]
422422 else throw("Strict value is not equal to itself.")
423423 }
424424 else throw("Strict value is not equal to itself.")
425425 }
426426 else throw("Strict value is not equal to itself.")
427427 }
428428 }
429429 else throw("Strict value is not equal to itself.")
430430 }
431431 else throw("Strict value is not equal to itself.")
432432 }
433433 }
434434
435435
436436
437437 @Callable(i)
438438 func preInit () = [IntegerEntry("static_ART-LAKE_farmingSlots", 200), IntegerEntry("static_ART-LAKE_farmingBoost", 2), IntegerEntry("static_ART-HOUSE_farmingSlots", 4), IntegerEntry("static_ART-HOUSE_farmingBoost", 30), IntegerEntry("static_ART-BIGHOUSE_farmingSlots", 10), IntegerEntry("static_ART-BIGHOUSE_farmingBoost", 15)]
439439
440440
441441
442442 @Callable(i)
443443 func issueArtefact (type,receiver) = if (if ((i.caller != this))
444444 then (i.caller != getRebirthAddress())
445445 else false)
446446 then throw("admin only")
447447 else {
448448 let txIdStr = toBase58String(i.transactionId)
449449 let address = Address(fromBase58String(receiver))
450450 let artefact = Issue(type, "NFT artefact of Waves Ducks game. Drop #2.", 1, 0, false, unit, 0)
451451 let artefactId = calculateAssetId(artefact)
452452 $Tuple2([artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), type), ScriptTransfer(address, 1, artefactId)], toBase58String(artefactId))
453453 }
454454
455455
456456
457457 @Callable(i)
458458 func setLock (n) = if ((i.caller == this))
459459 then [IntegerEntry("global_locked", n)]
460460 else throw("admin only")
461461
462462
463463
464464 @Callable(i)
465465 func buyArtefact () = if ((lastBlock.timestamp > 1639742400000))
466466 then throw("There are no active sales now... ")
467467 else if ((tryGetInteger("global_locked") > 0))
468468 then throw("contract is temporarily locked")
469469 else if ((tryGetInteger("global_artAmount") >= artefactsLimit))
470470 then throw("SOLDOUT!!! Hurray!")
471471 else if (if ((1639605600000 > lastBlock.timestamp))
472472 then (i.caller != Address(devAddress))
473473 else false)
474474 then throw("Too early...")
475475 else {
476476 let firstPayment = value(i.payments[0])
477477 if ((firstPayment.assetId != getEggAssetId()))
478478 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
479479 else if ((eggsNeeded > firstPayment.amount))
480480 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
481481 else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", (tryGetInteger("global_artAmount") + 1))]
482482 }
483483
484484
485485
486486 @Callable(i)
487487 func setGlobalArtAmount (newAmount) = if (if ((i.caller == this))
488488 then true
489489 else (i.caller == Address(devAddress)))
490490 then [IntegerEntry("global_artAmount", newAmount)]
491491 else throw("Permission denied")
492492
493493
494494
495495 @Callable(i)
496496 func claimArtefact (boxIdStr) = {
497497 let txId = fromBase58String(boxIdStr)
498498 let statusKey = (((toString(i.caller) + "_") + boxIdStr) + "_status")
499499 let heightKey = (((toString(i.caller) + "_") + boxIdStr) + "_finishHeight")
500500 if ((getStringValue(statusKey) != "started"))
501501 then throw("claimed already")
502502 else if ((getIntegerValue(heightKey) > height))
503503 then throw("you cannot claim yet")
504504 else {
505505 let artType = getRandomArtefact(txId, getIntegerValue(heightKey))
506506 let asset = Issue(artType, "Artefact of Waves Ducks metaverse.", 1, 0, false, unit, getIntegerValue(heightKey))
507507 let assetId = calculateAssetId(asset)
508508 [StringEntry(statusKey, artType), StringEntry((((toString(i.caller) + "_") + boxIdStr) + "_artefactId"), toBase58String(assetId)), StringEntry((toBase58String(assetId) + "_type"), artType), asset, ScriptTransfer(i.caller, 1, assetId)]
509509 }
510510 }
511511
512512
513513 @Verifier(tx)
514514 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
515515

github/deemru/w8io/3ef1775 
55.63 ms