tx · 8sX18uh244jTMgRJK7pBqyXMxpPnJXs2nTMR2XfgLw3K

3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb:  -0.02500000 Waves

2022.06.27 17:10 [2114947] smart account 3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb > SELF 0.00000000 Waves

{ "type": 13, "id": "8sX18uh244jTMgRJK7pBqyXMxpPnJXs2nTMR2XfgLw3K", "fee": 2500000, "feeAssetId": null, "timestamp": 1656339027738, "version": 2, "chainId": 84, "sender": "3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb", "senderPublicKey": "FWSsBbeCwLVkekWhvNKtX6JkrZiruRybKKVuiS3F4bqN", "proofs": [ "4HbBGSg2qV1Cbawq83BkcCiYrwHrTmbLcCvBgKs28Y1p2sFzXwWvrYr9PwWoKNKqSh9J4ZcQ8XSQhaAkpazwnR9G" ], "script": "base64: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c3NldFN0cgAAAAhhc3NldEtleQAAABFCdWlsZGluZ1N0YXR1c0tleQAAAA9maW5pc2hIZWlnaHRLZXkAAAAMc2FjcmlmaWNla2V5BAAAAAZjaHVua3MJAQAAABFnZXRBc3NldFR5cGVMZXZlbAAAAAEFAAAACGFzc2V0U3RyBAAAAAxzdHJBc3NldFR5cGUIBQAAAAZjaHVua3MAAAACXzEEAAAABWxldmVsCAUAAAAGY2h1bmtzAAAAAl8yBAAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPZmluaXNoSGVpZ2h0S2V5AwkAAGYAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdQnVpbGRpbmcgaXMgbm90IGZpbmlzaGVkIHlldCAJAAGkAAAAAQkAAGUAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAACcgYmxvY2tzIHJlbWFpbmluZywgaXQgd2lsbCB0YWtlIGFyb3VuZCAJAAGkAAAAAQkAAGUAAAACBQAAABRidWlsZGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAAAggbWludXRlcwMJAAAAAAAAAgkAAS8AAAACBQAAAAxzdHJBc3NldFR5cGUAAAAAAAAAAAQCAAAABFRFQ0gEAAAACmRpc2NvdmVyZWQJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA5uYXRpb25zQWRkcmVzcwIAAAAYc2V0VGVjbmhub2xvZ3lEaXNjb3ZlcmVkCQAETAAAAAIFAAAABmNhbGxlcgkABEwAAAACBQAAAAhhc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAACmRpc2NvdmVyZWQGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAADbmlsCQAAAgAAAAECAAAAHGVycm9yIGRpc2NvdmVyaW5nIHRlY2hub2xvZ3kEAAAACmFzc2V0UG93ZXIJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAIYXNzZXRTdHICAAAABl9Qb3dlcgQAAAAKYXNzZXRDb2lucwkAAGkAAAACCQAAaAAAAAIJAQAAABFjb25mVHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAMc2FjcmlmaWNla2V5AgAAAAVfQ29zdAAAAAAAAAAAFAAAAAAAAAAAZAMJAABmAAAAAgUAAAAKYXNzZXRQb3dlcgAAAAAAAAAAAAQAAAAMY3VycmVudFBvd2VyCQEAAAAUbmF0aW9uc1RyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAABmNhbGxlcgIAAAAGX1Bvd2VyBAAAAAJwdwkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAADm5hdGlvbnNBZGRyZXNzAgAAAAxzZXRVc2VyUG93ZXIJAARMAAAAAgUAAAAGY2FsbGVyCQAETAAAAAIJAABkAAAAAgUAAAAMY3VycmVudFBvd2VyBQAAAAphc3NldFBvd2VyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAACcHcFAAAAAnB3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAhhc3NldEtleQUAAAAKYXNzZXRDb2lucwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAABFCdWlsZGluZ1N0YXR1c0tleQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAA9maW5pc2hIZWlnaHRLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACGFzc2V0S2V5BQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAADbmlsAQAAABNpbnRlcm5hbEZpbmlzaEJ1aWxkAAAABgAAAAZjYWxsZXIAAAAIYXNzZXRTdHIAAAAIYXNzZXRLZXkAAAARQnVpbGRpbmdTdGF0dXNLZXkAAAAPZmluaXNoSGVpZ2h0S2V5AAAADXRyYW5zYWN0aW9uSWQEAAAABmNodW5rcwkBAAAAEWdldEFzc2V0VHlwZUxldmVsAAAAAQUAAAAIYXNzZXRTdHIEAAAADHN0ckFzc2V0VHlwZQgFAAAABmNodW5rcwAAAAJfMQQAAAAFbGV2ZWwIBQAAAAZjaHVua3MAAAACXzIEAAAAFGJ1aWxkaW5nRmluaXNoSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA9maW5pc2hIZWlnaHRLZXkDCQAAZgAAAAIFAAAAFGJ1aWxkaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1CdWlsZGluZyBpcyBub3QgZmluaXNoZWQgeWV0IAkAAaQAAAABCQAAZQAAAAIFAAAAFGJ1aWxkaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQCAAAAJyBibG9ja3MgcmVtYWluaW5nLCBpdCB3aWxsIHRha2UgYXJvdW5kIAkAAaQAAAABCQAAZQAAAAIFAAAAFGJ1aWxkaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQCAAAACCBtaW51dGVzAwkAAAAAAAACCQABLwAAAAIFAAAADHN0ckFzc2V0VHlwZQAAAAAAAAAABAIAAAAEVEVDSAQAAAAKZGlzY292ZXJlZAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAADm5hdGlvbnNBZGRyZXNzAgAAABhzZXRUZWNuaG5vbG9neURpc2NvdmVyZWQJAARMAAAAAgUAAAAGY2FsbGVyCQAETAAAAAIFAAAACGFzc2V0U3RyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAKZGlzY292ZXJlZAYJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAANuaWwJAAACAAAA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AAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIFAAAADXRyYW5zYWN0aW9uSWQFAAAACGFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAMYWdnckFzc2V0a2V5AgAAAAZfT3duZXIFAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMYWdnckFzc2V0a2V5CQAAZAAAAAIFAAAABWNvaW5zBQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADGFnZ3JBc3NldGtleQIAAAAEX1F0eQkAAGQAAAACBQAAAANxdHkAAAAAAAAAAAEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAARQnVpbGRpbmdTdGF0dXNLZXkJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPZmluaXNoSGVpZ2h0S2V5BQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACGFzc2V0S2V5BQAAAAphc3NldENvaW5zCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAAPY2hlY2tBc3NldE93bmVyAAAAAgAAAAZjYWxsZXIAAAAIYXNzZXRLZXkEAAAACmFzc2V0T3duZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAWZ2V0QXNzZXRPd25lcktleVN0cmluZwAAAAEFAAAACGFzc2V0S2V5CQAAAAAAAAIFAAAACmFzc2V0T3duZXIFAAAABmNhbGxlcgEAAAAVaXNOYXRpb25SZXNlcnZlZEFzc2V0AAAAAgAAAAROYW1lAAAABUxldmVsBAAAAAFrCQEAAAAIZ2V0QUxLZXkAAAACBQAAAAROYW1lBQAAAAVMZXZl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AAECAAAAInlvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGUgYXNzZXQEAAAABmNodW5rcwkBAAAAEWdldEFzc2V0VHlwZUxldmVsAAAAAQUAAAAMU2FjcmlmaWNlS2V5AwMJAQAAAAIhPQAAAAIFAAAACGFzc2V0U2FjCAUAAAAGY2h1bmtzAAAAAl8xBgkBAAAAAiE9AAAAAgUAAAALYXNzZXRTYWNsdmwIBQAAAAZjaHVua3MAAAACXzIJAAACAAAAAQIAAAAudGhlIHNhY3JpZmljZUFzc2V0IGhhcyB0aGUgd3JvbmcgdHlwZSBvciBsZXZlbAYBAAAAGUNoZWNrQXNzZXRCdWlsZGFibGVOYXRpb24AAAAEAAAABE5hbWUAAAAFTGV2ZWwAAAAJTmF0aW9uS2V5AAAADFNhY3JpZmljZUtleQQAAAAHY25mZ0tleQkBAAAACGdldEFMS2V5AAAAAgUAAAAETmFtZQUAAAAFTGV2ZWwEAAAAA3RlYwkBAAAAEGNvbmZUcnlHZXRTdHJpbmcAAAABCQABLAAAAAIFAAAAB2NuZmdLZXkCAAAAFl9UZWNuaG9sb2d5X2Rpc2NvdmVyZWQDCQEAAAACIT0AAAACBQAAAAN0ZWMCAAAAAAMJAQAAABRuYXRpb25zVHJ5R2V0Qm9vbGVhbgAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAlOYXRpb25LZXkCAAAAAV8FAAAAA3RlYwkBAAAAHENoZWNrQXNzZXRCdWlsZGFibGVTYWNyaWZpY2UAAAADBQAAAAdjbmZnS2V5BQAAAAlOYXRpb25LZXkFAAAADFNhY3JpZmljZUtleQcJAQAAABxDaGVja0Fzc2V0QnVpbGRhYmxlU2FjcmlmaWNlAAAAAwUAAAAHY25mZ0tleQUAAAAJTmF0aW9uS2V5BQAAAAxTYWNyaWZpY2VLZXkBAAAAF0NoZWNrQXNzZXRCdWlsZGFibGVVc2VyAAAABAAAAAROYW1lAAAABUxldmVsAAAABmNhbGxlcgAAAAxTYWNyaWZpY2VLZXkEAAAABmNuZktleQkBAAAACGdldEFMS2V5AAAAAgUAAAAETmFtZQUAAAAFTGV2ZWwEAAAACG5hdGlvbklkCQEAAAAUbmF0aW9uc1RyeUdldEludGVnZXIAAAABBQAAAAZjYWxsZXIDCQAAAAAAAAIFAAAACG5hdGlvbklkAAAAAAAAAAAABwQAAAADdGVjCQEAAAAQY29uZlRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgUAAAAGY25mS2V5AgAAABZfVGVjbmhvbG9neV9kaXNjb3ZlcmVkAwkBAAAAAiE9AAAAAgUAAAADdGVjAgAAAAAEAAAACU5hdGlvbktleQkBAAAAE25hdGlvbnNUcnlHZXRTdHJpbmcAAAABCQABpAAAAAEFAAAACG5hdGlvbklkAwkBAAAAFG5hdGlvbnNUcnlHZXRCb29sZWFuAAAAAQkAASwAAAACCQABLAAAAAIFAAAACU5hdGlvbktleQIAAAABXwUAAAADdGVjCQEAAAAcQ2hlY2tBc3NldEJ1aWxkYWJsZVNhY3JpZmljZQAAAAMFAAAABmNuZktleQUAAAAGY2FsbGVyBQAAAAxTYWNyaWZpY2VLZXkHCQEAAAAcQ2hlY2tBc3NldEJ1aWxkYWJsZVNhY3JpZmljZQAAAAMFAAAABmNuZktleQUAAAAGY2FsbGVyBQAAAAxTYWNyaWZpY2VLZXkBAAAAE0NoZWNrQXNzZXRCdWlsZGFibGUAAAAFAAAABE5hbWUAAAAFTGV2ZWwAAAAGQ2FsbGVyAAAACU5hdGlvbktleQAAAAxTYWNyaWZpY2VLZXkDCQEAAAACIT0AAAACBQAAAAlOYXRpb25LZXkCAAAAAAkBAAAAGUNoZWNrQXNzZXRCdWlsZGFibGVOYXRpb24AAAAEBQAAAAROYW1lBQAAAAVMZXZlbAUAAAAJTmF0aW9uS2V5BQAAAAxTYWNyaWZpY2VLZXkJAQAAABdDaGVja0Fzc2V0QnVpbGRhYmxlVXNlcgAAAAQFAAAABE5hbWUFAAAABUxldmVsBQAAAAZDYWxsZXIFAAAADFNhY3JpZmljZUtleQAAAAsAAAABaQEAAAAKU3RhcnRCdWlsZAAAAAQAAAAMc3RyQXNzZXRUeXBlAAAABUxldmVsAAAACU5hdGlvbktleQAAAAxTYWNyaWZpY2VLZXkDCQEAAAABIQAAAAEJAQAAABNDaGVja0Fzc2V0QnVpbGRhYmxlAAAABQUAAAAMc3RyQXNzZXRUeXBlBQAAAAVMZXZlbAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAACU5hdGlvbktleQUAAAAMU2FjcmlmaWNlS2V5CQAAAgAAAAECAAAAGllvdSBjYW5ub3QgYnVpbGQgdGhpcyBJdGVtBAAAAAdjbmZnS2V5CQEAAAAIZ2V0QUxLZXkAAAACBQAAAAxzdHJBc3NldFR5cGUFAAAABUxldmVsBAAAABBkZWxheUZvckJ1aWxkaW5nCQEAAAARY29uZlRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAAB2NuZmdLZXkCAAAACl9CdWlsZFRpbWUEAAAADmFzc2V0QnVpbGRDb3N0CQEAAAARY29uZlRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAAB2NuZmdLZXkCAAAABV9Db3N0BAAAAA1Ub0FkbWluV2FsbGV0CQAAaQAAAAIJAABoAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QAAAAAAAAAAAUAAAAAAAAAAGQEAAAAE1RvR2FtZVJld2FyZHNXYWxsZXQJAABpAAAAAgkAAGgAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAAAAAAAAAAACgAAAAAAAAAAZAQAAAAWVG9TdGFraW5nUmV3YXJkc1dhbGxldAkAAGkAAAACCQAAaAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0AAAAAAAAAABBAAAAAAAAAABkBAAAAA1Vbml0U3Rha2VTaGVnCQAAZQAAAAIJAABlAAAAAgkAAGUAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAUAAAANVG9BZG1pbldhbGxldAUAAAATVG9HYW1lUmV3YXJkc1dhbGxldAUAAAAWVG9TdGFraW5nUmV3YXJkc1dhbGxldAMJAQAAABVpc05hdGlvblJlc2VydmVkQXNzZXQAAAACBQAAAAxzdHJBc3NldFR5cGUFAAAABUxldmVsAwMJAQAAAAEhAAAAAQkBAAAAD2NoZWNrQXNzZXRPd25lcgAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAlOYXRpb25LZXkJAQAAAAEhAAAAAQkBAAAACmNoZWNrQWRtaW4AAAABCAUAAAABaQAAAAZjYWxsZXIHCQAAAgAAAAECAAAAI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGUgbmF0aW9uBAAAAApuYXRpb25zaGVnCQEAAAAVdHJlYXN1cnlUcnlHZXRJbnRlZ2VyAAAAAQkBAAAADmdldFRyZWFzdXJ5S2V5AAAAAQUAAAAJTmF0aW9uS2V5AwkAAGYAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAUAAAAKbmF0aW9uc2hlZwkAAAIAAAABAgAAAB5UaGUgbmF0aW9uIGhhc24ndCBlbm91Z2ggZnVuZHMEAAAAAWQJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA90cmVhc3VyeUFkZHJlc3MCAAAAFGRlY3JlYXNlTmF0aW9uV2FsbGV0CQAETAAAAAIFAAAACU5hdGlvbktleQkABEwAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAUAAAADbmlsBQAAAANuaWwEAAAAByRtYXRjaDAFAAAAAWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABcgUAAAAHJG1hdGNoMAQAAAACcHcJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA90cmVhc3VyeUFkZHJlc3MCAAAAEWFyYml0cmFyeUFkZENvaW5zCQAETAAAAAIFAAAACU5hdGlvbktleQkABEwAAAACBQAAAA1Vbml0U3Rha2VTaGVnBQAAAANuaWwFAAAAA25pbAQAAAAHJG1hdGNoMQUAAAACcHcDCQAAAQAAAAIFAAAAByRtYXRjaDECAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMQQAAAAIdHJhbnNmZXIJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA90cmVhc3VyeUFkZHJlc3MCAAAAGmRpc3RyaWJ1dGVOYXRpb25QYXlSZXdhcmRzCQAETAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAANuaWwFAAAAA25pbAQAAAAHJG1hdGNoMgUAAAAIdHJhbnNmZXIDCQAAAQAAAAIFAAAAByRtYXRjaDICAAAAA0ludAQAAAABdAUAAAAHJG1hdGNoMgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0QnVpbGRpbmdTdGF0dXNLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQUAAAAMQnVpbGRTdGFydGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRBc3NldE93bmVyS2V5AAAAAggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQUAAAAJTmF0aW9uS2V5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEGRlbGF5Rm9yQnVpbGRpbmcFAAAAA25pbAkAAAIAAAABAgAAACBFcnJvciBEaXN0cmlidXRpbmcgYXNzZXQgcmV3YXJkcwkAAAIAAAABAgAAAB1FcnJvciBEZXBvc2l0aW5nIG5hdGlvbiBmdW5kcwkAAAIAAAABAgAAAB1FcnJvciBEZXBvc2l0aW5nIG5hdGlvbiBmdW5kcwQAAAAIYXNzZXRTYWMJAQAAABBjb25mVHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACBQAAAAdjbmZnS2V5AgAAAA9fU2FjcmlmaWNlQXNzZXQDCQEAAAACIT0AAAACBQAAAAhhc3NldFNhYwIAAAAACQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAADFNhY3JpZmljZUtleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0QnVpbGRpbmdTdGF0dXNLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQUAAAAMQnVpbGRTdGFydGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRBc3NldE93bmVyS2V5AAAAAggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAHY25mZ0tleQkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRCdWlsZGluZ0ZpbmlzaEhlaWdodEtleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JCdWlsZGluZwUAAAADbmlsBAAAAAhhbW91bnRJbgkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkAAGYAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAUAAAAIYW1vdW50SW4JAAACAAAAAQkAASwAAAACAgAAAD5Zb3UgcHJvdmlkZWQgbGVzcyAkaGVnIHRoYW4gdGhlIG5lZWRlZCBjb3N0IGZvciBidWlsZGluZyB0aGlzIAUAAAAMc3RyQXNzZXRUeXBlAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAKc2hpbnl3Z2dpZAkAAAIAAAABAgAAABpPbmx5ICRIRUcgcGF5bWVudHMgYWxsb3dlZAQAAAACcHcJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAA90cmVhc3VyeUFkZHJlc3MCAAAAB0RlcG9zaXQFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAKc2hpbnl3Z2dpZAUAAAANVW5pdFN0YWtlU2hlZwUAAAADbmlsBAAAAAckbWF0Y2gwBQAAAAJwdwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFyBQAAAAckbWF0Y2gwCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRnZXRCdWlsZGluZ1N0YXR1c0tleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5BQAAAAxCdWlsZFN0YXJ0ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAdjbmZnS2V5CQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGmdldEJ1aWxkaW5nRmluaXNoSGVpZ2h0S2V5AAAAAwkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAB2NuZmdLZXkJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABBkZWxheUZvckJ1aWxkaW5nCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC2FkbWluV2FsbGV0BQAAAA1Ub0FkbWluV2FsbGV0BQAAAApzaGlueXdnZ2lkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAFmRhaWx5R2FtZVJld2FyZHNXYWxsZXQFAAAAE1RvR2FtZVJld2FyZHNXYWxsZXQFAAAACnNoaW55d2dnaWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAZZGFpbHlTdGFraW5nUmV3YXJkc1dhbGxldAUAAAAWVG9TdGFraW5nUmV3YXJkc1dhbGxldAUAAAAKc2hpbnl3Z2dpZAUAAAADbmlsCQAAAgAAAAECAAAAF0luY29ycmVjdCBpbnZva2UgcmVzdWx0AAAAAWkBAAAAC0ZpbmlzaEJ1aWxkAAAABAAAAAd0eElkU3RyAAAACGFzc2V0U3RyAAAABUxldmVsAAAACU5hdGlvbktleQQAAAAEdHhJZAkAAlkAAAABBQAAAAd0eElkU3RyBAAAAAVBTEtleQkBAAAACGdldEFMS2V5AAAAAgUAAAAIYXNzZXRTdHIFAAAABUxldmVsBAAAABFCdWlsZGluZ1N0YXR1c0tleQkBAAAAFGdldEJ1aWxkaW5nU3RhdHVzS2V5AAAAAwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABHR4SWQFAAAABUFMS2V5BAAAAA9maW5pc2hIZWlnaHRLZXkJAQAAABpnZXRCdWlsZGluZ0ZpbmlzaEhlaWdodEtleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBQAAAAVBTEtleQQAAAAIYXNzZXRLZXkJAQAAAA1nZXRBc3NldElkS2V5AAAAAgUAAAAEdHhJZAUAAAAFQUxLZXkEAAAACmFzc2V0T3duZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQEAAAAQZ2V0QXNzZXRPd25lcktleQAAAAIFAAAABHR4SWQFAAAABUFMS2V5AwkBAAAAFWlzTmF0aW9uUmVzZXJ2ZWRBc3NldAAAAAIFAAAACGFzc2V0U3RyBQAAAAVMZXZlbAMDCQEAAAABIQAAAAEJAQAAAA9jaGVja0Fzc2V0T3duZXIAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAJTmF0aW9uS2V5CQEAAAABIQAAAAEJAQAAAApjaGVja0FkbWluAAAAAQgFAAAAAWkAAAAGY2FsbGVyBwkAAAIAAAABAgAAADBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24JAQAAABNpbnRlcm5hbEZpbmlzaEJ1aWxkAAAABgUAAAAJTmF0aW9uS2V5BQAAAAVBTEtleQUAAAAIYXNzZXRLZXkFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5BQAAAA9maW5pc2hIZWlnaHRLZXkFAAAABHR4SWQDCQEAAAACIT0AAAACBQAAAAphc3NldE93bmVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABCQABLAAAAAICAAAAIVlvdSBjYW5ub3QgY2xhaW0gb3RoZXIncyBwbGF5ZXJzIAUAAAAIYXNzZXRTdHIEAAAAEGJ1aWxkaW5nVHhTdGF0dXMJAQAAAAx0cnlHZXRTdHJpbmcAAAABBQAAABFCdWlsZGluZ1N0YXR1c0tleQMJAAAAAAAAAgUAAAAQYnVpbGRpbmdUeFN0YXR1cwIAAAAACQAAAgAAAAECAAAAJE5vIHBlbmRpbmcgb3BlcmF0aW9ucyBmb3IgdGhpcyBhc3NldAQAAAAIYXNzZXRTYWMJAQAAABBjb25mVHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACBQAAAAVBTEtleQIAAAAPX1NhY3JpZmljZUFzc2V0BAAAAA1hc3NldFNhY0xldmVsCQEAAAARY29uZlRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAABUFMS2V5AgAAABRfU2FjcmlmaWNlQXNzZXRMZXZlbAMJAQAAAAIhPQAAAAIFAAAACGFzc2V0U2FjAgAAAAAJAQAAABxpbnRlcm5hbFNhY3JpZmljZUZpbmlzaEJ1aWxkAAAABgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABUFMS2V5BQAAAAhhc3NldEtleQUAAAARQnVpbGRpbmdTdGF0dXNLZXkFAAAAD2ZpbmlzaEhlaWdodEtleQkBAAAACGdldEFMS2V5AAAAAgUAAAAIYXNzZXRTYWMFAAAADWFzc2V0U2FjTGV2ZWwJAQAAABNpbnRlcm5hbEZpbmlzaEJ1aWxkAAAABgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABUFMS2V5BQAAAAhhc3NldEtleQUAAAARQnVpbGRpbmdTdGF0dXNLZXkFAAAAD2ZpbmlzaEhlaWdodEtleQUAAAAEdHhJZAAAAAFpAQAAABF0cmFuc2Zlck93bmVyc2hpcAAAAAIAAAAHYXNzZXRJZAAAAAhuZXdPd25lcgMJAQAAAAEhAAAAAQkBAAAACmNoZWNrQWRtaW4AAAABCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAApT25seSB0aGUgYWRtaW4gY2FuIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24JAAUUAAAAAgkBAAAAGWludGVybmFsVHJhc25mZXJPd25lcnNoaXAAAAACBQAAAAdhc3NldElkBQAAAAhuZXdPd25lcgUAAAAIbmV3T3duZXIAAAABaQEAAAAXZGVzdHJveUFzc2V0QW5kVHJhbnNmZXIAAAACAAAAB2Fzc2V0SWQAAAAJdG9BZGRyZXNzBAAAAAZjaHVua3MJAQAAABFnZXRBc3NldFR5cGVMZXZlbAAAAAEFAAAAB2Fzc2V0SWQEAAAADHN0ckFzc2V0VHlwZQgFAAAABmNodW5rcwAAAAJfMQQAAAAFbGV2ZWwIBQAAAAZjaHVua3MAAAACXzIEAAAAAWsJAQAAAAhnZXRBTEtleQAAAAIFAAAADHN0ckFzc2V0VHlwZQUAAAAFbGV2ZWwDCQEAAAABIQAAAAEJAQAAAApjaGVja0FkbWluAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAKU9ubHkgdGhlIGFkbWluIGNhbiBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uBAAAAAhv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", "height": 2114947, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4F1vez2yNtiSrsLLDam2PvL8SzZ4fBu9nfYsMk4dfuAm Next: BoQMiyLXuViQtz7BUR9UHtq7TaNrRk3qEQbaKpMhMbmH Diff:
OldNewDifferences
408408 then throw("No pending operations for this asset")
409409 else {
410410 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
411+ let assetSacLevel = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
411412 if ((assetSac != ""))
412- then internalSacrificeFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, assetSac)
413+ then internalSacrificeFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, getALKey(assetSac, assetSacLevel))
413414 else internalFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
414415 }
415416 }
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")
122122
123123
124124 let BuildStarted = "BUILD_STARTED"
125125
126126 let BuildFinished = "BUILD_FINISHED"
127127
128128 func getAssetIdKey (txId,assetType) = ((assetType + "_") + toBase58String(txId))
129129
130130
131131 func getAssetOwnerKey (txId,assetType) = (getAssetIdKey(txId, assetType) + "_Owner")
132132
133133
134134 func getBuildingFinishHeightKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_fh")
135135
136136
137137 func getBuildingStatusKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_status")
138138
139139
140140 func getAssetTypeLevel (assetStr) = {
141141 let chunks = split(assetStr, "_")
142142 let strAssetType = chunks[0]
143143 let level = parseIntValue(drop(chunks[1], 3))
144144 $Tuple2(strAssetType, level)
145145 }
146146
147147
148148 func internalSacrificeFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey,sacrificekey) = {
149149 let chunks = getAssetTypeLevel(assetStr)
150150 let strAssetType = chunks._1
151151 let level = chunks._2
152152 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
153153 if ((buildingFinishHeight > height))
154154 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
155155 else if ((take(strAssetType, 4) == "TECH"))
156156 then {
157157 let discovered = invoke(Address(nationsAddress), "setTecnhnologyDiscovered", [caller, assetStr], nil)
158158 if ((discovered == true))
159159 then [DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
160160 else throw("error discovering technology")
161161 }
162162 else {
163163 let assetPower = confTryGetInteger((assetStr + "_Power"))
164164 let assetCoins = ((confTryGetInteger((sacrificekey + "_Cost")) * 20) / 100)
165165 if ((assetPower > 0))
166166 then {
167167 let currentPower = nationsTryGetInteger((caller + "_Power"))
168168 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
169169 if ((pw == pw))
170170 then [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
171171 else throw("Strict value is not equal to itself.")
172172 }
173173 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
174174 }
175175 }
176176
177177
178178 func internalFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey,transactionId) = {
179179 let chunks = getAssetTypeLevel(assetStr)
180180 let strAssetType = chunks._1
181181 let level = chunks._2
182182 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
183183 if ((buildingFinishHeight > height))
184184 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
185185 else if ((take(strAssetType, 4) == "TECH"))
186186 then {
187187 let discovered = invoke(Address(nationsAddress), "setTecnhnologyDiscovered", [caller, assetStr], nil)
188188 if ((discovered == true))
189189 then [DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
190190 else throw("error discovering technology")
191191 }
192192 else {
193193 let assetPower = confTryGetInteger((assetStr + "_Power"))
194194 let assetCoins = ((confTryGetInteger((assetStr + "_Cost")) * 20) / 100)
195195 let refCall = invoke(Address(treasuryAddress), "Pay", [caller, assetCoins], nil)
196196 if ((refCall == refCall))
197197 then if ((assetPower > 0))
198198 then {
199199 let currentPower = nationsTryGetInteger((caller + "_Power"))
200200 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
201201 if ((pw == pw))
202202 then if (confTryGetBoolean((assetStr + "_Aggregated")))
203203 then {
204204 let aggrAssetkey = ((assetStr + "_") + caller)
205205 let coins = tryGetInteger(aggrAssetkey)
206206 let qty = tryGetInteger((aggrAssetkey + "_Qty"))
207207 [DeleteEntry(getAssetOwnerKey(transactionId, assetStr)), StringEntry((aggrAssetkey + "_Owner"), caller), IntegerEntry(aggrAssetkey, (coins + assetCoins)), IntegerEntry((aggrAssetkey + "_Qty"), (qty + 1)), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
208208 }
209209 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
210210 else throw("Strict value is not equal to itself.")
211211 }
212212 else if (confTryGetBoolean((assetStr + "_Aggregated")))
213213 then {
214214 let aggrAssetkey = ((assetStr + "_") + caller)
215215 let coins = tryGetInteger(aggrAssetkey)
216216 let qty = tryGetInteger((aggrAssetkey + "_Qty"))
217217 [DeleteEntry(getAssetOwnerKey(transactionId, assetStr)), StringEntry((aggrAssetkey + "_Owner"), caller), IntegerEntry(aggrAssetkey, (coins + assetCoins)), IntegerEntry((aggrAssetkey + "_Qty"), (qty + 1)), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
218218 }
219219 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
220220 else throw("Strict value is not equal to itself.")
221221 }
222222 }
223223
224224
225225 func checkAssetOwner (caller,assetKey) = {
226226 let assetOwner = tryGetString(getAssetOwnerKeyString(assetKey))
227227 (assetOwner == caller)
228228 }
229229
230230
231231 func isNationReservedAsset (Name,Level) = {
232232 let k = getALKey(Name, Level)
233233 confTryGetBoolean((k + "_NationReserved"))
234234 }
235235
236236
237237 func internalTrasnferOwnership (assetId,newOwner) = {
238238 let chunks = getAssetTypeLevel(assetId)
239239 let strAssetType = chunks._1
240240 let level = chunks._2
241241 let k = getALKey(strAssetType, level)
242242 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
243243 let assetPower = confTryGetInteger((k + "_Power"))
244244 if ((assetPower > 0))
245245 then {
246246 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
247247 let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - assetPower)], nil)
248248 if ((pw == pw))
249249 then if ((pw != (currentPower - assetPower)))
250250 then throw("Incorrect invoke result")
251251 else {
252252 let newcurrentPower = nationsTryGetInteger((newOwner + "_Power"))
253253 let pw2 = invoke(Address(nationsAddress), "setUserPower", [newOwner, (newcurrentPower + assetPower)], nil)
254254 if ((pw2 == pw2))
255255 then match pw2 {
256256 case r: Int =>
257257 [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
258258 case _ =>
259259 throw("Incorrect invoke result")
260260 }
261261 else throw("Strict value is not equal to itself.")
262262 }
263263 else throw("Strict value is not equal to itself.")
264264 }
265265 else [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
266266 }
267267
268268
269269 func CheckAssetBuildableSacrifice (ALKey,caller,SacrificeKey) = {
270270 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
271271 let assetSaclvl = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
272272 if ((assetSac == ""))
273273 then true
274274 else if (!(checkAssetOwner(caller, SacrificeKey)))
275275 then throw("you are not the owner of the asset")
276276 else {
277277 let chunks = getAssetTypeLevel(SacrificeKey)
278278 if (if ((assetSac != chunks._1))
279279 then true
280280 else (assetSaclvl != chunks._2))
281281 then throw("the sacrificeAsset has the wrong type or level")
282282 else true
283283 }
284284 }
285285
286286
287287 func CheckAssetBuildableNation (Name,Level,NationKey,SacrificeKey) = {
288288 let cnfgKey = getALKey(Name, Level)
289289 let tec = confTryGetString((cnfgKey + "_Tecnhology_discovered"))
290290 if ((tec != ""))
291291 then if (nationsTryGetBoolean(((NationKey + "_") + tec)))
292292 then CheckAssetBuildableSacrifice(cnfgKey, NationKey, SacrificeKey)
293293 else false
294294 else CheckAssetBuildableSacrifice(cnfgKey, NationKey, SacrificeKey)
295295 }
296296
297297
298298 func CheckAssetBuildableUser (Name,Level,caller,SacrificeKey) = {
299299 let cnfKey = getALKey(Name, Level)
300300 let nationId = nationsTryGetInteger(caller)
301301 if ((nationId == 0))
302302 then false
303303 else {
304304 let tec = confTryGetString((cnfKey + "_Tecnhology_discovered"))
305305 if ((tec != ""))
306306 then {
307307 let NationKey = nationsTryGetString(toString(nationId))
308308 if (nationsTryGetBoolean(((NationKey + "_") + tec)))
309309 then CheckAssetBuildableSacrifice(cnfKey, caller, SacrificeKey)
310310 else false
311311 }
312312 else CheckAssetBuildableSacrifice(cnfKey, caller, SacrificeKey)
313313 }
314314 }
315315
316316
317317 func CheckAssetBuildable (Name,Level,Caller,NationKey,SacrificeKey) = if ((NationKey != ""))
318318 then CheckAssetBuildableNation(Name, Level, NationKey, SacrificeKey)
319319 else CheckAssetBuildableUser(Name, Level, Caller, SacrificeKey)
320320
321321
322322 @Callable(i)
323323 func StartBuild (strAssetType,Level,NationKey,SacrificeKey) = if (!(CheckAssetBuildable(strAssetType, Level, toString(i.caller), NationKey, SacrificeKey)))
324324 then throw("You cannot build this Item")
325325 else {
326326 let cnfgKey = getALKey(strAssetType, Level)
327327 let delayForBuilding = confTryGetInteger((cnfgKey + "_BuildTime"))
328328 let assetBuildCost = confTryGetInteger((cnfgKey + "_Cost"))
329329 let ToAdminWallet = ((assetBuildCost * 5) / 100)
330330 let ToGameRewardsWallet = ((assetBuildCost * 10) / 100)
331331 let ToStakingRewardsWallet = ((assetBuildCost * 65) / 100)
332332 let UnitStakeSheg = (((assetBuildCost - ToAdminWallet) - ToGameRewardsWallet) - ToStakingRewardsWallet)
333333 if (isNationReservedAsset(strAssetType, Level))
334334 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
335335 then !(checkAdmin(i.caller))
336336 else false)
337337 then throw("You are not the owner of the nation")
338338 else {
339339 let nationsheg = treasuryTryGetInteger(getTreasuryKey(NationKey))
340340 if ((assetBuildCost > nationsheg))
341341 then throw("The nation hasn't enough funds")
342342 else {
343343 let d = invoke(Address(treasuryAddress), "decreaseNationWallet", [NationKey, assetBuildCost], nil)
344344 match d {
345345 case r: Int =>
346346 let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, UnitStakeSheg], nil)
347347 match pw {
348348 case b: Int =>
349349 let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
350350 match transfer {
351351 case t: Int =>
352352 [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))]
353353 case _ =>
354354 throw("Error Distributing asset rewards")
355355 }
356356 case _ =>
357357 throw("Error Depositing nation funds")
358358 }
359359 case _ =>
360360 throw("Error Depositing nation funds")
361361 }
362362 }
363363 }
364364 else {
365365 let assetSac = confTryGetString((cnfgKey + "_SacrificeAsset"))
366366 if ((assetSac != ""))
367367 then [DeleteEntry(SacrificeKey), 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))]
368368 else {
369369 let amountIn = value(i.payments[0].amount)
370370 if ((assetBuildCost > amountIn))
371371 then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
372372 else if ((i.payments[0].assetId != shinywggid))
373373 then throw("Only $HEG payments allowed")
374374 else {
375375 let pw = invoke(Address(treasuryAddress), "Deposit", nil, [AttachedPayment(shinywggid, UnitStakeSheg)])
376376 match pw {
377377 case r: Int =>
378378 [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)]
379379 case _ =>
380380 throw("Incorrect invoke result")
381381 }
382382 }
383383 }
384384 }
385385 }
386386
387387
388388
389389 @Callable(i)
390390 func FinishBuild (txIdStr,assetStr,Level,NationKey) = {
391391 let txId = fromBase58String(txIdStr)
392392 let ALKey = getALKey(assetStr, Level)
393393 let BuildingStatusKey = getBuildingStatusKey(toString(i.caller), txId, ALKey)
394394 let finishHeightKey = getBuildingFinishHeightKey(toString(i.caller), txId, ALKey)
395395 let assetKey = getAssetIdKey(txId, ALKey)
396396 let assetOwner = tryGetString(getAssetOwnerKey(txId, ALKey))
397397 if (isNationReservedAsset(assetStr, Level))
398398 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
399399 then !(checkAdmin(i.caller))
400400 else false)
401401 then throw("You are not authorized to perform this operation")
402402 else internalFinishBuild(NationKey, ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
403403 else if ((assetOwner != toString(i.caller)))
404404 then throw(("You cannot claim other's players " + assetStr))
405405 else {
406406 let buildingTxStatus = tryGetString(BuildingStatusKey)
407407 if ((buildingTxStatus == ""))
408408 then throw("No pending operations for this asset")
409409 else {
410410 let assetSac = confTryGetString((ALKey + "_SacrificeAsset"))
411+ let assetSacLevel = confTryGetInteger((ALKey + "_SacrificeAssetLevel"))
411412 if ((assetSac != ""))
412- then internalSacrificeFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, assetSac)
413+ then internalSacrificeFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, getALKey(assetSac, assetSacLevel))
413414 else internalFinishBuild(toString(i.caller), ALKey, assetKey, BuildingStatusKey, finishHeightKey, txId)
414415 }
415416 }
416417 }
417418
418419
419420
420421 @Callable(i)
421422 func transferOwnership (assetId,newOwner) = if (!(checkAdmin(i.caller)))
422423 then throw("Only the admin can perform this operation")
423424 else $Tuple2(internalTrasnferOwnership(assetId, newOwner), newOwner)
424425
425426
426427
427428 @Callable(i)
428429 func destroyAssetAndTransfer (assetId,toAddress) = {
429430 let chunks = getAssetTypeLevel(assetId)
430431 let strAssetType = chunks._1
431432 let level = chunks._2
432433 let k = getALKey(strAssetType, level)
433434 if (!(checkAdmin(i.caller)))
434435 then throw("Only the admin can perform this operation")
435436 else {
436437 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
437438 let assetCoins = tryGetInteger(assetId)
438439 let refCall = invoke(Address(treasuryAddress), "adminTransfer", [addressFromStringValue(toAddress), assetCoins], nil)
439440 if ((refCall == refCall))
440441 then {
441442 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
442443 let assetPower = confTryGetInteger((k + "_Power"))
443444 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - assetPower)], nil)
444445 if ((pw == pw))
445446 then match pw {
446447 case r: Int =>
447448 [DeleteEntry(assetId)]
448449 case _ =>
449450 throw("Error setting user power")
450451 }
451452 else throw("Strict value is not equal to itself.")
452453 }
453454 else throw("Strict value is not equal to itself.")
454455 }
455456 }
456457
457458
458459
459460 @Callable(i)
460461 func destroyAssetFromUser (assetId,qty) = {
461462 let chunks = getAssetTypeLevel(assetId)
462463 let strAssetType = chunks._1
463464 let level = chunks._2
464465 let k = getALKey(strAssetType, level)
465466 if (!(checkAssetOwner(toString(i.caller), assetId)))
466467 then throw("You don't own this asset")
467468 else {
468469 let assetCoins = tryGetInteger(assetId)
469470 let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
470471 let assetPower = confTryGetInteger((k + "_Power"))
471472 if (confTryGetBoolean((k + "_Aggregated")))
472473 then {
473474 let unitAssetCoins = ((confTryGetInteger((k + "_Cost")) * 20) / 100)
474475 let qtyAsset = tryGetInteger((k + "_Qty"))
475476 if ((0 > (qtyAsset - qty)))
476477 then throw(("you don't have enough " + strAssetType))
477478 else {
478479 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - (assetPower * qty))], nil)
479480 match pw {
480481 case r: Int =>
481482 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), (unitAssetCoins * qty)], nil)
482483 match tr {
483484 case t: Int =>
484485 if (((qtyAsset - qty) > 0))
485486 then [IntegerEntry((k + "_Qty"), (qtyAsset - qty))]
486487 else [DeleteEntry(assetId)]
487488 case _ =>
488489 throw("Error transferring coins")
489490 }
490491 case _ =>
491492 throw("Error setting user power")
492493 }
493494 }
494495 }
495496 else {
496497 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - assetPower)], nil)
497498 match pw {
498499 case r: Int =>
499500 let tr = invoke(Address(treasuryAddress), "adminTransfer", [toString(i.caller), assetCoins], nil)
500501 match tr {
501502 case t: Int =>
502503 [DeleteEntry(assetId)]
503504 case _ =>
504505 throw("Error transferring coins")
505506 }
506507 case _ =>
507508 throw("Error setting user power")
508509 }
509510 }
510511 }
511512 }
512513
513514
514515
515516 @Callable(i)
516517 func setNationOwner (nationKey,newOwner) = if (checkAdmin(i.caller))
517518 then $Tuple2([StringEntry((nationKey + "_Owner"), newOwner)], true)
518519 else {
519520 let currentOwner = tryGetString((nationKey + "_Owner"))
520521 if ((currentOwner != toString(i.caller)))
521522 then throw("You are not the nation owner")
522523 else [StringEntry((nationKey + "_Owner"), newOwner)]
523524 }
524525
525526
526527
527528 @Callable(i)
528529 func buyNationItem (assetId,NationKey) = {
529530 let chunks = getAssetTypeLevel(assetId)
530531 let strAssetType = chunks._1
531532 let level = chunks._2
532533 let k = getALKey(strAssetType, level)
533534 let n = nationsTryGetInteger(toString(i.caller))
534535 let nid = nationsTryGetInteger(NationKey)
535536 if ((n != nid))
536537 then throw("you can buy assets only from your nation")
537538 else if (!(checkAssetOwner(NationKey, assetId)))
538539 then throw("The asset does not belong to the nation")
539540 else if (!(isNationReservedAsset(strAssetType, level)))
540541 then throw("this asset cannot be sold by the nation")
541542 else {
542543 let assetPrice = confTryGetInteger((getALKey(strAssetType, level) + "_SellPrice"))
543544 let amountIn = value(i.payments[0].amount)
544545 if ((assetPrice > amountIn))
545546 then throw(("You provided less $heg than the needed cost for buying this " + strAssetType))
546547 else if ((i.payments[0].assetId != shinywggid))
547548 then throw("Only $HEG payments allowed")
548549 else {
549550 let a = invoke(Address(treasuryAddress), "increaseNationWallet", [NationKey, amountIn], nil)
550551 match a {
551552 case b: Int =>
552553 (internalTrasnferOwnership(assetId, toString(i.caller)) :+ ScriptTransfer(Address(treasuryAddress), amountIn, shinywggid))
553554 case _ =>
554555 throw("Error transferring SHEG to nations wallet")
555556 }
556557 }
557558 }
558559 }
559560
560561
561562
562563 @Callable(i)
563564 func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = if (!(checkAdmin(i.caller)))
564565 then throw("You are not allowed to perform this operation")
565566 else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
566567
567568
568569
569570 @Callable(i)
570571 func TransferAssetToMarketplace (assetId,sellprice) = if (!(checkAssetOwner(toString(i.caller), assetId)))
571572 then throw("You are not the owner of this asset")
572573 else {
573574 let assetSheg = tryGetInteger(assetId)
574575 let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
575576 match tr {
576577 case t: Int =>
577578 [DeleteEntry(getAssetOwnerKeyString(assetId)), DeleteEntry(assetId)]
578579 case _ =>
579580 throw("Error putting the item on the marketplace")
580581 }
581582 }
582583
583584
584585
585586 @Callable(i)
586587 func DelKey (key) = if (!(checkAdmin(i.caller)))
587588 then throw("")
588589 else [DeleteEntry(key)]
589590
590591
591592
592593 @Callable(i)
593594 func UpdKey (key,val) = if (!(checkAdmin(i.caller)))
594595 then throw("")
595596 else [StringEntry(key, val)]
596597
597598

github/deemru/w8io/169f3d6 
84.23 ms