tx · CJxBMuAL2KQRwrwrGw3W9AA6PpppM6jmtUv6GeUp1iwa 3N2iycpXC7Fomf1vYLmz9uUWwLR2ZvxRCyw: -0.00700000 Waves 2023.03.22 19:51 [2501483] smart account 3N2iycpXC7Fomf1vYLmz9uUWwLR2ZvxRCyw > SELF 0.00000000 Waves
{ "type": 13, "id": "CJxBMuAL2KQRwrwrGw3W9AA6PpppM6jmtUv6GeUp1iwa", "fee": 700000, "feeAssetId": null, "timestamp": 1679503939399, "version": 2, "chainId": 84, "sender": "3N2iycpXC7Fomf1vYLmz9uUWwLR2ZvxRCyw", "senderPublicKey": "3TJ91ZMX9cHrPAcqCiYodSdxYs8AiLNHyvRJNK1PDc6i", "proofs": [ "iUbRjiCWof51AxQ8KSkxDWZLACsVzhizzFBAdEuzWQW8RdCm9pd2nKypmiVWLUfkkNJ6tiVb3cFXehT3Lfqv4Sk" ], "script": "base64:BgIcCAISABIDCgEIEgUKAwEBCBIDCgEBEgASAwoBCAUABkF1cnVlcwEgOYDtDd1mVUaSfSlX4MdFqsCgGC27Z5CEtJGKkGOZYFwBCW9ubHlPd25lcgEBaQMJAAACCAUEdGhpcwVieXRlcwgIBQFpBmNhbGxlcgVieXRlcwUEdW5pdAkAAgECKU9ubHkgZGFwcCBhY2NvdW50IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24hARBnZXRBdXJ1ZXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFFBheW1lbnQgbm90IGF0dGFjaGVkBAFwCQCRAwIIBQFpCHBheW1lbnRzAAAEByRtYXRjaDAIBQFwB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQHYXNzZXRJZAUHJG1hdGNoMAMJAAACBQdhc3NldElkBQZBdXJ1ZXMIBQFwBmFtb3VudAkAAgECIE9ubHkgYXVydWVzIGFjY2VwdGVkIGFzIHBheW1lbnQhCQACAQIgT25seSBhdXJ1ZXMgYWNjZXB0ZWQgYXMgcGF5bWVudCEBDGdldEFzc2V0RGF0YQEHYXNzZXRJZAMJAAACBQdhc3NldElkAAAJAJYKBAIFTWluZXICR1V0aWxpdHkgYnVpbGRpbmcgdGhhdCBoZWxwcyB5b3UgdG8gbWluZSBhdXJ1ZXMgYXQgY2VydGFpbiBibG92ayBoZWlnaHQuALDqAQIHX19taW5lcgMJAAACBQdhc3NldElkAAEJAJYKBAIFQ2Fub24CR1V0aWxpdHkgYnVpbGRpbmcgdGhhdCBoZWxwcyB5b3UgdG8gbWluZSBhdXJ1ZXMgYXQgY2VydGFpbiBibG92ayBoZWlnaHQuAKjDAQIGX2Nhbm9uAwkAAAIFB2Fzc2V0SWQAAgkAlgoEAgRYYm93AkdVdGlsaXR5IGJ1aWxkaW5nIHRoYXQgaGVscHMgeW91IHRvIG1pbmUgYXVydWVzIGF0IGNlcnRhaW4gYmxvdmsgaGVpZ2h0LgCYdQIFX3hib3cDCQAAAgUHYXNzZXRJZAADCQCWCgQCBVRlc2xhAkdVdGlsaXR5IGJ1aWxkaW5nIHRoYXQgaGVscHMgeW91IHRvIG1pbmUgYXVydWVzIGF0IGNlcnRhaW4gYmxvdmsgaGVpZ2h0LgCgnAECBl90ZXNsYQMJAAACBQdhc3NldElkAAQJAAIBAhdZb3UgY2FuJ3QgYnV5IHRvd25oYWxsIQMJAAACBQdhc3NldElkAAUJAJYKBAIGQXJjaGVyAkdVdGlsaXR5IGJ1aWxkaW5nIHRoYXQgaGVscHMgeW91IHRvIG1pbmUgYXVydWVzIGF0IGNlcnRhaW4gYmxvdmsgaGVpZ2h0LgCUIwIHX2FyY2hlcgMJAAACBQdhc3NldElkAAYJAJYKBAIFUm9ib3QCR1V0aWxpdHkgYnVpbGRpbmcgdGhhdCBoZWxwcyB5b3UgdG8gbWluZSBhdXJ1ZXMgYXQgY2VydGFpbiBibG92ayBoZWlnaHQuAPwqAgVfcm9ibwMJAAACBQdhc3NldElkAAcJAJYKBAIJVmFsa3lyaWVlAkdVdGlsaXR5IGJ1aWxkaW5nIHRoYXQgaGVscHMgeW91IHRvIG1pbmUgYXVydWVzIGF0IGNlcnRhaW4gYmxvdmsgaGVpZ2h0LgDwLgIKX3ZhbGt5cmllZQkAAgECD1Vua293biBhc3NldElkIQELZ2V0QXNzZXRLZXkBBG5hbWUDCQAAAgUEbmFtZQIFTWluZXICB19fbWluZXIDCQAAAgUEbmFtZQIFQ2Fub24CBl9jYW5vbgMJAAACBQRuYW1lAgRYYm93AgVfeGJvdwMJAAACBQRuYW1lAgVUZXNsYQIGX3Rlc2xhAwkAAAIFBG5hbWUCCFRvd25oYWxsCQACAQIhWW91IGNhbid0IGFkZCBvciByZW1vdmUgdG93bmhhbGwhAwkAAAIFBG5hbWUCBkFyY2hlcgIHX2FyY2hlcgMJAAACBQRuYW1lAgVSb2JvdAIFX3JvYm8DCQAAAgUEbmFtZQIJVmFsa3lyaWVlAgpfdmFsa3lyaWVlCQACAQINVW5rb3duIEFzc2V0IQYBaQEJc3RhcnRHYW1lAAQHYWRkcmVzcwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAxnYW1lU3RhdGVLZXkJAKwCAgUHYWRkcmVzcwIJX2lzU3RydGVkAwkAAAIJAJsIAgUEdGhpcwUMZ2FtZVN0YXRlS2V5BQR1bml0BAZ1c2VySWQEByRtYXRjaDAJAJoIAgUEdGhpcwIGdXNlcklkAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAkAZAIFAXgAAQAABAd0aElzc3VlCQDCCAUCCFRvd25oYWxsAhFIUSBvZiB5b3VyIGVtcGlyZQABAAAHBAl0aEFzc2V0SWQJANgEAQkAuAgBBQd0aElzc3VlCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDGdhbWVTdGF0ZUtleQYJAMwIAgkBB1JlaXNzdWUDBQZBdXJ1ZXMAoI0GBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAoI0GBQZBdXJ1ZXMJAMwIAgUHdGhJc3N1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkAuAgBBQd0aElzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCXRoQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIGdXNlcklkBQZ1c2VySWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkApAMBBQZ1c2VySWQFB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIJX3Rvd25oYWxsAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIQX3Rvd25oYWxsX3BsYWNlZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCBl9taW5lcgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCDV9taW5lcl9wbGFjZWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAgZfY2Fub24AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAg1fY2Fub25fcGxhY2VkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIFX3hib3cAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAgxfeGJvd19wbGFjZWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAgZfdGVzbGEAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAg1fdGVzbGFfcGxhY2VkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIHX2FyY2hlcgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCBV9yb2JvAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIKX3ZhbGt5cmllZQAABQNuaWwFBHVuaXQJAAIBAhVHYW1lIGFscmVhZHkgc3RhcnRlZCEBaQEIc2F2ZUdhbWUBBGRhdGEEBXRoQ250CQBlAgkAkAMBCQC9CQIFBGRhdGECEGJ1aWxkaW5nSW5kZXgnOjQAAQQIbWluZXJDbnQJAGUCCQCQAwEJAL0JAgUEZGF0YQIQYnVpbGRpbmdJbmRleCc6MAABBAhjYW5vbkNudAkAZQIJAJADAQkAvQkCBQRkYXRhAhBidWlsZGluZ0luZGV4JzoxAAEEB3hib3dDbnQJAGUCCQCQAwEJAL0JAgUEZGF0YQIQYnVpbGRpbmdJbmRleCc6MgABBAh0ZXNsYUNudAkAZQIJAJADAQkAvQkCBQRkYXRhAhBidWlsZGluZ0luZGV4JzozAAEEB2FkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQFdGhBdmEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB2FkZHJlc3MCCV90b3duaGFsbAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQdhZGRyZXNzAhBfdG93bmhhbGxfcGxhY2VkBAhtaW5lckF2YQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHYWRkcmVzcwIGX21pbmVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB2FkZHJlc3MCDV9taW5lcl9wbGFjZWQECGNhbm9uQXZhCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQdhZGRyZXNzAgZfY2Fub24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHYWRkcmVzcwINX2Nhbm9uX3BsYWNlZAQHeGJvd0F2YQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHYWRkcmVzcwIFX3hib3cJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHYWRkcmVzcwIMX3hib3dfcGxhY2VkBAh0ZXNsYUF2YQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHYWRkcmVzcwIGX3Rlc2xhCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB2FkZHJlc3MCDV90ZXNsYV9wbGFjZWQDAwMDAwkAZwIFBXRoQXZhBQV0aENudAkAZwIFCG1pbmVyQXZhBQhtaW5lckNudAcJAGcCBQhjYW5vbkF2YQUIY2Fub25DbnQHCQBnAgUHeGJvd0F2YQUHeGJvd0NudAcJAGcCBQh0ZXNsYUF2YQUIdGVzbGFDbnQHCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdhZGRyZXNzAgVfZGF0YQUEZGF0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAglfdG93bmhhbGwJAGUCBQV0aEF2YQUFdGhDbnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIQX3Rvd25oYWxsX3BsYWNlZAUFdGhDbnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIGX21pbmVyCQBlAgUIbWluZXJBdmEFCG1pbmVyQ250CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCDV9taW5lcl9wbGFjZWQFCG1pbmVyQ250CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCBl9jYW5vbgkAZQIFCGNhbm9uQXZhBQhjYW5vbkNudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAg1fY2Fub25fcGxhY2VkBQhjYW5vbkNudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAgVfeGJvdwkAZQIFB3hib3dBdmEFB3hib3dDbnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHYWRkcmVzcwIMX3hib3dfcGxhY2VkBQd4Ym93Q250CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCBl90ZXNsYQkAZQIFCHRlc2xhQXZhBQh0ZXNsYUNudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAg1fdGVzbGFfcGxhY2VkBQh0ZXNsYUNudAUDbmlsBQR1bml0CQACAQIkUGxhY2VkIG1vcmUgYnVpbGRpbmcgdGhlbiB5b3Ugb3duZWQhAWkBCXJld2FyZFdhcgMIYnVpbGRpbmcGdHJvb3BzCG9wcG9uZW50CQCUCgIJAMwIAgkBB1JlaXNzdWUDBQZBdXJ1ZXMJAGQCCQBoAgUIYnVpbGRpbmcAiCcJAGgCBQZ0cm9vcHMA0A8GCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAaAIFCGJ1aWxkaW5nAIgnBQZBdXJ1ZXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG9wcG9uZW50CQBoAgUGdHJvb3BzANAPBQZBdXJ1ZXMFA25pbAUEdW5pdAFpAQNidXkBB2Fzc2V0SWQEB2FkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQMYXVydWVzQW1vdW50CQEQZ2V0QXVydWVzUGF5bWVudAEFAWkECyR0MDcyMDg3MjY3CQEMZ2V0QXNzZXREYXRhAQUHYXNzZXRJZAQEbmFtZQgFCyR0MDcyMDg3MjY3Al8xBAtkZXNjcmlwdGlvbggFCyR0MDcyMDg3MjY3Al8yBAVwcmljZQgFCyR0MDcyMDg3MjY3Al8zBANrZXkIBQskdDA3MjA4NzI2NwJfNAMJAGcCBQxhdXJ1ZXNBbW91bnQFBXByaWNlBApjdXJyZW50Q250CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB2FkZHJlc3MFA2tleQQFaXNzdWUJAMIIBQUEbmFtZQULZGVzY3JpcHRpb24AAQAABwQNaXNzdWVkQXNzZXRJZAkA2AQBCQC4CAEFBWlzc3VlCQCUCgIJAMwIAgUFaXNzdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJALgIAQUFaXNzdWUJAMwIAgkBBEJ1cm4CBQZBdXJ1ZXMFDGF1cnVlc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzBQNrZXkJAGQCBQpjdXJyZW50Q250AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNaXNzdWVkQXNzZXRJZAUHYWRkcmVzcwUDbmlsBQR1bml0CQACAQkArAICAhpOb3QgZW5vdWdoIHBheW1lbnQgdG8gYnV5IAUEbmFtZQFpAQhhZGRBc3NldAADCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIdTm8gTkZUIGF0dGFjaGVkIHRvIHRoaXMgY2FsbCEEA25mdAkAkQMCCAUBaQhwYXltZW50cwAABAckbWF0Y2gwCAUDbmZ0B2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQHYXNzZXRJZAUHJG1hdGNoMAQHJG1hdGNoMQkA7AcBBQdhc3NldElkAwkAAQIFByRtYXRjaDECBUFzc2V0BAVhc3NldAUHJG1hdGNoMQMJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzAwkAAAIJAJ0IAgUEdGhpcwkA2AQBBQdhc3NldElkBQR1bml0BAdhZGRyZXNzCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEA2tleQkBC2dldEFzc2V0S2V5AQgFBWFzc2V0BG5hbWUECGFzc2V0Q250CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB2FkZHJlc3MFA2tleQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwABBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzBQNrZXkJAGQCBQhhc3NldENudAABBQNuaWwFBHVuaXQJAAIBAhxBc3NldCBhbHJlYWR5IGFkZGVkIHRvIGdhbWUhCQACAQIPV3JvbmcgTkZUIHNlbnQhCQACAQIQQ2FuJ3QgZmluZCBhc3NldAkAAgECG05vdCBhYmxlIHRvIGZpbmQgYXNzZXQgaWQhIQFpAQtyZW1vdmVBc3NldAEHYXNzZXRJZAQFb3duZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFB2Fzc2V0SWQDCQAAAgkA2QQBBQVvd25lcggIBQFpBmNhbGxlcgVieXRlcwQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwBANrZXkJAQtnZXRBc3NldEtleQEIBQVhc3NldARuYW1lBAdhZGRyZXNzCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECGFzc2V0Q250CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB2FkZHJlc3MFA2tleQMJAGYCBQhhc3NldENudAAACQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzBQNrZXkJAGUCBQhhc3NldENudAABBQNuaWwFBHVuaXQJAAIBCQCsAgIJAKwCAgIEQWxsIAgFBWFzc2V0BG5hbWUCFSBhcmUgbG9jayBpbnNpZGUgZ2FtZQkAAgECEENhbid0IGZpbmQgYXNzZXQJAAIBAiBZb3UgYXJlIG5vdCBvd25lciBvZiB0aGlzIGFzc2V0IQD2fJAa", "height": 2501483, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F8RX5Zpt8cunT3oTunQW2BRu4FP5HzAYaNHdYHfa1MU4 Next: 2gUwao5dwrzJgAU8UGJ53p7oJGDRo3W5QUkrbRbpPW2c Diff:
Old | New | Differences | |
---|---|---|---|
75 | 75 | } | |
76 | 76 | let thIssue = Issue("Townhall", "HQ of your empire", 1, 0, false) | |
77 | 77 | let thAssetId = toBase58String(calculateAssetId(thIssue)) | |
78 | - | $Tuple2([BooleanEntry(gameStateKey, true), Reissue(Aurues, 100000, true), ScriptTransfer(i.caller, 100000, Aurues), thIssue, StringEntry(thAssetId, address), IntegerEntry("userId", userId), StringEntry(toString(userId), address), IntegerEntry((address + "_townhall"), 1), IntegerEntry((address + "_townhall_placed"), 0), IntegerEntry((address + "_miner"), 0), IntegerEntry((address + "_miner_placed"), 0), IntegerEntry((address + "_canon"), 0), IntegerEntry((address + "_canon_placed"), 0), IntegerEntry((address + "_xbow"), 0), IntegerEntry((address + "_xbow_placed"), 0), IntegerEntry((address + "_tesla"), 0), IntegerEntry((address + "_tesla_placed"), 0), IntegerEntry((address + "_archer"), 0), IntegerEntry((address + "_robo"), 0), IntegerEntry((address + "_valkyriee"), 0)], unit) | |
78 | + | $Tuple2([BooleanEntry(gameStateKey, true), Reissue(Aurues, 100000, true), ScriptTransfer(i.caller, 100000, Aurues), thIssue, ScriptTransfer(i.caller, 1, calculateAssetId(thIssue)), StringEntry(thAssetId, address), IntegerEntry("userId", userId), StringEntry(toString(userId), address), IntegerEntry((address + "_townhall"), 1), IntegerEntry((address + "_townhall_placed"), 0), IntegerEntry((address + "_miner"), 0), IntegerEntry((address + "_miner_placed"), 0), IntegerEntry((address + "_canon"), 0), IntegerEntry((address + "_canon_placed"), 0), IntegerEntry((address + "_xbow"), 0), IntegerEntry((address + "_xbow_placed"), 0), IntegerEntry((address + "_tesla"), 0), IntegerEntry((address + "_tesla_placed"), 0), IntegerEntry((address + "_archer"), 0), IntegerEntry((address + "_robo"), 0), IntegerEntry((address + "_valkyriee"), 0)], unit) | |
79 | 79 | } | |
80 | 80 | else throw("Game already started!") | |
81 | 81 | } | |
119 | 119 | func buy (assetId) = { | |
120 | 120 | let address = toBase58String(i.caller.bytes) | |
121 | 121 | let auruesAmount = getAuruesPayment(i) | |
122 | - | let $ | |
123 | - | let name = $ | |
124 | - | let description = $ | |
125 | - | let price = $ | |
126 | - | let key = $ | |
122 | + | let $t072087267 = getAssetData(assetId) | |
123 | + | let name = $t072087267._1 | |
124 | + | let description = $t072087267._2 | |
125 | + | let price = $t072087267._3 | |
126 | + | let key = $t072087267._4 | |
127 | 127 | if ((auruesAmount >= price)) | |
128 | 128 | then { | |
129 | 129 | let currentCnt = getIntegerValue(this, (address + key)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let Aurues = base58'4sUGAwEDLVm6Z3sNbLapWXtEtMkhRU8fypam9dLT4UjM' | |
5 | 5 | ||
6 | 6 | func onlyOwner (i) = if ((this.bytes == i.caller.bytes)) | |
7 | 7 | then unit | |
8 | 8 | else throw("Only dapp account can call this function!") | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | func getAuruesPayment (i) = if ((size(i.payments) == 0)) | |
12 | 12 | then throw("Payment not attached") | |
13 | 13 | else { | |
14 | 14 | let p = i.payments[0] | |
15 | 15 | match p.assetId { | |
16 | 16 | case assetId: ByteVector => | |
17 | 17 | if ((assetId == Aurues)) | |
18 | 18 | then p.amount | |
19 | 19 | else throw("Only aurues accepted as payment!") | |
20 | 20 | case _ => | |
21 | 21 | throw("Only aurues accepted as payment!") | |
22 | 22 | } | |
23 | 23 | } | |
24 | 24 | ||
25 | 25 | ||
26 | 26 | func getAssetData (assetId) = if ((assetId == 0)) | |
27 | 27 | then $Tuple4("Miner", "Utility building that helps you to mine aurues at certain blovk height.", 30000, "__miner") | |
28 | 28 | else if ((assetId == 1)) | |
29 | 29 | then $Tuple4("Canon", "Utility building that helps you to mine aurues at certain blovk height.", 25000, "_canon") | |
30 | 30 | else if ((assetId == 2)) | |
31 | 31 | then $Tuple4("Xbow", "Utility building that helps you to mine aurues at certain blovk height.", 15000, "_xbow") | |
32 | 32 | else if ((assetId == 3)) | |
33 | 33 | then $Tuple4("Tesla", "Utility building that helps you to mine aurues at certain blovk height.", 20000, "_tesla") | |
34 | 34 | else if ((assetId == 4)) | |
35 | 35 | then throw("You can't buy townhall!") | |
36 | 36 | else if ((assetId == 5)) | |
37 | 37 | then $Tuple4("Archer", "Utility building that helps you to mine aurues at certain blovk height.", 4500, "_archer") | |
38 | 38 | else if ((assetId == 6)) | |
39 | 39 | then $Tuple4("Robot", "Utility building that helps you to mine aurues at certain blovk height.", 5500, "_robo") | |
40 | 40 | else if ((assetId == 7)) | |
41 | 41 | then $Tuple4("Valkyriee", "Utility building that helps you to mine aurues at certain blovk height.", 6000, "_valkyriee") | |
42 | 42 | else throw("Unkown assetId!") | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func getAssetKey (name) = if ((name == "Miner")) | |
46 | 46 | then "__miner" | |
47 | 47 | else if ((name == "Canon")) | |
48 | 48 | then "_canon" | |
49 | 49 | else if ((name == "Xbow")) | |
50 | 50 | then "_xbow" | |
51 | 51 | else if ((name == "Tesla")) | |
52 | 52 | then "_tesla" | |
53 | 53 | else if ((name == "Townhall")) | |
54 | 54 | then throw("You can't add or remove townhall!") | |
55 | 55 | else if ((name == "Archer")) | |
56 | 56 | then "_archer" | |
57 | 57 | else if ((name == "Robot")) | |
58 | 58 | then "_robo" | |
59 | 59 | else if ((name == "Valkyriee")) | |
60 | 60 | then "_valkyriee" | |
61 | 61 | else throw("Unkown Asset!") | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | @Callable(i) | |
65 | 65 | func startGame () = { | |
66 | 66 | let address = toBase58String(i.caller.bytes) | |
67 | 67 | let gameStateKey = (address + "_isStrted") | |
68 | 68 | if ((getBoolean(this, gameStateKey) == unit)) | |
69 | 69 | then { | |
70 | 70 | let userId = match getInteger(this, "userId") { | |
71 | 71 | case x: Int => | |
72 | 72 | (x + 1) | |
73 | 73 | case _ => | |
74 | 74 | 0 | |
75 | 75 | } | |
76 | 76 | let thIssue = Issue("Townhall", "HQ of your empire", 1, 0, false) | |
77 | 77 | let thAssetId = toBase58String(calculateAssetId(thIssue)) | |
78 | - | $Tuple2([BooleanEntry(gameStateKey, true), Reissue(Aurues, 100000, true), ScriptTransfer(i.caller, 100000, Aurues), thIssue, StringEntry(thAssetId, address), IntegerEntry("userId", userId), StringEntry(toString(userId), address), IntegerEntry((address + "_townhall"), 1), IntegerEntry((address + "_townhall_placed"), 0), IntegerEntry((address + "_miner"), 0), IntegerEntry((address + "_miner_placed"), 0), IntegerEntry((address + "_canon"), 0), IntegerEntry((address + "_canon_placed"), 0), IntegerEntry((address + "_xbow"), 0), IntegerEntry((address + "_xbow_placed"), 0), IntegerEntry((address + "_tesla"), 0), IntegerEntry((address + "_tesla_placed"), 0), IntegerEntry((address + "_archer"), 0), IntegerEntry((address + "_robo"), 0), IntegerEntry((address + "_valkyriee"), 0)], unit) | |
78 | + | $Tuple2([BooleanEntry(gameStateKey, true), Reissue(Aurues, 100000, true), ScriptTransfer(i.caller, 100000, Aurues), thIssue, ScriptTransfer(i.caller, 1, calculateAssetId(thIssue)), StringEntry(thAssetId, address), IntegerEntry("userId", userId), StringEntry(toString(userId), address), IntegerEntry((address + "_townhall"), 1), IntegerEntry((address + "_townhall_placed"), 0), IntegerEntry((address + "_miner"), 0), IntegerEntry((address + "_miner_placed"), 0), IntegerEntry((address + "_canon"), 0), IntegerEntry((address + "_canon_placed"), 0), IntegerEntry((address + "_xbow"), 0), IntegerEntry((address + "_xbow_placed"), 0), IntegerEntry((address + "_tesla"), 0), IntegerEntry((address + "_tesla_placed"), 0), IntegerEntry((address + "_archer"), 0), IntegerEntry((address + "_robo"), 0), IntegerEntry((address + "_valkyriee"), 0)], unit) | |
79 | 79 | } | |
80 | 80 | else throw("Game already started!") | |
81 | 81 | } | |
82 | 82 | ||
83 | 83 | ||
84 | 84 | ||
85 | 85 | @Callable(i) | |
86 | 86 | func saveGame (data) = { | |
87 | 87 | let thCnt = (size(split_51C(data, "buildingIndex':4")) - 1) | |
88 | 88 | let minerCnt = (size(split_51C(data, "buildingIndex':0")) - 1) | |
89 | 89 | let canonCnt = (size(split_51C(data, "buildingIndex':1")) - 1) | |
90 | 90 | let xbowCnt = (size(split_51C(data, "buildingIndex':2")) - 1) | |
91 | 91 | let teslaCnt = (size(split_51C(data, "buildingIndex':3")) - 1) | |
92 | 92 | let address = toBase58String(i.caller.bytes) | |
93 | 93 | let thAva = (getIntegerValue(this, (address + "_townhall")) + getIntegerValue(this, (address + "_townhall_placed"))) | |
94 | 94 | let minerAva = (getIntegerValue(this, (address + "_miner")) + getIntegerValue(this, (address + "_miner_placed"))) | |
95 | 95 | let canonAva = (getIntegerValue(this, (address + "_canon")) + getIntegerValue(this, (address + "_canon_placed"))) | |
96 | 96 | let xbowAva = (getIntegerValue(this, (address + "_xbow")) + getIntegerValue(this, (address + "_xbow_placed"))) | |
97 | 97 | let teslaAva = (getIntegerValue(this, (address + "_tesla")) + getIntegerValue(this, (address + "_tesla_placed"))) | |
98 | 98 | if (if (if (if (if ((thAva >= thCnt)) | |
99 | 99 | then (minerAva >= minerCnt) | |
100 | 100 | else false) | |
101 | 101 | then (canonAva >= canonCnt) | |
102 | 102 | else false) | |
103 | 103 | then (xbowAva >= xbowCnt) | |
104 | 104 | else false) | |
105 | 105 | then (teslaAva >= teslaCnt) | |
106 | 106 | else false) | |
107 | 107 | then $Tuple2([StringEntry((address + "_data"), data), IntegerEntry((address + "_townhall"), (thAva - thCnt)), IntegerEntry((address + "_townhall_placed"), thCnt), IntegerEntry((address + "_miner"), (minerAva - minerCnt)), IntegerEntry((address + "_miner_placed"), minerCnt), IntegerEntry((address + "_canon"), (canonAva - canonCnt)), IntegerEntry((address + "_canon_placed"), canonCnt), IntegerEntry((address + "_xbow"), (xbowAva - xbowCnt)), IntegerEntry((address + "_xbow_placed"), xbowCnt), IntegerEntry((address + "_tesla"), (teslaAva - teslaCnt)), IntegerEntry((address + "_tesla_placed"), teslaCnt)], unit) | |
108 | 108 | else throw("Placed more building then you owned!") | |
109 | 109 | } | |
110 | 110 | ||
111 | 111 | ||
112 | 112 | ||
113 | 113 | @Callable(i) | |
114 | 114 | func rewardWar (building,troops,opponent) = $Tuple2([Reissue(Aurues, ((building * 5000) + (troops * 2000)), true), ScriptTransfer(i.caller, (building * 5000), Aurues), ScriptTransfer(Address(fromBase58String(opponent)), (troops * 2000), Aurues)], unit) | |
115 | 115 | ||
116 | 116 | ||
117 | 117 | ||
118 | 118 | @Callable(i) | |
119 | 119 | func buy (assetId) = { | |
120 | 120 | let address = toBase58String(i.caller.bytes) | |
121 | 121 | let auruesAmount = getAuruesPayment(i) | |
122 | - | let $ | |
123 | - | let name = $ | |
124 | - | let description = $ | |
125 | - | let price = $ | |
126 | - | let key = $ | |
122 | + | let $t072087267 = getAssetData(assetId) | |
123 | + | let name = $t072087267._1 | |
124 | + | let description = $t072087267._2 | |
125 | + | let price = $t072087267._3 | |
126 | + | let key = $t072087267._4 | |
127 | 127 | if ((auruesAmount >= price)) | |
128 | 128 | then { | |
129 | 129 | let currentCnt = getIntegerValue(this, (address + key)) | |
130 | 130 | let issue = Issue(name, description, 1, 0, false) | |
131 | 131 | let issuedAssetId = toBase58String(calculateAssetId(issue)) | |
132 | 132 | $Tuple2([issue, ScriptTransfer(i.caller, 1, calculateAssetId(issue)), Burn(Aurues, auruesAmount), IntegerEntry((address + key), (currentCnt + 1)), StringEntry(issuedAssetId, address)], unit) | |
133 | 133 | } | |
134 | 134 | else throw(("Not enough payment to buy " + name)) | |
135 | 135 | } | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | ||
139 | 139 | @Callable(i) | |
140 | 140 | func addAsset () = if ((size(i.payments) == 0)) | |
141 | 141 | then throw("No NFT attached to this call!") | |
142 | 142 | else { | |
143 | 143 | let nft = i.payments[0] | |
144 | 144 | match nft.assetId { | |
145 | 145 | case assetId: ByteVector => | |
146 | 146 | match assetInfo(assetId) { | |
147 | 147 | case asset: Asset => | |
148 | 148 | if ((asset.issuer == this)) | |
149 | 149 | then if ((getString(this, toBase58String(assetId)) == unit)) | |
150 | 150 | then { | |
151 | 151 | let address = toBase58String(i.caller.bytes) | |
152 | 152 | let key = getAssetKey(asset.name) | |
153 | 153 | let assetCnt = getIntegerValue(this, (address + key)) | |
154 | 154 | $Tuple2([ScriptTransfer(Address(i.caller.bytes), 1, assetId), StringEntry(toBase58String(assetId), address), IntegerEntry((address + key), (assetCnt + 1))], unit) | |
155 | 155 | } | |
156 | 156 | else throw("Asset already added to game!") | |
157 | 157 | else throw("Wrong NFT sent!") | |
158 | 158 | case _ => | |
159 | 159 | throw("Can't find asset") | |
160 | 160 | } | |
161 | 161 | case _ => | |
162 | 162 | throw("Not able to find asset id!!") | |
163 | 163 | } | |
164 | 164 | } | |
165 | 165 | ||
166 | 166 | ||
167 | 167 | ||
168 | 168 | @Callable(i) | |
169 | 169 | func removeAsset (assetId) = { | |
170 | 170 | let owner = getStringValue(this, assetId) | |
171 | 171 | if ((fromBase58String(owner) == i.caller.bytes)) | |
172 | 172 | then match assetInfo(fromBase58String(assetId)) { | |
173 | 173 | case asset: Asset => | |
174 | 174 | let key = getAssetKey(asset.name) | |
175 | 175 | let address = toBase58String(i.caller.bytes) | |
176 | 176 | let assetCnt = getIntegerValue(this, (address + key)) | |
177 | 177 | if ((assetCnt > 0)) | |
178 | 178 | then $Tuple2([DeleteEntry(assetId), IntegerEntry((address + key), (assetCnt - 1))], unit) | |
179 | 179 | else throw((("All " + asset.name) + " are lock inside game")) | |
180 | 180 | case _ => | |
181 | 181 | throw("Can't find asset") | |
182 | 182 | } | |
183 | 183 | else throw("You are not owner of this asset!") | |
184 | 184 | } | |
185 | 185 | ||
186 | 186 |
github/deemru/w8io/026f985 43.20 ms ◑