tx · D2nqFXo12FJ82cUarJxk92GmdD1gihpXTJ7JhUA9nFb8 3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY: -0.01900000 Waves 2023.11.20 15:18 [3917575] smart account 3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY > SELF 0.00000000 Waves
{ "type": 13, "id": "D2nqFXo12FJ82cUarJxk92GmdD1gihpXTJ7JhUA9nFb8", "fee": 1900000, "feeAssetId": null, "timestamp": 1700482737794, "version": 2, "chainId": 87, "sender": "3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY", "senderPublicKey": "8bCz9o3CUTfKKYBmcfJcAwKVKxEmLhGGyULemkcJwtkB", "proofs": [ "tb65XSAeSYebSKf5Z7rYa87CQSzQYoxs4MyjRtq9qrhVTDfnkb5C5TpzbMNG4H7119GrNmhST81AY6ptpeHeMRc" ], "script": "base64:BgIxCAISABIAEgASABIAEgASAwoBARIAEgASAwoBBBIDCgEEEgcKBQgBAQEBEgUKAwgBCBoAAmQ4AIDC1y8AEnJlZ2lzdHJhdGlvbkNsb3NlZAkBEUBleHRyTmF0aXZlKDEwNTUpAQIXcmVnaXN0cmF0aW9uIGxhc3QgYmxvY2sAF3JlZ2lzdHJhdGlvblJlcXVpcmVtZW50CQBoAgkBEUBleHRyTmF0aXZlKDEwNTUpAQIYcmVnaXN0cmF0aW9uIHJlcXVpcmVtZW50BQJkOAANcmV3YXJkQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTgpAQIPcmV3YXJkIGFzc2V0IGlkAAxyZXdhcmRBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQECDXJld2FyZCBhbW91bnQAD21pbmltdW1JbmNyZWFzZQkBEUBleHRyTmF0aXZlKDEwNTUpAQIQbWluaW11bSBpbmNyZWFzZQENdHJ5R2V0SW50ZWdlcgIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQx0cnlHZXRTdHJpbmcCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAAHYnVybnh0bgEgJE91eWp+Mzm4+wz/hKlxXF7KLd4zoMRdafnqRBHsTFQACXdoaXJscG9vbAEgWeON3MK1I7pKFNzE0K8UCeZk5gS+JQYLJk7lUG2XWccAA1BaMQEaAVeFnSww1fwDPmHFrd6Sv8UqkfOZrhpBQAoAA1BaMgEaAVf1RmgngA1o304mdXq0odMoMeAJv/V5eTcAA1BaMwEaAVdrUh3hZ11iM5xE9ppvCu7VVcjaIPzs5scAA1BaNAEaAVd8ufIkLHkd+cILYV2n5Ut+Pmb4MdnkIOIAA1BaNQEaAVdzM1uLVnknLEeNcZD2LCCz+T9Cl/2cRdIAA1BaNgEaAVdHHWb6sJRhaJYHMq62QOOh/3POTybYR7oAB1dYc3Rha2UBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAANXWDEBGgFXK+KucXt9yTC1IHnnFsVrbVdAgaU4Fj0+AANMUDECLEd5aUhkY041OXNaNDZiYUZ2ajY4cnVMbmdyVFBFdldEdHNkNmpIbTRvNDZuAANXWDIBGgFXwRfLSELOBVNDikdciGeU9BfVx8LU1MNSAANMUDICLDNNUEhNSlZ3WUd5ZUJMUnNIMVJzWWhyVG1lbXY3NTJBRUJ3dUZGVjdnNDlaAAlhZGRyZXNzZXMDCQAAAgkAmwgCBQR0aGlzAgdzdGFydGVkBgkBDHRyeUdldFN0cmluZwIFBHRoaXMCBmZpbHRlcgkAswICCQEMdHJ5R2V0U3RyaW5nAgUEdGhpcwISQWRkcmVzcyByZWdpc3RlcmVkAAEBBVBaYmFsAgtQb29sYWRkcmVzcwdhZGRyZXNzBAtidXJueHRuSW5QWgkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFC1Bvb2xhZGRyZXNzCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQdidXJueHRuAghfYmFsYW5jZQQOYWRkcmVzc1N0YWtlUFoJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQtQb29sYWRkcmVzcwkArAICCQClCAEFB2FkZHJlc3MCDF9pbmRleFN0YWtlZAQMdG90YWxTdGFrZVBaCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQULUG9vbGFkZHJlc3MCF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50CQBrAwULYnVybnh0bkluUFoFDmFkZHJlc3NTdGFrZVBaBQx0b3RhbFN0YWtlUFoBBVdYYmFsAwtQb29sYWRkcmVzcwdhZGRyZXNzBUxQc3RyBAtidXJueHRuSW5XWAkA8AcCCQEHQWRkcmVzcwEFC1Bvb2xhZGRyZXNzBQdidXJueHRuBA5hZGRyZXNzU3Rha2VXWAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFB1dYc3Rha2UJAKwCAgkArAICCQCsAgICECVzJXMlc19fc3Rha2VkX18JAKUIAQUHYWRkcmVzcwICX18FBUxQc3RyBAx0b3RhbFN0YWtlV1gJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQdXWHN0YWtlCQCsAgICFyVzJXMlc19fc3Rha2VkX190b3RhbF9fBQVMUHN0cgkAawMFC2J1cm54dG5JbldYBQ5hZGRyZXNzU3Rha2VXWAUMdG90YWxTdGFrZVdYAQx0b3RhbEJhbGFuY2UBB2FkZHJlc3MEDmJ1cm54dG5CYWxhbmNlCQDwBwIFB2FkZHJlc3MFB2J1cm54dG4EClBaMWJhbGFuY2UJAQVQWmJhbAIFA1BaMQUHYWRkcmVzcwQKUFoyYmFsYW5jZQkBBVBaYmFsAgUDUFoyBQdhZGRyZXNzBApQWjNiYWxhbmNlCQEFUFpiYWwCBQNQWjMFB2FkZHJlc3MEClBaNGJhbGFuY2UJAQVQWmJhbAIFA1BaNAUHYWRkcmVzcwQKUFo1YmFsYW5jZQkBBVBaYmFsAgUDUFo1BQdhZGRyZXNzBApQWjZiYWxhbmNlCQEFUFpiYWwCBQNQWjYFB2FkZHJlc3MECldYMWJhbGFuY2UJAQVXWGJhbAMFA1dYMQUHYWRkcmVzcwUDTFAxBApXWDJiYWxhbmNlCQEFV1hiYWwDBQNXWDIFB2FkZHJlc3MFA0xQMgQFdG90YWwJAGQCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAgUOYnVybnh0bkJhbGFuY2UFClBaMWJhbGFuY2UFClBaMmJhbGFuY2UFClBaM2JhbGFuY2UFClBaNGJhbGFuY2UFClBaNWJhbGFuY2UFClBaNmJhbGFuY2UFCldYMWJhbGFuY2UFCldYMmJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQICDmJ1cm54dG5CYWxhbmNlBQ5idXJueHRuQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUFoxYmFsYW5jZQUKUFoxYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUFoyYmFsYW5jZQUKUFoyYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUFozYmFsYW5jZQUKUFozYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUFo0YmFsYW5jZQUKUFo0YmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUFo1YmFsYW5jZQUKUFo1YmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUFo2YmFsYW5jZQUKUFo2YmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKV1gxYmFsYW5jZQUKV1gxYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKV1gyYmFsYW5jZQUKV1gyYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIFdG90YWwFBXRvdGFsBQNuaWwBDXRvdGFsQmFsYW5jZTIBB2FkZHJlc3MEDmJ1cm54dG5CYWxhbmNlCQDwBwIFB2FkZHJlc3MFB2J1cm54dG4EClBaMWJhbGFuY2UJAQVQWmJhbAIFA1BaMQUHYWRkcmVzcwQKUFoyYmFsYW5jZQkBBVBaYmFsAgUDUFoyBQdhZGRyZXNzBApQWjNiYWxhbmNlCQEFUFpiYWwCBQNQWjMFB2FkZHJlc3MEClBaNGJhbGFuY2UJAQVQWmJhbAIFA1BaNAUHYWRkcmVzcwQKUFo1YmFsYW5jZQkBBVBaYmFsAgUDUFo1BQdhZGRyZXNzBApQWjZiYWxhbmNlCQEFUFpiYWwCBQNQWjYFB2FkZHJlc3MECldYMWJhbGFuY2UJAQVXWGJhbAMFA1dYMQUHYWRkcmVzcwUDTFAxBApXWDJiYWxhbmNlCQEFV1hiYWwDBQNXWDIFB2FkZHJlc3MFA0xQMgkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCBQ5idXJueHRuQmFsYW5jZQUKUFoxYmFsYW5jZQUKUFoyYmFsYW5jZQUKUFozYmFsYW5jZQUKUFo0YmFsYW5jZQUKUFo1YmFsYW5jZQUKUFo2YmFsYW5jZQUKV1gxYmFsYW5jZQUKV1gyYmFsYW5jZQ0BaQEIcmVnaXN0ZXIAAwkBCGNvbnRhaW5zAgkBDHRyeUdldFN0cmluZwIFBHRoaXMCEkFkZHJlc3MgcmVnaXN0ZXJlZAkApQgBCAUBaQZjYWxsZXIJAAIBAhJhbHJlYWR5IHJlZ2lzdGVyZWQDCQBmAgUGaGVpZ2h0BRJyZWdpc3RyYXRpb25DbG9zZWQJAAIBAhNyZWdpc3RyYXRpb24gY2xvc2VkAwkAZgIFF3JlZ2lzdHJhdGlvblJlcXVpcmVtZW50CQENdG90YWxCYWxhbmNlMgEIBQFpBmNhbGxlcgkAAgECOmhhdmUgYXRsZWFzdCA0MGsgQlVSTi1YVE4gaW4gd2FsbGV0IGFuZC9vciBsaXF1aWRpdHkgcG9vbHMDCQAAAgkBDXRyeUdldEludGVnZXICBQR0aGlzAhFBbW91bnQgUmVnaXN0ZXJlZABkCQACAQITcmVnaXN0cmF0aW9uIGNsb3NlZAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhFBbW91bnQgUmVnaXN0ZXJlZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIRQW1vdW50IFJlZ2lzdGVyZWQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICElJlZ2lzdGVyIGFkZHJlc3M6IAkApAMBCQBkAgkBDXRyeUdldEludGVnZXICBQR0aGlzAhFBbW91bnQgUmVnaXN0ZXJlZAABCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCAhJBZGRyZXNzIHJlZ2lzdGVyZWQJAKwCAgkArAICCQEMdHJ5R2V0U3RyaW5nAgUEdGhpcwISQWRkcmVzcyByZWdpc3RlcmVkCQClCAEIBQFpBmNhbGxlcgIBLAUDbmlsCQEMdG90YWxCYWxhbmNlAQgFAWkGY2FsbGVyAWkBBXN0YXJ0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEBGxpc3QJALUJAgUJYWRkcmVzc2VzAgEsCgEDYmFsAgVhY2N1bQdhZGRyZXNzCQDOCAIFBWFjY3VtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdhZGRyZXNzCQENdG90YWxCYWxhbmNlMgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFA25pbAQNZW50ZXJJbnRlZ2VycwoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNiYWwCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQDOCAIFA25pbAUNZW50ZXJJbnRlZ2VycwFpAQ9jdXJyZW50UG9zaXRpb24ABARsaXN0CQC1CQIFCWFkZHJlc3NlcwIBLAoBA2RpZgIFYWNjdW0HYWRkcmVzcwkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAglpbmNyZWFzZSAFB2FkZHJlc3MJAGUCCQENdG90YWxCYWxhbmNlMgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUHYWRkcmVzcwUDbmlsBAhlbnRlckRpZgoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNkaWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDk4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgkAzggCBQNuaWwFCGVudGVyRGlmAWkBDHN0b3BJbmNyZWFzZQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBARsaXN0CQC1CQIFCWFkZHJlc3NlcwIBLAoBA2RpZgIFYWNjdW0HYWRkcmVzcwkAzggCBQVhY2N1bQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg1zdG9wIGluY3JlYXNlBQdhZGRyZXNzCQBlAgkBDXRvdGFsQmFsYW5jZTIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFB2FkZHJlc3MFA25pbAQIZW50ZXJEaWYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDZGlmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAkAzggCBQNuaWwFCGVudGVyRGlmAWkBB3dpbm5lcnMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQGZmlsdGVyCQD8BwQFBHRoaXMCBmZpbHRlcgUDbmlsBQNuaWwDCQAAAgUGZmlsdGVyBQZmaWx0ZXIEBGxpc3QJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAUDbmlsCgEBcgIFYWNjdW0KaXRlcmF0aW9ucwkA/AcEBQR0aGlzAgZyZW1vdmUJAMwIAgUKaXRlcmF0aW9ucwUDbmlsBQNuaWwEBnJlbW92ZQoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQDCQAAAgUGcmVtb3ZlBQZyZW1vdmUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZmaWx0ZXIAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQEbGlzdAkAtQkCBQlhZGRyZXNzZXMCASwECGxpc3RTaXplCQCQAwEFBGxpc3QKAQVmTGlzdAIFYWNjdW0HYWRkcmVzcwMJAGYCBQ9taW5pbXVtSW5jcmVhc2UJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwkArAICAg1zdG9wIGluY3JlYXNlBQdhZGRyZXNzBQNuaWwJAM0IAgUFYWNjdW0FB2FkZHJlc3MECmZpbHRlckxpc3QKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFZkxpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkBBBmaWx0ZXJMaXN0U3RyaW5nCQC5CQIFCmZpbHRlckxpc3QCASwEDmZpbHRlckxpc3RTaXplCQCQAwEFCmZpbHRlckxpc3QECGN1bGxTaXplCQBuBAUOZmlsdGVyTGlzdFNpemUAUABkBQRET1dOCQDMCAIJAQtTdHJpbmdFbnRyeQICBmZpbHRlcgUQZmlsdGVyTGlzdFN0cmluZwkAzAgCCQEMSW50ZWdlckVudHJ5AgIUbGlzdCBzaXplIGZpbHRlckxpc3QFDmZpbHRlckxpc3RTaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghjdWxsU2l6ZQUIY3VsbFNpemUFA25pbAFpAQZyZW1vdmUBCml0ZXJhdGlvbnMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyAwkAZwIDCQAAAgkAoAgBAgVmaW5hbAYAAQkBEUBleHRyTmF0aXZlKDEwNTUpAQIIY3VsbFNpemUJARFAZXh0ck5hdGl2ZSgxMDU1KQECFGxpc3Qgc2l6ZSBmaWx0ZXJMaXN0BQNuaWwEBGxpc3QJALUJAgkBEUBleHRyTmF0aXZlKDEwNTgpAQIGZmlsdGVyAgEsCgEDYmFsAgVhY2N1bQdhZGRyZXNzCQDNCAIFBWFjY3VtCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMJAKwCAgINc3RvcCBpbmNyZWFzZQUHYWRkcmVzcwQHYmFsTGlzdAoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNiYWwCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkBAZsb3dlc3QJAQV2YWx1ZQEJAJcDAQUHYmFsTGlzdAQLaW5kZXhMb3dlc3QJAQV2YWx1ZQEJAM8IAgUHYmFsTGlzdAUGbG93ZXN0BA9taW51c0xvd2VzdExpc3QJANEIAgUEbGlzdAULaW5kZXhMb3dlc3QEE21pbnVzTG93ZXN0TGlzdFNpemUJAJADAQUPbWludXNMb3dlc3RMaXN0BBFtaW51c0xvd2VzdFN0cmluZwkAuQkCBQ9taW51c0xvd2VzdExpc3QCASwJAMwIAgkBDEludGVnZXJFbnRyeQICFGxpc3Qgc2l6ZSBmaWx0ZXJMaXN0BRNtaW51c0xvd2VzdExpc3RTaXplCQDMCAIJAQtTdHJpbmdFbnRyeQICBmZpbHRlcgURbWludXNMb3dlc3RTdHJpbmcFA25pbAFpAQpwYXlXaW5uZXJzAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEB2Fzc2V0SWQFCXdoaXJscG9vbAQGYW1vdW50CQBoAgUMcmV3YXJkQW1vdW50BQJkOAQEbGlzdAkAtQkCBQlhZGRyZXNzZXMCASwKAQNiYWwCBWFjY3VtB2FkZHJlc3MJAM0IAgUFYWNjdW0JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwkArAICAg1zdG9wIGluY3JlYXNlBQdhZGRyZXNzBAdiYWxMaXN0CgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA2JhbAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEF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cm9qZWN0IG93bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQICD3Jld2FyZCBhc3NldCBpZAUNcmV3YXJkQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgINcmV3YXJkIGFtb3VudAUMcmV3YXJkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhdyZWdpc3RyYXRpb24gbGFzdCBibG9jawUVcmVnaXN0cmF0aW9uTGFzdEJsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhhyZWdpc3RyYXRpb24gcmVxdWlyZW1lbnQFF3JlZ2lzdHJhdGlvblJlcXVpcmVtZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBtaW5pbXVtIGluY3JlYXNlBQ9taW5pbXVtSW5jcmVhc2UFA25pbAFpAQtlbnRyeURlbGV0ZQMFZW50cnkGYW1vdW50BmRlbGV0ZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIABQVlbnRyeQUGYW1vdW50CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgIABQZkZWxldGUFA25pbABadUPU", "height": 3917575, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9MT8RzGgGQ5BuCQVCYP9MVdCsSufiyKLhmQVEhET2XrV Next: 8R3aiKWyhky8DPu2neH7Ag22YLHs6Es3qmz9ZaRdmgQj Diff:
Old | New | Differences | |
---|---|---|---|
105 | 105 | ||
106 | 106 | ||
107 | 107 | @Callable(i) | |
108 | + | func register () = if (contains(tryGetString(this, "Address registered"), toString(i.caller))) | |
109 | + | then throw("already registered") | |
110 | + | else if ((height > registrationClosed)) | |
111 | + | then throw("registration closed") | |
112 | + | else if ((registrationRequirement > totalBalance2(i.caller))) | |
113 | + | then throw("have atleast 40k BURN-XTN in wallet and/or liquidity pools") | |
114 | + | else if ((tryGetInteger(this, "Amount Registered") == 100)) | |
115 | + | then throw("registration closed") | |
116 | + | else ([IntegerEntry("Amount Registered", (tryGetInteger(this, "Amount Registered") + 1)), StringEntry(("Register address: " + toString((tryGetInteger(this, "Amount Registered") + 1))), toString(i.caller)), StringEntry("Address registered", ((tryGetString(this, "Address registered") + toString(i.caller)) + ","))] ++ totalBalance(i.caller)) | |
117 | + | ||
118 | + | ||
119 | + | ||
120 | + | @Callable(i) | |
108 | 121 | func start () = if ((i.caller != this)) | |
109 | 122 | then throw("access only by project owner") | |
110 | 123 | else { | |
151 | 164 | } | |
152 | 165 | (nil ++ enterDif) | |
153 | 166 | } | |
154 | - | ||
155 | - | ||
156 | - | ||
157 | - | @Callable(i) | |
158 | - | func entryHighest (address) = if ((i.caller != this)) | |
159 | - | then throw("access only by project owner") | |
160 | - | else { | |
161 | - | let increase = (totalBalance2(addressFromStringValue(address)) - tryGetInteger(this, address)) | |
162 | - | let list = split(addresses, ",") | |
163 | - | func bal (accum,address) = (accum :+ increase) | |
164 | - | ||
165 | - | let balList = { | |
166 | - | let $l = list | |
167 | - | let $s = size($l) | |
168 | - | let $acc0 = nil | |
169 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
170 | - | then $a | |
171 | - | else bal($a, $l[$i]) | |
172 | - | ||
173 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
174 | - | then $a | |
175 | - | else throw("List size exceeds 100") | |
176 | - | ||
177 | - | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
178 | - | } | |
179 | - | let highest = value(max(balList)) | |
180 | - | let indexHighest = value(indexOf(balList, highest)) | |
181 | - | let highestAddress = list[indexHighest] | |
182 | - | let minusHighestList = removeByIndex(list, indexHighest) | |
183 | - | let minusHighestString = makeString(minusHighestList, ",") | |
184 | - | [IntegerEntry(highestAddress, (totalBalance2(addressFromStringValue(address)) - tryGetInteger(this, highestAddress))), StringEntry("filter", minusHighestString)] | |
185 | - | } | |
186 | 167 | ||
187 | 168 | ||
188 | 169 | ||
251 | 232 | else { | |
252 | 233 | let list = split(addresses, ",") | |
253 | 234 | let listSize = size(list) | |
254 | - | let minimum = minimumIncrease | |
255 | - | func fList (accum,address) = if ((minimum > tryGetInteger(this, ("stop increase" + address)))) | |
235 | + | func fList (accum,address) = if ((minimumIncrease > tryGetInteger(this, ("stop increase" + address)))) | |
256 | 236 | then nil | |
257 | 237 | else (accum :+ address) | |
258 | 238 | ||
405 | 385 | else [StringEntry("reward asset id", rewardAssetId), IntegerEntry("reward amount", rewardAmount), IntegerEntry("registration last block", registrationLastBlock), IntegerEntry("registration requirement", registrationRequirement), IntegerEntry("minimum increase", minimumIncrease)] | |
406 | 386 | ||
407 | 387 | ||
388 | + | ||
389 | + | @Callable(i) | |
390 | + | func entryDelete (entry,amount,delete) = if ((i.caller != this)) | |
391 | + | then throw("access only by project owner") | |
392 | + | else [IntegerEntry(("" + entry), amount), DeleteEntry(("" + delete))] | |
393 | + | ||
394 | + |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let d8 = 100000000 | |
5 | 5 | ||
6 | 6 | let registrationClosed = getIntegerValue("registration last block") | |
7 | 7 | ||
8 | 8 | let registrationRequirement = (getIntegerValue("registration requirement") * d8) | |
9 | 9 | ||
10 | 10 | let rewardAssetId = getStringValue("reward asset id") | |
11 | 11 | ||
12 | 12 | let rewardAmount = getIntegerValue("reward amount") | |
13 | 13 | ||
14 | 14 | let minimumIncrease = getIntegerValue("minimum increase") | |
15 | 15 | ||
16 | 16 | func tryGetInteger (address,key) = match getInteger(address, key) { | |
17 | 17 | case b: Int => | |
18 | 18 | b | |
19 | 19 | case _ => | |
20 | 20 | 0 | |
21 | 21 | } | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func tryGetString (address,key) = match getString(address, key) { | |
25 | 25 | case b: String => | |
26 | 26 | b | |
27 | 27 | case _ => | |
28 | 28 | "" | |
29 | 29 | } | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
33 | 33 | ||
34 | 34 | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
35 | 35 | ||
36 | 36 | let PZ1 = base58'3PE7NtJdmVq4yo47LKDqurQ8RLDCouvJCPB' | |
37 | 37 | ||
38 | 38 | let PZ2 = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx' | |
39 | 39 | ||
40 | 40 | let PZ3 = base58'3PBiMQLnX8wd4bssXCgF8KuUqHv1H4zWHGi' | |
41 | 41 | ||
42 | 42 | let PZ4 = base58'3PDJPGn6vBEBqWN4E3fNcxoKBoDXbsmoaM7' | |
43 | 43 | ||
44 | 44 | let PZ5 = base58'3PCS1xhGQi2eM5mYcCBhUSHvB31Kk5gZoCm' | |
45 | 45 | ||
46 | 46 | let PZ6 = base58'3P8Quvmgt3VEWAjBR3bsfgCqzUh7zTmTC4q' | |
47 | 47 | ||
48 | 48 | let WXstake = base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV' | |
49 | 49 | ||
50 | 50 | let WX1 = base58'3P5vwLbXddLWpsRspftMxLuzfsjk3dLT3n5' | |
51 | 51 | ||
52 | 52 | let LP1 = "GyiHdcN59sZ46baFvj68ruLngrTPEvWDtsd6jHm4o46n" | |
53 | 53 | ||
54 | 54 | let WX2 = base58'3PKXseWa31VUSWUvm2YiRKxW2VM9RsVk3ry' | |
55 | 55 | ||
56 | 56 | let LP2 = "3MPHMJVwYGyeBLRsH1RsYhrTmemv752AEBwuFFV7g49Z" | |
57 | 57 | ||
58 | 58 | let addresses = if ((getBoolean(this, "started") == true)) | |
59 | 59 | then tryGetString(this, "filter") | |
60 | 60 | else dropRight(tryGetString(this, "Address registered"), 1) | |
61 | 61 | ||
62 | 62 | func PZbal (Pooladdress,address) = { | |
63 | 63 | let burnxtnInPZ = tryGetInteger(Address(Pooladdress), (("global_" + toBase58String(burnxtn)) + "_balance")) | |
64 | 64 | let addressStakePZ = tryGetInteger(Address(Pooladdress), (toString(address) + "_indexStaked")) | |
65 | 65 | let totalStakePZ = tryGetInteger(Address(Pooladdress), "global_poolToken_amount") | |
66 | 66 | fraction(burnxtnInPZ, addressStakePZ, totalStakePZ) | |
67 | 67 | } | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | func WXbal (Pooladdress,address,LPstr) = { | |
71 | 71 | let burnxtnInWX = assetBalance(Address(Pooladdress), burnxtn) | |
72 | 72 | let addressStakeWX = tryGetInteger(Address(WXstake), ((("%s%s%s__staked__" + toString(address)) + "__") + LPstr)) | |
73 | 73 | let totalStakeWX = tryGetInteger(Address(WXstake), ("%s%s%s__staked__total__" + LPstr)) | |
74 | 74 | fraction(burnxtnInWX, addressStakeWX, totalStakeWX) | |
75 | 75 | } | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func totalBalance (address) = { | |
79 | 79 | let burnxtnBalance = assetBalance(address, burnxtn) | |
80 | 80 | let PZ1balance = PZbal(PZ1, address) | |
81 | 81 | let PZ2balance = PZbal(PZ2, address) | |
82 | 82 | let PZ3balance = PZbal(PZ3, address) | |
83 | 83 | let PZ4balance = PZbal(PZ4, address) | |
84 | 84 | let PZ5balance = PZbal(PZ5, address) | |
85 | 85 | let PZ6balance = PZbal(PZ6, address) | |
86 | 86 | let WX1balance = WXbal(WX1, address, LP1) | |
87 | 87 | let WX2balance = WXbal(WX2, address, LP2) | |
88 | 88 | let total = ((((((((burnxtnBalance + PZ1balance) + PZ2balance) + PZ3balance) + PZ4balance) + PZ5balance) + PZ6balance) + WX1balance) + WX2balance) | |
89 | 89 | [IntegerEntry("burnxtnBalance", burnxtnBalance), IntegerEntry("PZ1balance", PZ1balance), IntegerEntry("PZ2balance", PZ2balance), IntegerEntry("PZ3balance", PZ3balance), IntegerEntry("PZ4balance", PZ4balance), IntegerEntry("PZ5balance", PZ5balance), IntegerEntry("PZ6balance", PZ6balance), IntegerEntry("WX1balance", WX1balance), IntegerEntry("WX2balance", WX2balance), IntegerEntry("total", total)] | |
90 | 90 | } | |
91 | 91 | ||
92 | 92 | ||
93 | 93 | func totalBalance2 (address) = { | |
94 | 94 | let burnxtnBalance = assetBalance(address, burnxtn) | |
95 | 95 | let PZ1balance = PZbal(PZ1, address) | |
96 | 96 | let PZ2balance = PZbal(PZ2, address) | |
97 | 97 | let PZ3balance = PZbal(PZ3, address) | |
98 | 98 | let PZ4balance = PZbal(PZ4, address) | |
99 | 99 | let PZ5balance = PZbal(PZ5, address) | |
100 | 100 | let PZ6balance = PZbal(PZ6, address) | |
101 | 101 | let WX1balance = WXbal(WX1, address, LP1) | |
102 | 102 | let WX2balance = WXbal(WX2, address, LP2) | |
103 | 103 | ((((((((burnxtnBalance + PZ1balance) + PZ2balance) + PZ3balance) + PZ4balance) + PZ5balance) + PZ6balance) + WX1balance) + WX2balance) | |
104 | 104 | } | |
105 | 105 | ||
106 | 106 | ||
107 | 107 | @Callable(i) | |
108 | + | func register () = if (contains(tryGetString(this, "Address registered"), toString(i.caller))) | |
109 | + | then throw("already registered") | |
110 | + | else if ((height > registrationClosed)) | |
111 | + | then throw("registration closed") | |
112 | + | else if ((registrationRequirement > totalBalance2(i.caller))) | |
113 | + | then throw("have atleast 40k BURN-XTN in wallet and/or liquidity pools") | |
114 | + | else if ((tryGetInteger(this, "Amount Registered") == 100)) | |
115 | + | then throw("registration closed") | |
116 | + | else ([IntegerEntry("Amount Registered", (tryGetInteger(this, "Amount Registered") + 1)), StringEntry(("Register address: " + toString((tryGetInteger(this, "Amount Registered") + 1))), toString(i.caller)), StringEntry("Address registered", ((tryGetString(this, "Address registered") + toString(i.caller)) + ","))] ++ totalBalance(i.caller)) | |
117 | + | ||
118 | + | ||
119 | + | ||
120 | + | @Callable(i) | |
108 | 121 | func start () = if ((i.caller != this)) | |
109 | 122 | then throw("access only by project owner") | |
110 | 123 | else { | |
111 | 124 | let list = split(addresses, ",") | |
112 | 125 | func bal (accum,address) = (accum ++ [IntegerEntry(address, totalBalance2(addressFromStringValue(address)))]) | |
113 | 126 | ||
114 | 127 | let enterIntegers = { | |
115 | 128 | let $l = list | |
116 | 129 | let $s = size($l) | |
117 | 130 | let $acc0 = nil | |
118 | 131 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
119 | 132 | then $a | |
120 | 133 | else bal($a, $l[$i]) | |
121 | 134 | ||
122 | 135 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
123 | 136 | then $a | |
124 | 137 | else throw("List size exceeds 100") | |
125 | 138 | ||
126 | 139 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
127 | 140 | } | |
128 | 141 | (nil ++ enterIntegers) | |
129 | 142 | } | |
130 | 143 | ||
131 | 144 | ||
132 | 145 | ||
133 | 146 | @Callable(i) | |
134 | 147 | func currentPosition () = { | |
135 | 148 | let list = split(addresses, ",") | |
136 | 149 | func dif (accum,address) = (accum ++ [IntegerEntry(("increase " + address), (totalBalance2(addressFromStringValue(address)) - tryGetInteger(this, address)))]) | |
137 | 150 | ||
138 | 151 | let enterDif = { | |
139 | 152 | let $l = list | |
140 | 153 | let $s = size($l) | |
141 | 154 | let $acc0 = nil | |
142 | 155 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
143 | 156 | then $a | |
144 | 157 | else dif($a, $l[$i]) | |
145 | 158 | ||
146 | 159 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
147 | 160 | then $a | |
148 | 161 | else throw("List size exceeds 98") | |
149 | 162 | ||
150 | 163 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98) | |
151 | 164 | } | |
152 | 165 | (nil ++ enterDif) | |
153 | 166 | } | |
154 | - | ||
155 | - | ||
156 | - | ||
157 | - | @Callable(i) | |
158 | - | func entryHighest (address) = if ((i.caller != this)) | |
159 | - | then throw("access only by project owner") | |
160 | - | else { | |
161 | - | let increase = (totalBalance2(addressFromStringValue(address)) - tryGetInteger(this, address)) | |
162 | - | let list = split(addresses, ",") | |
163 | - | func bal (accum,address) = (accum :+ increase) | |
164 | - | ||
165 | - | let balList = { | |
166 | - | let $l = list | |
167 | - | let $s = size($l) | |
168 | - | let $acc0 = nil | |
169 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
170 | - | then $a | |
171 | - | else bal($a, $l[$i]) | |
172 | - | ||
173 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
174 | - | then $a | |
175 | - | else throw("List size exceeds 100") | |
176 | - | ||
177 | - | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
178 | - | } | |
179 | - | let highest = value(max(balList)) | |
180 | - | let indexHighest = value(indexOf(balList, highest)) | |
181 | - | let highestAddress = list[indexHighest] | |
182 | - | let minusHighestList = removeByIndex(list, indexHighest) | |
183 | - | let minusHighestString = makeString(minusHighestList, ",") | |
184 | - | [IntegerEntry(highestAddress, (totalBalance2(addressFromStringValue(address)) - tryGetInteger(this, highestAddress))), StringEntry("filter", minusHighestString)] | |
185 | - | } | |
186 | 167 | ||
187 | 168 | ||
188 | 169 | ||
189 | 170 | @Callable(i) | |
190 | 171 | func stopIncrease () = if ((i.caller != this)) | |
191 | 172 | then throw("access only by project owner") | |
192 | 173 | else { | |
193 | 174 | let list = split(addresses, ",") | |
194 | 175 | func dif (accum,address) = (accum ++ [IntegerEntry(("stop increase" + address), (totalBalance2(addressFromStringValue(address)) - tryGetInteger(this, address)))]) | |
195 | 176 | ||
196 | 177 | let enterDif = { | |
197 | 178 | let $l = list | |
198 | 179 | let $s = size($l) | |
199 | 180 | let $acc0 = nil | |
200 | 181 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
201 | 182 | then $a | |
202 | 183 | else dif($a, $l[$i]) | |
203 | 184 | ||
204 | 185 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
205 | 186 | then $a | |
206 | 187 | else throw("List size exceeds 100") | |
207 | 188 | ||
208 | 189 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
209 | 190 | } | |
210 | 191 | (nil ++ enterDif) | |
211 | 192 | } | |
212 | 193 | ||
213 | 194 | ||
214 | 195 | ||
215 | 196 | @Callable(i) | |
216 | 197 | func winners () = if ((i.caller != this)) | |
217 | 198 | then throw("access only by project owner") | |
218 | 199 | else { | |
219 | 200 | let filter = invoke(this, "filter", nil, nil) | |
220 | 201 | if ((filter == filter)) | |
221 | 202 | then { | |
222 | 203 | let list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] | |
223 | 204 | func r (accum,iterations) = invoke(this, "remove", [iterations], nil) | |
224 | 205 | ||
225 | 206 | let remove = { | |
226 | 207 | let $l = list | |
227 | 208 | let $s = size($l) | |
228 | 209 | let $acc0 = nil | |
229 | 210 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
230 | 211 | then $a | |
231 | 212 | else r($a, $l[$i]) | |
232 | 213 | ||
233 | 214 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
234 | 215 | then $a | |
235 | 216 | else throw("List size exceeds 20") | |
236 | 217 | ||
237 | 218 | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
238 | 219 | } | |
239 | 220 | if ((remove == remove)) | |
240 | 221 | then nil | |
241 | 222 | else throw("Strict value is not equal to itself.") | |
242 | 223 | } | |
243 | 224 | else throw("Strict value is not equal to itself.") | |
244 | 225 | } | |
245 | 226 | ||
246 | 227 | ||
247 | 228 | ||
248 | 229 | @Callable(i) | |
249 | 230 | func filter () = if ((i.caller != this)) | |
250 | 231 | then throw("access only by project owner") | |
251 | 232 | else { | |
252 | 233 | let list = split(addresses, ",") | |
253 | 234 | let listSize = size(list) | |
254 | - | let minimum = minimumIncrease | |
255 | - | func fList (accum,address) = if ((minimum > tryGetInteger(this, ("stop increase" + address)))) | |
235 | + | func fList (accum,address) = if ((minimumIncrease > tryGetInteger(this, ("stop increase" + address)))) | |
256 | 236 | then nil | |
257 | 237 | else (accum :+ address) | |
258 | 238 | ||
259 | 239 | let filterList = { | |
260 | 240 | let $l = list | |
261 | 241 | let $s = size($l) | |
262 | 242 | let $acc0 = nil | |
263 | 243 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
264 | 244 | then $a | |
265 | 245 | else fList($a, $l[$i]) | |
266 | 246 | ||
267 | 247 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
268 | 248 | then $a | |
269 | 249 | else throw("List size exceeds 100") | |
270 | 250 | ||
271 | 251 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
272 | 252 | } | |
273 | 253 | let filterListString = makeString(filterList, ",") | |
274 | 254 | let filterListSize = size(filterList) | |
275 | 255 | let cullSize = fraction(filterListSize, 80, 100, DOWN) | |
276 | 256 | [StringEntry("filter", filterListString), IntegerEntry("list size filterList", filterListSize), IntegerEntry("cullSize", cullSize)] | |
277 | 257 | } | |
278 | 258 | ||
279 | 259 | ||
280 | 260 | ||
281 | 261 | @Callable(i) | |
282 | 262 | func remove (iterations) = if ((i.caller != this)) | |
283 | 263 | then throw("access only by project owner") | |
284 | 264 | else if (((if ((getBoolean("final") == true)) | |
285 | 265 | then 1 | |
286 | 266 | else getIntegerValue("cullSize")) >= getIntegerValue("list size filterList"))) | |
287 | 267 | then nil | |
288 | 268 | else { | |
289 | 269 | let list = split(getStringValue("filter"), ",") | |
290 | 270 | func bal (accum,address) = (accum :+ tryGetInteger(this, ("stop increase" + address))) | |
291 | 271 | ||
292 | 272 | let balList = { | |
293 | 273 | let $l = list | |
294 | 274 | let $s = size($l) | |
295 | 275 | let $acc0 = nil | |
296 | 276 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
297 | 277 | then $a | |
298 | 278 | else bal($a, $l[$i]) | |
299 | 279 | ||
300 | 280 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
301 | 281 | then $a | |
302 | 282 | else throw("List size exceeds 100") | |
303 | 283 | ||
304 | 284 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
305 | 285 | } | |
306 | 286 | let lowest = value(min(balList)) | |
307 | 287 | let indexLowest = value(indexOf(balList, lowest)) | |
308 | 288 | let minusLowestList = removeByIndex(list, indexLowest) | |
309 | 289 | let minusLowestListSize = size(minusLowestList) | |
310 | 290 | let minusLowestString = makeString(minusLowestList, ",") | |
311 | 291 | [IntegerEntry("list size filterList", minusLowestListSize), StringEntry("filter", minusLowestString)] | |
312 | 292 | } | |
313 | 293 | ||
314 | 294 | ||
315 | 295 | ||
316 | 296 | @Callable(i) | |
317 | 297 | func payWinners () = if ((i.caller != this)) | |
318 | 298 | then throw("access only by project owner") | |
319 | 299 | else { | |
320 | 300 | let assetId = whirlpool | |
321 | 301 | let amount = (rewardAmount * d8) | |
322 | 302 | let list = split(addresses, ",") | |
323 | 303 | func bal (accum,address) = (accum :+ tryGetInteger(this, ("stop increase" + address))) | |
324 | 304 | ||
325 | 305 | let balList = { | |
326 | 306 | let $l = list | |
327 | 307 | let $s = size($l) | |
328 | 308 | let $acc0 = nil | |
329 | 309 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
330 | 310 | then $a | |
331 | 311 | else bal($a, $l[$i]) | |
332 | 312 | ||
333 | 313 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
334 | 314 | then $a | |
335 | 315 | else throw("List size exceeds 100") | |
336 | 316 | ||
337 | 317 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
338 | 318 | } | |
339 | 319 | let highest = value(max(balList)) | |
340 | 320 | let indexHighest = value(indexOf(balList, highest)) | |
341 | 321 | let highestAddress = list[indexHighest] | |
342 | 322 | let winnersTopx2 = highestAddress :: list | |
343 | 323 | let amountPerAddress = (amount / size(list)) | |
344 | 324 | func f (accum,address) = (accum ++ [ScriptTransfer(addressFromStringValue(address), amountPerAddress, assetId)]) | |
345 | 325 | ||
346 | 326 | let $l = winnersTopx2 | |
347 | 327 | let $s = size($l) | |
348 | 328 | let $acc0 = nil | |
349 | 329 | func $f1_1 ($a,$i) = if (($i >= $s)) | |
350 | 330 | then $a | |
351 | 331 | else f($a, $l[$i]) | |
352 | 332 | ||
353 | 333 | func $f1_2 ($a,$i) = if (($i >= $s)) | |
354 | 334 | then $a | |
355 | 335 | else throw("List size exceeds 80") | |
356 | 336 | ||
357 | 337 | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80) | |
358 | 338 | } | |
359 | 339 | ||
360 | 340 | ||
361 | 341 | ||
362 | 342 | @Callable(i) | |
363 | 343 | func payRegistrants () = if ((i.caller != this)) | |
364 | 344 | then throw("access only by project owner") | |
365 | 345 | else { | |
366 | 346 | let assetId = fromBase58String(rewardAssetId) | |
367 | 347 | let amount = (rewardAmount * d8) | |
368 | 348 | let list = split(addresses, ",") | |
369 | 349 | let amountPerAddress = (amount / size(list)) | |
370 | 350 | func f (accum,address) = (accum ++ [ScriptTransfer(addressFromStringValue(address), amountPerAddress, assetId)]) | |
371 | 351 | ||
372 | 352 | let $l = list | |
373 | 353 | let $s = size($l) | |
374 | 354 | let $acc0 = nil | |
375 | 355 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
376 | 356 | then $a | |
377 | 357 | else f($a, $l[$i]) | |
378 | 358 | ||
379 | 359 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
380 | 360 | then $a | |
381 | 361 | else throw("List size exceeds 100") | |
382 | 362 | ||
383 | 363 | $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($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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
384 | 364 | } | |
385 | 365 | ||
386 | 366 | ||
387 | 367 | ||
388 | 368 | @Callable(i) | |
389 | 369 | func started (started) = if ((i.caller != this)) | |
390 | 370 | then throw("access only by project owner") | |
391 | 371 | else [BooleanEntry("started", started)] | |
392 | 372 | ||
393 | 373 | ||
394 | 374 | ||
395 | 375 | @Callable(i) | |
396 | 376 | func final (finalRound) = if ((i.caller != this)) | |
397 | 377 | then throw("access only by project owner") | |
398 | 378 | else [BooleanEntry("final", finalRound)] | |
399 | 379 | ||
400 | 380 | ||
401 | 381 | ||
402 | 382 | @Callable(i) | |
403 | 383 | func requirements (rewardAssetId,rewardAmount,registrationLastBlock,registrationRequirement,minimumIncrease) = if ((i.caller != this)) | |
404 | 384 | then throw("access only by project owner") | |
405 | 385 | else [StringEntry("reward asset id", rewardAssetId), IntegerEntry("reward amount", rewardAmount), IntegerEntry("registration last block", registrationLastBlock), IntegerEntry("registration requirement", registrationRequirement), IntegerEntry("minimum increase", minimumIncrease)] | |
406 | 386 | ||
407 | 387 | ||
388 | + | ||
389 | + | @Callable(i) | |
390 | + | func entryDelete (entry,amount,delete) = if ((i.caller != this)) | |
391 | + | then throw("access only by project owner") | |
392 | + | else [IntegerEntry(("" + entry), amount), DeleteEntry(("" + delete))] | |
393 | + | ||
394 | + |
github/deemru/w8io/3ef1775 96.67 ms ◑