tx · vFXR1tZT3rBZUgMVMwWLGufyjY8EagHxRSBVnzeH9Ne

3PMrcFXJx23B9zbxxUT49z6ET6wF2dKfTdW:  -0.01000000 Waves

2022.01.19 19:52 [2951140] smart account 3PMrcFXJx23B9zbxxUT49z6ET6wF2dKfTdW > SELF 0.00000000 Waves

{ "type": 13, "id": "vFXR1tZT3rBZUgMVMwWLGufyjY8EagHxRSBVnzeH9Ne", "fee": 1000000, "feeAssetId": null, "timestamp": 1642611108553, "version": 1, "sender": "3PMrcFXJx23B9zbxxUT49z6ET6wF2dKfTdW", "senderPublicKey": "DCwRjW98gZsAvKFLyK4sgrn1zwQWLok27vhfYxz4Cok5", "proofs": [ "3tvoPcYu25cuKYfvfZaJ1NSYnkAWLNkVUD3DWYG6WfjyjGWUd3AM22DVYQeA7ioAoNT3BZKCHiuCknTQhH7djX6Z" ], "script": "base64:AAIFAAAAAAAAAB8IAhIAEgMKAQgSBAoCCAgSAwoBCBIECgIIARIDCgEIAAAAIgEAAAAEZ2V0UwAAAAEAAAADa2V5CQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAALb3JhY2xlU3RvcmUCAAAADW9yYWNsZUFkZHJlc3MAAAAAEm1heWJlT3JhY2xlQWRkcmVzcwQAAAAHJG1hdGNoMAkBAAAABGdldFMAAAABBQAAAAtvcmFjbGVTdG9yZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQAEJgAAAAEFAAAAAXMFAAAABHVuaXQAAAAABkhFSUdIVAUAAAAGaGVpZ2h0AQAAAAh3cml0ZUludAAAAAIAAAADa2V5AAAABXZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkAAaQAAAABBQAAAAV2YWx1ZQIAAAAJIGZvciBrZXkgBQAAAANrZXkJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAAARnZXRJAAAAAQAAAANrZXkJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAhjaGFuZ2VCeQAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAAId3JpdGVJbnQAAAACBQAAAANrZXkJAABkAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAAANrZXkAAAAAAAAAAAAFAAAABXZhbHVlAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABAAAABHVzZXIJAAEsAAAAAgUAAAAEdXNlcgIAAAAHX3NoYXJlcwAAAAARc3Rha2VkSGVpZ2h0U3RvcmUCAAAADHN0YWtlZEhlaWdodAAAAAAQdG90YWxTaGFyZXNTdG9yZQIAAAALdG90YWxTaGFyZXMAAAAAC3N0YWtlZFN0b3JlAgAAAAZzdGFrZWQBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAVYWxyZWFkeSBpbml0aWFsaXplZDogBQAAAANrZXkAAAAACmFkbWluU3RvcmUCAAAABWFkbWluAAAAABF2aXJlc0Fzc2V0SWRTdG9yZQIAAAAHYXNzZXRJZAAAAAALbWludGVyU3RvcmUCAAAADHZpcmVzX21pbnRlcgAAAAALY29uZmlnU3RvcmUCAAAABmNvbmZpZwAAAAANY29uZmlnQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAtjb25maWdTdG9yZQIAAAAQbm8gY29uZmlnQWRkcmVzcwIAAAAWaW52YWxpZCBjb25maWcgYWRkcmVzcwAAAAAFUkJhc2UAACOG8m/BAAAAAAAAA2FwcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAAEHZpcmVzX3N0YWtlcl9hcHICAAAAE25vIHZpcmVzX3N0YWtlcl9hcHIAAAAADWJsb2Nrc1BlclllYXIJAABoAAAAAgkAAGgAAAACAAAAAAAAAAFtAAAAAAAAAAAYAAAAAAAAAAA8AAAAAAlSUGVyQmxvY2sJAABrAAAAAwUAAAADYXByBQAAAAVSQmFzZQkAAGgAAAACAAAAAAAAAAPoBQAAAA1ibG9ja3NQZXJZZWFyAAAAAAt2aXJlc01pbnRlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzBQAAAAttaW50ZXJTdG9yZQIAAAAcdmlyZXMtc3Rha2VyOiBubyB2aXJlc01pbnRlcgIAAAATaW52YWxpZCB2aXJlc01pbnRlcgAAAAAEbWFpbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzAgAAAARtYWluAgAAAAdubyBtYWluAgAAAAxpbnZhbGlkIG1haW4AAAAACnZpcmVzSWRTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAt2aXJlc01pbnRlcgUAAAARdmlyZXNBc3NldElkU3RvcmUCAAAAF3ZpcmVzIGFzc2V0SWQgbm90IGZvdW5kAAAAAAx2aXJlc0Fzc2V0SWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAAlkAAAABBQAAAAp2aXJlc0lkU3RyAgAAABVpbnZhbGlkIHZpcmVzIGFzc2V0SWQBAAAAB3Rocm93SWYAAAACAAAACWNvbmRpdGlvbgAAAAVlcnJvcgMFAAAACWNvbmRpdGlvbgkAAAIAAAABBQAAAAVlcnJvcgYBAAAAEHZpcmVzUGF5bWVudE9ubHkAAAABAAAAAWkDCQEAAAAHdGhyb3dJZgAAAAIJAABnAAAAAgAAAAAAAAAAAAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AgAAABNzdGFraW5nIHplcm8gYW1vdW50CQEAAAAHdGhyb3dJZgAAAAIDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAx2aXJlc0Fzc2V0SWQGCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAgAAABJzdGFraW5nIG9ubHkgdmlyZXMHAQAAAAl2YWxpZFVzZXIAAAACAAAAAWkAAAAEdXNlcgQAAAAHJG1hdGNoMAkABCYAAAABBQAAAAR1c2VyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdBZGRyZXNzBAAAAAFhBQAAAAckbWF0Y2gwAwMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAARtYWluBgkAAAAAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdXNlcgYDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAAAWEJAAACAAAAAQIAAAAgb25seSBtYWluIGNhbiBkbyBvbiB1c2VycyBiZWhhbGYGCQAAAgAAAAECAAAADGludmFsaWQgdXNlcgAAAAANY3VycmVudFN0YWtlZAQAAAAMc3Rha2VkSGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEXN0YWtlZEhlaWdodFN0b3JlAAAAAAAAAAAABAAAAAZzdGFrZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAALc3Rha2VkU3RvcmUAAAAAAAAAAAAEAAAAAWQJAABlAAAAAgUAAAAGSEVJR0hUBQAAAAxzdGFrZWRIZWlnaHQEAAAAAXIJAABkAAAAAgUAAAAFUkJhc2UJAABoAAAAAgUAAAABZAUAAAAJUlBlckJsb2NrCQAAawAAAAMFAAAABnN0YWtlZAUAAAABcgUAAAAFUkJhc2UBAAAADXZpcmVzVG9TaGFyZXMAAAABAAAAC3ZpcmVzQW1vdW50BAAAAAt0b3RhbFNoYXJlcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABB0b3RhbFNoYXJlc1N0b3JlAAAAAAAAAAAAAwkAAAAAAAACBQAAAAt0b3RhbFNoYXJlcwAAAAAAAAAAAAUAAAALdmlyZXNBbW91bnQJAABrAAAAAwUAAAALdmlyZXNBbW91bnQFAAAAC3RvdGFsU2hhcmVzBQAAAA1jdXJyZW50U3Rha2VkAQAAAA1zaGFyZXNUb1ZpcmVzAAAAAQAAAAxzaGFyZXNBbW91bnQEAAAAC3RvdGFsU2hhcmVzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEHRvdGFsU2hhcmVzU3RvcmUAAAAAAAAAAAADCQAAAAAAAAIFAAAAC3RvdGFsU2hhcmVzAAAAAAAAAAAABQAAAAxzaGFyZXNBbW91bnQJAABrAAAAAwUAAAAMc2hhcmVzQW1vdW50BQAAAA1jdXJyZW50U3Rha2VkBQAAAAt0b3RhbFNoYXJlcwEAAAASZW5zdXJlVmlyZXNCYWxhbmNlAAAAAQAAAAZhbW91bnQEAAAADHZpcmVzQmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAAx2aXJlc0Fzc2V0SWQDCQAAZgAAAAIFAAAABmFtb3VudAUAAAAMdmlyZXNCYWxhbmNlBAAAAARtaW50CQAD/AAAAAQFAAAAC3ZpcmVzTWludGVyAgAAAApzdGFrZXJNaW50CQAETAAAAAIJAAQlAAAAAQUAAAAEdGhpcwkABEwAAAACCQAAZQAAAAIFAAAABmFtb3VudAUAAAAMdmlyZXNCYWxhbmNlBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAEbWludAUAAAAEbWludAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUAAAADbmlsAQAAAAZwYXlvdXQAAAACAAAABHVzZXIAAAAGYW1vdW50BAAAAAZlbnN1cmUJAQAAABJlbnN1cmVWaXJlc0JhbGFuY2UAAAABBQAAAAZhbW91bnQDCQAAAAAAAAIFAAAABmVuc3VyZQUAAAAGZW5zdXJlCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAR1c2VyBQAAAAZhbW91bnQFAAAADHZpcmVzQXNzZXRJZAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAACW9wQWxsb3dlZAAAAAEAAAACb3AEAAAAByRtYXRjaDAJAAP8AAAABAUAAAANY29uZmlnQWRkcmVzcwIAAAAJb3BBbGxvd2VkCQAETAAAAAIFAAAACnZpcmVzSWRTdHIJAARMAAAAAgUAAAACb3AFAAAAA25pbAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwAwUAAAABYgYJAAACAAAAAQIAAAALbm90IGFsbG93ZWQJAAACAAAAAQIAAAAhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAAAABgAAAAFpAQAAAAZhZHZpc2UAAAAABAAAAAt0b3RhbFNoYXJlcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABB0b3RhbFNoYXJlc1N0b3JlAAAAAAAAAAAABAAAAAt0b3RhbFN0YWtlZAkBAAAADXNoYXJlc1RvVmlyZXMAAAABBQAAAAt0b3RhbFNoYXJlcwkABRQAAAACBQAAAANuaWwJAAEsAAAAAgIAAAANdG90YWxTdGFrZWQ6IAkAAaQAAAABBQAAAAt0b3RhbFN0YWtlZAAAAAFpAQAAAAphZHZpc2VVc2VyAAAAAQAAAAR1c2VyBAAAAAp1c2VyU2hhcmVzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABBQAAAAR1c2VyAAAAAAAAAAAABAAAAAlhdmFpbGFibGUJAQAAAA1zaGFyZXNUb1ZpcmVzAAAAAQUAAAAKdXNlclNoYXJlcwkABRQAAAACBQAAAANuaWwJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAE3ZpcmVzU3Rha2VkU2hhcmVzOiAJAAGkAAAAAQUAAAAKdXNlclNoYXJlcwIAAAAPLCB2aXJlc1N0YWtlZDogCQABpAAAAAEFAAAACWF2YWlsYWJsZQAAAAFpAQAAAARpbml0AAAAAgAAAA1jb25maWdBZGRyZXNzAAAACm9yYWNsZUFkZHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALb3JhY2xlU3RvcmUFAAAACm9yYWNsZUFkZHIJAARMAAAAAgkBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACBQAAAAphZG1pblN0b3JlCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAAC2NvbmZpZ1N0b3JlBQAAAA1jb25maWdBZGRyZXNzBQAAAANuaWwAAAABaQEAAAAKc3Rha2VWaXJlcwAAAAEAAAAEdXNlcgQAAAAGY2hlY2tzAwMJAQAAABB2aXJlc1BheW1lbnRPbmx5AAAAAQUAAAABaQkBAAAACXZhbGlkVXNlcgAAAAIFAAAAAWkFAAAABHVzZXIHCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAALc3Rha2VfdmlyZXMHAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAADHNoYXJlc0Ftb3VudAkBAAAADXZpcmVzVG9TaGFyZXMAAAABBQAAAAZhbW91bnQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAALc3Rha2VkU3RvcmUJAABkAAAAAgUAAAANY3VycmVudFN0YWtlZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXN0YWtlZEhlaWdodFN0b3JlBQAAAAZIRUlHSFQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgUAAAAQdG90YWxTaGFyZXNTdG9yZQUAAAAMc2hhcmVzQW1vdW50CQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABBQAAAAR1c2VyBQAAAAxzaGFyZXNBbW91bnQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAMdW5zdGFrZVZpcmVzAAAAAgAAAAR1c2VyAAAAFGFtb3VudFZpcmVzVG9VbnN0YWtlBAAAAAZjaGVja3MDCQEAAAAJdmFsaWRVc2VyAAAAAgUAAAABaQUAAAAEdXNlcgkBAAAACW9wQWxsb3dlZAAAAAECAAAADXVuc3Rha2VfdmlyZXMHAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAKdXNlclNoYXJlcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAPdXNlclNoYXJlc1N0b3JlAAAAAQUAAAAEdXNlcgAAAAAAAAAAAAMJAAAAAAAAAgUAAAAKdXNlclNoYXJlcwAAAAAAAAAAAAkAAAIAAAABAgAAABJub3RoaW5nIHRvIHVuc3Rha2UEAAAADG1heEF2YWlsYWJsZQkBAAAADXNoYXJlc1RvVmlyZXMAAAABBQAAAAp1c2VyU2hhcmVzBAAAAAZhbW91bnQDCQAAAAAAAAIFAAAAFGFtb3VudFZpcmVzVG9VbnN0YWtlAP//////////BQAAAAxtYXhBdmFpbGFibGUFAAAAFGFtb3VudFZpcmVzVG9VbnN0YWtlAwkAAGYAAAACAAAAAAAAAAAABQAAAAZhbW91bnQJAAACAAAAAQIAAAAeY2Fubm90IHVuc3Rha2UgbmVnYXRpdmUgYW1vdW50AwkAAGYAAAACBQAAAAZhbW91bnQFAAAADG1heEF2YWlsYWJsZQkAAAIAAAABAgAAACFjYW5ub3QgdW5zdGFrZSBtb3JlIHRoYW4geW91IGhhdmUEAAAADHNoYXJlc0Ftb3VudAkAAZcAAAABCQAETAAAAAIJAQAAAA12aXJlc1RvU2hhcmVzAAAAAQUAAAAGYW1vdW50CQAETAAAAAIFAAAACnVzZXJTaGFyZXMFAAAAA25pbAMJAAAAAAAAAgUAAAAMc2hhcmVzQW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAF2Nhbm5vdCB1bnN0YWtlIDAgc2hhcmVzCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAC3N0YWtlZFN0b3JlCQAAZQAAAAIFAAAADWN1cnJlbnRTdGFrZWQFAAAABmFtb3VudAkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAABFzdGFrZWRIZWlnaHRTdG9yZQUAAAAGSEVJR0hUCQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIFAAAAEHRvdGFsU2hhcmVzU3RvcmUJAQAAAAEtAAAAAQUAAAAMc2hhcmVzQW1vdW50CQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABBQAAAAR1c2VyCQEAAAABLQAAAAEFAAAADHNoYXJlc0Ftb3VudAkABEwAAAACCQEAAAAGcGF5b3V0AAAAAgUAAAAEdXNlcgUAAAAGYW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAE3Vuc3Rha2VBbGxWaXJlc0Zyb20AAAABAAAABHVzZXIEAAAABmNoZWNrcwMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAARtYWluCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAANdW5zdGFrZV92aXJlcwcDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAp1c2VyU2hhcmVzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABBQAAAAR1c2VyAAAAAAAAAAAABAAAAA11bnN0YWtlQW1vdW50CQEAAAANc2hhcmVzVG9WaXJlcwAAAAEFAAAACnVzZXJTaGFyZXMJAAUUAAAAAgkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAAAtzdGFrZWRTdG9yZQkAAGUAAAACBQAAAA1jdXJyZW50U3Rha2VkBQAAAA11bnN0YWtlQW1vdW50CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAEXN0YWtlZEhlaWdodFN0b3JlBQAAAAZIRUlHSFQJAARMAAAAAgkBAAAACGNoYW5nZUJ5AAAAAgUAAAAQdG90YWxTaGFyZXNTdG9yZQkBAAAAAS0AAAABBQAAAAp1c2VyU2hhcmVzCQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIJAQAAAA91c2VyU2hhcmVzU3RvcmUAAAABBQAAAAR1c2VyCQEAAAABLQAAAAEFAAAACnVzZXJTaGFyZXMJAARMAAAAAgkBAAAABnBheW91dAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAA11bnN0YWtlQW1vdW50BQAAAANuaWwFAAAADXVuc3Rha2VBbW91bnQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAB6Y254=", "chainId": 87, "height": 2951140, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5CfQCX3Qg1qY4TA6Lub8r8iNVatc1k1bwcyXq9ooifVA Next: E3YLgiJaTSyXvRiTTAwRfpEqpgNV79KsKHAjovfCat1 Diff:
OldNewDifferences
4343 else throw(("already initialized: " + b))
4444
4545
46-let r = "main"
46+let r = "admin"
4747
48-let s = "admin"
48+let s = "assetId"
4949
50-let t = "assetId"
50+let t = "vires_minter"
5151
52-let u = "vires_minter"
52+let u = "config"
5353
54-let v = "config"
54+let v = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, u), "no configAddress")), "invalid config address")
5555
56-let w = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, v), "no configAddress")), "invalid config address")
56+let w = 10000000000000000
5757
58-let x = 10000000000000000
58+let x = valueOrErrorMessage(getInteger(v, "vires_staker_apr"), "no vires_staker_apr")
5959
60-let y = valueOrErrorMessage(getInteger(w, "vires_staker_apr"), "no vires_staker_apr")
60+let y = ((365 * 24) * 60)
6161
62-let z = ((365 * 24) * 60)
62+let z = fraction(x, w, (1000 * y))
6363
64-let A = fraction(y, x, (1000 * z))
64+let A = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(v, t), "vires-staker: no viresMinter")), "invalid viresMinter")
6565
66-let B = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(w, u), "no viresMinter")), "invalid viresMinter")
66+let B = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(v, "main"), "no main")), "invalid main")
6767
68-let C = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(w, r), "no main")), "invalid main")
68+let C = valueOrErrorMessage(getString(A, s), "vires assetId not found")
6969
70-let D = valueOrErrorMessage(getString(B, t), "vires assetId not found")
70+let D = valueOrErrorMessage(fromBase58String(C), "invalid vires assetId")
7171
72-let E = valueOrErrorMessage(fromBase58String(D), "invalid vires assetId")
73-
74-func F (G,H) = if (G)
75- then throw(H)
72+func E (F,G) = if (F)
73+ then throw(G)
7674 else true
7775
7876
79-func I (J) = F(if (if ((J.payments[0].assetId != E))
80- then true
81- else (0 >= J.payments[0].amount))
82- then true
83- else (size(J.payments) != 1), "staking only vires")
77+func H (I) = if (E((0 >= I.payments[0].amount), "staking zero amount"))
78+ then E(if ((I.payments[0].assetId != D))
79+ then true
80+ else (size(I.payments) != 1), "staking only vires")
81+ else false
8482
8583
86-func K (J,m) = {
84+func J (I,m) = {
8785 let e = addressFromString(m)
8886 if ($isInstanceOf(e, "Address"))
8987 then {
90- let L = e
91- if ((J.caller == C))
88+ let K = e
89+ if (if ((I.caller == B))
9290 then true
93- else if ((J.caller != L))
91+ else (toString(I.caller) == m))
92+ then true
93+ else if ((I.caller != K))
9494 then throw("only main can do on users behalf")
9595 else true
9696 }
9898 }
9999
100100
101-let M = {
102- let N = valueOrElse(getInteger(this, n), 0)
103- let O = valueOrElse(getInteger(this, p), 0)
104- let P = (g - N)
105- let Q = (x + (P * A))
106- fraction(O, Q, x)
101+let L = {
102+ let M = valueOrElse(getInteger(this, n), 0)
103+ let N = valueOrElse(getInteger(this, p), 0)
104+ let O = (g - M)
105+ let P = (w + (O * z))
106+ fraction(N, P, w)
107107 }
108108
109-func R (S) = {
110- let T = valueOrElse(getInteger(this, o), 0)
111- if ((T == 0))
112- then S
113- else fraction(S, T, M)
109+func Q (R) = {
110+ let S = valueOrElse(getInteger(this, o), 0)
111+ if ((S == 0))
112+ then R
113+ else fraction(R, S, L)
114114 }
115115
116116
117-func U (V) = {
118- let T = valueOrElse(getInteger(this, o), 0)
119- if ((T == 0))
120- then V
121- else fraction(V, M, T)
117+func T (U) = {
118+ let S = valueOrElse(getInteger(this, o), 0)
119+ if ((S == 0))
120+ then U
121+ else fraction(U, L, S)
122122 }
123123
124124
125-func W (m,X) = {
126- let Y = assetBalance(this, E)
127- if ((X > Y))
125+func V (W) = {
126+ let X = assetBalance(this, D)
127+ if ((W > X))
128128 then {
129- let Z = invoke(B, "stakerMint", [toString(this), (X - Y)], nil)
130- if ((Z == Z))
131- then ScriptTransfer(addressFromStringValue(m), X, E)
129+ let Y = invoke(A, "stakerMint", [toString(this), (W - X)], nil)
130+ if ((Y == Y))
131+ then nil
132132 else throw("Strict value is not equal to itself.")
133133 }
134- else ScriptTransfer(addressFromStringValue(m), X, E)
134+ else nil
135135 }
136136
137137
138-func aa (ab) = {
139- let e = invoke(w, "opAllowed", [D, ab], nil)
138+func Z (m,W) = {
139+ let aa = V(W)
140+ if ((aa == aa))
141+ then ScriptTransfer(addressFromStringValue(m), W, D)
142+ else throw("Strict value is not equal to itself.")
143+ }
144+
145+
146+func ab (ac) = {
147+ let e = invoke(v, "opAllowed", [C, ac], nil)
140148 if ($isInstanceOf(e, "Boolean"))
141149 then {
142- let ac = e
143- if (ac)
150+ let ad = e
151+ if (ad)
144152 then true
145153 else throw("not allowed")
146154 }
148156 }
149157
150158
151-@Callable(J)
159+@Callable(I)
152160 func advise () = {
153- let T = valueOrElse(getInteger(this, o), 0)
154- let ad = U(T)
155- $Tuple2(nil, ("totalStaked: " + toString(ad)))
161+ let S = valueOrElse(getInteger(this, o), 0)
162+ let ae = T(S)
163+ $Tuple2(nil, ("totalStaked: " + toString(ae)))
156164 }
157165
158166
159167
160-@Callable(J)
168+@Callable(I)
161169 func adviseUser (m) = {
162- let ae = valueOrElse(getInteger(this, l(m)), 0)
163- let af = U(ae)
164- $Tuple2(nil, ((("viresStakedShares: " + toString(ae)) + ", viresStaked: ") + toString(af)))
170+ let af = valueOrElse(getInteger(this, l(m)), 0)
171+ let ag = T(af)
172+ $Tuple2(nil, ((("viresStakedShares: " + toString(af)) + ", viresStaked: ") + toString(ag)))
165173 }
166174
167175
168176
169-@Callable(J)
170-func init (w,ag) = [StringEntry(c, ag), q(s, toString(J.caller)), q(v, w)]
177+@Callable(I)
178+func init (v,ah) = [StringEntry(c, ah), q(r, toString(I.caller)), q(u, v)]
171179
172180
173181
174-@Callable(J)
182+@Callable(I)
175183 func stakeVires (m) = {
176- let ah = if (if (I(J))
177- then K(J, m)
184+ let ai = if (if (H(I))
185+ then J(I, m)
178186 else false)
179- then aa("stake_vires")
187+ then ab("stake_vires")
180188 else false
181- if ((ah == ah))
189+ if ((ai == ai))
182190 then {
183- let X = J.payments[0].amount
184- let V = R(X)
185-[h(p, (M + X)), h(n, g), k(o, V), k(l(m), V)]
191+ let W = I.payments[0].amount
192+ let U = Q(W)
193+[h(p, (L + W)), h(n, g), k(o, U), k(l(m), U)]
186194 }
187195 else throw("Strict value is not equal to itself.")
188196 }
189197
190198
191199
192-@Callable(J)
193-func unstakeVires (m,ai) = {
194- let ah = if (K(J, m))
195- then aa("unstake_vires")
200+@Callable(I)
201+func unstakeVires (m,aj) = {
202+ let ai = if (J(I, m))
203+ then ab("unstake_vires")
196204 else false
197- if ((ah == ah))
205+ if ((ai == ai))
198206 then {
199- let ae = valueOrElse(getInteger(this, l(m)), 0)
200- if ((ae == 0))
207+ let af = valueOrElse(getInteger(this, l(m)), 0)
208+ if ((af == 0))
201209 then throw("nothing to unstake")
202210 else {
203- let aj = U(ae)
204- let X = if ((ai == -1))
205- then aj
206- else ai
207- if ((0 > X))
211+ let ak = T(af)
212+ let W = if ((aj == -1))
213+ then ak
214+ else aj
215+ if ((0 > W))
208216 then throw("cannot unstake negative amount")
209- else if ((X > aj))
217+ else if ((W > ak))
210218 then throw("cannot unstake more than you have")
211219 else {
212- let V = min([R(X), ae])
213- if ((V == 0))
220+ let U = min([Q(W), af])
221+ if ((U == 0))
214222 then throw("cannot unstake 0 shares")
215- else [h(p, (M - X)), h(n, g), k(o, -(V)), k(l(m), -(V)), W(m, X)]
223+ else [h(p, (L - W)), h(n, g), k(o, -(U)), k(l(m), -(U)), Z(m, W)]
216224 }
217225 }
226+ }
227+ else throw("Strict value is not equal to itself.")
228+ }
229+
230+
231+
232+@Callable(I)
233+func unstakeAllViresFrom (m) = {
234+ let ai = if ((I.caller == B))
235+ then ab("unstake_vires")
236+ else false
237+ if ((ai == ai))
238+ then {
239+ let af = valueOrElse(getInteger(this, l(m)), 0)
240+ let al = T(af)
241+ $Tuple2([h(p, (L - al)), h(n, g), k(o, -(af)), k(l(m), -(af)), Z(toString(I.caller), al)], al)
218242 }
219243 else throw("Strict value is not equal to itself.")
220244 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = getString(this, b)
55
66
77 let c = "oracleAddress"
88
99 let d = {
1010 let e = a(c)
1111 if ($isInstanceOf(e, "String"))
1212 then {
1313 let f = e
1414 addressFromString(f)
1515 }
1616 else unit
1717 }
1818
1919 let g = height
2020
2121 func h (b,i) = if ((0 > i))
2222 then throw(((("writing negative value " + toString(i)) + " for key ") + b))
2323 else IntegerEntry(b, i)
2424
2525
2626 func j (b) = getInteger(this, b)
2727
2828
2929 func k (b,i) = h(b, (valueOrElse(j(b), 0) + i))
3030
3131
3232 func l (m) = (m + "_shares")
3333
3434
3535 let n = "stakedHeight"
3636
3737 let o = "totalShares"
3838
3939 let p = "staked"
4040
4141 func q (b,i) = if (!(isDefined(getString(this, b))))
4242 then StringEntry(b, i)
4343 else throw(("already initialized: " + b))
4444
4545
46-let r = "main"
46+let r = "admin"
4747
48-let s = "admin"
48+let s = "assetId"
4949
50-let t = "assetId"
50+let t = "vires_minter"
5151
52-let u = "vires_minter"
52+let u = "config"
5353
54-let v = "config"
54+let v = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, u), "no configAddress")), "invalid config address")
5555
56-let w = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, v), "no configAddress")), "invalid config address")
56+let w = 10000000000000000
5757
58-let x = 10000000000000000
58+let x = valueOrErrorMessage(getInteger(v, "vires_staker_apr"), "no vires_staker_apr")
5959
60-let y = valueOrErrorMessage(getInteger(w, "vires_staker_apr"), "no vires_staker_apr")
60+let y = ((365 * 24) * 60)
6161
62-let z = ((365 * 24) * 60)
62+let z = fraction(x, w, (1000 * y))
6363
64-let A = fraction(y, x, (1000 * z))
64+let A = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(v, t), "vires-staker: no viresMinter")), "invalid viresMinter")
6565
66-let B = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(w, u), "no viresMinter")), "invalid viresMinter")
66+let B = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(v, "main"), "no main")), "invalid main")
6767
68-let C = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(w, r), "no main")), "invalid main")
68+let C = valueOrErrorMessage(getString(A, s), "vires assetId not found")
6969
70-let D = valueOrErrorMessage(getString(B, t), "vires assetId not found")
70+let D = valueOrErrorMessage(fromBase58String(C), "invalid vires assetId")
7171
72-let E = valueOrErrorMessage(fromBase58String(D), "invalid vires assetId")
73-
74-func F (G,H) = if (G)
75- then throw(H)
72+func E (F,G) = if (F)
73+ then throw(G)
7674 else true
7775
7876
79-func I (J) = F(if (if ((J.payments[0].assetId != E))
80- then true
81- else (0 >= J.payments[0].amount))
82- then true
83- else (size(J.payments) != 1), "staking only vires")
77+func H (I) = if (E((0 >= I.payments[0].amount), "staking zero amount"))
78+ then E(if ((I.payments[0].assetId != D))
79+ then true
80+ else (size(I.payments) != 1), "staking only vires")
81+ else false
8482
8583
86-func K (J,m) = {
84+func J (I,m) = {
8785 let e = addressFromString(m)
8886 if ($isInstanceOf(e, "Address"))
8987 then {
90- let L = e
91- if ((J.caller == C))
88+ let K = e
89+ if (if ((I.caller == B))
9290 then true
93- else if ((J.caller != L))
91+ else (toString(I.caller) == m))
92+ then true
93+ else if ((I.caller != K))
9494 then throw("only main can do on users behalf")
9595 else true
9696 }
9797 else throw("invalid user")
9898 }
9999
100100
101-let M = {
102- let N = valueOrElse(getInteger(this, n), 0)
103- let O = valueOrElse(getInteger(this, p), 0)
104- let P = (g - N)
105- let Q = (x + (P * A))
106- fraction(O, Q, x)
101+let L = {
102+ let M = valueOrElse(getInteger(this, n), 0)
103+ let N = valueOrElse(getInteger(this, p), 0)
104+ let O = (g - M)
105+ let P = (w + (O * z))
106+ fraction(N, P, w)
107107 }
108108
109-func R (S) = {
110- let T = valueOrElse(getInteger(this, o), 0)
111- if ((T == 0))
112- then S
113- else fraction(S, T, M)
109+func Q (R) = {
110+ let S = valueOrElse(getInteger(this, o), 0)
111+ if ((S == 0))
112+ then R
113+ else fraction(R, S, L)
114114 }
115115
116116
117-func U (V) = {
118- let T = valueOrElse(getInteger(this, o), 0)
119- if ((T == 0))
120- then V
121- else fraction(V, M, T)
117+func T (U) = {
118+ let S = valueOrElse(getInteger(this, o), 0)
119+ if ((S == 0))
120+ then U
121+ else fraction(U, L, S)
122122 }
123123
124124
125-func W (m,X) = {
126- let Y = assetBalance(this, E)
127- if ((X > Y))
125+func V (W) = {
126+ let X = assetBalance(this, D)
127+ if ((W > X))
128128 then {
129- let Z = invoke(B, "stakerMint", [toString(this), (X - Y)], nil)
130- if ((Z == Z))
131- then ScriptTransfer(addressFromStringValue(m), X, E)
129+ let Y = invoke(A, "stakerMint", [toString(this), (W - X)], nil)
130+ if ((Y == Y))
131+ then nil
132132 else throw("Strict value is not equal to itself.")
133133 }
134- else ScriptTransfer(addressFromStringValue(m), X, E)
134+ else nil
135135 }
136136
137137
138-func aa (ab) = {
139- let e = invoke(w, "opAllowed", [D, ab], nil)
138+func Z (m,W) = {
139+ let aa = V(W)
140+ if ((aa == aa))
141+ then ScriptTransfer(addressFromStringValue(m), W, D)
142+ else throw("Strict value is not equal to itself.")
143+ }
144+
145+
146+func ab (ac) = {
147+ let e = invoke(v, "opAllowed", [C, ac], nil)
140148 if ($isInstanceOf(e, "Boolean"))
141149 then {
142- let ac = e
143- if (ac)
150+ let ad = e
151+ if (ad)
144152 then true
145153 else throw("not allowed")
146154 }
147155 else throw("opAllowed: unexpected result type")
148156 }
149157
150158
151-@Callable(J)
159+@Callable(I)
152160 func advise () = {
153- let T = valueOrElse(getInteger(this, o), 0)
154- let ad = U(T)
155- $Tuple2(nil, ("totalStaked: " + toString(ad)))
161+ let S = valueOrElse(getInteger(this, o), 0)
162+ let ae = T(S)
163+ $Tuple2(nil, ("totalStaked: " + toString(ae)))
156164 }
157165
158166
159167
160-@Callable(J)
168+@Callable(I)
161169 func adviseUser (m) = {
162- let ae = valueOrElse(getInteger(this, l(m)), 0)
163- let af = U(ae)
164- $Tuple2(nil, ((("viresStakedShares: " + toString(ae)) + ", viresStaked: ") + toString(af)))
170+ let af = valueOrElse(getInteger(this, l(m)), 0)
171+ let ag = T(af)
172+ $Tuple2(nil, ((("viresStakedShares: " + toString(af)) + ", viresStaked: ") + toString(ag)))
165173 }
166174
167175
168176
169-@Callable(J)
170-func init (w,ag) = [StringEntry(c, ag), q(s, toString(J.caller)), q(v, w)]
177+@Callable(I)
178+func init (v,ah) = [StringEntry(c, ah), q(r, toString(I.caller)), q(u, v)]
171179
172180
173181
174-@Callable(J)
182+@Callable(I)
175183 func stakeVires (m) = {
176- let ah = if (if (I(J))
177- then K(J, m)
184+ let ai = if (if (H(I))
185+ then J(I, m)
178186 else false)
179- then aa("stake_vires")
187+ then ab("stake_vires")
180188 else false
181- if ((ah == ah))
189+ if ((ai == ai))
182190 then {
183- let X = J.payments[0].amount
184- let V = R(X)
185-[h(p, (M + X)), h(n, g), k(o, V), k(l(m), V)]
191+ let W = I.payments[0].amount
192+ let U = Q(W)
193+[h(p, (L + W)), h(n, g), k(o, U), k(l(m), U)]
186194 }
187195 else throw("Strict value is not equal to itself.")
188196 }
189197
190198
191199
192-@Callable(J)
193-func unstakeVires (m,ai) = {
194- let ah = if (K(J, m))
195- then aa("unstake_vires")
200+@Callable(I)
201+func unstakeVires (m,aj) = {
202+ let ai = if (J(I, m))
203+ then ab("unstake_vires")
196204 else false
197- if ((ah == ah))
205+ if ((ai == ai))
198206 then {
199- let ae = valueOrElse(getInteger(this, l(m)), 0)
200- if ((ae == 0))
207+ let af = valueOrElse(getInteger(this, l(m)), 0)
208+ if ((af == 0))
201209 then throw("nothing to unstake")
202210 else {
203- let aj = U(ae)
204- let X = if ((ai == -1))
205- then aj
206- else ai
207- if ((0 > X))
211+ let ak = T(af)
212+ let W = if ((aj == -1))
213+ then ak
214+ else aj
215+ if ((0 > W))
208216 then throw("cannot unstake negative amount")
209- else if ((X > aj))
217+ else if ((W > ak))
210218 then throw("cannot unstake more than you have")
211219 else {
212- let V = min([R(X), ae])
213- if ((V == 0))
220+ let U = min([Q(W), af])
221+ if ((U == 0))
214222 then throw("cannot unstake 0 shares")
215- else [h(p, (M - X)), h(n, g), k(o, -(V)), k(l(m), -(V)), W(m, X)]
223+ else [h(p, (L - W)), h(n, g), k(o, -(U)), k(l(m), -(U)), Z(m, W)]
216224 }
217225 }
226+ }
227+ else throw("Strict value is not equal to itself.")
228+ }
229+
230+
231+
232+@Callable(I)
233+func unstakeAllViresFrom (m) = {
234+ let ai = if ((I.caller == B))
235+ then ab("unstake_vires")
236+ else false
237+ if ((ai == ai))
238+ then {
239+ let af = valueOrElse(getInteger(this, l(m)), 0)
240+ let al = T(af)
241+ $Tuple2([h(p, (L - al)), h(n, g), k(o, -(af)), k(l(m), -(af)), Z(toString(I.caller), al)], al)
218242 }
219243 else throw("Strict value is not equal to itself.")
220244 }
221245
222246

github/deemru/w8io/3ef1775 
70.26 ms