tx · Hdr93jgyU83ubtkarjBnNLPPg835LkU1CY1m58bdD9B4

3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb:  -0.03300000 Waves

2022.07.07 20:28 [2129580] smart account 3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb > SELF 0.00000000 Waves

{ "type": 13, "id": "Hdr93jgyU83ubtkarjBnNLPPg835LkU1CY1m58bdD9B4", "fee": 3300000, "feeAssetId": null, "timestamp": 1657214949134, "version": 2, "chainId": 84, "sender": "3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb", "senderPublicKey": "FWSsBbeCwLVkekWhvNKtX6JkrZiruRybKKVuiS3F4bqN", "proofs": [ "4shxJa8JmiDcB7SxbYkeAsmFqtSwNGhzs4pcMSt5HzUjouUy8249fqR7k3FdyiTvyzM45Sahv26fgokft8FGcq4t" ], "script": "base64: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aWxkaW5nU3RhdHVzS2V5AAAAD2ZpbmlzaEhlaWdodEtleQAAAA10cmFuc2FjdGlvbklkBAAAAAZjaHVua3MJAQAAABFnZXRBc3NldFR5cGVMZXZlbAAAAAEFAAAACGFzc2V0U3RyBAAAAAxzdHJBc3NldFR5cGUIBQAAAAZjaHVua3MAAAACXzEEAAAABWxldmVsCAUAAAAGY2h1bmtzAAAAAl8yBAAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPZmluaXNoSGVpZ2h0S2V5AwkAAGYAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdQnVpbGRpbmcgaXMgbm90IGZpbmlzaGVkIHlldCAJAAGkAAAAAQkAAGUAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAACcgYmxvY2tzIHJlbWFpbmluZywgaXQgd2lsbCB0YWtlIGFyb3VuZCAJAAGkAAAAAQkAAGUAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAAAggbWludXRlcwMJAAAAAAAAAgkAAS8AAAACBQAAAAxzdHJBc3NldFR5cGUAAAAAAAAAAAQCAAAABFRFQ0gEAAAACmRpc2NvdmVyZWQJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA5uYXRpb25zQWRkcmVzcwIAAAAYc2V0VGVjbmhub2xvZ3lEaXNjb3ZlcmVkCQAETAAAAAIFAAAABmNhbGxlcgkABEwAAAACBQAAAAhhc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAACmRpc2NvdmVyZWQGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAA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dGVnZXIAAAABCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIFAAAADXRyYW5zYWN0aW9uSWQFAAAACGFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAMYWdnckFzc2V0a2V5AgAAAAZfT3duZXIFAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMYWdnckFzc2V0a2V5CQAAZAAAAAIFAAAABWNvaW5zBQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkAAGQAAAACBQAAAANxdHkAAAAAAAAAAAEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACGFzc2V0S2V5BQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgAAAAZjYWxsZXIAAAAIYXNzZXRLZXkEAAAACmFzc2V0T3duZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAWZ2V0QXNzZXRPd25lcktleVN0cmluZwAAAAEFAAAACGFzc2V0S2V5CQAAAAAAAAIFAAAACmFzc2V0T3duZXIFAAAABmNhbGxlcgEAAAAVaXNOYXRpb25SZXNlcnZlZEFzc2V0AAAAAgAAAAROYW1lAAAA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ZmljZUtleQkAAAIAAAABAgAAACx5b3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhlIFNhY3JpZmljZSBhc3NldAQAAAAGY2h1bmtzCQEAAAARZ2V0QXNzZXRUeXBlTGV2ZWwAAAABBQAAAAxTYWNyaWZpY2VLZXkDAwkBAAAAAiE9AAAAAgUAAAAIYXNzZXRTYWMIBQAAAAZjaHVua3MAAAACXzEGCQEAAAACIT0AAAACBQAAAAthc3NldFNhY2x2bAgFAAAABmNodW5rcwAAAAJfMgkAAAIAAAABAgAAAC50aGUgc2FjcmlmaWNlQXNzZXQgaGFzIHRoZSB3cm9uZyB0eXBlIG9yIGxldmVsBgEAAAAZQ2hlY2tBc3NldEJ1aWxkYWJsZU5hdGlvbgAAAAQAAAAETmFtZQAAAAVMZXZlbAAAAAlOYXRpb25LZXkAAAAMU2FjcmlmaWNlS2V5BAAAAAdjbmZnS2V5CQEAAAAIZ2V0QUxLZXkAAAACBQAAAAROYW1lBQAAAAVMZXZlbAQAAAADdGVjCQEAAAAQY29uZlRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgUAAAAHY25mZ0tleQIAAAAWX1RlY25ob2xvZ3lfZGlzY292ZXJlZAMJAQAAAAIhPQAAAAIFAAAAA3RlYwIAAAAAAwkBAAAAFG5hdGlvbnNUcnlHZXRCb29sZWFuAAAAAQkAASwAAAACCQABLAAAAAIFAAAACU5hdGlvbktleQIAAAABXwUAAAADdGVjCQEAAAAcQ2hlY2tBc3NldEJ1aWxkYWJsZVNhY3JpZmljZQAAAAMFAAAAB2NuZmdLZXkFAAAACU5hdGlvbktleQUAAAAMU2FjcmlmaWNlS2V5BwkBAAAAHENoZWNrQXNzZXRCdWlsZGFibGVTYWNyaWZpY2UAAAADBQAAAAdjbmZnS2V5BQAAAAlOYXRpb25LZXkFAAAADFNhY3JpZmljZUtleQEAAAAXQ2hlY2tBc3NldEJ1aWxkYWJsZVVzZXIAAAAEAAAABE5hbWUAAAAFTGV2ZWwAAAAGY2FsbGVyAAAADFNhY3JpZmljZUtleQQAAAAGY25mS2V5CQEAAAAIZ2V0QUxLZXkAAAACBQAAAAROYW1lBQAAAAVMZXZlbAQAAAAIbmF0aW9uSWQJAQAAABRuYXRpb25zVHJ5R2V0SW50ZWdlcgAAAAEFAAAABmNhbGxlcgMJAAAAAAAAAgUAAAAIbmF0aW9uSWQAAAAAAAAAAAAHBAAAAAN0ZWMJAQAAABBjb25mVHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACBQAAAAZjbmZLZXkCAAAAFl9UZWNuaG9sb2d5X2Rpc2NvdmVyZWQDCQEAAAACIT0AAAACBQAAAAN0ZWMCAAAAAAQAAAAJTmF0aW9uS2V5CQEAAAATbmF0aW9uc1RyeUdldFN0cmluZwAAAAEJAAGkAAAAAQUAAAAIbmF0aW9uSWQDCQEAAAAUbmF0aW9uc1RyeUdldEJvb2xlYW4AAAABCQABLAAAAAIJAAEsAAAAAgUAAAAJTmF0aW9uS2V5AgAAAAFfBQAAAAN0ZWMJAQAAABxDaGVja0Fzc2V0QnVpbGRhYmxlU2FjcmlmaWNlAAAAAwUAAAAGY25mS2V5BQAAAAZjYWxsZXIFAAAADFNhY3JpZmljZUtleQcJAQAAABxDaGVja0Fzc2V0QnVpbGRhYmxlU2FjcmlmaWNlAAAAAwUAAAAGY25mS2V5BQAAAAZjYWxsZXIFAAAADFNhY3JpZmljZUtleQEAAAATQ2hlY2tBc3NldEJ1aWxkYWJsZQAAAAUAAAAETmFtZQAAAAVMZXZlbAAAAAZDYWxsZXIAAAAJTmF0aW9uS2V5AAAADFNhY3JpZmljZUtleQMJAQAAAAIhPQAAAAIFAAAACU5hdGlvbktleQIAAAAACQEAAAAZQ2hlY2tBc3NldEJ1aWxkYWJsZU5hdGlvbgAAAAQFAAAABE5hbWUFAAAABUxldmVsBQAAAAlOYXRpb25LZXkFAAAADFNhY3JpZmljZUtleQkBAAAAF0NoZWNrQXNzZXRCdWlsZGFibGVVc2VyAAAABAUAAAAETmFtZQUAAAAFTGV2ZWwFAAAABkNhbGxlcgUAAAAMU2FjcmlmaWNlS2V5AAAACwAAAAFpAQAAAApTdGFydEJ1aWxkAAAABAAAAAxzdHJBc3NldFR5cGUAAAAFTGV2ZWwAAAAJTmF0aW9uS2V5AAAADFNhY3JpZmljZUtleQMJAQAAAAEhAAAAAQkBAAAAE0NoZWNrQXNzZXRCdWlsZGFibGUAAAAFBQAAAAxzdHJBc3NldFR5cGUFAAAABUxldmVsCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAJTmF0aW9uS2V5BQAAAAxTYWNyaWZpY2VLZXkJAAACAAAAAQIAAAAaWW91IGNhbm5vdCBidWlsZCB0aGlzIEl0ZW0EAAAAB2NuZmdLZXkJAQAAAAhnZXRBTEtleQAAAAIFAAAADHN0ckFzc2V0VHlwZQUAAAAFTGV2ZWwEAAAAEGRlbGF5Rm9yQnVpbGRpbmcJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAHY25mZ0tleQIAAAAKX0J1aWxkVGltZQQAAAAOYXNzZXRCdWlsZENvc3QJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAHY25mZ0tleQIAAAAFX0Nvc3QEAAAADVRvQWRtaW5XYWxsZXQJAABpAAAAAgkAAGgAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAAAAAAAAAAABQAAAAAAAAAAZAQAAAATVG9HYW1lUmV3YXJkc1dhbGxldAkAAGkAAAACCQAAaAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0AAAAAAAAAAAKAAAAAAAAAABkBAAAABZUb1N0YWtpbmdSZXdhcmRzV2FsbGV0CQAAaQAAAAIJAABoAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QAAAAAAAAAAEEAAAAAAAAAAGQEAAAADVVuaXRTdGFrZVNoZWcJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAA1Ub0FkbWluV2FsbGV0BQAAABNUb0dhbWVSZXdhcmRzV2FsbGV0BQAAABZUb1N0YWtpbmdSZXdhcmRzV2FsbGV0AwkBAAAAFWlzTmF0aW9uUmVzZXJ2ZWRBc3NldAAAAAIFAAAADHN0ckFzc2V0VHlwZQUAAAAFTGV2ZWwDAwkBAAAAASEAAAABCQEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAACU5hdGlvbktleQkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgcJAAACAAAAAQIAAAAjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoZSBuYXRpb24EAAAACm5hdGlvbnNoZWcJAQAAABV0cmVhc3VyeVRyeUdldEludGVnZXIAAAABCQEAAAAOZ2V0VHJlYXN1cnlLZXkAAAABBQAAAAlOYXRpb25LZXkDCQAAZgAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAApuYXRpb25zaGVnCQAAAgAAAAECAAAAHlRoZSBuYXRpb24gaGFzbid0IGVub3VnaCBmdW5kcwQAAAABZAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAAUZGVjcmVhc2VOYXRpb25XYWxsZXQJAARMAAAAAgUAAAAJTmF0aW9uS2V5CQAETAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAANuaWwFAAAAA25pbAQAAAAHJG1hdGNoMAUAAAABZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFyBQAAAAckbWF0Y2gwBAAAAAJwdwkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAARYXJiaXRyYXJ5QWRkQ29pbnMJAARMAAAAAgUAAAAJTmF0aW9uS2V5CQAETAAAAAIFAAAADVVuaXRTdGFrZVNoZWcFAAAAA25pbAUAAAADbmlsBAAAAAckbWF0Y2gxBQAAAAJwdwMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gxBAAAAAh0cmFuc2ZlcgkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAAaZGlzdHJpYnV0ZU5hdGlvblBheVJld2FyZHMJAARMAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QFAAAAA25pbAUAAAADbmlsBAAAAAckbWF0Y2gyBQAAAAh0cmFuc2ZlcgMJAAABAAAAAgUAAAAHJG1hdGNoMgIAAAADSW50BAAAAAF0BQAAAAckbWF0Y2gyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRnZXRCdWlsZGluZ1N0YXR1c0tleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5BQAAAAxCdWlsZFN0YXJ0ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5BQAAAAlOYXRpb25LZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRCdWlsZGluZ0ZpbmlzaEhlaWdodEtleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JCdWlsZGluZwUAAAADbmlsCQAAAgAAAAECAAAAIEVycm9yIERpc3RyaWJ1dGluZyBhc3NldCByZXdhcmRzCQAAAgAAAAECAAAAHUVycm9yIERlcG9zaXRpbmcgbmF0aW9uIGZ1bmRzCQAAAgAAAAECAAAAHUVycm9yIERlcG9zaXRpbmcgbmF0aW9uIGZ1bmRzBAAAAAhhc3NldFNhYwkBAAAAEGNvbmZUcnlHZXRTdHJpbmcAAAABCQABLAAAAAIFAAAAB2NuZmdLZXkCAAAAD19TYWNyaWZpY2VBc3NldAMJAQAAAAIhPQAAAAIFAAAACGFzc2V0U2FjAgAAAAAJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAMU2FjcmlmaWNlS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAAMU2FjcmlmaWNlS2V5AgAAAAZfT3duZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGdldEJ1aWxkaW5nU3RhdHVzS2V5AAAAAwkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAB2NuZmdLZXkFAAAADEJ1aWxkU3RhcnRlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAB2NuZmdLZXkJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEGRlbGF5Rm9yQnVpbGRpbmcFAAAAA25pbAQAAAAIYW1vdW50SW4JAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMJAABmAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QFAAAACGFtb3VudEluCQAAAgAAAAEJAAEsAAAAAgIAAAA+WW91IHByb3ZpZGVkIGxlc3MgJGhlZyB0aGFuIHRoZSBuZWVkZWQgY29zdCBmb3IgYnVpbGRpbmcgdGhpcyAFAAAADHN0ckFzc2V0VHlwZQMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAACnNoaW55d2dnaWQJAAACAAAAAQIAAAAaT25seSAkSEVHIHBheW1lbnRzIGFsbG93ZWQEAAAAAnB3CQAD/AAAAAQJAQAAAAdBZGRyZXNzAAAAAQUAAAAPdHJlYXN1cnlBZGRyZXNzAgAAAAdEZXBvc2l0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAACnNoaW55d2dnaWQFAAAADVVuaXRTdGFrZVNoZWcFAAAAA25pbAQAAAAHJG1hdGNoMAUAAAACcHcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABcgUAAAAHJG1hdGNoMAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0QnVpbGRpbmdTdGF0dXNLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQUAAAAMQnVpbGRTdGFydGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRBc3NldE93bmVyS2V5AAAAAggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRCdWlsZGluZ0ZpbmlzaEhlaWdodEtleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JCdWlsZGluZwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAthZG1pbldhbGxldAUAAAANVG9BZG1pbldhbGxldAUAAAAKc2hpbnl3Z2dpZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABZkYWlseUdhbWVSZXdhcmRzV2FsbGV0BQAAABNUb0dhbWVSZXdhcmRzV2FsbGV0BQAAAApzaGlueXdnZ2lkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAGWRhaWx5U3Rha2luZ1Jld2FyZHNXYWxsZXQFAAAAFlRvU3Rha2luZ1Jld2FyZHNXYWxsZXQFAAAACnNoaW55d2dnaWQFAAAAA25pbAkAAAIAAAABAgAAABdJbmNvcnJlY3QgaW52b2tlIHJlc3VsdAAAAAFpAQAAAAtGaW5pc2hCdWlsZAAAAAQAAAAHdHhJZFN0cgAAAAhhc3NldFN0cgAAAAVMZXZlbAAAAAlOYXRpb25LZXkEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAAFQUxLZXkJAQAAAAhnZXRBTEtleQAAAAIFAAAACGFzc2V0U3RyBQAAAAVMZXZlbAQAAAARQnVpbGRpbmdTdGF0dXNLZXkJAQAAABRnZXRCdWlsZGluZ1N0YXR1c0tleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBQAAAAVBTEtleQQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAUAAAAFQUxLZXkEAAAACGFzc2V0S2V5CQEAAAANZ2V0QXNzZXRJZEtleQAAAAIFAAAABHR4SWQFAAAABUFMS2V5BAAAAAphc3NldE93bmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACBQAAAAR0eElkBQAAAAVBTEtleQMJAQAAABVpc05hdGlvblJlc2VydmVkQXNzZXQAAAACBQAAAAhhc3NldFN0cgUAAAAFTGV2ZWwDAwkBAAAAASEAAAABCQEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAACU5hdGlvbktleQkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgcJAAACAAAAAQIAAAAwWW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uCQEAAAATaW50ZXJuYWxGaW5pc2hCdWlsZAAAAAYFAAAACU5hdGlvbktleQUAAAAFQUxLZXkFAAAACGFzc2V0S2V5BQAAABFCdWlsZGluZ1N0YXR1c0tleQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAAR0eElkAwkBAAAAAiE9AAAAAgUAAAAKYXNzZXRPd25lcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQkAASwAAAACAgAAACFZb3UgY2Fubm90IGNsYWltIG90aGVyJ3MgcGxheWVycyAFAAAACGFzc2V0U3RyBAAAABBidWlsZGluZ1R4U3RhdHVzCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkDCQAAAAAAAAIFAAAAEGJ1aWxkaW5nVHhTdGF0dXMCAAAAAAkAAAIAAAABAgAAACRObyBwZW5kaW5nIG9wZXJhdGlvbnMgZm9yIHRoaXMgYXNzZXQEAAAACGFzc2V0U2FjCQEAAAAQY29uZlRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgUAAAAFQUxLZXkCAAAAD19TYWNyaWZpY2VBc3NldAQAAAANYXNzZXRTYWNMZXZlbAkBAAAAEWNvbmZUcnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAVBTEtleQIAAAAUX1NhY3JpZmljZUFzc2V0TGV2ZWwDCQEAAAACIT0AAAACBQAAAAhhc3NldFNhYwIAAAAACQEAAAAcaW50ZXJuYWxTYWNyaWZpY2VGaW5pc2hCdWlsZAAAAAcJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVBTEtleQUAAAAIYXNzZXRLZXkFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5BQAAAA9maW5pc2hIZWlnaHRLZXkFAAAABHR4SWQJAQAAAAhnZXRBTEtleQAAAAIFAAAACGFzc2V0U2FjBQAAAA1hc3NldFNhY0xldmVsCQEAAAATaW50ZXJuYWxGaW5pc2hCdWlsZAAAAAYJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVBTEtleQUAAAAIYXNzZXRLZXkFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5BQAAAA9maW5pc2hIZWlnaHRLZXkFAAAABHR4SWQAAAABaQEAAAARdHJhbnNmZXJPd25lcnNoaXAAAAADAAAAB2Fzc2V0SWQAAAAIbmV3T3duZXIAAAADcXR5AwkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAClPbmx5IHRoZSBhZG1pbiBjYW4gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbgkABRQAAAACCQEAAAAZaW50ZXJuYWxUcmFzbmZlck93bmVyc2hpcAAAAAMFAAAAB2Fzc2V0SWQFAAAACG5ld093bmVyBQAAAANxdHkFAAAACG5ld093bmVyAAAAAWkBAAAAF2Rlc3Ryb3lBc3NldEFuZFRyYW5zZmVyAAAAAwAAAAdhc3NldElkAAAAA3F0eQAAAAl0b0FkZHJlc3MEAAAABmNodW5rcwkBAAAAEWdldEFzc2V0VHlwZUxldmVsAAAAAQUAAAAHYXNzZXRJZAQAAAAMc3RyQXNzZXRUeXBlCAUAAAAGY2h1bmtzAAAAAl8xBAAAAAVsZXZlbAgFAAAABmNodW5rcwAAAAJfMgQAAAABawkBAAAACGdldEFMS2V5AAAAAgUAAAAMc3RyQXNzZXRUeXBl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BSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAAAAAAAAAsAAAAAAAAAAAwAAAAAAAAAAA0AAAAAAAAAAA4AAAAAAAAAAA8AAAAAAAAAABAAAAAAAAAAABEAAAAAAAAAABIAAAAAAAAAABMAAAAAAAAAABQAAAAAAAAAABUAAAAAAAAAABYAAAAAAAAAABcAAAAAAAAAABgAAAAAAAAAABkAAAAAAAAAABoAAAAAAAAAABsAAAAAAAAAABwAAAAAAAAAAB0AAAAAAAAAAB4AAAAAAAAAAB8AAAAAAAAAACAAAAAAAAAAACEAAAAAAAAAACIAAAAAAAAAACMAAAAAAAAAACQAAAAAAAAAACUAAAAAAAAAACYAAAAAAAAAACcAAAAAAAAAACgAAAAAAAAAACkAAAAAAAAAACoAAAAAAAAAACsAAAAAAAAAACwAAAAAAAAAAC0AAAAAAAAAAC4AAAAAAAAA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BE0AAAACCQEAAAAZaW50ZXJuYWxUcmFzbmZlck93bmVyc2hpcAAAAAMFAAAAB2Fzc2V0SWQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwUAAAAIYW1vdW50SW4FAAAACnNoaW55d2dnaWQJAAACAAAAAQIAAAApRXJyb3IgdHJhbnNmZXJyaW5nIFNIRUcgdG8gbmF0aW9ucyB3YWxsZXQAAAABaQEAAAAWQWRkQXNzZXRGcm9tTWFya2VwbGFjZQAAAAMAAAAHYXNzZXRJZAAAAAhvbGRPd25lcgAAAAlhc3NldFNoZWcEAAAABmNodW5rcwkBAAAAEWdldEFzc2V0VHlwZUxldmVsAAAAAQUAAAAHYXNzZXRJZAQAAAAMc3RyQXNzZXRUeXBlCAUAAAAGY2h1bmtzAAAAAl8xBAAAAAVsZXZlbAgFAAAABmNodW5rcwAAAAJfMgQAAAABawkBAAAACGdldEFMS2V5AAAAAgUAAAAMc3RyQXNzZXRUeXBlBQAAAAVsZXZlbAQAAAAMY3VycmVudFBvd2VyCQEAAAAUbmF0aW9uc1RyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAZfUG93ZXIEAAAACmFzc2V0UG93ZXIJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAABawIAAAAGX1Bvd2VyAwkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAC1Zb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24DCQEAAAARY29uZlRyeUdldEJvb2xlYW4AAAABCQABLAAAAAIFAAAAAWsCAAAAC19BZ2dyZWdhdGVkBAAAAAdhY2h1bmtzCQAEtQAAAAIFAAAAB2Fzc2V0SWQCAAAAAV8EAAAACWFvbGRPd25lcgkAAZEAAAACBQAAAAdhY2h1bmtzAAAAAAAAAAACCQEAAAAXSW5jcmVhc2VBZ2dyZWdhdGVkQXNzZXQA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", "height": 2129580, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: D9hSjsYxjrYbE63CLrsb5BK6bRW4tbiZvxLaMuY1NhAU Next: 5icomuz8ju7xjM8P4nCQ6axo483cxwAhG9WpPyA8z89F Diff:
OldNewDifferences
119119
120120
121121 func getAssetOwnerKeyString (assetId) = (assetId + "_Owner")
122+
123+
124+func assetsTryGetInteger (key) = match getInteger(Address(assetsAddress), key) {
125+ case b: Int =>
126+ b
127+ case _ =>
128+ 0
129+}
122130
123131
124132 let BuildStarted = "BUILD_STARTED"
255263 }
256264
257265
266+func IncreaseAggregatedAsset (assetId,Owner,qty) = {
267+ let chunks = getAssetTypeLevel(assetId)
268+ let strAssetType = chunks._1
269+ let level = chunks._2
270+ let k = getALKey(strAssetType, level)
271+ let assetPower = confTryGetInteger((k + "_Power"))
272+ let qtyPower = (assetPower * qty)
273+ let Coins = tryGetInteger(assetId)
274+ let qtyAsset = tryGetInteger((assetId + "_Qty"))
275+ let ownerPower = nationsTryGetInteger((Owner + "_Power"))
276+ let singleCoin = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
277+ let pw = invoke(Address(nationsAddress), "setUserPower", [Owner, (ownerPower - qtyPower)], nil)
278+ if ((pw == pw))
279+ then [IntegerEntry((assetId + "_Qty"), (qtyAsset + qty)), IntegerEntry(assetId, (Coins + (qty * singleCoin)))]
280+ else throw("Strict value is not equal to itself.")
281+ }
282+
283+
284+func DecreaseAggregatedAsset (assetId,Owner,qty) = {
285+ let qtyAsset = tryGetInteger((assetId + "_Qty"))
286+ if ((0 > (qtyAsset - qty)))
287+ then throw("you don't have enough unit")
288+ else IncreaseAggregatedAsset(assetId, Owner, (0 - qty))
289+ }
290+
291+
258292 func internalTrasnferOwnership (assetId,newOwner,qty) = {
259293 let chunks = getAssetTypeLevel(assetId)
260294 let strAssetType = chunks._1
263297 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
264298 if (confTryGetBoolean((k + "_Aggregated")))
265299 then {
266- let assetPower = confTryGetInteger((k + "_Power"))
267- let qtyPower = (assetPower * qty)
268- let aggrAssetkey = ((k + "_") + oldOwner)
269- let oldPower = nationsTryGetInteger((oldOwner + "_Power"))
270- let oldCoins = tryGetInteger(aggrAssetkey)
271- let singleCoin = fraction(oldCoins, 1, qty)
272- let oldItemqty = tryGetInteger((aggrAssetkey + "_Qty"))
273300 let newAggrAssetKey = ((k + "_") + newOwner)
274- let newCoins = tryGetInteger(newAggrAssetKey)
275- let newItemqty = tryGetInteger((newAggrAssetKey + "_Qty"))
276- let newPower = nationsTryGetInteger((newOwner + "_Power"))
277- let pwOld = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (oldPower - qtyPower)], nil)
278- if ((pwOld == pwOld))
279- then {
280- let pwNew = invoke(Address(nationsAddress), "setUserPower", [newOwner, (newPower + qtyPower)], nil)
281- if ((pwNew == pwNew))
282- then [IntegerEntry((aggrAssetkey + "_Qty"), (oldItemqty - qty)), IntegerEntry((newAggrAssetKey + "_Qty"), (newItemqty + qty)), IntegerEntry(aggrAssetkey, (oldCoins - (qty * singleCoin))), IntegerEntry(newAggrAssetKey, (newCoins + (qty * singleCoin)))]
283- else throw("Strict value is not equal to itself.")
284- }
285- else throw("Strict value is not equal to itself.")
301+ let achunks = split(assetId, "_")
302+ let aoldOwner = achunks[2]
303+ let aggrAssetkey = ((k + "_") + aoldOwner)
304+ let dec = DecreaseAggregatedAsset(aggrAssetkey, aoldOwner, qty)
305+ let inc = IncreaseAggregatedAsset(newAggrAssetKey, newOwner, qty)
306+ (inc ++ dec)
286307 }
287308 else {
288309 let assetPower = confTryGetInteger((k + "_Power"))
487508 if (confTryGetBoolean((k + "_Aggregated")))
488509 then {
489510 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
490- let qtyAsset = tryGetInteger((k + "_Qty"))
511+ let achunks = split(assetId, "_")
512+ let aoldOwner = achunks[2]
513+ let qtyAsset = tryGetInteger((assetId + "_Qty"))
491514 if ((0 > (qtyAsset - qty)))
492515 then throw(("you don't have enough " + strAssetType))
493516 else {
494- let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - (assetPower * qty))], nil)
517+ let pw = invoke(Address(nationsAddress), "setUserPower", [aoldOwner, (currentPower - (assetPower * qty))], nil)
495518 match pw {
496519 case r: Int =>
497520 let attackers = split(toAddress, "#")
511534 }
512535 if ((dist == dist))
513536 then if (((qtyAsset - qty) > 0))
514- then [IntegerEntry((k + "_Qty"), (qtyAsset - qty))]
537+ then [IntegerEntry((assetId + "_Qty"), (qtyAsset - qty))]
515538 else [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
516539 else throw("Strict value is not equal to itself.")
517540 case _ =>
569592 if (confTryGetBoolean((k + "_Aggregated")))
570593 then {
571594 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
572- let qtyAsset = tryGetInteger((k + "_Qty"))
595+ let aggrAssetkey = ((k + "_") + toString(i.caller))
596+ let qtyAsset = tryGetInteger((aggrAssetkey + "_Qty"))
573597 if ((0 > (qtyAsset - qty)))
574598 then throw(("you don't have enough " + strAssetType))
575599 else {
579603 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), (unitAssetCoins * qty)], nil)
580604 match tr {
581605 case t: Int =>
582- if (((qtyAsset - qty) > 0))
583- then [IntegerEntry((k + "_Qty"), (qtyAsset - qty))]
584- else [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
606+[IntegerEntry((aggrAssetkey + "_Qty"), (qtyAsset - qty))]
585607 case _ =>
586608 throw("Error transferring coins")
587609 }
658680
659681
660682 @Callable(i)
661-func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = if (!(checkAdmin(i.caller)))
662- then throw("You are not allowed to perform this operation")
663- else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
683+func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = {
684+ let chunks = getAssetTypeLevel(assetId)
685+ let strAssetType = chunks._1
686+ let level = chunks._2
687+ let k = getALKey(strAssetType, level)
688+ let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
689+ let assetPower = confTryGetInteger((k + "_Power"))
690+ if (!(checkAdmin(i.caller)))
691+ then throw("You are not allowed to perform this operation")
692+ else if (confTryGetBoolean((k + "_Aggregated")))
693+ then {
694+ let achunks = split(assetId, "_")
695+ let aoldOwner = achunks[2]
696+ IncreaseAggregatedAsset(assetId, aoldOwner, 1)
697+ }
698+ else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
699+ }
664700
665701
666702
667703 @Callable(i)
668-func TransferAssetToMarketplace (assetId,sellprice) = if (!(checkAssetOwner(toString(i.caller), assetId)))
669- then throw("You are not the owner of this asset")
670- else {
671- let assetSheg = tryGetInteger(assetId)
672- let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
673- match tr {
674- case t: Int =>
704+func TransferAssetToMarketplace (assetId,sellprice) = {
705+ let chunks = getAssetTypeLevel(assetId)
706+ let strAssetType = chunks._1
707+ let level = chunks._2
708+ let k = getALKey(strAssetType, level)
709+ let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
710+ let assetPower = confTryGetInteger((k + "_Power"))
711+ let assetSheg = tryGetInteger(assetId)
712+ if (!(checkAssetOwner(toString(i.caller), assetId)))
713+ then throw("You are not the owner of this asset")
714+ else if (confTryGetBoolean((k + "_Aggregated")))
715+ then {
716+ let achunks = split(assetId, "_")
717+ let oldOwner = achunks[2]
718+ let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
719+ match tr {
720+ case t: Int =>
721+ DecreaseAggregatedAsset(assetId, oldOwner, 1)
722+ case _ =>
723+ throw("Error putting the item on the marketplace")
724+ }
725+ }
726+ else {
727+ let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
728+ match tr {
729+ case t: Int =>
675730 [DeleteEntry(getAssetOwnerKeyString(assetId)), DeleteEntry(assetId)]
676- case _ =>
677- throw("Error putting the item on the marketplace")
678- }
679- }
731+ case _ =>
732+ throw("Error putting the item on the marketplace")
733+ }
734+ }
735+ }
680736
681737
682738
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let shinywggid = base58'AFQS5E4ELtxex3iANtWtUU2V2oWJZSo8VVnK8z3VFmqf'
55
66 let treasuryAddress = base58'3MyDGEoKp1gF4LSRknk9vSuDEyrwuYXcQEQ'
77
88 let assetsAddress = base58'3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb'
99
1010 let marketplaceAddress = base58'3Mra7mjPipcQd5sJaRmXK8xgS4scb8gPF4A'
1111
1212 let configurationAddress = base58'3N9tj3b2djcaZozn97VkYchL9S1i6cdEbC1'
1313
1414 let nationsAddress = base58'3MvyzDtzWWV5MZ1GP8JfQhhQqiGU4Nbifdy'
1515
1616 let adminWallet = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
1717
1818 let dailyGameRewardsWallet = addressFromStringValue("3MuSrXTTiwo9bdoD6FeaBpMUYMiU5saDv2U")
1919
2020 let dailyStakingRewardsWallet = addressFromStringValue("3Mv3mr3uNXdpgkVPApbGEJjMQXqau37DY5i")
2121
2222 func checkAdmin (caller) = if (if (if (if (if ((caller == adminWallet))
2323 then true
2424 else (caller == this))
2525 then true
2626 else (caller.bytes == assetsAddress))
2727 then true
2828 else (caller.bytes == treasuryAddress))
2929 then true
3030 else (caller.bytes == marketplaceAddress))
3131 then true
3232 else (caller.bytes == nationsAddress)
3333
3434
3535 func tryGetInteger (key) = match getInteger(this, key) {
3636 case b: Int =>
3737 b
3838 case _ =>
3939 0
4040 }
4141
4242
4343 func tryGetBoolean (key) = match getBoolean(this, key) {
4444 case b: Boolean =>
4545 b
4646 case _ =>
4747 false
4848 }
4949
5050
5151 func tryGetString (key) = match getString(this, key) {
5252 case b: String =>
5353 b
5454 case _ =>
5555 ""
5656 }
5757
5858
5959 func getALKey (Name,Level) = ((Name + "_lvl") + toString(Level))
6060
6161
6262 func confTryGetInteger (key) = match getInteger(Address(configurationAddress), key) {
6363 case b: Int =>
6464 b
6565 case _ =>
6666 0
6767 }
6868
6969
7070 func confTryGetString (key) = match getString(Address(configurationAddress), key) {
7171 case b: String =>
7272 b
7373 case _ =>
7474 ""
7575 }
7676
7777
7878 func confTryGetBoolean (key) = match getBoolean(Address(configurationAddress), key) {
7979 case b: Boolean =>
8080 b
8181 case _ =>
8282 false
8383 }
8484
8585
8686 func getTreasuryKey (nationid) = (nationid + "_Treasury")
8787
8888
8989 func treasuryTryGetInteger (key) = match getInteger(Address(treasuryAddress), key) {
9090 case b: Int =>
9191 b
9292 case _ =>
9393 0
9494 }
9595
9696
9797 func nationsTryGetInteger (key) = match getInteger(Address(nationsAddress), key) {
9898 case b: Int =>
9999 b
100100 case _ =>
101101 0
102102 }
103103
104104
105105 func nationsTryGetBoolean (key) = match getBoolean(Address(nationsAddress), key) {
106106 case b: Boolean =>
107107 b
108108 case _ =>
109109 false
110110 }
111111
112112
113113 func nationsTryGetString (key) = match getString(Address(nationsAddress), key) {
114114 case b: String =>
115115 b
116116 case _ =>
117117 ""
118118 }
119119
120120
121121 func getAssetOwnerKeyString (assetId) = (assetId + "_Owner")
122+
123+
124+func assetsTryGetInteger (key) = match getInteger(Address(assetsAddress), key) {
125+ case b: Int =>
126+ b
127+ case _ =>
128+ 0
129+}
122130
123131
124132 let BuildStarted = "BUILD_STARTED"
125133
126134 let BuildFinished = "BUILD_FINISHED"
127135
128136 func getAssetIdKey (txId,assetType) = ((assetType + "_") + toBase58String(txId))
129137
130138
131139 func getAssetOwnerKey (txId,assetType) = (getAssetIdKey(txId, assetType) + "_Owner")
132140
133141
134142 func getBuildingFinishHeightKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_fh")
135143
136144
137145 func getBuildingStatusKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_status")
138146
139147
140148 func getAssetTypeLevel (assetStr) = {
141149 let chunks = split(assetStr, "_")
142150 let strAssetType = chunks[0]
143151 let level = parseIntValue(drop(chunks[1], 3))
144152 $Tuple2(strAssetType, level)
145153 }
146154
147155
148156 func internalDistrib (addressStr,amount) = {
149157 let tr = invoke(Address(treasuryAddress), "addReward", [addressFromStringValue(addressStr), amount], nil)
150158 if ((tr == tr))
151159 then match tr {
152160 case t: Int =>
153161 amount
154162 case _ =>
155163 0
156164 }
157165 else throw("Strict value is not equal to itself.")
158166 }
159167
160168
161169 func distribDestroyRewards (accum,nextValue) = {
162170 let val = split(nextValue, "_")
163171 let addr = val[0]
164172 let amnt = val[1]
165173 (accum :+ internalDistrib(addr, parseIntValue(amnt)))
166174 }
167175
168176
169177 func internalSacrificeFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey,transactionId,sacrificekey) = {
170178 let chunks = getAssetTypeLevel(assetStr)
171179 let strAssetType = chunks._1
172180 let level = chunks._2
173181 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
174182 if ((buildingFinishHeight > height))
175183 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
176184 else if ((take(strAssetType, 4) == "TECH"))
177185 then {
178186 let discovered = invoke(Address(nationsAddress), "setTecnhnologyDiscovered", [caller, assetStr], nil)
179187 if ((discovered == true))
180188 then [DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey), DeleteEntry(getAssetOwnerKey(transactionId, assetStr))]
181189 else throw("error discovering technology")
182190 }
183191 else {
184192 let assetPower = confTryGetInteger((assetStr + "_Power"))
185193 let assetCoins = ((confTryGetInteger((sacrificekey + "_Cost")) * 20) / 100)
186194 if ((assetPower > 0))
187195 then {
188196 let currentPower = nationsTryGetInteger((caller + "_Power"))
189197 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
190198 if ((pw == pw))
191199 then [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
192200 else throw("Strict value is not equal to itself.")
193201 }
194202 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
195203 }
196204 }
197205
198206
199207 func internalFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey,transactionId) = {
200208 let chunks = getAssetTypeLevel(assetStr)
201209 let strAssetType = chunks._1
202210 let level = chunks._2
203211 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
204212 if ((buildingFinishHeight > height))
205213 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
206214 else if ((take(strAssetType, 4) == "TECH"))
207215 then {
208216 let discovered = invoke(Address(nationsAddress), "setTecnhnologyDiscovered", [caller, assetStr], nil)
209217 if ((discovered == true))
210218 then [DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey), DeleteEntry(getAssetOwnerKey(transactionId, assetStr))]
211219 else throw("error discovering technology")
212220 }
213221 else {
214222 let assetPower = confTryGetInteger((assetStr + "_Power"))
215223 let assetCoins = ((confTryGetInteger((assetStr + "_Cost")) * 20) / 100)
216224 let refCall = invoke(Address(treasuryAddress), "Pay", [caller, assetCoins], nil)
217225 if ((refCall == refCall))
218226 then if ((assetPower > 0))
219227 then {
220228 let currentPower = nationsTryGetInteger((caller + "_Power"))
221229 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
222230 if ((pw == pw))
223231 then if (confTryGetBoolean((assetStr + "_Aggregated")))
224232 then {
225233 let aggrAssetkey = ((assetStr + "_") + caller)
226234 let coins = tryGetInteger(aggrAssetkey)
227235 let qty = tryGetInteger((aggrAssetkey + "_Qty"))
228236 [DeleteEntry(getAssetOwnerKey(transactionId, assetStr)), StringEntry((aggrAssetkey + "_Owner"), caller), IntegerEntry(aggrAssetkey, (coins + assetCoins)), IntegerEntry((aggrAssetkey + "_Qty"), (qty + 1)), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
229237 }
230238 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
231239 else throw("Strict value is not equal to itself.")
232240 }
233241 else if (confTryGetBoolean((assetStr + "_Aggregated")))
234242 then {
235243 let aggrAssetkey = ((assetStr + "_") + caller)
236244 let coins = tryGetInteger(aggrAssetkey)
237245 let qty = tryGetInteger((aggrAssetkey + "_Qty"))
238246 [DeleteEntry(getAssetOwnerKey(transactionId, assetStr)), StringEntry((aggrAssetkey + "_Owner"), caller), IntegerEntry(aggrAssetkey, (coins + assetCoins)), IntegerEntry((aggrAssetkey + "_Qty"), (qty + 1)), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
239247 }
240248 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
241249 else throw("Strict value is not equal to itself.")
242250 }
243251 }
244252
245253
246254 func checkAssetOwner (caller,assetKey) = {
247255 let assetOwner = tryGetString(getAssetOwnerKeyString(assetKey))
248256 (assetOwner == caller)
249257 }
250258
251259
252260 func isNationReservedAsset (Name,Level) = {
253261 let k = getALKey(Name, Level)
254262 confTryGetBoolean((k + "_NationReserved"))
255263 }
256264
257265
266+func IncreaseAggregatedAsset (assetId,Owner,qty) = {
267+ let chunks = getAssetTypeLevel(assetId)
268+ let strAssetType = chunks._1
269+ let level = chunks._2
270+ let k = getALKey(strAssetType, level)
271+ let assetPower = confTryGetInteger((k + "_Power"))
272+ let qtyPower = (assetPower * qty)
273+ let Coins = tryGetInteger(assetId)
274+ let qtyAsset = tryGetInteger((assetId + "_Qty"))
275+ let ownerPower = nationsTryGetInteger((Owner + "_Power"))
276+ let singleCoin = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
277+ let pw = invoke(Address(nationsAddress), "setUserPower", [Owner, (ownerPower - qtyPower)], nil)
278+ if ((pw == pw))
279+ then [IntegerEntry((assetId + "_Qty"), (qtyAsset + qty)), IntegerEntry(assetId, (Coins + (qty * singleCoin)))]
280+ else throw("Strict value is not equal to itself.")
281+ }
282+
283+
284+func DecreaseAggregatedAsset (assetId,Owner,qty) = {
285+ let qtyAsset = tryGetInteger((assetId + "_Qty"))
286+ if ((0 > (qtyAsset - qty)))
287+ then throw("you don't have enough unit")
288+ else IncreaseAggregatedAsset(assetId, Owner, (0 - qty))
289+ }
290+
291+
258292 func internalTrasnferOwnership (assetId,newOwner,qty) = {
259293 let chunks = getAssetTypeLevel(assetId)
260294 let strAssetType = chunks._1
261295 let level = chunks._2
262296 let k = getALKey(strAssetType, level)
263297 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
264298 if (confTryGetBoolean((k + "_Aggregated")))
265299 then {
266- let assetPower = confTryGetInteger((k + "_Power"))
267- let qtyPower = (assetPower * qty)
268- let aggrAssetkey = ((k + "_") + oldOwner)
269- let oldPower = nationsTryGetInteger((oldOwner + "_Power"))
270- let oldCoins = tryGetInteger(aggrAssetkey)
271- let singleCoin = fraction(oldCoins, 1, qty)
272- let oldItemqty = tryGetInteger((aggrAssetkey + "_Qty"))
273300 let newAggrAssetKey = ((k + "_") + newOwner)
274- let newCoins = tryGetInteger(newAggrAssetKey)
275- let newItemqty = tryGetInteger((newAggrAssetKey + "_Qty"))
276- let newPower = nationsTryGetInteger((newOwner + "_Power"))
277- let pwOld = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (oldPower - qtyPower)], nil)
278- if ((pwOld == pwOld))
279- then {
280- let pwNew = invoke(Address(nationsAddress), "setUserPower", [newOwner, (newPower + qtyPower)], nil)
281- if ((pwNew == pwNew))
282- then [IntegerEntry((aggrAssetkey + "_Qty"), (oldItemqty - qty)), IntegerEntry((newAggrAssetKey + "_Qty"), (newItemqty + qty)), IntegerEntry(aggrAssetkey, (oldCoins - (qty * singleCoin))), IntegerEntry(newAggrAssetKey, (newCoins + (qty * singleCoin)))]
283- else throw("Strict value is not equal to itself.")
284- }
285- else throw("Strict value is not equal to itself.")
301+ let achunks = split(assetId, "_")
302+ let aoldOwner = achunks[2]
303+ let aggrAssetkey = ((k + "_") + aoldOwner)
304+ let dec = DecreaseAggregatedAsset(aggrAssetkey, aoldOwner, qty)
305+ let inc = IncreaseAggregatedAsset(newAggrAssetKey, newOwner, qty)
306+ (inc ++ dec)
286307 }
287308 else {
288309 let assetPower = confTryGetInteger((k + "_Power"))
289310 if ((assetPower > 0))
290311 then {
291312 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
292313 let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - assetPower)], nil)
293314 if ((pw == pw))
294315 then if ((pw != (currentPower - assetPower)))
295316 then throw("Incorrect invoke result")
296317 else {
297318 let newcurrentPower = nationsTryGetInteger((newOwner + "_Power"))
298319 let pw2 = invoke(Address(nationsAddress), "setUserPower", [newOwner, (newcurrentPower + assetPower)], nil)
299320 if ((pw2 == pw2))
300321 then match pw2 {
301322 case r: Int =>
302323 [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
303324 case _ =>
304325 throw("Incorrect invoke result")
305326 }
306327 else throw("Strict value is not equal to itself.")
307328 }
308329 else throw("Strict value is not equal to itself.")
309330 }
310331 else [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
311332 }
312333 }
313334
314335
315336 func CheckAssetBuildableSacrifice (ALKey,caller,SacrificeKey) = {
316337 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
317338 let assetSaclvl = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
318339 if ((assetSac == ""))
319340 then true
320341 else if (!(checkAssetOwner(caller, SacrificeKey)))
321342 then throw("you are not the owner of the Sacrifice asset")
322343 else {
323344 let chunks = getAssetTypeLevel(SacrificeKey)
324345 if (if ((assetSac != chunks._1))
325346 then true
326347 else (assetSaclvl != chunks._2))
327348 then throw("the sacrificeAsset has the wrong type or level")
328349 else true
329350 }
330351 }
331352
332353
333354 func CheckAssetBuildableNation (Name,Level,NationKey,SacrificeKey) = {
334355 let cnfgKey = getALKey(Name, Level)
335356 let tec = confTryGetString((cnfgKey + "_Tecnhology_discovered"))
336357 if ((tec != ""))
337358 then if (nationsTryGetBoolean(((NationKey + "_") + tec)))
338359 then CheckAssetBuildableSacrifice(cnfgKey, NationKey, SacrificeKey)
339360 else false
340361 else CheckAssetBuildableSacrifice(cnfgKey, NationKey, SacrificeKey)
341362 }
342363
343364
344365 func CheckAssetBuildableUser (Name,Level,caller,SacrificeKey) = {
345366 let cnfKey = getALKey(Name, Level)
346367 let nationId = nationsTryGetInteger(caller)
347368 if ((nationId == 0))
348369 then false
349370 else {
350371 let tec = confTryGetString((cnfKey + "_Tecnhology_discovered"))
351372 if ((tec != ""))
352373 then {
353374 let NationKey = nationsTryGetString(toString(nationId))
354375 if (nationsTryGetBoolean(((NationKey + "_") + tec)))
355376 then CheckAssetBuildableSacrifice(cnfKey, caller, SacrificeKey)
356377 else false
357378 }
358379 else CheckAssetBuildableSacrifice(cnfKey, caller, SacrificeKey)
359380 }
360381 }
361382
362383
363384 func CheckAssetBuildable (Name,Level,Caller,NationKey,SacrificeKey) = if ((NationKey != ""))
364385 then CheckAssetBuildableNation(Name, Level, NationKey, SacrificeKey)
365386 else CheckAssetBuildableUser(Name, Level, Caller, SacrificeKey)
366387
367388
368389 @Callable(i)
369390 func StartBuild (strAssetType,Level,NationKey,SacrificeKey) = if (!(CheckAssetBuildable(strAssetType, Level, toString(i.caller), NationKey, SacrificeKey)))
370391 then throw("You cannot build this Item")
371392 else {
372393 let cnfgKey = getALKey(strAssetType, Level)
373394 let delayForBuilding = confTryGetInteger((cnfgKey + "_BuildTime"))
374395 let assetBuildCost = confTryGetInteger((cnfgKey + "_Cost"))
375396 let ToAdminWallet = ((assetBuildCost * 5) / 100)
376397 let ToGameRewardsWallet = ((assetBuildCost * 10) / 100)
377398 let ToStakingRewardsWallet = ((assetBuildCost * 65) / 100)
378399 let UnitStakeSheg = (((assetBuildCost - ToAdminWallet) - ToGameRewardsWallet) - ToStakingRewardsWallet)
379400 if (isNationReservedAsset(strAssetType, Level))
380401 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
381402 then !(checkAdmin(i.caller))
382403 else false)
383404 then throw("You are not the owner of the nation")
384405 else {
385406 let nationsheg = treasuryTryGetInteger(getTreasuryKey(NationKey))
386407 if ((assetBuildCost > nationsheg))
387408 then throw("The nation hasn't enough funds")
388409 else {
389410 let d = invoke(Address(treasuryAddress), "decreaseNationWallet", [NationKey, assetBuildCost], nil)
390411 match d {
391412 case r: Int =>
392413 let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, UnitStakeSheg], nil)
393414 match pw {
394415 case b: Int =>
395416 let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
396417 match transfer {
397418 case t: Int =>
398419 [StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, cnfgKey), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, cnfgKey), NationKey), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, cnfgKey), (height + delayForBuilding))]
399420 case _ =>
400421 throw("Error Distributing asset rewards")
401422 }
402423 case _ =>
403424 throw("Error Depositing nation funds")
404425 }
405426 case _ =>
406427 throw("Error Depositing nation funds")
407428 }
408429 }
409430 }
410431 else {
411432 let assetSac = confTryGetString((cnfgKey + "_SacrificeAsset"))
412433 if ((assetSac != ""))
413434 then [DeleteEntry(SacrificeKey), DeleteEntry((SacrificeKey + "_Owner")), StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, cnfgKey), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, cnfgKey), toString(i.originCaller)), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, cnfgKey), (height + delayForBuilding))]
414435 else {
415436 let amountIn = value(i.payments[0].amount)
416437 if ((assetBuildCost > amountIn))
417438 then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
418439 else if ((i.payments[0].assetId != shinywggid))
419440 then throw("Only $HEG payments allowed")
420441 else {
421442 let pw = invoke(Address(treasuryAddress), "Deposit", nil, [AttachedPayment(shinywggid, UnitStakeSheg)])
422443 match pw {
423444 case r: Int =>
424445 [StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, cnfgKey), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, cnfgKey), toString(i.originCaller)), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, cnfgKey), (height + delayForBuilding)), ScriptTransfer(adminWallet, ToAdminWallet, shinywggid), ScriptTransfer(dailyGameRewardsWallet, ToGameRewardsWallet, shinywggid), ScriptTransfer(dailyStakingRewardsWallet, ToStakingRewardsWallet, shinywggid)]
425446 case _ =>
426447 throw("Incorrect invoke result")
427448 }
428449 }
429450 }
430451 }
431452 }
432453
433454
434455
435456 @Callable(i)
436457 func FinishBuild (txIdStr,assetStr,Level,NationKey) = {
437458 let txId = fromBase58String(txIdStr)
438459 let ALKey = getALKey(assetStr, Level)
439460 let BuildingStatusKey = getBuildingStatusKey(toString(i.caller), txId, ALKey)
440461 let finishHeightKey = getBuildingFinishHeightKey(toString(i.caller), txId, ALKey)
441462 let assetKey = getAssetIdKey(txId, ALKey)
442463 let assetOwner = tryGetString(getAssetOwnerKey(txId, ALKey))
443464 if (isNationReservedAsset(assetStr, Level))
444465 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
445466 then !(checkAdmin(i.caller))
446467 else false)
447468 then throw("You are not authorized to perform this operation")
448469 else internalFinishBuild(NationKey, ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
449470 else if ((assetOwner != toString(i.caller)))
450471 then throw(("You cannot claim other's players " + assetStr))
451472 else {
452473 let buildingTxStatus = tryGetString(BuildingStatusKey)
453474 if ((buildingTxStatus == ""))
454475 then throw("No pending operations for this asset")
455476 else {
456477 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
457478 let assetSacLevel = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
458479 if ((assetSac != ""))
459480 then internalSacrificeFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId, getALKey(assetSac, assetSacLevel))
460481 else internalFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
461482 }
462483 }
463484 }
464485
465486
466487
467488 @Callable(i)
468489 func transferOwnership (assetId,newOwner,qty) = if (!(checkAdmin(i.caller)))
469490 then throw("Only the admin can perform this operation")
470491 else $Tuple2(internalTrasnferOwnership(assetId, newOwner, qty), newOwner)
471492
472493
473494
474495 @Callable(i)
475496 func destroyAssetAndTransfer (assetId,qty,toAddress) = {
476497 let chunks = getAssetTypeLevel(assetId)
477498 let strAssetType = chunks._1
478499 let level = chunks._2
479500 let k = getALKey(strAssetType, level)
480501 if (!(checkAdmin(i.caller)))
481502 then throw("Only the admin can perform this operation")
482503 else {
483504 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
484505 let assetCoins = tryGetInteger(assetId)
485506 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
486507 let assetPower = confTryGetInteger((k + "_Power"))
487508 if (confTryGetBoolean((k + "_Aggregated")))
488509 then {
489510 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
490- let qtyAsset = tryGetInteger((k + "_Qty"))
511+ let achunks = split(assetId, "_")
512+ let aoldOwner = achunks[2]
513+ let qtyAsset = tryGetInteger((assetId + "_Qty"))
491514 if ((0 > (qtyAsset - qty)))
492515 then throw(("you don't have enough " + strAssetType))
493516 else {
494- let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - (assetPower * qty))], nil)
517+ let pw = invoke(Address(nationsAddress), "setUserPower", [aoldOwner, (currentPower - (assetPower * qty))], nil)
495518 match pw {
496519 case r: Int =>
497520 let attackers = split(toAddress, "#")
498521 let dist = {
499522 let $l = attackers
500523 let $s = size($l)
501524 let $acc0 = nil
502525 func $f0_1 ($a,$i) = if (($i >= $s))
503526 then $a
504527 else distribDestroyRewards($a, $l[$i])
505528
506529 func $f0_2 ($a,$i) = if (($i >= $s))
507530 then $a
508531 else throw("List size exceeds 50")
509532
510533 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
511534 }
512535 if ((dist == dist))
513536 then if (((qtyAsset - qty) > 0))
514- then [IntegerEntry((k + "_Qty"), (qtyAsset - qty))]
537+ then [IntegerEntry((assetId + "_Qty"), (qtyAsset - qty))]
515538 else [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
516539 else throw("Strict value is not equal to itself.")
517540 case _ =>
518541 throw("Error setting user power")
519542 }
520543 }
521544 }
522545 else {
523546 let attackers = split(toAddress, "#")
524547 let dist = {
525548 let $l = attackers
526549 let $s = size($l)
527550 let $acc0 = nil
528551 func $f0_1 ($a,$i) = if (($i >= $s))
529552 then $a
530553 else distribDestroyRewards($a, $l[$i])
531554
532555 func $f0_2 ($a,$i) = if (($i >= $s))
533556 then $a
534557 else throw("List size exceeds 50")
535558
536559 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
537560 }
538561 if ((dist == dist))
539562 then {
540563 let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - assetPower)], nil)
541564 if ((pw == pw))
542565 then match pw {
543566 case r: Int =>
544567 [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
545568 case _ =>
546569 throw("Error setting user power")
547570 }
548571 else throw("Strict value is not equal to itself.")
549572 }
550573 else throw("Strict value is not equal to itself.")
551574 }
552575 }
553576 }
554577
555578
556579
557580 @Callable(i)
558581 func destroyAssetFromUser (assetId,qty) = {
559582 let chunks = getAssetTypeLevel(assetId)
560583 let strAssetType = chunks._1
561584 let level = chunks._2
562585 let k = getALKey(strAssetType, level)
563586 if (!(checkAssetOwner(toString(i.caller), assetId)))
564587 then throw("You don't own this asset")
565588 else {
566589 let assetCoins = tryGetInteger(assetId)
567590 let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
568591 let assetPower = confTryGetInteger((k + "_Power"))
569592 if (confTryGetBoolean((k + "_Aggregated")))
570593 then {
571594 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
572- let qtyAsset = tryGetInteger((k + "_Qty"))
595+ let aggrAssetkey = ((k + "_") + toString(i.caller))
596+ let qtyAsset = tryGetInteger((aggrAssetkey + "_Qty"))
573597 if ((0 > (qtyAsset - qty)))
574598 then throw(("you don't have enough " + strAssetType))
575599 else {
576600 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - (assetPower * qty))], nil)
577601 match pw {
578602 case r: Int =>
579603 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), (unitAssetCoins * qty)], nil)
580604 match tr {
581605 case t: Int =>
582- if (((qtyAsset - qty) > 0))
583- then [IntegerEntry((k + "_Qty"), (qtyAsset - qty))]
584- else [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
606+[IntegerEntry((aggrAssetkey + "_Qty"), (qtyAsset - qty))]
585607 case _ =>
586608 throw("Error transferring coins")
587609 }
588610 case _ =>
589611 throw("Error setting user power")
590612 }
591613 }
592614 }
593615 else {
594616 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - assetPower)], nil)
595617 match pw {
596618 case r: Int =>
597619 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), assetCoins], nil)
598620 match tr {
599621 case t: Int =>
600622 [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
601623 case _ =>
602624 throw("Error transferring coins")
603625 }
604626 case _ =>
605627 throw("Error setting user power")
606628 }
607629 }
608630 }
609631 }
610632
611633
612634
613635 @Callable(i)
614636 func setNationOwner (nationKey,newOwner) = if (checkAdmin(i.caller))
615637 then $Tuple2([StringEntry((nationKey + "_Owner"), newOwner)], true)
616638 else {
617639 let currentOwner = tryGetString((nationKey + "_Owner"))
618640 if ((currentOwner != toString(i.caller)))
619641 then throw("You are not the nation owner")
620642 else [StringEntry((nationKey + "_Owner"), newOwner)]
621643 }
622644
623645
624646
625647 @Callable(i)
626648 func buyNationItem (assetId,NationKey) = {
627649 let chunks = getAssetTypeLevel(assetId)
628650 let strAssetType = chunks._1
629651 let level = chunks._2
630652 let k = getALKey(strAssetType, level)
631653 let n = nationsTryGetInteger(toString(i.caller))
632654 let nid = nationsTryGetInteger(NationKey)
633655 if ((n != nid))
634656 then throw("you can buy assets only from your nation")
635657 else if (!(checkAssetOwner(NationKey, assetId)))
636658 then throw("The asset does not belong to the nation")
637659 else if (!(isNationReservedAsset(strAssetType, level)))
638660 then throw("this asset cannot be sold by the nation")
639661 else {
640662 let assetPrice = confTryGetInteger((getALKey(strAssetType, level) + "_SellPrice"))
641663 let amountIn = value(i.payments[0].amount)
642664 if ((assetPrice > amountIn))
643665 then throw(("You provided less $heg than the needed cost for buying this " + strAssetType))
644666 else if ((i.payments[0].assetId != shinywggid))
645667 then throw("Only $HEG payments allowed")
646668 else {
647669 let a = invoke(Address(treasuryAddress), "increaseNationWallet", [NationKey, amountIn], nil)
648670 match a {
649671 case b: Int =>
650672 (internalTrasnferOwnership(assetId, toString(i.caller), 1) :+ ScriptTransfer(Address(treasuryAddress), amountIn, shinywggid))
651673 case _ =>
652674 throw("Error transferring SHEG to nations wallet")
653675 }
654676 }
655677 }
656678 }
657679
658680
659681
660682 @Callable(i)
661-func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = if (!(checkAdmin(i.caller)))
662- then throw("You are not allowed to perform this operation")
663- else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
683+func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = {
684+ let chunks = getAssetTypeLevel(assetId)
685+ let strAssetType = chunks._1
686+ let level = chunks._2
687+ let k = getALKey(strAssetType, level)
688+ let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
689+ let assetPower = confTryGetInteger((k + "_Power"))
690+ if (!(checkAdmin(i.caller)))
691+ then throw("You are not allowed to perform this operation")
692+ else if (confTryGetBoolean((k + "_Aggregated")))
693+ then {
694+ let achunks = split(assetId, "_")
695+ let aoldOwner = achunks[2]
696+ IncreaseAggregatedAsset(assetId, aoldOwner, 1)
697+ }
698+ else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
699+ }
664700
665701
666702
667703 @Callable(i)
668-func TransferAssetToMarketplace (assetId,sellprice) = if (!(checkAssetOwner(toString(i.caller), assetId)))
669- then throw("You are not the owner of this asset")
670- else {
671- let assetSheg = tryGetInteger(assetId)
672- let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
673- match tr {
674- case t: Int =>
704+func TransferAssetToMarketplace (assetId,sellprice) = {
705+ let chunks = getAssetTypeLevel(assetId)
706+ let strAssetType = chunks._1
707+ let level = chunks._2
708+ let k = getALKey(strAssetType, level)
709+ let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
710+ let assetPower = confTryGetInteger((k + "_Power"))
711+ let assetSheg = tryGetInteger(assetId)
712+ if (!(checkAssetOwner(toString(i.caller), assetId)))
713+ then throw("You are not the owner of this asset")
714+ else if (confTryGetBoolean((k + "_Aggregated")))
715+ then {
716+ let achunks = split(assetId, "_")
717+ let oldOwner = achunks[2]
718+ let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
719+ match tr {
720+ case t: Int =>
721+ DecreaseAggregatedAsset(assetId, oldOwner, 1)
722+ case _ =>
723+ throw("Error putting the item on the marketplace")
724+ }
725+ }
726+ else {
727+ let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
728+ match tr {
729+ case t: Int =>
675730 [DeleteEntry(getAssetOwnerKeyString(assetId)), DeleteEntry(assetId)]
676- case _ =>
677- throw("Error putting the item on the marketplace")
678- }
679- }
731+ case _ =>
732+ throw("Error putting the item on the marketplace")
733+ }
734+ }
735+ }
680736
681737
682738
683739 @Callable(i)
684740 func DelKey (key) = if (!(checkAdmin(i.caller)))
685741 then throw("")
686742 else [DeleteEntry(key)]
687743
688744
689745
690746 @Callable(i)
691747 func UpdKey (key,val) = if (!(checkAdmin(i.caller)))
692748 then throw("")
693749 else [StringEntry(key, val)]
694750
695751

github/deemru/w8io/169f3d6 
86.06 ms