tx · 2p5LFMJMrrJbv7KdkJigWze5RLTd5q7mu9QvcKXCu1c2

3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK:  -0.05000000 Waves

2022.01.26 21:37 [1896270] smart account 3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK > SELF 0.00000000 Waves

{ "type": 13, "id": "2p5LFMJMrrJbv7KdkJigWze5RLTd5q7mu9QvcKXCu1c2", "fee": 5000000, "feeAssetId": null, "timestamp": 1643222254722, "version": 2, "chainId": 84, "sender": "3MtKnDmJju2Y4dp9A2ACPr11jDZiW6gmKKK", "senderPublicKey": "3itc77jAZTQAcaPCyYEe4KD7h18CvqZZ2JRynZHsuJ61", "proofs": [ "5eAeNRnp42o11GpGQyyQn5orFfqHBjJ6qa1CzhfmUZ2zdox51vU9wUgdHfHPcX3Df3QqwD2s6RSuXw7dRT4HqjSM" ], "script": "base64:AAIFAAAAAAAAACkIAhIFCgMICAgSABIAEgMKAQgSBAoCCAESBAoCCAgSBAoCCAESAwoBCAAAABEAAAAADGFkbWluQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzAgAAAAVhZG1pbgIAAAAAAAAAABBpbnNwZWN0b3JBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwIAAAAJaW5zcGVjdG9yAgAAABpObyBrZXkgaW5zcGVjdG9yIHdhcyBmb3VuZAAAAAALdG90YWxTdXBwbHkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwIAAAALdG90YWxTdXBwbHkAAAAAAAAAAAAAAAAADnZvdGluZ0R1cmF0aW9uCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwIAAAAOdm90aW5nRHVyYXRpb24CAAAAH05vIGtleSB2b3RpbmdEdXJhdGlvbiB3YXMgZm91bmQAAAAACGN0b2tlbklkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwIAAAAHdG9rZW5JZAIAAAAZTm8ga2V5IGNUb2tlbklkIHdhcyBmb3VuZAAAAAARbWF4UGxheWVyc1BlclRlYW0JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzAgAAAA5wbGF5ZXJzUGVyVGVhbQIAAAAfTm8ga2V5IHBsYXllcnNQZXJUZWFtIHdhcyBmb3VuZAEAAAAHaXNBZG1pbgAAAAEAAAANY2FsbGVyQWRkcmVzcwMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwkAAlkAAAABBQAAAAxhZG1pbkFkZHJlc3MGBwEAAAAMd3JpdGVJbnRlZ2VyAAAAAgAAAANrZXkAAAAMaW50ZWdlclZhbHVlCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAAxpbnRlZ2VyVmFsdWUBAAAAC3dyaXRlU3RyaW5nAAAAAgAAAANrZXkAAAALc3RyaW5nVmFsdWUJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQUAAAALc3RyaW5nVmFsdWUBAAAADmNvdW50RnJlcXVlbmN5AAAAAgAAAApoZWxwZXJMaXN0AAAACnZvdGluZ0xpc3QKAQAAAA1mb2xkRnJlcXVlbmN5AAAAAgAAAAVhY2N1bQAAAARuZXh0CgEAAAAKY291bnRJdGVtcwAAAAIAAAADYWNjAAAABGl0ZW0DCQAAAAAAAAIFAAAABG5leHQFAAAABGl0ZW0JAABkAAAAAgUAAAADYWNjAAAAAAAAAAABBQAAAANhY2MJAARNAAAAAgUAAAAFYWNjdW0KAAAAAAIkbAUAAAAKdm90aW5nTGlzdAoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAAAAAAAAAAAAAKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAApjb3VudEl0ZW1zAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFCgAAAAACJGwFAAAACmhlbHBlckxpc3QKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAA1mb2xkRnJlcXVlbmN5AAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAQAAABRpbml0Vm90aW5nSGVscGVyTGlzdAAAAAEAAAAJdm90ZUFycmF5CgEAAAAOZm9sZEhlbHBlckxpc3QAAAACAAAABWFjY3VtAAAABG5leHQDCQAAAAAAAAIJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAVhY2N1bQUAAAAEbmV4dAcJAARNAAAAAgUAAAAFYWNjdW0FAAAABG5leHQFAAAABWFjY3VtCgAAAAACJGwFAAAACXZvdGVBcnJheQoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAADmZvbGRIZWxwZXJMaXN0AAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAQAAAA1pc0dyZWF0ZXJUaGVuAAAAAgAAAAlwb3RlbnRpYWwAAAAIaXRlbUxpc3QEAAAACmxpc3RMZW5ndGgJAABlAAAAAgkAAZAAAAABBQAAAAhpdGVtTGlzdAAAAAAAAAAAAQQAAAAPY3VycmVudEdyZWF0ZXN0CQABkQAAAAIFAAAACGl0ZW1MaXN0BQAAAApsaXN0TGVuZ3RoAwkAAGYAAAACBQAAAAlwb3RlbnRpYWwFAAAAD2N1cnJlbnRHcmVhdGVzdAYHAQAAAA9maW5kSGlnaGVzdFZvdGUAAAACAAAACmhlbHBlckxpc3QAAAALZnJlcXVlbmNpZXMKAQAAAA9mb2xkRnJlcXVlbmNpZXMAAAACAAAAD2hpZ2hlc3RJdGVtTGlzdAAAAAhuZXh0SXRlbQMJAAAAAAAAAgkAAZAAAAABBQAAAA9oaWdoZXN0SXRlbUxpc3QAAAAAAAAAAAAJAARNAAAAAgUAAAAPaGlnaGVzdEl0ZW1MaXN0BQAAAAhuZXh0SXRlbQMJAQAAAA1pc0dyZWF0ZXJUaGVuAAAAAgUAAAAIbmV4dEl0ZW0FAAAAD2hpZ2hlc3RJdGVtTGlzdAkABE0AAAACBQAAAA9oaWdoZXN0SXRlbUxpc3QFAAAACG5leHRJdGVtBQAAAA9oaWdoZXN0SXRlbUxpc3QEAAAADGhpZ2hlc3RWb3RlcwoAAAAAAiRsBQAAAAtmcmVxdWVuY2llcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAAD2ZvbGRGcmVxdWVuY2llcwAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABNMaXN0IHNpemUgZXhjZWVkcyA1CQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQQAAAAHbGFzdElkeAkAAGUAAAACCQABkAAAAAEFAAAADGhpZ2hlc3RWb3RlcwAAAAAAAAAAAQQAAAALaGlnaGVzdFZvdGUJAAGRAAAAAgUAAAAMaGlnaGVzdFZvdGVzBQAAAAdsYXN0SWR4BAAAAAloZWxwZXJJZHgJAARPAAAAAgUAAAALZnJlcXVlbmNpZXMFAAAAC2hpZ2hlc3RWb3RlBAAAAAckbWF0Y2gwBQAAAAloZWxwZXJJZHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdAUAAAAHJG1hdGNoMAkAAZEAAAACBQAAAApoZWxwZXJMaXN0BQAAAAF0CQAAAgAAAAECAAAALlR5cGUgZG9lcyBub3QgbWF0Y2ghIEZ1bmN0aW9uOiBmaW5kSGlnaGVzdFZvdGUBAAAAC2NyZWF0ZUJvYXJkAAAAAQAAAAVib2FyZAkABLkAAAACBQAAAAVib2FyZAIAAAABLAEAAAAKYWx0ZXJCb2FyZAAAAAQAAAAIbmV3RmllbGQAAAAIb2xkVmFsdWUAAAAGZ2FtZUlkAAAABHRlYW0EAAAADGN1cnJlbnRCb2FyZAkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQkAASwAAAACBQAAAAZnYW1lSWQCAAAABl9ib2FyZAQAAAAJYm9hcmRMaXN0CQAEtQAAAAIFAAAADGN1cnJlbnRCb2FyZAIAAAABLAQAAAAHdGVhbVRhZwMJAAAAAAAAAgUAAAAEdGVhbQIAAAAIdGVhbUJsdWUCAAAAAUICAAAAAVkKAQAAAAxmb2xkT2xkRW50cnkAAAACAAAABWFjY3VtAAAACW5leHRWYWx1ZQQAAAALJHQwNDczMTQ3NTQFAAAABWFjY3VtBAAAAAZyZXN1bHQIBQAAAAskdDA0NzMxNDc1NAAAAAJfMQQAAAABaggFAAAACyR0MDQ3MzE0NzU0AAAAAl8yAwkAAAAAAAACBQAAAAFqBQAAAAhvbGRWYWx1ZQkABRQAAAACCQAETQAAAAIFAAAABnJlc3VsdAIAAAABMAkAAGQAAAACBQAAAAFqAAAAAAAAAAABCQAFFAAAAAIJAARNAAAAAgUAAAAGcmVzdWx0BQAAAAluZXh0VmFsdWUJAABkAAAAAgUAAAABagAAAAAAAAAAAQoBAAAACWZvbGRCb2FyZAAAAAIAAAAFYWNjdW0AAAAJbmV4dFZhbHVlBAAAAAskdDA0OTMxNDk1NAUAAAAFYWNjdW0EAAAABnJlc3VsdAgFAAAACyR0MDQ5MzE0OTU0AAAAAl8xBAAAAAFqCAUAAAALJHQwNDkzMTQ5NTQAAAACXzIDCQAAAAAAAAIFAAAAAWoFAAAACG5ld0ZpZWxkCQAFFAAAAAIJAARNAAAAAgUAAAAGcmVzdWx0BQAAAAd0ZWFtVGFnCQAAZAAAAAIFAAAAAWoAAAAAAAAAAAEJAAUUAAAAAgkABE0AAAACBQAAAAZyZXN1bHQFAAAACW5leHRWYWx1ZQkAAGQAAAACBQAAAAFqAAAAAAAAAAABBAAAAAxjbGVhbmVkQm9hcmQKAAAAAAIkbAUAAAAJYm9hcmRMaXN0CgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAkABRQAAAACBQAAAANuaWwAAAAAAAAAAAAKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAAxmb2xkT2xkRW50cnkAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgNDIJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAAAAAkAAAAAAAAAAAlAAAAAAAAAAAmAAAAAAAAAAAnAAAAAAAAAAAoAAAAAAAAAAApAAAAAAAAAAAqBAAAAAxuZXdCb2FyZExpc3QKAAAAAAIkbAgFAAAADGNsZWFuZWRCb2FyZAAAAAJfMQoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAJAAUUAAAAAgUAAAADbmlsAAAAAAAAAAAACgEAAAAFJGYxXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAJZm9sZEJvYXJkAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYxXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDQyCQEAAAAFJGYxXzIAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACCQEAAAAFJGYxXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgAAAAAAAAAACwAAAAAAAAAADAAAAAAAAAAADQAAAAAAAAAADgAAAAAAAAAADwAAAAAAAAAAEAAAAAAAAAAAEQAAAAAAAAAAEgAAAAAAAAAAEwAAAAAAAAAAFAAAAAAAAAAAFQAAAAAAAAAAFgAAAAAAAAAAFwAAAAAAAAAA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bmcEAAAAFmN1cnJlbnRWb3RpbmdFbnRyeUxpc3QJAARNAAAAAgUAAAAPdm90aW5nRW50cnlMaXN0BQAAAAduZXdWb3RlBAAAABJjdXJyZW50Vm90aW5nRW50cnkJAAS5AAAAAgUAAAAWY3VycmVudFZvdGluZ0VudHJ5TGlzdAIAAAABLAQAAAAKdm90ZWRGaWVsZAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQEAAAATdXBkYXRlVm90aW5nUmVzdWx0cwAAAAEFAAAAFmN1cnJlbnRWb3RpbmdFbnRyeUxpc3QEAAAADGN1cnJlbnRGaWVsZAMJAQAAAAIhPQAAAAIFAAAACnZvdGVkRmllbGQFAAAAD3N0b3JlZE1vc3RWb3RlZAUAAAAKdm90ZWRGaWVsZAUAAAAPc3RvcmVkTW9zdFZvdGVkBAAAAAxhbHRlcmVkQm9hcmQJAQAAAAphbHRlckJvYXJkAAAABAUAAAAMY3VycmVudEZpZWxkBQAAAA9zdG9yZWRNb3N0Vm90ZWQFAAAABmdhbWVJZAUAAAAKYWN0aXZlVGVhbQQAAAAPcG90ZW50aWFsV2lubmVyCQAD/AAAAAQJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEGluc3BlY3RvckFkZHJlc3MCAAAAC2NoZWNrRm9yV2luCQAETAAAAAIFAAAADGFsdGVyZWRCb2FyZAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAD3BvdGVudGlhbFdpbm5lcgUAAAAPcG90ZW50aWFsV2lubmVyBAAAAAckbWF0Y2gwBQAAAA9wb3RlbnRpYWxXaW5uZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABdAUAAAAHJG1hdGNoMAMJAABmAAAAAgUAAAARbWF4UGxheWVyc1BlclRlYW0JAAGQAAAAAQUAAAAWY3VycmVudFZvdGluZ0VudHJ5TGlzdAkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGZ2FtZUlkAgAAAAhfdm90aW5nXwkAAaQAAAABBQAAAAVyb3VuZAUAAAASY3VycmVudFZvdGluZ0VudHJ5CQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIJAAEs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", "height": 1896270, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A19ZfUqVp2FMjodY2z8bc1gM7nyFED5Fe1M9q2W4DuUy Next: 6U7DhW64Ve5mRw8GKbKpD4dBTEfq3DkqRpTUxhJhyhSg Diff:
OldNewDifferences
365365 let bb = ((h + "_") + toString(aK))
366366 let as = [bb]
367367 let bd = parseIntValue(ar(as))
368- let bf = Y(bd, -1, ab, aN)
368+ let bf = Y(bd, -1, ab, aX)
369369 [l((ab + "_board"), bf), i((ab + "_storedHeight"), (height + d)), l((ab + "_status"), ((("round_" + toString((aM + 1))) + ",turn_") + aX)), l(((ab + "_voting_") + toString((aM + 1))), bb), i((ab + "_mostVoted"), bd)]
370370 }
371371 else throw((("Caller is not in " + aX) + "!"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = valueOrElse(getString(this, "admin"), "")
55
66 let b = valueOrErrorMessage(getString(this, "inspector"), "No key inspector was found")
77
88 let c = valueOrElse(getInteger(this, "totalSupply"), 0)
99
1010 let d = valueOrErrorMessage(getInteger(this, "votingDuration"), "No key votingDuration was found")
1111
1212 let e = valueOrErrorMessage(getString(this, "tokenId"), "No key cTokenId was found")
1313
1414 let f = valueOrErrorMessage(getInteger(this, "playersPerTeam"), "No key playersPerTeam was found")
1515
1616 func g (h) = if ((h == fromBase58String(a)))
1717 then true
1818 else false
1919
2020
2121 func i (j,k) = IntegerEntry(j, k)
2222
2323
2424 func l (j,m) = StringEntry(j, m)
2525
2626
2727 func n (o,p) = {
2828 func q (r,s) = {
2929 func t (u,v) = if ((s == v))
3030 then (u + 1)
3131 else u
3232
3333 (r :+ {
3434 let w = p
3535 let x = size(w)
3636 let y = 0
3737 func z (A,B) = if ((B >= x))
3838 then A
3939 else t(A, w[B])
4040
4141 func C (A,B) = if ((B >= x))
4242 then A
4343 else throw("List size exceeds 5")
4444
4545 C(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5)
4646 })
4747 }
4848
4949 let w = o
5050 let x = size(w)
5151 let y = nil
5252 func z (A,B) = if ((B >= x))
5353 then A
5454 else q(A, w[B])
5555
5656 func C (A,B) = if ((B >= x))
5757 then A
5858 else throw("List size exceeds 5")
5959
6060 C(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5)
6161 }
6262
6363
6464 func D (E) = {
6565 func F (r,s) = if ((containsElement(r, s) == false))
6666 then (r :+ s)
6767 else r
6868
6969 let w = E
7070 let x = size(w)
7171 let y = nil
7272 func z (A,B) = if ((B >= x))
7373 then A
7474 else F(A, w[B])
7575
7676 func C (A,B) = if ((B >= x))
7777 then A
7878 else throw("List size exceeds 5")
7979
8080 C(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5)
8181 }
8282
8383
8484 func G (H,I) = {
8585 let J = (size(I) - 1)
8686 let K = I[J]
8787 if ((H > K))
8888 then true
8989 else false
9090 }
9191
9292
9393 func L (o,M) = {
9494 func N (O,P) = if ((size(O) == 0))
9595 then (O :+ P)
9696 else if (G(P, O))
9797 then (O :+ P)
9898 else O
9999
100100 let Q = {
101101 let w = M
102102 let x = size(w)
103103 let y = nil
104104 func z (A,B) = if ((B >= x))
105105 then A
106106 else N(A, w[B])
107107
108108 func C (A,B) = if ((B >= x))
109109 then A
110110 else throw("List size exceeds 5")
111111
112112 C(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5)
113113 }
114114 let R = (size(Q) - 1)
115115 let S = Q[R]
116116 let T = indexOf(M, S)
117117 let U = T
118118 if ($isInstanceOf(U, "Int"))
119119 then {
120120 let V = U
121121 o[V]
122122 }
123123 else throw("Type does not match! Function: findHighestVote")
124124 }
125125
126126
127127 func W (X) = makeString(X, ",")
128128
129129
130130 func Y (Z,aa,ab,ac) = {
131131 let ad = getStringValue((ab + "_board"))
132132 let ae = split(ad, ",")
133133 let af = if ((ac == "teamBlue"))
134134 then "B"
135135 else "Y"
136136 func ag (r,ah) = {
137137 let ai = r
138138 let aj = ai._1
139139 let ak = ai._2
140140 if ((ak == aa))
141141 then $Tuple2((aj :+ "0"), (ak + 1))
142142 else $Tuple2((aj :+ ah), (ak + 1))
143143 }
144144
145145 func al (r,ah) = {
146146 let am = r
147147 let aj = am._1
148148 let ak = am._2
149149 if ((ak == Z))
150150 then $Tuple2((aj :+ af), (ak + 1))
151151 else $Tuple2((aj :+ ah), (ak + 1))
152152 }
153153
154154 let an = {
155155 let w = ae
156156 let x = size(w)
157157 let y = $Tuple2(nil, 0)
158158 func z (A,B) = if ((B >= x))
159159 then A
160160 else ag(A, w[B])
161161
162162 func C (A,B) = if ((B >= x))
163163 then A
164164 else throw("List size exceeds 42")
165165
166166 C(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(z(y, 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)
167167 }
168168 let ao = {
169169 let w = an._1
170170 let x = size(w)
171171 let y = $Tuple2(nil, 0)
172172 func ap (A,B) = if ((B >= x))
173173 then A
174174 else al(A, w[B])
175175
176176 func aq (A,B) = if ((B >= x))
177177 then A
178178 else throw("List size exceeds 42")
179179
180180 aq(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(ap(y, 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)
181181 }
182182 W(ao._1)
183183 }
184184
185185
186186 func ar (as) = {
187187 func at (r,ah) = (r :+ split(ah, "_")[1])
188188
189189 let au = {
190190 let w = as
191191 let x = size(w)
192192 let y = nil
193193 func z (A,B) = if ((B >= x))
194194 then A
195195 else at(A, w[B])
196196
197197 func C (A,B) = if ((B >= x))
198198 then A
199199 else throw("List size exceeds 5")
200200
201201 C(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5)
202202 }
203203 let o = D(au)
204204 let M = n(o, au)
205205 L(o, M)
206206 }
207207
208208
209209 func av (ac,aw) = if (!(containsElement(ac, aw)))
210210 then true
211211 else false
212212
213213
214214 @Callable(ax)
215215 func setup (b,ay,az) = if (!(isDefined(getString(this, "admin"))))
216216 then {
217217 let aA = Issue(ay, az, 0, 8, true)
218218 let aB = calculateAssetId(aA)
219219 [aA, l("admin", toBase58String(ax.caller.bytes)), l("inspector", b), i("votingDuration", 2), i("totalSupply", 0), l("tokenName", ay), l("tokenId", toBase58String(aB)), i("tokenDecimals", 8)]
220220 }
221221 else throw("DApp already setup!")
222222
223223
224224
225225 @Callable(ax)
226226 func buyRound () = if ((size(ax.payments) > 0))
227227 then {
228228 let aC = ax.payments[0].amount
229229 if ((aC >= 1))
230230 then {
231231 let aD = fraction(aC, 42, 1)
232232 let aE = (c + aD)
233233 [i("totalSupply", aE), Reissue(fromBase58String(e), aD, true), ScriptTransfer(ax.caller, aD, fromBase58String(e))]
234234 }
235235 else throw("Payment is to small!")
236236 }
237237 else throw("No payment attached!")
238238
239239
240240
241241 @Callable(ax)
242242 func createGame () = {
243243 let X = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
244244 let ab = toBase58String(ax.transactionId)
245245 [l((ab + "_board"), X), l((ab + "_status"), "waiting for players"), l((ab + "_teamBlue"), toString(ax.caller)), l((ab + "_teamYellow"), "")]
246246 }
247247
248248
249249
250250 @Callable(ax)
251251 func joinGame (ab) = {
252252 let aF = toBase58String(ax.caller.bytes)
253253 let aG = getStringValue((ab + "_teamBlue"))
254254 let aH = getStringValue((ab + "_teamYellow"))
255255 let aI = split(aG, ",")
256256 let aJ = if ((size(aH) > 0))
257257 then split(aH, ",")
258258 else nil
259259 if (if (av(aI, aF))
260260 then av(aJ, aF)
261261 else false)
262262 then if ((f > size(aI)))
263263 then [l((ab + "_teamBlue"), ((aG + ",") + aF))]
264264 else if ((size(aJ) == (f - 1)))
265265 then [l((ab + "_status"), "round_1,turn_teamBlue"), l((ab + "_voting_1"), ""), l((ab + "_winner"), ""), i((ab + "_mostVoted"), -1), i((ab + "_storedHeight"), (height + d)), l((ab + "_teamYellow"), ((aH + ",") + aF))]
266266 else if ((size(aJ) == 0))
267267 then [l((ab + "_teamYellow"), aF)]
268268 else if (((f - 1) > size(aJ)))
269269 then [l((ab + "_teamYellow"), ((aH + ",") + aF))]
270270 else throw("Teams are full, cannot join.")
271271 else throw("Player already in a Team!")
272272 }
273273
274274
275275
276276 @Callable(ax)
277277 func vote (ab,aK) = {
278278 let aL = valueOrErrorMessage(getStringValue((ab + "_status")), "No status entry found under gameId!")
279279 let aM = parseIntValue(drop(split(aL, ",")[0], 6))
280280 let aN = drop(split(aL, ",")[1], 5)
281281 let aO = valueOrErrorMessage(getInteger((ab + "_storedHeight")), (("No status entry found under " + ab) + "_storedHeight!"))
282282 let aP = valueOrErrorMessage(getIntegerValue((ab + "_mostVoted")), (("No status entry found under " + ab) + "_mostVoted!"))
283283 let aQ = valueOrErrorMessage(getStringValue(((ab + "_voting_") + toString(aM))), "No votes found for this game id!")
284284 let aR = if ((size(aQ) > 0))
285285 then split(aQ, ",")
286286 else nil
287287 let aS = if ((aN == "teamBlue"))
288288 then {
289289 let aT = getStringValue((ab + "_teamBlue"))
290290 let aU = split(aT, ",")
291291 aU
292292 }
293293 else {
294294 let aV = getStringValue((ab + "_teamYellow"))
295295 let aW = split(aV, ",")
296296 aW
297297 }
298298 let aX = if ((aN == "teamBlue"))
299299 then "teamYellow"
300300 else "teamBlue"
301301 let aY = if ((aX == "teamBlue"))
302302 then {
303303 let aT = getStringValue((ab + "_teamBlue"))
304304 let aU = split(aT, ",")
305305 aU
306306 }
307307 else {
308308 let aV = getStringValue((ab + "_teamYellow"))
309309 let aW = split(aV, ",")
310310 aW
311311 }
312312 let h = toBase58String(ax.caller.bytes)
313313 if ((size(ax.payments) > 0))
314314 then if ((fromBase58String(e) == ax.payments[0].assetId))
315315 then if ((ax.payments[0].amount == 100000000))
316316 then if ((aO >= height))
317317 then if (containsElement(aS, h))
318318 then {
319319 func aZ (r,ah) = (r :+ split(ah, "_")[0])
320320
321321 let ba = {
322322 let w = aR
323323 let x = size(w)
324324 let y = nil
325325 func z (A,B) = if ((B >= x))
326326 then A
327327 else aZ(A, w[B])
328328
329329 func C (A,B) = if ((B >= x))
330330 then A
331331 else throw("List size exceeds 5")
332332
333333 C(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5)
334334 }
335335 if ((containsElement(ba, h) == false))
336336 then {
337337 let bb = ((h + "_") + toString(aK))
338338 let as = (aR :+ bb)
339339 let bc = makeString(as, ",")
340340 let bd = parseIntValue(ar(as))
341341 let be = if ((bd != aP))
342342 then bd
343343 else aP
344344 let bf = Y(be, aP, ab, aN)
345345 let bg = invoke(addressFromStringValue(b), "checkForWin", [bf], nil)
346346 if ((bg == bg))
347347 then {
348348 let U = bg
349349 if ($isInstanceOf(U, "String"))
350350 then {
351351 let V = U
352352 if ((f > size(as)))
353353 then [l(((ab + "_voting_") + toString(aM)), bc), l((ab + "_board"), bf), l((ab + "_winner"), V), i((ab + "_mostVoted"), be)]
354354 else [l(((ab + "_voting_") + toString(aM)), bc), l((ab + "_board"), bf), l((ab + "_winner"), V), i((ab + "_mostVoted"), -1), i((ab + "_storedHeight"), (height + d)), l((ab + "_status"), ((("round_" + toString((aM + 1))) + ",turn_") + aX)), l(((ab + "_voting_") + toString((aM + 1))), "")]
355355 }
356356 else throw("Invokation result type is not a String!")
357357 }
358358 else throw("Strict value is not equal to itself.")
359359 }
360360 else throw("Caller already voted!")
361361 }
362362 else throw((("Caller is not in " + aN) + "!"))
363363 else if (containsElement(aY, h))
364364 then {
365365 let bb = ((h + "_") + toString(aK))
366366 let as = [bb]
367367 let bd = parseIntValue(ar(as))
368- let bf = Y(bd, -1, ab, aN)
368+ let bf = Y(bd, -1, ab, aX)
369369 [l((ab + "_board"), bf), i((ab + "_storedHeight"), (height + d)), l((ab + "_status"), ((("round_" + toString((aM + 1))) + ",turn_") + aX)), l(((ab + "_voting_") + toString((aM + 1))), bb), i((ab + "_mostVoted"), bd)]
370370 }
371371 else throw((("Caller is not in " + aX) + "!"))
372372 else throw("Amount has to be 1!")
373373 else throw("Payment has to be a Connect four Token!")
374374 else throw("No Payment attached!")
375375 }
376376
377377
378378
379379 @Callable(ax)
380380 func updateStringEntry (j,m) = if (g(ax.caller.bytes))
381381 then [l(j, m)]
382382 else throw("Address does not match with admin address!")
383383
384384
385385
386386 @Callable(ax)
387387 func updateIntegerEntry (j,k) = if (g(ax.caller.bytes))
388388 then [i(j, k)]
389389 else throw("Address does not match with admin address!")
390390
391391
392392
393393 @Callable(ax)
394394 func deleteStorageEntry (j) = if (g(ax.caller.bytes))
395395 then [DeleteEntry(j)]
396396 else throw("Address does not match with admin address!")
397397
398398
399399 @Verifier(bh)
400400 func bi () = sigVerify(bh.bodyBytes, bh.proofs[0], bh.senderPublicKey)
401401

github/deemru/w8io/169f3d6 
59.29 ms