tx · Ec7y5Fso3LPNd9YH1H3kKbSQAZpbRUYRecxHxAy2eBmz

3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb:  -0.03300000 Waves

2022.10.26 13:44 [2289289] smart account 3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb > SELF 0.00000000 Waves

{ "type": 13, "id": "Ec7y5Fso3LPNd9YH1H3kKbSQAZpbRUYRecxHxAy2eBmz", "fee": 3300000, "feeAssetId": null, "timestamp": 1666781088338, "version": 2, "chainId": 84, "sender": "3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb", "senderPublicKey": "FWSsBbeCwLVkekWhvNKtX6JkrZiruRybKKVuiS3F4bqN", "proofs": [ "ArouAzVgH7p26CgnKFKfaKPpoPagzxg5BZ8xXCXq6WjUNrowrcab1Gu64T52MfWxEmDQ4ShzhbC9KSejzYM6RJe" ], "script": "base64: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aWxkaW5nU3RhdHVzS2V5AAAAD2ZpbmlzaEhlaWdodEtleQAAAA10cmFuc2FjdGlvbklkBAAAAAZjaHVua3MJAQAAABFnZXRBc3NldFR5cGVMZXZlbAAAAAEFAAAACGFzc2V0U3RyBAAAAAxzdHJBc3NldFR5cGUIBQAAAAZjaHVua3MAAAACXzEEAAAABWxldmVsCAUAAAAGY2h1bmtzAAAAAl8yBAAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPZmluaXNoSGVpZ2h0S2V5AwkAAGYAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdQnVpbGRpbmcgaXMgbm90IGZpbmlzaGVkIHlldCAJAAGkAAAAAQkAAGUAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAACcgYmxvY2tzIHJlbWFpbmluZywgaXQgd2lsbCB0YWtlIGFyb3VuZCAJAAGkAAAAAQkAAGUAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAAAggbWludXRlcwMJAAAAAAAAAgkAAS8AAAACBQAAAAxzdHJBc3NldFR5cGUAAAAAAAAAAAQCAAAABFRFQ0gEAAAACmRpc2NvdmVyZWQJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA5uYXRpb25zQWRkcmVzcwIAAAAYc2V0VGVjbmhub2xvZ3lEaXNjb3ZlcmVkCQAETAAAAAIFAAAABmNhbGxlcgkABEwAAAACBQAAAAhhc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAACmRpc2NvdmVyZWQGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIFAAAADXRyYW5zYWN0aW9uSWQFAAAACGFzc2V0U3RyBQAAAANuaWwJAAACAAAAAQIAAAAcZXJyb3IgZGlzY292ZXJpbmcgdGVjaG5vbG9neQQAAAAKYXNzZXRQb3dlcgkBAAAAEWNvbmZUcnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAhhc3NldFN0cgIAAAAGX1Bvd2VyBAAAAAphc3NldENvaW5zCQAAaQAAAAIJAABoAAAAAgkBAAAAEWNvbmZUcnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAhhc3NldFN0cgIAAAAFX0Nvc3QAAAAAAAAAABQAAAAAAAAAAGQEAAAAB3JlZkNhbGwJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA90cmVhc3VyeUFkZHJlc3MCAAAAA1BheQkABEwAAAACBQAAAAZjYWxsZXIJAARMAAAAAgUAAAAKYXNzZXRDb2lucwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAB3JlZkNhbGwFAAAAB3JlZkNhbGwDCQAAZgAAAAIFAAAACmFzc2V0UG93ZXIAAAAAAAAAAAAEAAAADGN1cnJlbnRQb3dlcgkBAAAAFG5hdGlvbnNUcnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAZjYWxsZXICAAAABl9Qb3dlcgQAAAACcHcJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA5uYXRpb25zQWRkcmVzcwIAAAAMc2V0VXNlclBvd2VyCQAETAAAAAIFAAAABmNhbGxlcgkABEwAAAACCQAAZAAAAAIFAAAADGN1cnJlbnRQb3dlcgUAAAAKYXNzZXRQb3dlcgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAAnB3BQAAAAJwdwMJAQAAABFjb25mVHJ5R2V0Qm9vbGVhbgAAAAEJAAEsAAAAAgUAAAAIYXNzZXRTdHICAAAAC19BZ2dyZWdhdGVkBAAAAAxhZ2dyQXNzZXRrZXkJAAEsAAAAAgkAASwAAAACBQAAAAhhc3NldFN0cgIAAAABXwUAAAAGY2FsbGVyBAAAAAVjb2lucwkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAAxhZ2dyQXNzZXRrZXkEAAAAA3F0eQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIFAAAADXRyYW5zYWN0aW9uSWQFAAAACGFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAMYWdnckFzc2V0a2V5AgAAAAZfT3duZXIFAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMYWdnckFzc2V0a2V5CQAAZAAAAAIFAAAABWNvaW5zBQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkAAGQAAAACBQAAAANxdHkAAAAAAAAAAAEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACGFzc2V0S2V5BQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAQAAABFjb25mVHJ5R2V0Qm9vbGVhbgAAAAEJAAEsAAAAAgUAAAAIYXNzZXRTdHICAAAAC19BZ2dyZWdhdGVkBAAAAAxhZ2dyQXNzZXRrZXkJAAEsAAAAAgkAASwAAAACBQAAAAhhc3NldFN0cgIAAAABXwUAAAAGY2FsbGVyBAAAAAVjb2lucwkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAAxhZ2dyQXNzZXRrZXkEAAAAA3F0eQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIFAAAADXRyYW5zYWN0aW9uSWQFAAAACGFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAMYWdnckFzc2V0a2V5AgAAAAZfT3duZXIFAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMYWdnckFzc2V0a2V5CQAAZAAAAAIFAAAABWNvaW5zBQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkAAGQAAAACBQAAAANxdHkAAAAAAAAAAAEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACGFzc2V0S2V5BQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgAAAAZjYWxsZXIAAAAIYXNzZXRLZXkEAAAACmFzc2V0T3duZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAWZ2V0QXNzZXRPd25lcktleVN0cmluZwAAAAEFAAAACGFzc2V0S2V5CQAAAAAAAAIFAAAACmFzc2V0T3duZXIFAAAABmNhbGxlcgEAAAAVaXNOYXRpb25SZXNlcnZlZEFzc2V0AAAAAgAAAAROYW1lAAAA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ZmljZUtleQkAAAIAAAABAgAAACx5b3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhlIFNhY3JpZmljZSBhc3NldAQAAAAGY2h1bmtzCQEAAAARZ2V0QXNzZXRUeXBlTGV2ZWwAAAABBQAAAAxTYWNyaWZpY2VLZXkDAwkBAAAAAiE9AAAAAgUAAAAIYXNzZXRTYWMIBQAAAAZjaHVua3MAAAACXzEGCQEAAAACIT0AAAACBQAAAAthc3NldFNhY2x2bAgFAAAABmNodW5rcwAAAAJfMgkAAAIAAAABAgAAAC50aGUgc2FjcmlmaWNlQXNzZXQgaGFzIHRoZSB3cm9uZyB0eXBlIG9yIGxldmVsBgEAAAAZQ2hlY2tBc3NldEJ1aWxkYWJsZU5hdGlvbgAAAAQAAAAETmFtZQAAAAVMZXZlbAAAAAlOYXRpb25LZXkAAAAMU2FjcmlmaWNlS2V5BAAAAAdjbmZnS2V5CQEAAAAIZ2V0QUxLZXkAAAACBQAAAAROYW1lBQAAAAVMZXZlbAQAAAADdGVjCQEAAAAQY29uZlRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgUAAAAHY25mZ0tleQIAAAAWX1RlY25ob2xvZ3lfZGlzY292ZXJlZAMJAQAAAAIhPQAAAAIFAAAAA3RlYwIAAAAAAwkBAAAAFG5hdGlvbnNUcnlHZXRCb29sZWFuAAAAAQkAASwAAAACCQABLAAAAAIFAAAACU5hdGlvbktleQIAAAABXwUAAAADdGVjCQEAAAAcQ2hlY2tBc3NldEJ1aWxkYWJsZVNhY3JpZmljZQAAAAMFAAAAB2NuZmdLZXkFAAAACU5hdGlvbktleQUAAAAMU2FjcmlmaWNlS2V5BwkBAAAAHENoZWNrQXNzZXRCdWlsZGFibGVTYWNyaWZpY2UAAAADBQAAAAdjbmZnS2V5BQAAAAlOYXRpb25LZXkFAAAADFNhY3JpZmljZUtleQEAAAAXQ2hlY2tBc3NldEJ1aWxkYWJsZVVzZXIAAAAEAAAABE5hbWUAAAAFTGV2ZWwAAAAGY2FsbGVyAAAADFNhY3JpZmljZUtleQQAAAAGY25mS2V5CQEAAAAIZ2V0QUxLZXkAAAACBQAAAAROYW1lBQAAAAVMZXZlbAQAAAAIbmF0aW9uSWQJAQAAABRuYXRpb25zVHJ5R2V0SW50ZWdlcgAAAAEFAAAABmNhbGxlcgMJAAAAAAAAAgUAAAAIbmF0aW9uSWQAAAAAAAAAAAAHBAAAAAN0ZWMJAQAAABBjb25mVHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACBQAAAAZjbmZLZXkCAAAAFl9UZWNuaG9sb2d5X2Rpc2NvdmVyZWQDCQEAAAACIT0AAAACBQAAAAN0ZWMCAAAAAAQAAAAJTmF0aW9uS2V5CQEAAAATbmF0aW9uc1RyeUdldFN0cmluZwAAAAEJAAGkAAAAAQUAAAAIbmF0aW9uSWQDCQEAAAAUbmF0aW9uc1RyeUdldEJvb2xlYW4AAAABCQABLAAAAAIJAAEsAAAAAgUAAAAJTmF0aW9uS2V5AgAAAAFfBQAAAAN0ZWMJAQAAABxDaGVja0Fzc2V0QnVpbGRhYmxlU2FjcmlmaWNlAAAAAwUAAAAGY25mS2V5BQAAAAZjYWxsZXIFAAAADFNhY3JpZmljZUtleQcJAQAAABxDaGVja0Fzc2V0QnVpbGRhYmxlU2FjcmlmaWNlAAAAAwUAAAAGY25mS2V5BQAAAAZjYWxsZXIFAAAADFNhY3JpZmljZUtleQEAAAATQ2hlY2tBc3NldEJ1aWxkYWJsZQAAAAUAAAAETmFtZQAAAAVMZXZlbAAAAAZDYWxsZXIAAAAJTmF0aW9uS2V5AAAADFNhY3JpZmljZUtleQMJAQAAAAIhPQAAAAIFAAAACU5hdGlvbktleQIAAAAACQEAAAAZQ2hlY2tBc3NldEJ1aWxkYWJsZU5hdGlvbgAAAAQFAAAABE5hbWUFAAAABUxldmVsBQAAAAlOYXRpb25LZXkFAAAADFNhY3JpZmljZUtleQkBAAAAF0NoZWNrQXNzZXRCdWlsZGFibGVVc2VyAAAABAUAAAAETmFtZQUAAAAFTGV2ZWwFAAAABkNhbGxlcgUAAAAMU2FjcmlmaWNlS2V5AAAACwAAAAFpAQAAAApTdGFydEJ1aWxkAAAABAAAAAxzdHJBc3NldFR5cGUAAAAFTGV2ZWwAAAAJTmF0aW9uS2V5AAAADFNhY3JpZmljZUtleQMJAQAAAAEhAAAAAQkBAAAAE0NoZWNrQXNzZXRCdWlsZGFibGUAAAAFBQAAAAxzdHJBc3NldFR5cGUFAAAABUxldmVsCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAJTmF0aW9uS2V5BQAAAAxTYWNyaWZpY2VLZXkJAAACAAAAAQIAAAAaWW91IGNhbm5vdCBidWlsZCB0aGlzIEl0ZW0EAAAAB2NuZmdLZXkJAQAAAAhnZXRBTEtleQAAAAIFAAAADHN0ckFzc2V0VHlwZQUAAAAFTGV2ZWwEAAAAEGRlbGF5Rm9yQnVpbGRpbmcJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAHY25mZ0tleQIAAAAKX0J1aWxkVGltZQQAAAAOYXNzZXRCdWlsZENvc3QJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAHY25mZ0tleQIAAAAFX0Nvc3QEAAAADVRvQWRtaW5XYWxsZXQJAABpAAAAAgkAAGgAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAAAAAAAAAAABQAAAAAAAAAAZAQAAAATVG9HYW1lUmV3YXJkc1dhbGxldAkAAGkAAAACCQAAaAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0AAAAAAAAAAAKAAAAAAAAAABkBAAAABZUb1N0YWtpbmdSZXdhcmRzV2FsbGV0CQAAaQAAAAIJAABoAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QAAAAAAAAAAEEAAAAAAAAAAGQEAAAADVVuaXRTdGFrZVNoZWcJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAA1Ub0FkbWluV2FsbGV0BQAAABNUb0dhbWVSZXdhcmRzV2FsbGV0BQAAABZUb1N0YWtpbmdSZXdhcmRzV2FsbGV0AwkBAAAAFWlzTmF0aW9uUmVzZXJ2ZWRBc3NldAAAAAIFAAAADHN0ckFzc2V0VHlwZQUAAAAFTGV2ZWwDAwkBAAAAASEAAAABCQEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAACU5hdGlvbktleQkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgcJAAACAAAAAQIAAAAjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoZSBuYXRpb24EAAAACm5hdGlvbnNoZWcJAQAAABV0cmVhc3VyeVRyeUdldEludGVnZXIAAAABCQEAAAAOZ2V0VHJlYXN1cnlLZXkAAAABBQAAAAlOYXRpb25LZXkDCQAAZgAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAApuYXRpb25zaGVnCQAAAgAAAAECAAAAHlRoZSBuYXRpb24gaGFzbid0IGVub3VnaCBmdW5kcwQAAAABZAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAAUZGVjcmVhc2VOYXRpb25XYWxsZXQJAARMAAAAAgUAAAAJTmF0aW9uS2V5CQAETAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAANuaWwFAAAAA25pbAQAAAAHJG1hdGNoMAUAAAABZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFyBQAAAAckbWF0Y2gwBAAAAAJwdwkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAARYXJiaXRyYXJ5QWRkQ29pbnMJAARMAAAAAgUAAAAJTmF0aW9uS2V5CQAETAAAAAIFAAAADVVuaXRTdGFrZVNoZWcFAAAAA25pbAUAAAADbmlsBAAAAAckbWF0Y2gxBQAAAAJwdwMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gxBAAAAAh0cmFuc2ZlcgkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAAaZGlzdHJpYnV0ZU5hdGlvblBheVJld2FyZHMJAARMAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QFAAAAA25pbAUAAAADbmlsBAAAAAckbWF0Y2gyBQAAAAh0cmFuc2ZlcgMJAAABAAAAAgUAAAAHJG1hdGNoMgIAAAADSW50BAAAAAF0BQAAAAckbWF0Y2gyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRnZXRCdWlsZGluZ1N0YXR1c0tleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5BQAAAAxCdWlsZFN0YXJ0ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5BQAAAAlOYXRpb25LZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRCdWlsZGluZ0ZpbmlzaEhlaWdodEtleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JCdWlsZGluZwUAAAADbmlsCQAAAgAAAAECAAAAIEVycm9yIERpc3RyaWJ1dGluZyBhc3NldCByZXdhcmRzCQAAAgAAAAECAAAAHUVycm9yIERlcG9zaXRpbmcgbmF0aW9uIGZ1bmRzCQAAAgAAAAECAAAAHUVycm9yIERlcG9zaXRpbmcgbmF0aW9uIGZ1bmRzBAAAAAhhc3NldFNhYwkBAAAAEGNvbmZUcnlHZXRTdHJpbmcAAAABCQABLAAAAAIFAAAAB2NuZmdLZXkCAAAAD19TYWNyaWZpY2VBc3NldAMJAQAAAAIhPQAAAAIFAAAACGFzc2V0U2FjAgAAAAAJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAMU2FjcmlmaWNlS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAAMU2FjcmlmaWNlS2V5AgAAAAZfT3duZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGdldEJ1aWxkaW5nU3RhdHVzS2V5AAAAAwkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAB2NuZmdLZXkFAAAADEJ1aWxkU3RhcnRlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAB2NuZmdLZXkJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEGRlbGF5Rm9yQnVpbGRpbmcFAAAAA25pbAQAAAAIYW1vdW50SW4JAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMJAABmAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QFAAAACGFtb3VudEluCQAAAgAAAAEJAAEsAAAAAgIAAAA+WW91IHByb3ZpZGVkIGxlc3MgJGhlZyB0aGFuIHRoZSBuZWVkZWQgY29zdCBmb3IgYnVpbGRpbmcgdGhpcyAFAAAADHN0ckFzc2V0VHlwZQMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAACnNoaW55d2dnaWQJAAACAAAAAQIAAAAaT25seSAkSEVHIHBheW1lbnRzIGFsbG93ZWQEAAAAAnB3CQAD/AAAAAQJAQAAAAdBZGRyZXNzAAAAAQUAAAAPdHJlYXN1cnlBZGRyZXNzAgAAAAdEZXBvc2l0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAACnNoaW55d2dnaWQFAAAADVVuaXRTdGFrZVNoZWcFAAAAA25pbAQAAAAHJG1hdGNoMAUAAAACcHcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABcgUAAAAHJG1hdGNoMAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0QnVpbGRpbmdTdGF0dXNLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQUAAAAMQnVpbGRTdGFydGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRBc3NldE93bmVyS2V5AAAAAggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRCdWlsZGluZ0ZpbmlzaEhlaWdodEtleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JCdWlsZGluZwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAthZG1pbldhbGxldAUAAAANVG9BZG1pbldhbGxldAUAAAAKc2hpbnl3Z2dpZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABZkYWlseUdhbWVSZXdhcmRzV2FsbGV0BQAAABNUb0dhbWVSZXdhcmRzV2FsbGV0BQAAAApzaGlueXdnZ2lkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAGWRhaWx5U3Rha2luZ1Jld2FyZHNXYWxsZXQFAAAAFlRvU3Rha2luZ1Jld2FyZHNXYWxsZXQFAAAACnNoaW55d2dnaWQFAAAAA25pbAkAAAIAAAABAgAAABdJbmNvcnJlY3QgaW52b2tlIHJlc3VsdAAAAAFpAQAAAAtGaW5pc2hCdWlsZAAAAAQAAAAHdHhJZFN0cgAAAAhhc3NldFN0cgAAAAVMZXZlbAAAAAlOYXRpb25LZXkEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAAFQUxLZXkJAQAAAAhnZXRBTEtleQAAAAIFAAAACGFzc2V0U3RyBQAAAAVMZXZlbAQAAAARQnVpbGRpbmdTdGF0dXNLZXkJAQAAABRnZXRCdWlsZGluZ1N0YXR1c0tleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBQAAAAVBTEtleQQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAUAAAAFQUxLZXkEAAAACGFzc2V0S2V5CQEAAAANZ2V0QXNzZXRJZEtleQAAAAIFAAAABHR4SWQFAAAABUFMS2V5BAAAAAphc3NldE93bmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACBQAAAAR0eElkBQAAAAVBTEtleQMJAQAAABVpc05hdGlvblJlc2VydmVkQXNzZXQAAAACBQAAAAhhc3NldFN0cgUAAAAFTGV2ZWwDAwkBAAAAASEAAAABCQEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAACU5hdGlvbktleQkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgcJAAACAAAAAQIAAAAwWW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uCQEAAAATaW50ZXJuYWxGaW5pc2hCdWlsZAAAAAYFAAAACU5hdGlvbktleQUAAAAFQUxLZXkFAAAACGFzc2V0S2V5BQAAABFCdWlsZGluZ1N0YXR1c0tleQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAAR0eElkAwkBAAAAAiE9AAAAAgUAAAAKYXNzZXRPd25lcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQkAASwAAAACAgAAACFZb3UgY2Fubm90IGNsYWltIG90aGVyJ3MgcGxheWVycyAFAAAACGFzc2V0U3RyBAAAABBidWlsZGluZ1R4U3RhdHVzCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkDCQAAAAAAAAIFAAAAEGJ1aWxkaW5nVHhTdGF0dXMCAAAAAAkAAAIAAAABAgAAACRObyBwZW5kaW5nIG9wZXJhdGlvbnMgZm9yIHRoaXMgYXNzZXQEAAAACGFzc2V0U2FjCQEAAAAQY29uZlRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgUAAAAFQUxLZXkCAAAAD19TYWNyaWZpY2VBc3NldAQAAAANYXNzZXRTYWNMZXZlbAkBAAAAEWNvbmZUcnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAVBTEtleQIAAAAUX1NhY3JpZmljZUFzc2V0TGV2ZWwDCQEAAAACIT0AAAACBQAAAAhhc3NldFNhYwIAAAAACQEAAAAcaW50ZXJuYWxTYWNyaWZpY2VGaW5pc2hCdWlsZAAAAAcJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVBTEtleQUAAAAIYXNzZXRLZXkFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5BQAAAA9maW5pc2hIZWlnaHRLZXkFAAAABHR4SWQJAQAAAAhnZXRBTEtleQAAAAIFAAAACGFzc2V0U2FjBQAAAA1hc3NldFNhY0xldmVsCQEAAAATaW50ZXJuYWxGaW5pc2hCdWlsZAAAAAYJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVBTEtleQUAAAAIYXNzZXRLZXkFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5BQAAAA9maW5pc2hIZWlnaHRLZXkFAAAABHR4SWQAAAABaQEAAAARdHJhbnNmZXJPd25lcnNoaXAAAAADAAAAB2Fzc2V0SWQAAAAIbmV3T3duZXIAAAADcXR5AwkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAClPbmx5IHRoZSBhZG1pbiBjYW4gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbgkABRQAAAACCQEAAAAZaW50ZXJuYWxUcmFzbmZlck93bmVyc2hpcAAAAAMFAAAAB2Fzc2V0SWQFAAAACG5ld093bmVyBQAAAANxdHkFAAAACG5ld093bmVyAAAAAWkBAAAAF2Rlc3Ryb3lBc3NldEFuZFRyYW5zZmVyAAAAAwAAAAdhc3NldElkAAAAA3F0eQAAAAl0b0FkZHJlc3MEAAAABmNodW5rcwkBAAAAEWdldEFzc2V0VHlwZUxldmVsAAAAAQUAAAAHYXNzZXRJZAQAAAAMc3RyQXNzZXRUeXBlCAUAAAAGY2h1bmtzAAAAAl8xBAAAAAVsZXZlbAgFAAAABmNodW5rcwAAAAJfMgQAAAABawkBAAAACGdldEFMS2V5AAAAAgUAAAAMc3RyQXNzZXRUeXBl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BSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAAAAAAAAAsAAAAAAAAAAAwAAAAAAAAAAA0AAAAAAAAAAA4AAAAAAAAAAA8AAAAAAAAAABAAAAAAAAAAABEAAAAAAAAAABIAAAAAAAAAABMAAAAAAAAAABQAAAAAAAAAABUAAAAAAAAAABYAAAAAAAAAABcAAAAAAAAAABgAAAAAAAAAABkAAAAAAAAAABoAAAAAAAAAABsAAAAAAAAAABwAAAAAAAAAAB0AAAAAAAAAAB4AAAAAAAAAAB8AAAAAAAAAACAAAAAAAAAAACEAAAAAAAAAACIAAAAAAAAAACMAAAAAAAAAACQAAAAAAAAAACUAAAAAAAAAACYAAAAAAAAAACcAAAAAAAAAACgAAAAAAAAAACkAAAAAAAAAACoAAAAAAAAAACsAAAAAAAAAACwAAAAAAAAAAC0AAAAAAAAAAC4AAAAAAAAA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", "height": 2289289, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2wMAKjcBSPZwgMTZ2wVggB1CcUB9rgHQy7u53ZB8AbHy Next: CAk16DjNfWsH1XwR3optUHAWesArsjJW6djiWZMFoPbi Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let shinywggid = base58'A2hcw6RV23Fc8Y8FNfV35Sq5QeS9Tgp6n8hbrESiRvXX'
4+let shinywggid = base58'AFQS5E4ELtxex3iANtWtUU2V2oWJZSo8VVnK8z3VFmqf'
55
6-let treasuryAddress = base58'3PDW5NBHrSqYhwB8KJidBfprM6n6KPCykBB'
6+let treasuryAddress = base58'3MyDGEoKp1gF4LSRknk9vSuDEyrwuYXcQEQ'
77
8-let assetsAddress = base58'3PRCCnKuNS3PdbcSYcKdmTecSXXR9SE3rVb'
8+let assetsAddress = base58'3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb'
99
10-let marketplaceAddress = base58'3P5EAhvWXJpTW5XCmw4cTRLirr5hdV43wG9'
10+let marketplaceAddress = base58'3Mra7mjPipcQd5sJaRmXK8xgS4scb8gPF4A'
1111
12-let configurationAddress = base58'3PDREv1pvqS9r2Gi5CZDHrgsQLigA9xXYp3'
12+let configurationAddress = base58'3N9tj3b2djcaZozn97VkYchL9S1i6cdEbC1'
1313
14-let nationsAddress = base58'3PAvvCSVicC2Ugsj9zWrzYmu2b6uAuGc3Fo'
14+let nationsAddress = base58'3MvyzDtzWWV5MZ1GP8JfQhhQqiGU4Nbifdy'
1515
16-let adminWallet = addressFromStringValue("3PHKGy65emtBy4xxeQwz49nzSV1cqcJdw4U")
16+let adminWallet = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
1717
18-let dailyGameRewardsWallet = addressFromStringValue("3PHANHAVYa72vkHVGrLqzUkyKeeEDhDknXj")
18+let dailyGameRewardsWallet = addressFromStringValue("3MuSrXTTiwo9bdoD6FeaBpMUYMiU5saDv2U")
1919
20-let dailyStakingRewardsWallet = addressFromStringValue("3PFQGA6DA66ny11vFAWPWrqprmivyyySDCv")
20+let dailyStakingRewardsWallet = addressFromStringValue("3Mv3mr3uNXdpgkVPApbGEJjMQXqau37DY5i")
2121
2222 func checkAdmin (caller) = if (if (if (if (if ((caller == adminWallet))
2323 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let shinywggid = base58'A2hcw6RV23Fc8Y8FNfV35Sq5QeS9Tgp6n8hbrESiRvXX'
4+let shinywggid = base58'AFQS5E4ELtxex3iANtWtUU2V2oWJZSo8VVnK8z3VFmqf'
55
6-let treasuryAddress = base58'3PDW5NBHrSqYhwB8KJidBfprM6n6KPCykBB'
6+let treasuryAddress = base58'3MyDGEoKp1gF4LSRknk9vSuDEyrwuYXcQEQ'
77
8-let assetsAddress = base58'3PRCCnKuNS3PdbcSYcKdmTecSXXR9SE3rVb'
8+let assetsAddress = base58'3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb'
99
10-let marketplaceAddress = base58'3P5EAhvWXJpTW5XCmw4cTRLirr5hdV43wG9'
10+let marketplaceAddress = base58'3Mra7mjPipcQd5sJaRmXK8xgS4scb8gPF4A'
1111
12-let configurationAddress = base58'3PDREv1pvqS9r2Gi5CZDHrgsQLigA9xXYp3'
12+let configurationAddress = base58'3N9tj3b2djcaZozn97VkYchL9S1i6cdEbC1'
1313
14-let nationsAddress = base58'3PAvvCSVicC2Ugsj9zWrzYmu2b6uAuGc3Fo'
14+let nationsAddress = base58'3MvyzDtzWWV5MZ1GP8JfQhhQqiGU4Nbifdy'
1515
16-let adminWallet = addressFromStringValue("3PHKGy65emtBy4xxeQwz49nzSV1cqcJdw4U")
16+let adminWallet = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
1717
18-let dailyGameRewardsWallet = addressFromStringValue("3PHANHAVYa72vkHVGrLqzUkyKeeEDhDknXj")
18+let dailyGameRewardsWallet = addressFromStringValue("3MuSrXTTiwo9bdoD6FeaBpMUYMiU5saDv2U")
1919
20-let dailyStakingRewardsWallet = addressFromStringValue("3PFQGA6DA66ny11vFAWPWrqprmivyyySDCv")
20+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")
122122
123123
124124 func assetsTryGetInteger (key) = match getInteger(Address(assetsAddress), key) {
125125 case b: Int =>
126126 b
127127 case _ =>
128128 0
129129 }
130130
131131
132132 let BuildStarted = "BUILD_STARTED"
133133
134134 let BuildFinished = "BUILD_FINISHED"
135135
136136 func getAssetIdKey (txId,assetType) = ((assetType + "_") + toBase58String(txId))
137137
138138
139139 func getAssetOwnerKey (txId,assetType) = (getAssetIdKey(txId, assetType) + "_Owner")
140140
141141
142142 func getBuildingFinishHeightKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_fh")
143143
144144
145145 func getBuildingStatusKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_status")
146146
147147
148148 func getAssetTypeLevel (assetStr) = {
149149 let chunks = split(assetStr, "_")
150150 let strAssetType = chunks[0]
151151 let level = parseIntValue(drop(chunks[1], 3))
152152 $Tuple2(strAssetType, level)
153153 }
154154
155155
156156 func internalDistrib (addressStr,amount) = {
157157 let tr = invoke(Address(treasuryAddress), "addReward", [addressFromStringValue(addressStr), amount], nil)
158158 if ((tr == tr))
159159 then match tr {
160160 case t: Int =>
161161 amount
162162 case _ =>
163163 0
164164 }
165165 else throw("Strict value is not equal to itself.")
166166 }
167167
168168
169169 func distribDestroyRewards (accum,nextValue) = {
170170 let val = split(nextValue, "_")
171171 let addr = val[0]
172172 let amnt = val[1]
173173 (accum :+ internalDistrib(addr, parseIntValue(amnt)))
174174 }
175175
176176
177177 func internalSacrificeFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey,transactionId,sacrificekey) = {
178178 let chunks = getAssetTypeLevel(assetStr)
179179 let strAssetType = chunks._1
180180 let level = chunks._2
181181 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
182182 if ((buildingFinishHeight > height))
183183 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
184184 else if ((take(strAssetType, 4) == "TECH"))
185185 then {
186186 let discovered = invoke(Address(nationsAddress), "setTecnhnologyDiscovered", [caller, assetStr], nil)
187187 if ((discovered == true))
188188 then [DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey), DeleteEntry(getAssetOwnerKey(transactionId, assetStr))]
189189 else throw("error discovering technology")
190190 }
191191 else {
192192 let assetPower = confTryGetInteger((assetStr + "_Power"))
193193 let assetCoins = ((confTryGetInteger((sacrificekey + "_Cost")) * 20) / 100)
194194 if ((assetPower > 0))
195195 then {
196196 let currentPower = nationsTryGetInteger((caller + "_Power"))
197197 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
198198 if ((pw == pw))
199199 then [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
200200 else throw("Strict value is not equal to itself.")
201201 }
202202 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
203203 }
204204 }
205205
206206
207207 func internalFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey,transactionId) = {
208208 let chunks = getAssetTypeLevel(assetStr)
209209 let strAssetType = chunks._1
210210 let level = chunks._2
211211 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
212212 if ((buildingFinishHeight > height))
213213 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
214214 else if ((take(strAssetType, 4) == "TECH"))
215215 then {
216216 let discovered = invoke(Address(nationsAddress), "setTecnhnologyDiscovered", [caller, assetStr], nil)
217217 if ((discovered == true))
218218 then [DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey), DeleteEntry(getAssetOwnerKey(transactionId, assetStr))]
219219 else throw("error discovering technology")
220220 }
221221 else {
222222 let assetPower = confTryGetInteger((assetStr + "_Power"))
223223 let assetCoins = ((confTryGetInteger((assetStr + "_Cost")) * 20) / 100)
224224 let refCall = invoke(Address(treasuryAddress), "Pay", [caller, assetCoins], nil)
225225 if ((refCall == refCall))
226226 then if ((assetPower > 0))
227227 then {
228228 let currentPower = nationsTryGetInteger((caller + "_Power"))
229229 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
230230 if ((pw == pw))
231231 then if (confTryGetBoolean((assetStr + "_Aggregated")))
232232 then {
233233 let aggrAssetkey = ((assetStr + "_") + caller)
234234 let coins = tryGetInteger(aggrAssetkey)
235235 let qty = tryGetInteger((aggrAssetkey + "_Qty"))
236236 [DeleteEntry(getAssetOwnerKey(transactionId, assetStr)), StringEntry((aggrAssetkey + "_Owner"), caller), IntegerEntry(aggrAssetkey, (coins + assetCoins)), IntegerEntry((aggrAssetkey + "_Qty"), (qty + 1)), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
237237 }
238238 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
239239 else throw("Strict value is not equal to itself.")
240240 }
241241 else if (confTryGetBoolean((assetStr + "_Aggregated")))
242242 then {
243243 let aggrAssetkey = ((assetStr + "_") + caller)
244244 let coins = tryGetInteger(aggrAssetkey)
245245 let qty = tryGetInteger((aggrAssetkey + "_Qty"))
246246 [DeleteEntry(getAssetOwnerKey(transactionId, assetStr)), StringEntry((aggrAssetkey + "_Owner"), caller), IntegerEntry(aggrAssetkey, (coins + assetCoins)), IntegerEntry((aggrAssetkey + "_Qty"), (qty + 1)), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
247247 }
248248 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
249249 else throw("Strict value is not equal to itself.")
250250 }
251251 }
252252
253253
254254 func checkAssetOwner (caller,assetKey) = {
255255 let assetOwner = tryGetString(getAssetOwnerKeyString(assetKey))
256256 (assetOwner == caller)
257257 }
258258
259259
260260 func isNationReservedAsset (Name,Level) = {
261261 let k = getALKey(Name, Level)
262262 confTryGetBoolean((k + "_NationReserved"))
263263 }
264264
265265
266266 func IncreaseAggregatedAsset (assetId,Owner,qty) = {
267267 let chunks = getAssetTypeLevel(assetId)
268268 let strAssetType = chunks._1
269269 let level = chunks._2
270270 let k = getALKey(strAssetType, level)
271271 let assetPower = confTryGetInteger((k + "_Power"))
272272 let qtyPower = (assetPower * qty)
273273 let Coins = tryGetInteger(assetId)
274274 let qtyAsset = tryGetInteger((assetId + "_Qty"))
275275 let ownerPower = nationsTryGetInteger((Owner + "_Power"))
276276 let singleCoin = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
277277 let pw = invoke(Address(nationsAddress), "setUserPower", [Owner, (ownerPower - qtyPower)], nil)
278278 if ((pw == pw))
279279 then [IntegerEntry((assetId + "_Qty"), (qtyAsset + qty)), IntegerEntry(assetId, (Coins + (qty * singleCoin)))]
280280 else throw("Strict value is not equal to itself.")
281281 }
282282
283283
284284 func DecreaseAggregatedAsset (assetId,Owner,qty) = {
285285 let qtyAsset = tryGetInteger((assetId + "_Qty"))
286286 if ((0 > (qtyAsset - qty)))
287287 then throw("you don't have enough unit")
288288 else IncreaseAggregatedAsset(assetId, Owner, (0 - qty))
289289 }
290290
291291
292292 func internalTrasnferOwnership (assetId,newOwner,qty) = {
293293 let chunks = getAssetTypeLevel(assetId)
294294 let strAssetType = chunks._1
295295 let level = chunks._2
296296 let k = getALKey(strAssetType, level)
297297 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
298298 if (confTryGetBoolean((k + "_Aggregated")))
299299 then {
300300 let newAggrAssetKey = ((k + "_") + newOwner)
301301 let achunks = split(assetId, "_")
302302 let aoldOwner = achunks[2]
303303 let aggrAssetkey = ((k + "_") + aoldOwner)
304304 let dec = DecreaseAggregatedAsset(aggrAssetkey, aoldOwner, qty)
305305 let inc = IncreaseAggregatedAsset(newAggrAssetKey, newOwner, qty)
306306 (inc ++ dec)
307307 }
308308 else {
309309 let assetPower = confTryGetInteger((k + "_Power"))
310310 if ((assetPower > 0))
311311 then {
312312 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
313313 let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - assetPower)], nil)
314314 if ((pw == pw))
315315 then if ((pw != (currentPower - assetPower)))
316316 then throw("Incorrect invoke result")
317317 else {
318318 let newcurrentPower = nationsTryGetInteger((newOwner + "_Power"))
319319 let pw2 = invoke(Address(nationsAddress), "setUserPower", [newOwner, (newcurrentPower + assetPower)], nil)
320320 if ((pw2 == pw2))
321321 then match pw2 {
322322 case r: Int =>
323323 [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
324324 case _ =>
325325 throw("Incorrect invoke result")
326326 }
327327 else throw("Strict value is not equal to itself.")
328328 }
329329 else throw("Strict value is not equal to itself.")
330330 }
331331 else [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
332332 }
333333 }
334334
335335
336336 func CheckAssetBuildableSacrifice (ALKey,caller,SacrificeKey) = {
337337 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
338338 let assetSaclvl = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
339339 if ((assetSac == ""))
340340 then true
341341 else if (!(checkAssetOwner(caller, SacrificeKey)))
342342 then throw("you are not the owner of the Sacrifice asset")
343343 else {
344344 let chunks = getAssetTypeLevel(SacrificeKey)
345345 if (if ((assetSac != chunks._1))
346346 then true
347347 else (assetSaclvl != chunks._2))
348348 then throw("the sacrificeAsset has the wrong type or level")
349349 else true
350350 }
351351 }
352352
353353
354354 func CheckAssetBuildableNation (Name,Level,NationKey,SacrificeKey) = {
355355 let cnfgKey = getALKey(Name, Level)
356356 let tec = confTryGetString((cnfgKey + "_Tecnhology_discovered"))
357357 if ((tec != ""))
358358 then if (nationsTryGetBoolean(((NationKey + "_") + tec)))
359359 then CheckAssetBuildableSacrifice(cnfgKey, NationKey, SacrificeKey)
360360 else false
361361 else CheckAssetBuildableSacrifice(cnfgKey, NationKey, SacrificeKey)
362362 }
363363
364364
365365 func CheckAssetBuildableUser (Name,Level,caller,SacrificeKey) = {
366366 let cnfKey = getALKey(Name, Level)
367367 let nationId = nationsTryGetInteger(caller)
368368 if ((nationId == 0))
369369 then false
370370 else {
371371 let tec = confTryGetString((cnfKey + "_Tecnhology_discovered"))
372372 if ((tec != ""))
373373 then {
374374 let NationKey = nationsTryGetString(toString(nationId))
375375 if (nationsTryGetBoolean(((NationKey + "_") + tec)))
376376 then CheckAssetBuildableSacrifice(cnfKey, caller, SacrificeKey)
377377 else false
378378 }
379379 else CheckAssetBuildableSacrifice(cnfKey, caller, SacrificeKey)
380380 }
381381 }
382382
383383
384384 func CheckAssetBuildable (Name,Level,Caller,NationKey,SacrificeKey) = if ((NationKey != ""))
385385 then CheckAssetBuildableNation(Name, Level, NationKey, SacrificeKey)
386386 else CheckAssetBuildableUser(Name, Level, Caller, SacrificeKey)
387387
388388
389389 @Callable(i)
390390 func StartBuild (strAssetType,Level,NationKey,SacrificeKey) = if (!(CheckAssetBuildable(strAssetType, Level, toString(i.caller), NationKey, SacrificeKey)))
391391 then throw("You cannot build this Item")
392392 else {
393393 let cnfgKey = getALKey(strAssetType, Level)
394394 let delayForBuilding = confTryGetInteger((cnfgKey + "_BuildTime"))
395395 let assetBuildCost = confTryGetInteger((cnfgKey + "_Cost"))
396396 let ToAdminWallet = ((assetBuildCost * 5) / 100)
397397 let ToGameRewardsWallet = ((assetBuildCost * 10) / 100)
398398 let ToStakingRewardsWallet = ((assetBuildCost * 65) / 100)
399399 let UnitStakeSheg = (((assetBuildCost - ToAdminWallet) - ToGameRewardsWallet) - ToStakingRewardsWallet)
400400 if (isNationReservedAsset(strAssetType, Level))
401401 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
402402 then !(checkAdmin(i.caller))
403403 else false)
404404 then throw("You are not the owner of the nation")
405405 else {
406406 let nationsheg = treasuryTryGetInteger(getTreasuryKey(NationKey))
407407 if ((assetBuildCost > nationsheg))
408408 then throw("The nation hasn't enough funds")
409409 else {
410410 let d = invoke(Address(treasuryAddress), "decreaseNationWallet", [NationKey, assetBuildCost], nil)
411411 match d {
412412 case r: Int =>
413413 let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, UnitStakeSheg], nil)
414414 match pw {
415415 case b: Int =>
416416 let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
417417 match transfer {
418418 case t: Int =>
419419 [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))]
420420 case _ =>
421421 throw("Error Distributing asset rewards")
422422 }
423423 case _ =>
424424 throw("Error Depositing nation funds")
425425 }
426426 case _ =>
427427 throw("Error Depositing nation funds")
428428 }
429429 }
430430 }
431431 else {
432432 let assetSac = confTryGetString((cnfgKey + "_SacrificeAsset"))
433433 if ((assetSac != ""))
434434 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))]
435435 else {
436436 let amountIn = value(i.payments[0].amount)
437437 if ((assetBuildCost > amountIn))
438438 then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
439439 else if ((i.payments[0].assetId != shinywggid))
440440 then throw("Only $HEG payments allowed")
441441 else {
442442 let pw = invoke(Address(treasuryAddress), "Deposit", nil, [AttachedPayment(shinywggid, UnitStakeSheg)])
443443 match pw {
444444 case r: Int =>
445445 [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)]
446446 case _ =>
447447 throw("Incorrect invoke result")
448448 }
449449 }
450450 }
451451 }
452452 }
453453
454454
455455
456456 @Callable(i)
457457 func FinishBuild (txIdStr,assetStr,Level,NationKey) = {
458458 let txId = fromBase58String(txIdStr)
459459 let ALKey = getALKey(assetStr, Level)
460460 let BuildingStatusKey = getBuildingStatusKey(toString(i.caller), txId, ALKey)
461461 let finishHeightKey = getBuildingFinishHeightKey(toString(i.caller), txId, ALKey)
462462 let assetKey = getAssetIdKey(txId, ALKey)
463463 let assetOwner = tryGetString(getAssetOwnerKey(txId, ALKey))
464464 if (isNationReservedAsset(assetStr, Level))
465465 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
466466 then !(checkAdmin(i.caller))
467467 else false)
468468 then throw("You are not authorized to perform this operation")
469469 else internalFinishBuild(NationKey, ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
470470 else if ((assetOwner != toString(i.caller)))
471471 then throw(("You cannot claim other's players " + assetStr))
472472 else {
473473 let buildingTxStatus = tryGetString(BuildingStatusKey)
474474 if ((buildingTxStatus == ""))
475475 then throw("No pending operations for this asset")
476476 else {
477477 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
478478 let assetSacLevel = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
479479 if ((assetSac != ""))
480480 then internalSacrificeFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId, getALKey(assetSac, assetSacLevel))
481481 else internalFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
482482 }
483483 }
484484 }
485485
486486
487487
488488 @Callable(i)
489489 func transferOwnership (assetId,newOwner,qty) = if (!(checkAdmin(i.caller)))
490490 then throw("Only the admin can perform this operation")
491491 else $Tuple2(internalTrasnferOwnership(assetId, newOwner, qty), newOwner)
492492
493493
494494
495495 @Callable(i)
496496 func destroyAssetAndTransfer (assetId,qty,toAddress) = {
497497 let chunks = getAssetTypeLevel(assetId)
498498 let strAssetType = chunks._1
499499 let level = chunks._2
500500 let k = getALKey(strAssetType, level)
501501 if (!(checkAdmin(i.caller)))
502502 then throw("Only the admin can perform this operation")
503503 else {
504504 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
505505 let assetCoins = tryGetInteger(assetId)
506506 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
507507 let assetPower = confTryGetInteger((k + "_Power"))
508508 if (confTryGetBoolean((k + "_Aggregated")))
509509 then {
510510 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
511511 let achunks = split(assetId, "_")
512512 let aoldOwner = achunks[2]
513513 let qtyAsset = tryGetInteger((assetId + "_Qty"))
514514 if ((0 > (qtyAsset - qty)))
515515 then throw(("you don't have enough " + strAssetType))
516516 else {
517517 let pw = invoke(Address(nationsAddress), "setUserPower", [aoldOwner, (currentPower - (assetPower * qty))], nil)
518518 match pw {
519519 case r: Int =>
520520 let attackers = split(toAddress, "#")
521521 let dist = {
522522 let $l = attackers
523523 let $s = size($l)
524524 let $acc0 = nil
525525 func $f0_1 ($a,$i) = if (($i >= $s))
526526 then $a
527527 else distribDestroyRewards($a, $l[$i])
528528
529529 func $f0_2 ($a,$i) = if (($i >= $s))
530530 then $a
531531 else throw("List size exceeds 50")
532532
533533 $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)
534534 }
535535 if ((dist == dist))
536536 then if (((qtyAsset - qty) > 0))
537537 then [IntegerEntry((assetId + "_Qty"), (qtyAsset - qty))]
538538 else [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
539539 else throw("Strict value is not equal to itself.")
540540 case _ =>
541541 throw("Error setting user power")
542542 }
543543 }
544544 }
545545 else {
546546 let attackers = split(toAddress, "#")
547547 let dist = {
548548 let $l = attackers
549549 let $s = size($l)
550550 let $acc0 = nil
551551 func $f0_1 ($a,$i) = if (($i >= $s))
552552 then $a
553553 else distribDestroyRewards($a, $l[$i])
554554
555555 func $f0_2 ($a,$i) = if (($i >= $s))
556556 then $a
557557 else throw("List size exceeds 50")
558558
559559 $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)
560560 }
561561 if ((dist == dist))
562562 then {
563563 let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - assetPower)], nil)
564564 if ((pw == pw))
565565 then match pw {
566566 case r: Int =>
567567 [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
568568 case _ =>
569569 throw("Error setting user power")
570570 }
571571 else throw("Strict value is not equal to itself.")
572572 }
573573 else throw("Strict value is not equal to itself.")
574574 }
575575 }
576576 }
577577
578578
579579
580580 @Callable(i)
581581 func destroyAssetFromUser (assetId,qty) = {
582582 let chunks = getAssetTypeLevel(assetId)
583583 let strAssetType = chunks._1
584584 let level = chunks._2
585585 let k = getALKey(strAssetType, level)
586586 if (!(checkAssetOwner(toString(i.caller), assetId)))
587587 then throw("You don't own this asset")
588588 else {
589589 let assetCoins = tryGetInteger(assetId)
590590 let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
591591 let assetPower = confTryGetInteger((k + "_Power"))
592592 if (confTryGetBoolean((k + "_Aggregated")))
593593 then {
594594 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
595595 let aggrAssetkey = ((k + "_") + toString(i.caller))
596596 let qtyAsset = tryGetInteger((aggrAssetkey + "_Qty"))
597597 if ((0 > (qtyAsset - qty)))
598598 then throw(("you don't have enough " + strAssetType))
599599 else {
600600 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - (assetPower * qty))], nil)
601601 match pw {
602602 case r: Int =>
603603 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), (unitAssetCoins * qty)], nil)
604604 match tr {
605605 case t: Int =>
606606 [IntegerEntry((aggrAssetkey + "_Qty"), (qtyAsset - qty))]
607607 case _ =>
608608 throw("Error transferring coins")
609609 }
610610 case _ =>
611611 throw("Error setting user power")
612612 }
613613 }
614614 }
615615 else {
616616 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - assetPower)], nil)
617617 match pw {
618618 case r: Int =>
619619 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), assetCoins], nil)
620620 match tr {
621621 case t: Int =>
622622 [DeleteEntry(assetId), DeleteEntry(getAssetOwnerKeyString(assetId))]
623623 case _ =>
624624 throw("Error transferring coins")
625625 }
626626 case _ =>
627627 throw("Error setting user power")
628628 }
629629 }
630630 }
631631 }
632632
633633
634634
635635 @Callable(i)
636636 func setNationOwner (nationKey,newOwner) = if (checkAdmin(i.caller))
637637 then $Tuple2([StringEntry((nationKey + "_Owner"), newOwner)], true)
638638 else {
639639 let currentOwner = tryGetString((nationKey + "_Owner"))
640640 if ((currentOwner != toString(i.caller)))
641641 then throw("You are not the nation owner")
642642 else [StringEntry((nationKey + "_Owner"), newOwner)]
643643 }
644644
645645
646646
647647 @Callable(i)
648648 func buyNationItem (assetId,NationKey) = {
649649 let chunks = getAssetTypeLevel(assetId)
650650 let strAssetType = chunks._1
651651 let level = chunks._2
652652 let k = getALKey(strAssetType, level)
653653 let n = nationsTryGetInteger(toString(i.caller))
654654 let nid = nationsTryGetInteger(NationKey)
655655 if ((n != nid))
656656 then throw("you can buy assets only from your nation")
657657 else if (!(checkAssetOwner(NationKey, assetId)))
658658 then throw("The asset does not belong to the nation")
659659 else if (!(isNationReservedAsset(strAssetType, level)))
660660 then throw("this asset cannot be sold by the nation")
661661 else {
662662 let assetPrice = confTryGetInteger((getALKey(strAssetType, level) + "_SellPrice"))
663663 let amountIn = value(i.payments[0].amount)
664664 if ((assetPrice > amountIn))
665665 then throw(("You provided less $heg than the needed cost for buying this " + strAssetType))
666666 else if ((i.payments[0].assetId != shinywggid))
667667 then throw("Only $HEG payments allowed")
668668 else {
669669 let a = invoke(Address(treasuryAddress), "increaseNationWallet", [NationKey, amountIn], nil)
670670 match a {
671671 case b: Int =>
672672 (internalTrasnferOwnership(assetId, toString(i.caller), 1) :+ ScriptTransfer(Address(treasuryAddress), amountIn, shinywggid))
673673 case _ =>
674674 throw("Error transferring SHEG to nations wallet")
675675 }
676676 }
677677 }
678678 }
679679
680680
681681
682682 @Callable(i)
683683 func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = {
684684 let chunks = getAssetTypeLevel(assetId)
685685 let strAssetType = chunks._1
686686 let level = chunks._2
687687 let k = getALKey(strAssetType, level)
688688 if (!(checkAdmin(i.caller)))
689689 then throw("You are not allowed to perform this operation")
690690 else if (confTryGetBoolean((k + "_Aggregated")))
691691 then {
692692 let achunks = split(assetId, "_")
693693 let aoldOwner = achunks[2]
694694 let inc = IncreaseAggregatedAsset(assetId, aoldOwner, 1)
695695 $Tuple2(inc, oldOwner)
696696 }
697697 else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
698698 }
699699
700700
701701
702702 @Callable(i)
703703 func TransferAssetToMarketplace (assetId,sellprice) = {
704704 let chunks = getAssetTypeLevel(assetId)
705705 let strAssetType = chunks._1
706706 let level = chunks._2
707707 let k = getALKey(strAssetType, level)
708708 let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
709709 let assetPower = confTryGetInteger((k + "_Power"))
710710 let assetSheg = tryGetInteger(assetId)
711711 if (!(checkAssetOwner(toString(i.caller), assetId)))
712712 then throw("You are not the owner of this asset")
713713 else if (confTryGetBoolean((k + "_Aggregated")))
714714 then {
715715 let achunks = split(assetId, "_")
716716 let oldOwner = achunks[2]
717717 let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
718718 match tr {
719719 case t: Int =>
720720 DecreaseAggregatedAsset(assetId, oldOwner, 1)
721721 case _ =>
722722 throw("Error putting the item on the marketplace")
723723 }
724724 }
725725 else {
726726 let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
727727 match tr {
728728 case t: Int =>
729729 [DeleteEntry(getAssetOwnerKeyString(assetId)), DeleteEntry(assetId)]
730730 case _ =>
731731 throw("Error putting the item on the marketplace")
732732 }
733733 }
734734 }
735735
736736
737737
738738 @Callable(i)
739739 func DelKey (key) = if (!(checkAdmin(i.caller)))
740740 then throw("")
741741 else [DeleteEntry(key)]
742742
743743
744744
745745 @Callable(i)
746746 func UpdKey (key,val) = if (!(checkAdmin(i.caller)))
747747 then throw("")
748748 else [StringEntry(key, val)]
749749
750750

github/deemru/w8io/169f3d6 
97.63 ms