tx · 8XDhjJ7hmsfxB4LCBaSgvTxBsF8Q7CQfDLPFym73e9oF

3Mvd8vrY4yvQHw1STnJaev4eoUfYBfoG2EZ:  -0.01000000 Waves

2022.05.10 15:00 [2045543] smart account 3Mvd8vrY4yvQHw1STnJaev4eoUfYBfoG2EZ > SELF 0.00000000 Waves

{ "type": 13, "id": "8XDhjJ7hmsfxB4LCBaSgvTxBsF8Q7CQfDLPFym73e9oF", "fee": 1000000, "feeAssetId": null, "timestamp": 1652184014350, "version": 2, "chainId": 84, "sender": "3Mvd8vrY4yvQHw1STnJaev4eoUfYBfoG2EZ", "senderPublicKey": "6V9fXn9SmPYSBHp8hrVEVjLi2oqqwUHwbVihxGdL6Mk3", "proofs": [ "4xAJ6z92ReYAfe4Y5vZvQmv59yHVtYWBN3Gg5FMAqbyPxmCWvRhtaWZb6q8pSGHF1ESB8rgbvRx3APN3kq26aKJB" ], "script": "base64:AAIFAAAAAAAAAFIIAhIHCgUCAgICARIJCgcCAgEICAEBEgQKAgICEgUKAwICAhIICgYCAgECAgISBAoCCAISAwoBAhIDCgECEgASABIECgICARIDCgEBEgQKAgIEAAAAKgAAAAAPa2V5QXNzZXRBZGRyZXNzAgAAAANfYWEAAAAADGtleUFzc2V0VHlwZQIAAAADX2F0AAAAABFrZXlBc3NldFByZWNpc2lvbgIAAAADX2FwAAAAAA5rZXlBc3NldE1pbkZlZQIAAAAEX2FtZgAAAAAQa2V5QXNzZXRJc0FjdGl2ZQIAAAAEX2FpYQAAAAAQa2V5QmFzZUZlZVJhdGVCUAIAAAAEX2JmcgAAAAAMa2V5VmFsaWRhdG9yAgAAAAJfdgAAAAAPa2V5RmVlQ29sbGVjdG9yAgAAAANfZmMAAAAAD2tleVVubG9ja1NpZ25lcgIAAAADX3VzAAAAAAtrZXlJc0FjdGl2ZQIAAAADX2lhAAAAAAprZXlNYW5hZ2VyAgAAAAJfbQAAAAAOQlJJREdFX01BTkFHRVICAAAADkJSSURHRV9NQU5BR0VSAAAAAA1BU1NFVF9NQU5BR0VSAgAAAA1BU1NFVF9NQU5BR0VSAAAAAAxTVE9QX01BTkFHRVICAAAADFNUT1BfTUFOQUdFUgAAAAAZYmFzZUFzc2V0U291cmNlQW5kQWRkcmVzcwEAAAAkV0FWRVdBVkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtiYXNlQXNzZXRJZAEAAAAEV0FWRQAAAAAKY2hhaW5XYXZlcwEAAAAEV0FWRQAAAAACQlAAAAAAAAAAJxAAAAAAD3N5c3RlbVByZWNpc2lvbgAAAAAAAAAACQAAAAAPZXJyVW5hdXRob3JpemVkAgAAAAx1bmF1dGhvcml6ZWQAAAAAEGVyclVuaW5pdGlhbGl6ZWQCAAAADXVuaW5pdGlhbGl6ZWQAAAAADmVyckluaXRpYWxpemVkAgAAAAtpbml0aWFsaXplZAAAAAAQZXJyQWxyZWFkeUV4aXN0cwIAAAAGZXhpc3RzAAAAAAxlcnJOb3RFeGlzdHMCAAAACm5vdCBleGlzdHMAAAAAEGVyckludmFsaWRWYWx1ZXMCAAAADmludmFsaWQgdmFsdWVzAAAAABBlcnJOb3RPbmVQYXltZW50AgAAAA9ub3Qgb25lIHBheW1lbnQAAAAAEGVyckFzc2V0Tm90Rm91bmQCAAAAD2Fzc2V0IG5vdCBmb3VuZAAAAAATZXJyTm90RW5vdWdoQmFsYW5jZQIAAAASbm90IGVub3VnaCBiYWxhbmNlAAAAAA5lcnJCaWdQb3dWYWx1ZQIAAAARcG93IHZhbHVlIHRvbyBiaWcAAAAAEWVyckJyaWRnZURpc2FibGVkAgAAABJiaXJkZ2UgaXMgZGlzYWJsZWQAAAAAEGVyckFzc2V0RGlzYWJsZWQCAAAAEWFzc2V0IGlzIGRpc2FibGVkAAAAABhlcnJXcm9uZ0Rlc3RpbmF0aW9uQ2hhaW4CAAAAF3dyb25nIGRlc3RpbmF0aW9uIGNoYWluAAAAAAh0eXBlQmFzZQAAAAAAAAAAAAAAAAAKdHlwZU5hdGl2ZQAAAAAAAAAAAQAAAAALdHlwZVdyYXBwZWQAAAAAAAAAAAIBAAAAFWFzc2VydENhbGxlcklzTWFuYWdlcgAAAAIAAAABaQAAAAttYW5hZ2VyVHlwZQQAAAAHJG1hdGNoMAkABCEAAAABCQABLAAAAAIFAAAAC21hbmFnZXJUeXBlBQAAAAprZXlNYW5hZ2VyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAlhdXRob3JpdHkFAAAAByRtYXRjaDADCQEAAAACIT0AAAACBQAAAAlhdXRob3JpdHkICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMJAAACAAAAAQUAAAAPZXJyVW5hdXRob3JpemVkBQAAAAR1bml0CQAAAgAAAAEFAAAAEGVyclVuaW5pdGlhbGl6ZWQBAAAAFGFzc2VydEJyaWRnZUlzQWN0aXZlAAAAAAMJAQAAAAEhAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCAAAAABBQAAAAtrZXlJc0FjdGl2ZQcJAAACAAAAAQUAAAARZXJyQnJpZGdlRGlzYWJsZWQFAAAABHVuaXQBAAAAE2Fzc2VydEFzc2V0SXNBY3RpdmUAAAABAAAACmFzc2V0SWRTdHIEAAAAByRtYXRjaDAJAAQgAAAAAQkAASwAAAACBQAAAAphc3NldElkU3RyBQAAABBrZXlBc3NldElzQWN0aXZlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAhpc0FjdGl2ZQUAAAAHJG1hdGNoMAMFAAAACGlzQWN0aXZlBQAAAAR1bml0CQAAAgAAAAEFAAAAEGVyckFzc2V0RGlzYWJsZWQJAAACAAAAAQUAAAAQZXJyQXNzZXROb3RGb3VuZAEAAAAGZ2V0RmVlAAAAAgAAAAZhbW91bnQAAAAKYXNzZXRJZFN0cgQAAAANYmFzZUZlZVJhdGVCUAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEFAAAAEGtleUJhc2VGZWVSYXRlQlAFAAAAEGVyclVuaW5pdGlhbGl6ZWQEAAAABm1pbkZlZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAOa2V5QXNzZXRNaW5GZWUFAAAAEGVyckFzc2V0Tm90Rm91bmQEAAAAA2ZlZQkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAUAAAANYmFzZUZlZVJhdGVCUAUAAAACQlADCQAAZgAAAAIFAAAABm1pbkZlZQUAAAADZmVlBQAAAAZtaW5GZWUFAAAAA2ZlZQEAAAAFcG93MTAAAAACAAAABXZhbHVlAAAABXBvd2VyBAAAAAZhYnNQb3cDCQAAZgAAAAIAAAAAAAAAAAAFAAAABXBvd2VyCQEAAAABLQAAAAEFAAAABXBvd2VyBQAAAAVwb3dlcgQAAAAKcG93ZXJWYWx1ZQMJAAAAAAAAAgUAAAAGYWJzUG93AAAAAAAAAAAAAAAAAAAAAAABAwkAAAAAAAACBQAAAAZhYnNQb3cAAAAAAAAAAAEAAAAAAAAAAAoDCQAAAAAAAAIFAAAABmFic1BvdwAAAAAAAAAAAgAAAAAAAAAAZAMJAAAAAAAAAgUAAAAGYWJzUG93AAAAAAAAAAADAAAAAAAAAAPoAwkAAAAAAAACBQAAAAZhYnNQb3cAAAAAAAAAAAQAAAAAAAAAJxADCQAAAAAAAAIFAAAABmFic1BvdwAAAAAAAAAABQAAAAAAAAGGoAMJAAAAAAAAAgUAAAAGYWJzUG93AAAAAAAAAAAGAAAAAAAAD0JAAwkAAAAAAAACBQAAAAZhYnNQb3cAAAAAAAAAAAcAAAAAAACYloADCQAAAAAAAAIFAAAABmFic1BvdwAAAAAAAAAACAAAAAAABfXhAAMJAAAAAAAAAgUAAAAGYWJzUG93AAAAAAAAAAAJAAAAAAA7msoACQAAAgAAAAEFAAAADmVyckJpZ1Bvd1ZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAVwb3dlcgkAAGkAAAACBQAAAAV2YWx1ZQUAAAAKcG93ZXJWYWx1ZQkAAGgAAAACBQAAAAV2YWx1ZQUAAAAKcG93ZXJWYWx1ZQEAAAARdG9TeXN0ZW1QcmVjaXNpb24AAAACAAAABmFtb3VudAAAAAlwcmVjaXNpb24JAQAAAAVwb3cxMAAAAAIFAAAABmFtb3VudAkAAGUAAAACBQAAAA9zeXN0ZW1QcmVjaXNpb24FAAAACXByZWNpc2lvbgEAAAATZnJvbVN5c3RlbVByZWNpc2lvbgAAAAIAAAAGYW1vdW50AAAACXByZWNpc2lvbgkBAAAABXBvdzEwAAAAAgUAAAAGYW1vdW50CQAAZQAAAAIFAAAACXByZWNpc2lvbgUAAAAPc3lzdGVtUHJlY2lzaW9uAAAADQAAAAFpAQAAAAlzZXRDb25maWcAAAAFAAAABWFkbWluAAAAEHZhbGlkYXRvckFkZHJlc3MAAAAMZmVlQ29sbGVjdG9yAAAADHVubG9ja1NpZ25lcgAAAA1iYXNlRmVlUmF0ZUJQAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQhAAAAAQkAASwAAAACBQAAAA5CUklER0VfTUFOQUdFUgUAAAAKa2V5TWFuYWdlcgkAAAIAAAABBQAAAA5lcnJJbml0aWFsaXplZAkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACCQABLAAAAAIFAAAADkJSSURHRV9NQU5BR0VSBQAAAAprZXlNYW5hZ2VyBQAAAAVhZG1pbgkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACBQAAAAxrZXlWYWxpZGF0b3IFAAAAEHZhbGlkYXRvckFkZHJlc3MJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAAPa2V5RmVlQ29sbGVjdG9yBQAAAAxmZWVDb2xsZWN0b3IJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAAPa2V5VW5sb2NrU2lnbmVyBQAAAAx1bmxvY2tTaWduZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGtleUJhc2VGZWVSYXRlQlAFAAAADWJhc2VGZWVSYXRlQlAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAC2tleUlzQWN0aXZlBgUAAAADbmlsAAAAAWkBAAAACGFkZEFzc2V0AAAABwAAABVhc3NldFNvdXJjZUFuZEFkZHJlc3MAAAAKYXNzZXRJZEFyZwAAAAR0eXBlAAAABG5hbWUAAAALZGVzY3JpcHRpb24AAAAJcHJlY2lzaW9uAAAABm1pbkZlZQQAAAALY2FsbGVyQ2hlY2sJAQAAABVhc3NlcnRDYWxsZXJJc01hbmFnZXIAAAACBQAAAAFpBQAAAA1BU1NFVF9NQU5BR0VSAwkAAAAAAAACBQAAAAtjYWxsZXJDaGVjawUAAAALY2FsbGVyQ2hlY2sEAAAACyR0MDQyNDg1MDA3AwkAAAAAAAACBQAAAAR0eXBlBQAAAAh0eXBlQmFzZQMDAwkBAAAAAiE9AAAAAgUAAAAVYXNzZXRTb3VyY2VBbmRBZGRyZXNzBQAAABliYXNlQXNzZXRTb3VyY2VBbmRBZGRyZXNzBgkBAAAAAiE9AAAAAgUAAAAKYXNzZXRJZEFyZwUAAAALYmFzZUFzc2V0SWQGCQEAAAACIT0AAAACBQAAAAlwcmVjaXNpb24AAAAAAAAAAAgJAAACAAAAAQUAAAAQZXJySW52YWxpZFZhbHVlcwkABRQAAAACBQAAAANuaWwFAAAACmFzc2V0SWRBcmcDCQAAAAAAAAIFAAAABHR5cGUFAAAACnR5cGVOYXRpdmUJAAUUAAAAAgUAAAADbmlsBQAAAAphc3NldElkQXJnAwkAAAAAAAACBQAAAAR0eXBlBQAAAAt0eXBlV3JhcHBlZAMJAAAAAAAAAgkAAMgAAAABBQAAAAphc3NldElkQXJnAAAAAAAAAAAABAAAAAVpc3N1ZQkABEIAAAAFBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAAUAAAAJcHJlY2lzaW9uBgkABRQAAAACCQAETAAAAAIFAAAABWlzc3VlBQAAAANuaWwJAAQ4AAAAAQUAAAAFaXNzdWUJAAUUAAAAAgUAAAADbmlsBQAAAAphc3NldElkQXJnCQAAAgAAAAEFAAAAEGVyckludmFsaWRWYWx1ZXMEAAAAB2FjdGlvbnMIBQAAAAskdDA0MjQ4NTAwNwAAAAJfMQQAAAAHYXNzZXRJZAgFAAAACyR0MDQyNDg1MDA3AAAAAl8yBAAAAAphc3NldElkU3RyCQACWgAAAAEFAAAAB2Fzc2V0SWQEAAAAEGtleVNvdXJjZUFkZHJlc3MJAAEsAAAAAgkAAloAAAABBQAAABVhc3NldFNvdXJjZUFuZEFkZHJlc3MFAAAAD2tleUFzc2V0QWRkcmVzcwQAAAAQa2V5TmF0aXZlQWRkcmVzcwkAASwAAAACBQAAAAphc3NldElkU3RyBQAAAA9rZXlBc3NldEFkZHJlc3MDAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQhAAAAAQUAAAAQa2V5U291cmNlQWRkcmVzcwYJAQAAAAlpc0RlZmluZWQAAAABCQAEIQAAAAEFAAAAEGtleU5hdGl2ZUFkZHJlc3MJAAACAAAAAQUAAAAQZXJyQWxyZWFkeUV4aXN0cwkABE4AAAACBQAAAAdhY3Rpb25zCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIFAAAAEGtleVNvdXJjZUFkZHJlc3MFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAAQa2V5TmF0aXZlQWRkcmVzcwUAAAAVYXNzZXRTb3VyY2VBbmRBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAADGtleUFzc2V0VHlwZQUAAAAEdHlwZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAphc3NldElkU3RyBQAAABFrZXlBc3NldFByZWNpc2lvbgUAAAAJcHJlY2lzaW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAADmtleUFzc2V0TWluRmVlBQAAAAZtaW5GZWUJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAQa2V5QXNzZXRJc0FjdGl2ZQYFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALcmVtb3ZlQXNzZXQAAAACAAAAFWFzc2V0U291cmNlQW5kQWRkcmVzcwAAAAxuZXdBdXRob3JpdHkEAAAAC2NhbGxlckNoZWNrCQEAAAAVYXNzZXJ0Q2FsbGVySXNNYW5hZ2VyAAAAAgUAAAABaQUAAAANQVNTRVRfTUFOQUdFUgMJAAAAAAAAAgUAAAALY2FsbGVyQ2hlY2sFAAAAC2NhbGxlckNoZWNrBAAAABBrZXlTb3VyY2VBZGRyZXNzCQABLAAAAAIJAAJaAAAAAQUAAAAVYXNzZXRTb3VyY2VBbmRBZGRyZXNzBQAAAA9rZXlBc3NldEFkZHJlc3MEAAAAB2Fzc2V0SWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCEAAAABBQAAABBrZXlTb3VyY2VBZGRyZXNzBQAAAAxlcnJOb3RFeGlzdHMEAAAACmFzc2V0SWRTdHIJAAJaAAAAAQUAAAAHYXNzZXRJZAQAAAAEdHlwZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAMa2V5QXNzZXRUeXBlBQAAAAxlcnJOb3RFeGlzdHMEAAAAB2FjdGlvbnMDCQAAAAAAAAIFAAAABHR5cGUFAAAACHR5cGVCYXNlBAAAAAdiYWxhbmNlCQAD7wAAAAEFAAAABHRoaXMDCQAAZgAAAAIIBQAAAAdiYWxhbmNlAAAACWF2YWlsYWJsZQAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEFAAAADG5ld0F1dGhvcml0eQgFAAAAB2JhbGFuY2UAAAAJYXZhaWxhYmxlBQAAAAR1bml0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQUAAAAKdHlwZU5hdGl2ZQQAAAAHYmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzBQAAAAdhc3NldElkAwkAAGYAAAACBQAAAAdiYWxhbmNlAAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQUAAAAMbmV3QXV0aG9yaXR5BQAAAAdiYWxhbmNlBQAAAAdhc3NldElkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQUAAAALdHlwZVdyYXBwZWQFAAAAA25pbAkAAAIAAAABBQAAABBlcnJJbnZhbGlkVmFsdWVzCQAETgAAAAIFAAAAB2FjdGlvbnMJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAQa2V5U291cmNlQWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAAD2tleUFzc2V0QWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAADGtleUFzc2V0VHlwZQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAAEWtleUFzc2V0UHJlY2lzaW9uCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAOa2V5QXNzZXRNaW5GZWUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAphc3NldElkU3RyBQAAABBrZXlBc3NldElzQWN0aXZlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABGxvY2sAAAADAAAABmxvY2tJZAAAAAlyZWNpcGllbnQAAAALZGVzdGluYXRpb24EAAAAC2JpcmRnZUNoZWNrCQEAAAAUYXNzZXJ0QnJpZGdlSXNBY3RpdmUAAAAAAwkAAAAAAAACBQAAAAtiaXJkZ2VDaGVjawUAAAALYmlyZGdlQ2hlY2sDCQAAAAAAAAIFAAAAC2Rlc3RpbmF0aW9uBQAAAApjaGFpbldhdmVzCQAAAgAAAAEFAAAAGGVycldyb25nRGVzdGluYXRpb25DaGFpbgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQUAAAAQZXJyTm90T25lUGF5bWVudAQAAAAHYXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAALYmFzZUFzc2V0SWQEAAAACmFzc2V0SWRTdHIJAAJaAAAAAQUAAAAHYXNzZXRJZAQAAAAKYXNzZXRDaGVjawkBAAAAE2Fzc2VydEFzc2V0SXNBY3RpdmUAAAABBQAAAAphc3NldElkU3RyAwkAAAAAAAACBQAAAAphc3NldENoZWNrBQAAAAphc3NldENoZWNrBAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAQdmFsaWRhdG9yQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIQAAAAEFAAAADGtleVZhbGlkYXRvcgUAAAAQZXJyVW5pbml0aWFsaXplZAQAAAADZmVlCQEAAAAGZ2V0RmVlAAAAAgUAAAAGYW1vdW50BQAAAAphc3NldElkU3RyBAAAABBhbW91bnRXaXRob3V0RmVlCQAAZQAAAAIFAAAABmFtb3VudAUAAAADZmVlAwkAAGcAAAACAAAAAAAAAAAABQAAABBhbW91bnRXaXRob3V0RmVlCQAAAgAAAAEFAAAAE2Vyck5vdEVub3VnaEJhbGFuY2UEAAAAFWFzc2V0U291cmNlQW5kQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIQAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAPa2V5QXNzZXRBZGRyZXNzBQAAABBlcnJBc3NldE5vdEZvdW5kBAAAAAR0eXBlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACBQAAAAphc3NldElkU3RyBQAAAAxrZXlBc3NldFR5cGUFAAAAEGVyckFzc2V0Tm90Rm91bmQEAAAACXByZWNpc2lvbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAARa2V5QXNzZXRQcmVjaXNpb24FAAAAEGVyckFzc2V0Tm90Rm91bmQEAAAADGZlZUNvbGxlY3RvcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIQAAAAEFAAAAD2tleUZlZUNvbGxlY3RvcgUAAAAQZXJyVW5pbml0aWFsaXplZAQAAAAKY3JlYXRlTG9jawkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAEHZhbGlkYXRvckFkZHJlc3MCAAAACmNyZWF0ZUxvY2sJAARMAAAAAgUAAAAGbG9ja0lkCQAETAAAAAIFAAAACXJlY2lwaWVudAkABEwAAAACCQEAAAARdG9TeXN0ZW1QcmVjaXNpb24AAAACBQAAABBhbW91bnRXaXRob3V0RmVlBQAAAAlwcmVjaXNpb24JAARMAAAAAgUAAAALZGVzdGluYXRpb24JAARMAAAAAgUAAAAVYXNzZXRTb3VyY2VBbmRBZGRyZXNzBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAKY3JlYXRlTG9jawUAAAAKY3JlYXRlTG9jawMJAAAAAAAAAgUAAAAEdHlwZQUAAAAIdHlwZUJhc2UJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABBQAAAAxmZWVDb2xsZWN0b3IFAAAAA2ZlZQUAAAAEdW5pdAUAAAADbmlsAwkAAAAAAAACBQAAAAR0eXBlBQAAAAp0eXBlTmF0aXZlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQUAAAAMZmVlQ29sbGVjdG9yBQAAAANmZWUFAAAAB2Fzc2V0SWQFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQUAAAALdHlwZVdyYXBwZWQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAdhc3NldElkBQAAABBhbW91bnRXaXRob3V0RmVlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQUAAAAMZmVlQ29sbGVjdG9yBQAAAANmZWUFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABBQAAABBlcnJJbnZhbGlkVmFsdWVzCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABnVubG9jawAAAAYAAAAGbG9ja0lkAAAACXJlY2lwaWVudAAAAAZhbW91bnQAAAAKbG9ja1NvdXJjZQAAABVhc3NldFNvdXJjZUFuZEFkZHJlc3MAAAAJc2lnbmF0dXJlBAAAAAtiaXJkZ2VDaGVjawkBAAAAFGFzc2VydEJyaWRnZUlzQWN0aXZlAAAAAAMJAAAAAAAAAgUAAAALYmlyZGdlQ2hlY2sFAAAAC2JpcmRnZUNoZWNrBAAAAAdhc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQhAAAAAQkAASwAAAACCQACWgAAAAEFAAAAFWFzc2V0U291cmNlQW5kQWRkcmVzcwUAAAAPa2V5QXNzZXRBZGRyZXNzBQAAABBlcnJBc3NldE5vdEZvdW5kBAAAAAphc3NldElkU3RyCQACWgAAAAEFAAAAB2Fzc2V0SWQEAAAABHR5cGUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAADGtleUFzc2V0VHlwZQUAAAAQZXJyQXNzZXROb3RGb3VuZAQAAAAJcHJlY2lzaW9uCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACBQAAAAphc3NldElkU3RyBQAAABFrZXlBc3NldFByZWNpc2lvbgUAAAAQZXJyQXNzZXROb3RGb3VuZAQAAAAQdmFsaWRhdG9yQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIQAAAAEFAAAADGtleVZhbGlkYXRvcgUAAAAQZXJyVW5pbml0aWFsaXplZAQAAAAMdW5sb2NrU2lnbmVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQhAAAAAQUAAAAPa2V5VW5sb2NrU2lnbmVyBQAAABBlcnJVbmluaXRpYWxpemVkBAAAAAxmZWVDb2xsZWN0b3IJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCEAAAABBQAAAA9rZXlGZWVDb2xsZWN0b3IFAAAAEGVyclVuaW5pdGlhbGl6ZWQEAAAADGNyZWF0ZVVubG9jawkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAEHZhbGlkYXRvckFkZHJlc3MCAAAADGNyZWF0ZVVubG9jawkABEwAAAACBQAAAAZsb2NrSWQJAARMAAAAAgUAAAAJcmVjaXBpZW50CQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACBQAAAApsb2NrU291cmNlCQAETAAAAAIFAAAAFWFzc2V0U291cmNlQW5kQWRkcmVzcwkABEwAAAACBQAAAAlzaWduYXR1cmUFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAxjcmVhdGVVbmxvY2sFAAAADGNyZWF0ZVVubG9jawQAAAAHaXNWYWxpZAQAAAAHJG1hdGNoMAUAAAAMY3JlYXRlVW5sb2NrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2BwMJAQAAAAEhAAAAAQUAAAAHaXNWYWxpZAkAAAIAAAABBQAAABBlcnJJbnZhbGlkVmFsdWVzBAAAAANmZWUDCQAAAAAAAAIFAAAADHVubG9ja1NpZ25lcggIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAOa2V5QXNzZXRNaW5GZWUFAAAAEGVyckFzc2V0Tm90Rm91bmQAAAAAAAAAAAAEAAAADGFtb3VudFRvU2VuZAkBAAAAE2Zyb21TeXN0ZW1QcmVjaXNpb24AAAACBQAAAAZhbW91bnQFAAAACXByZWNpc2lvbgQAAAAWYW1vdW50VG9TZW5kV2l0aG91dEZlZQkAAGUAAAACBQAAAAxhbW91bnRUb1NlbmQFAAAAA2ZlZQMJAABnAAAAAgAAAAAAAAAAAAUAAAAWYW1vdW50VG9TZW5kV2l0aG91dEZlZQkAAAIAAAABBQAAABNlcnJOb3RFbm91Z2hCYWxhbmNlAwkAAAAAAAACBQAAAAR0eXBlBQAAAAh0eXBlQmFzZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQUAAAAJcmVjaXBpZW50BQAAABZhbW91bnRUb1NlbmRXaXRob3V0RmVlBQAAAAR1bml0BQAAAANuaWwDCQAAZgAAAAIFAAAAA2ZlZQAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEFAAAADGZlZUNvbGxlY3RvcgUAAAADZmVlBQAAAAR1bml0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQUAAAAKdHlwZU5hdGl2ZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQUAAAAJcmVjaXBpZW50BQAAABZhbW91bnRUb1NlbmRXaXRob3V0RmVlBQAAAAdhc3NldElkBQAAAANuaWwDCQAAZgAAAAIFAAAAA2ZlZQAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEFAAAADGZlZUNvbGxlY3RvcgUAAAADZmVlBQAAAAdhc3NldElkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQUAAAALdHlwZVdyYXBwZWQJAAROAAAAAgkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAB2Fzc2V0SWQFAAAADGFtb3VudFRvU2VuZAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABBQAAAAlyZWNpcGllbnQFAAAAFmFtb3VudFRvU2VuZFdpdGhvdXRGZWUFAAAAB2Fzc2V0SWQFAAAAA25pbAMJAABmAAAAAgUAAAADZmVlAAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQUAAAAMZmVlQ29sbGVjdG9yBQAAAANmZWUFAAAAB2Fzc2V0SWQFAAAAA25pbAUAAAADbmlsCQAAAgAAAAEFAAAAEGVyckludmFsaWRWYWx1ZXMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAgAAAAttYW5hZ2VyVHlwZQAAAAdtYW5hZ2VyBAAAAAtjYWxsZXJDaGVjawkBAAAAFWFzc2VydENhbGxlcklzTWFuYWdlcgAAAAIFAAAAAWkFAAAADkJSSURHRV9NQU5BR0VSAwkAAAAAAAACBQAAAAtjYWxsZXJDaGVjawUAAAALY2FsbGVyQ2hlY2sJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgkAASwAAAACBQAAAAttYW5hZ2VyVHlwZQUAAAAKa2V5TWFuYWdlcgUAAAAHbWFuYWdlcgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA9zZXRGZWVDb2xsZWN0b3IAAAABAAAADGZlZUNvbGxlY3RvcgQAAAALY2FsbGVyQ2hlY2sJAQAAABVhc3NlcnRDYWxsZXJJc01hbmFnZXIAAAACBQAAAAFpBQAAAA5CUklER0VfTUFOQUdFUgMJAAAAAAAAAgUAAAALY2FsbGVyQ2hlY2sFAAAAC2NhbGxlckNoZWNrCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIFAAAAD2tleUZlZUNvbGxlY3RvcgUAAAAMZmVlQ29sbGVjdG9yBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADHNldFZhbGlkYXRvcgAAAAEAAAAJdmFsaWRhdG9yBAAAAAtjYWxsZXJDaGVjawkBAAAAFWFzc2VydENhbGxlcklzTWFuYWdlcgAAAAIFAAAAAWkFAAAADkJSSURHRV9NQU5BR0VSAwkAAAAAAAACBQAAAAtjYWxsZXJDaGVjawUAAAALY2FsbGVyQ2hlY2sJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAAMa2V5VmFsaWRhdG9yBQAAAAl2YWxpZGF0b3IFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALc3RhcnRCcmlkZ2UAAAAABAAAAAtjYWxsZXJDaGVjawkBAAAAFWFzc2VydENhbGxlcklzTWFuYWdlcgAAAAIFAAAAAWkFAAAADkJSSURHRV9NQU5BR0VSAwkAAAAAAAACBQAAAAtjYWxsZXJDaGVjawUAAAALY2FsbGVyQ2hlY2sJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAC2tleUlzQWN0aXZlBgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzdG9wQnJpZGdlAAAAAAQAAAALY2FsbGVyQ2hlY2sJAQAAABVhc3NlcnRDYWxsZXJJc01hbmFnZXIAAAACBQAAAAFpBQAAAAxTVE9QX01BTkFHRVIDCQAAAAAAAAIFAAAAC2NhbGxlckNoZWNrBQAAAAtjYWxsZXJDaGVjawkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAALa2V5SXNBY3RpdmUHBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACXNldE1pbkZlZQAAAAIAAAAHYXNzZXRJZAAAAAZtaW5GZWUEAAAAC2NhbGxlckNoZWNrCQEAAAAVYXNzZXJ0Q2FsbGVySXNNYW5hZ2VyAAAAAgUAAAABaQUAAAAOQlJJREdFX01BTkFHRVIDCQAAAAAAAAIFAAAAC2NhbGxlckNoZWNrBQAAAAtjYWxsZXJDaGVjawQAAAAKYXNzZXRJZFN0cgkAAloAAAABBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFzc2V0SWRTdHIFAAAADmtleUFzc2V0TWluRmVlBQAAAAZtaW5GZWUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOc2V0QmFzZUZlZVJhdGUAAAABAAAADWJhc2VGZWVSYXRlQlAEAAAAC2NhbGxlckNoZWNrCQEAAAAVYXNzZXJ0Q2FsbGVySXNNYW5hZ2VyAAAAAgUAAAABaQUAAAAOQlJJREdFX01BTkFHRVIDCQAAAAAAAAIFAAAAC2NhbGxlckNoZWNrBQAAAAtjYWxsZXJDaGVjawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAQa2V5QmFzZUZlZVJhdGVCUAUAAAANYmFzZUZlZVJhdGVCUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1zZXRBc3NldFN0YXRlAAAAAgAAAAdhc3NldElkAAAABXN0YXRlBAAAAAtjYWxsZXJDaGVjawkBAAAAFWFzc2VydENhbGxlcklzTWFuYWdlcgAAAAIFAAAAAWkFAAAADkJSSURHRV9NQU5BR0VSAwkAAAAAAAACBQAAAAtjYWxsZXJDaGVjawUAAAALY2FsbGVyQ2hlY2sEAAAACmFzc2V0SWRTdHIJAAJaAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACBQAAAAphc3NldElkU3RyBQAAABBrZXlBc3NldElzQWN0aXZlBQAAAAVzdGF0ZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAACy3MlR", "height": 2045543, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EDKZ9pib89tz9cdsiESQTQJs8yB5peivDT1mm5aHDk22 Next: 2hi9jE4Gkn881HD2YvtKuuzsdSNwt91hAQAqYH6F7yjJ Diff:
OldNewDifferences
1111
1212 let keyAssetIsActive = "_aia"
1313
14-let ketBaseFeeRateBP = "_bfr"
14+let keyBaseFeeRateBP = "_bfr"
1515
1616 let keyValidator = "_v"
1717
2929
3030 let STOP_MANAGER = "STOP_MANAGER"
3131
32-let baseAssetSourceAndAddress = base58'FbV8QW7Jusz'
32+let baseAssetSourceAndAddress = base58'fRpRFUxiLXbzAaAT3sfi1oTFa8n4X8b9FUaQHyT5MkdXYpGZV'
3333
3434 let baseAssetId = base58'3EMsPJ'
3535
6363
6464 let errAssetDisabled = "asset is disabled"
6565
66+let errWrongDestinationChain = "wrong destination chain"
67+
6668 let typeBase = 0
6769
6870 let typeNative = 1
9597
9698
9799 func getFee (amount,assetIdStr) = {
98- let baseFeeRateBP = valueOrErrorMessage(getInteger(ketBaseFeeRateBP), errUninitialized)
100+ let baseFeeRateBP = valueOrErrorMessage(getInteger(keyBaseFeeRateBP), errUninitialized)
99101 let minFee = valueOrErrorMessage(getInteger((assetIdStr + keyAssetMinFee)), errAssetNotFound)
100102 let fee = ((amount * baseFeeRateBP) / BP)
101103 if ((minFee > fee))
144146 @Callable(i)
145147 func setConfig (admin,validatorAddress,feeCollector,unlockSigner,baseFeeRateBP) = if (isDefined(getBinary((BRIDGE_MANAGER + keyManager))))
146148 then throw(errInitialized)
147- else [BinaryEntry((BRIDGE_MANAGER + keyManager), admin), BinaryEntry(keyValidator, validatorAddress), BinaryEntry(keyFeeCollector, feeCollector), BinaryEntry(keyUnlockSigner, unlockSigner), IntegerEntry(ketBaseFeeRateBP, baseFeeRateBP), BooleanEntry(keyIsActive, true)]
149+ else [BinaryEntry((BRIDGE_MANAGER + keyManager), admin), BinaryEntry(keyValidator, validatorAddress), BinaryEntry(keyFeeCollector, feeCollector), BinaryEntry(keyUnlockSigner, unlockSigner), IntegerEntry(keyBaseFeeRateBP, baseFeeRateBP), BooleanEntry(keyIsActive, true)]
148150
149151
150152
153155 let callerCheck = assertCallerIsManager(i, ASSET_MANAGER)
154156 if ((callerCheck == callerCheck))
155157 then {
156- let $t040994858 = if ((type == typeBase))
158+ let $t042485007 = if ((type == typeBase))
157159 then if (if (if ((assetSourceAndAddress != baseAssetSourceAndAddress))
158160 then true
159161 else (assetIdArg != baseAssetId))
171173 }
172174 else $Tuple2(nil, assetIdArg)
173175 else throw(errInvalidValues)
174- let actions = $t040994858._1
175- let assetId = $t040994858._2
176+ let actions = $t042485007._1
177+ let assetId = $t042485007._2
176178 let assetIdStr = toBase64String(assetId)
177179 let keySourceAddress = (toBase64String(assetSourceAndAddress) + keyAssetAddress)
178180 let keyNativeAddress = (assetIdStr + keyAssetAddress)
224226 func lock (lockId,recipient,destination) = {
225227 let birdgeCheck = assertBridgeIsActive()
226228 if ((birdgeCheck == birdgeCheck))
227- then if ((size(i.payments) != 1))
228- then throw(errNotOnePayment)
229- else {
230- let assetId = valueOrElse(i.payments[0].assetId, baseAssetId)
231- let assetIdStr = toBase64String(assetId)
232- let assetCheck = assertAssetIsActive(assetIdStr)
233- if ((assetCheck == assetCheck))
234- then {
235- let amount = i.payments[0].amount
236- let validatorAddress = valueOrErrorMessage(getBinary(keyValidator), errUninitialized)
237- let fee = getFee(amount, assetIdStr)
238- let amountWithoutFee = (amount - fee)
239- if ((0 >= amountWithoutFee))
240- then throw(errNotEnoughBalance)
241- else {
242- let assetSourceAndAddress = valueOrErrorMessage(getBinary((assetIdStr + keyAssetAddress)), errAssetNotFound)
243- let type = valueOrErrorMessage(getInteger((assetIdStr + keyAssetType)), errAssetNotFound)
244- let precision = valueOrErrorMessage(getInteger((assetIdStr + keyAssetPrecision)), errAssetNotFound)
245- let feeCollector = valueOrErrorMessage(getBinary(keyFeeCollector), errUninitialized)
246- let createLock = invoke(Address(validatorAddress), "createLock", [lockId, recipient, toSystemPrecision(amountWithoutFee, precision), destination, assetSourceAndAddress], nil)
247- if ((createLock == createLock))
248- then if ((type == typeBase))
249- then [ScriptTransfer(Address(feeCollector), fee, unit)]
250- else if ((type == typeNative))
251- then [ScriptTransfer(Address(feeCollector), fee, assetId)]
252- else if ((type == typeWrapped))
253- then [Burn(assetId, amountWithoutFee), ScriptTransfer(Address(feeCollector), fee, assetId)]
254- else throw(errInvalidValues)
255- else throw("Strict value is not equal to itself.")
256- }
257- }
258- else throw("Strict value is not equal to itself.")
259- }
229+ then if ((destination == chainWaves))
230+ then throw(errWrongDestinationChain)
231+ else if ((size(i.payments) != 1))
232+ then throw(errNotOnePayment)
233+ else {
234+ let assetId = valueOrElse(i.payments[0].assetId, baseAssetId)
235+ let assetIdStr = toBase64String(assetId)
236+ let assetCheck = assertAssetIsActive(assetIdStr)
237+ if ((assetCheck == assetCheck))
238+ then {
239+ let amount = i.payments[0].amount
240+ let validatorAddress = valueOrErrorMessage(getBinary(keyValidator), errUninitialized)
241+ let fee = getFee(amount, assetIdStr)
242+ let amountWithoutFee = (amount - fee)
243+ if ((0 >= amountWithoutFee))
244+ then throw(errNotEnoughBalance)
245+ else {
246+ let assetSourceAndAddress = valueOrErrorMessage(getBinary((assetIdStr + keyAssetAddress)), errAssetNotFound)
247+ let type = valueOrErrorMessage(getInteger((assetIdStr + keyAssetType)), errAssetNotFound)
248+ let precision = valueOrErrorMessage(getInteger((assetIdStr + keyAssetPrecision)), errAssetNotFound)
249+ let feeCollector = valueOrErrorMessage(getBinary(keyFeeCollector), errUninitialized)
250+ let createLock = invoke(Address(validatorAddress), "createLock", [lockId, recipient, toSystemPrecision(amountWithoutFee, precision), destination, assetSourceAndAddress], nil)
251+ if ((createLock == createLock))
252+ then if ((type == typeBase))
253+ then [ScriptTransfer(Address(feeCollector), fee, unit)]
254+ else if ((type == typeNative))
255+ then [ScriptTransfer(Address(feeCollector), fee, assetId)]
256+ else if ((type == typeWrapped))
257+ then [Burn(assetId, amountWithoutFee), ScriptTransfer(Address(feeCollector), fee, assetId)]
258+ else throw(errInvalidValues)
259+ else throw("Strict value is not equal to itself.")
260+ }
261+ }
262+ else throw("Strict value is not equal to itself.")
263+ }
260264 else throw("Strict value is not equal to itself.")
261265 }
262266
382386 func setBaseFeeRate (baseFeeRateBP) = {
383387 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
384388 if ((callerCheck == callerCheck))
385- then [IntegerEntry(ketBaseFeeRateBP, baseFeeRateBP)]
389+ then [IntegerEntry(keyBaseFeeRateBP, baseFeeRateBP)]
386390 else throw("Strict value is not equal to itself.")
387391 }
388392
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyAssetAddress = "_aa"
55
66 let keyAssetType = "_at"
77
88 let keyAssetPrecision = "_ap"
99
1010 let keyAssetMinFee = "_amf"
1111
1212 let keyAssetIsActive = "_aia"
1313
14-let ketBaseFeeRateBP = "_bfr"
14+let keyBaseFeeRateBP = "_bfr"
1515
1616 let keyValidator = "_v"
1717
1818 let keyFeeCollector = "_fc"
1919
2020 let keyUnlockSigner = "_us"
2121
2222 let keyIsActive = "_ia"
2323
2424 let keyManager = "_m"
2525
2626 let BRIDGE_MANAGER = "BRIDGE_MANAGER"
2727
2828 let ASSET_MANAGER = "ASSET_MANAGER"
2929
3030 let STOP_MANAGER = "STOP_MANAGER"
3131
32-let baseAssetSourceAndAddress = base58'FbV8QW7Jusz'
32+let baseAssetSourceAndAddress = base58'fRpRFUxiLXbzAaAT3sfi1oTFa8n4X8b9FUaQHyT5MkdXYpGZV'
3333
3434 let baseAssetId = base58'3EMsPJ'
3535
3636 let chainWaves = base58'3EMsPJ'
3737
3838 let BP = 10000
3939
4040 let systemPrecision = 9
4141
4242 let errUnauthorized = "unauthorized"
4343
4444 let errUninitialized = "uninitialized"
4545
4646 let errInitialized = "initialized"
4747
4848 let errAlreadyExists = "exists"
4949
5050 let errNotExists = "not exists"
5151
5252 let errInvalidValues = "invalid values"
5353
5454 let errNotOnePayment = "not one payment"
5555
5656 let errAssetNotFound = "asset not found"
5757
5858 let errNotEnoughBalance = "not enough balance"
5959
6060 let errBigPowValue = "pow value too big"
6161
6262 let errBridgeDisabled = "birdge is disabled"
6363
6464 let errAssetDisabled = "asset is disabled"
6565
66+let errWrongDestinationChain = "wrong destination chain"
67+
6668 let typeBase = 0
6769
6870 let typeNative = 1
6971
7072 let typeWrapped = 2
7173
7274 func assertCallerIsManager (i,managerType) = match getBinary((managerType + keyManager)) {
7375 case authority: ByteVector =>
7476 if ((authority != i.caller.bytes))
7577 then throw(errUnauthorized)
7678 else unit
7779 case _ =>
7880 throw(errUninitialized)
7981 }
8082
8183
8284 func assertBridgeIsActive () = if (!(valueOrElse(getBoolean(keyIsActive), false)))
8385 then throw(errBridgeDisabled)
8486 else unit
8587
8688
8789 func assertAssetIsActive (assetIdStr) = match getBoolean((assetIdStr + keyAssetIsActive)) {
8890 case isActive: Boolean =>
8991 if (isActive)
9092 then unit
9193 else throw(errAssetDisabled)
9294 case _ =>
9395 throw(errAssetNotFound)
9496 }
9597
9698
9799 func getFee (amount,assetIdStr) = {
98- let baseFeeRateBP = valueOrErrorMessage(getInteger(ketBaseFeeRateBP), errUninitialized)
100+ let baseFeeRateBP = valueOrErrorMessage(getInteger(keyBaseFeeRateBP), errUninitialized)
99101 let minFee = valueOrErrorMessage(getInteger((assetIdStr + keyAssetMinFee)), errAssetNotFound)
100102 let fee = ((amount * baseFeeRateBP) / BP)
101103 if ((minFee > fee))
102104 then minFee
103105 else fee
104106 }
105107
106108
107109 func pow10 (value,power) = {
108110 let absPow = if ((0 > power))
109111 then -(power)
110112 else power
111113 let powerValue = if ((absPow == 0))
112114 then 1
113115 else if ((absPow == 1))
114116 then 10
115117 else if ((absPow == 2))
116118 then 100
117119 else if ((absPow == 3))
118120 then 1000
119121 else if ((absPow == 4))
120122 then 10000
121123 else if ((absPow == 5))
122124 then 100000
123125 else if ((absPow == 6))
124126 then 1000000
125127 else if ((absPow == 7))
126128 then 10000000
127129 else if ((absPow == 8))
128130 then 100000000
129131 else if ((absPow == 9))
130132 then 1000000000
131133 else throw(errBigPowValue)
132134 if ((0 > power))
133135 then (value / powerValue)
134136 else (value * powerValue)
135137 }
136138
137139
138140 func toSystemPrecision (amount,precision) = pow10(amount, (systemPrecision - precision))
139141
140142
141143 func fromSystemPrecision (amount,precision) = pow10(amount, (precision - systemPrecision))
142144
143145
144146 @Callable(i)
145147 func setConfig (admin,validatorAddress,feeCollector,unlockSigner,baseFeeRateBP) = if (isDefined(getBinary((BRIDGE_MANAGER + keyManager))))
146148 then throw(errInitialized)
147- else [BinaryEntry((BRIDGE_MANAGER + keyManager), admin), BinaryEntry(keyValidator, validatorAddress), BinaryEntry(keyFeeCollector, feeCollector), BinaryEntry(keyUnlockSigner, unlockSigner), IntegerEntry(ketBaseFeeRateBP, baseFeeRateBP), BooleanEntry(keyIsActive, true)]
149+ else [BinaryEntry((BRIDGE_MANAGER + keyManager), admin), BinaryEntry(keyValidator, validatorAddress), BinaryEntry(keyFeeCollector, feeCollector), BinaryEntry(keyUnlockSigner, unlockSigner), IntegerEntry(keyBaseFeeRateBP, baseFeeRateBP), BooleanEntry(keyIsActive, true)]
148150
149151
150152
151153 @Callable(i)
152154 func addAsset (assetSourceAndAddress,assetIdArg,type,name,description,precision,minFee) = {
153155 let callerCheck = assertCallerIsManager(i, ASSET_MANAGER)
154156 if ((callerCheck == callerCheck))
155157 then {
156- let $t040994858 = if ((type == typeBase))
158+ let $t042485007 = if ((type == typeBase))
157159 then if (if (if ((assetSourceAndAddress != baseAssetSourceAndAddress))
158160 then true
159161 else (assetIdArg != baseAssetId))
160162 then true
161163 else (precision != 8))
162164 then throw(errInvalidValues)
163165 else $Tuple2(nil, assetIdArg)
164166 else if ((type == typeNative))
165167 then $Tuple2(nil, assetIdArg)
166168 else if ((type == typeWrapped))
167169 then if ((size(assetIdArg) == 0))
168170 then {
169171 let issue = Issue(name, description, 0, precision, true)
170172 $Tuple2([issue], calculateAssetId(issue))
171173 }
172174 else $Tuple2(nil, assetIdArg)
173175 else throw(errInvalidValues)
174- let actions = $t040994858._1
175- let assetId = $t040994858._2
176+ let actions = $t042485007._1
177+ let assetId = $t042485007._2
176178 let assetIdStr = toBase64String(assetId)
177179 let keySourceAddress = (toBase64String(assetSourceAndAddress) + keyAssetAddress)
178180 let keyNativeAddress = (assetIdStr + keyAssetAddress)
179181 if (if (isDefined(getBinary(keySourceAddress)))
180182 then true
181183 else isDefined(getBinary(keyNativeAddress)))
182184 then throw(errAlreadyExists)
183185 else (actions ++ [BinaryEntry(keySourceAddress, assetId), BinaryEntry(keyNativeAddress, assetSourceAndAddress), IntegerEntry((assetIdStr + keyAssetType), type), IntegerEntry((assetIdStr + keyAssetPrecision), precision), IntegerEntry((assetIdStr + keyAssetMinFee), minFee), BooleanEntry((assetIdStr + keyAssetIsActive), true)])
184186 }
185187 else throw("Strict value is not equal to itself.")
186188 }
187189
188190
189191
190192 @Callable(i)
191193 func removeAsset (assetSourceAndAddress,newAuthority) = {
192194 let callerCheck = assertCallerIsManager(i, ASSET_MANAGER)
193195 if ((callerCheck == callerCheck))
194196 then {
195197 let keySourceAddress = (toBase64String(assetSourceAndAddress) + keyAssetAddress)
196198 let assetId = valueOrErrorMessage(getBinary(keySourceAddress), errNotExists)
197199 let assetIdStr = toBase64String(assetId)
198200 let type = valueOrErrorMessage(getInteger((assetIdStr + keyAssetType)), errNotExists)
199201 let actions = if ((type == typeBase))
200202 then {
201203 let balance = wavesBalance(this)
202204 if ((balance.available > 0))
203205 then [ScriptTransfer(Address(newAuthority), balance.available, unit)]
204206 else nil
205207 }
206208 else if ((type == typeNative))
207209 then {
208210 let balance = assetBalance(this, assetId)
209211 if ((balance > 0))
210212 then [ScriptTransfer(Address(newAuthority), balance, assetId)]
211213 else nil
212214 }
213215 else if ((type == typeWrapped))
214216 then nil
215217 else throw(errInvalidValues)
216218 (actions ++ [DeleteEntry(keySourceAddress), DeleteEntry((assetIdStr + keyAssetAddress)), DeleteEntry((assetIdStr + keyAssetType)), DeleteEntry((assetIdStr + keyAssetPrecision)), DeleteEntry((assetIdStr + keyAssetMinFee)), DeleteEntry((assetIdStr + keyAssetIsActive))])
217219 }
218220 else throw("Strict value is not equal to itself.")
219221 }
220222
221223
222224
223225 @Callable(i)
224226 func lock (lockId,recipient,destination) = {
225227 let birdgeCheck = assertBridgeIsActive()
226228 if ((birdgeCheck == birdgeCheck))
227- then if ((size(i.payments) != 1))
228- then throw(errNotOnePayment)
229- else {
230- let assetId = valueOrElse(i.payments[0].assetId, baseAssetId)
231- let assetIdStr = toBase64String(assetId)
232- let assetCheck = assertAssetIsActive(assetIdStr)
233- if ((assetCheck == assetCheck))
234- then {
235- let amount = i.payments[0].amount
236- let validatorAddress = valueOrErrorMessage(getBinary(keyValidator), errUninitialized)
237- let fee = getFee(amount, assetIdStr)
238- let amountWithoutFee = (amount - fee)
239- if ((0 >= amountWithoutFee))
240- then throw(errNotEnoughBalance)
241- else {
242- let assetSourceAndAddress = valueOrErrorMessage(getBinary((assetIdStr + keyAssetAddress)), errAssetNotFound)
243- let type = valueOrErrorMessage(getInteger((assetIdStr + keyAssetType)), errAssetNotFound)
244- let precision = valueOrErrorMessage(getInteger((assetIdStr + keyAssetPrecision)), errAssetNotFound)
245- let feeCollector = valueOrErrorMessage(getBinary(keyFeeCollector), errUninitialized)
246- let createLock = invoke(Address(validatorAddress), "createLock", [lockId, recipient, toSystemPrecision(amountWithoutFee, precision), destination, assetSourceAndAddress], nil)
247- if ((createLock == createLock))
248- then if ((type == typeBase))
249- then [ScriptTransfer(Address(feeCollector), fee, unit)]
250- else if ((type == typeNative))
251- then [ScriptTransfer(Address(feeCollector), fee, assetId)]
252- else if ((type == typeWrapped))
253- then [Burn(assetId, amountWithoutFee), ScriptTransfer(Address(feeCollector), fee, assetId)]
254- else throw(errInvalidValues)
255- else throw("Strict value is not equal to itself.")
256- }
257- }
258- else throw("Strict value is not equal to itself.")
259- }
229+ then if ((destination == chainWaves))
230+ then throw(errWrongDestinationChain)
231+ else if ((size(i.payments) != 1))
232+ then throw(errNotOnePayment)
233+ else {
234+ let assetId = valueOrElse(i.payments[0].assetId, baseAssetId)
235+ let assetIdStr = toBase64String(assetId)
236+ let assetCheck = assertAssetIsActive(assetIdStr)
237+ if ((assetCheck == assetCheck))
238+ then {
239+ let amount = i.payments[0].amount
240+ let validatorAddress = valueOrErrorMessage(getBinary(keyValidator), errUninitialized)
241+ let fee = getFee(amount, assetIdStr)
242+ let amountWithoutFee = (amount - fee)
243+ if ((0 >= amountWithoutFee))
244+ then throw(errNotEnoughBalance)
245+ else {
246+ let assetSourceAndAddress = valueOrErrorMessage(getBinary((assetIdStr + keyAssetAddress)), errAssetNotFound)
247+ let type = valueOrErrorMessage(getInteger((assetIdStr + keyAssetType)), errAssetNotFound)
248+ let precision = valueOrErrorMessage(getInteger((assetIdStr + keyAssetPrecision)), errAssetNotFound)
249+ let feeCollector = valueOrErrorMessage(getBinary(keyFeeCollector), errUninitialized)
250+ let createLock = invoke(Address(validatorAddress), "createLock", [lockId, recipient, toSystemPrecision(amountWithoutFee, precision), destination, assetSourceAndAddress], nil)
251+ if ((createLock == createLock))
252+ then if ((type == typeBase))
253+ then [ScriptTransfer(Address(feeCollector), fee, unit)]
254+ else if ((type == typeNative))
255+ then [ScriptTransfer(Address(feeCollector), fee, assetId)]
256+ else if ((type == typeWrapped))
257+ then [Burn(assetId, amountWithoutFee), ScriptTransfer(Address(feeCollector), fee, assetId)]
258+ else throw(errInvalidValues)
259+ else throw("Strict value is not equal to itself.")
260+ }
261+ }
262+ else throw("Strict value is not equal to itself.")
263+ }
260264 else throw("Strict value is not equal to itself.")
261265 }
262266
263267
264268
265269 @Callable(i)
266270 func unlock (lockId,recipient,amount,lockSource,assetSourceAndAddress,signature) = {
267271 let birdgeCheck = assertBridgeIsActive()
268272 if ((birdgeCheck == birdgeCheck))
269273 then {
270274 let assetId = valueOrErrorMessage(getBinary((toBase64String(assetSourceAndAddress) + keyAssetAddress)), errAssetNotFound)
271275 let assetIdStr = toBase64String(assetId)
272276 let type = valueOrErrorMessage(getInteger((assetIdStr + keyAssetType)), errAssetNotFound)
273277 let precision = valueOrErrorMessage(getInteger((assetIdStr + keyAssetPrecision)), errAssetNotFound)
274278 let validatorAddress = valueOrErrorMessage(getBinary(keyValidator), errUninitialized)
275279 let unlockSigner = valueOrErrorMessage(getBinary(keyUnlockSigner), errUninitialized)
276280 let feeCollector = valueOrErrorMessage(getBinary(keyFeeCollector), errUninitialized)
277281 let createUnlock = invoke(Address(validatorAddress), "createUnlock", [lockId, recipient, amount, lockSource, assetSourceAndAddress, signature], nil)
278282 if ((createUnlock == createUnlock))
279283 then {
280284 let isValid = match createUnlock {
281285 case v: Boolean =>
282286 v
283287 case _ =>
284288 false
285289 }
286290 if (!(isValid))
287291 then throw(errInvalidValues)
288292 else {
289293 let fee = if ((unlockSigner == i.caller.bytes))
290294 then valueOrErrorMessage(getInteger((assetIdStr + keyAssetMinFee)), errAssetNotFound)
291295 else 0
292296 let amountToSend = fromSystemPrecision(amount, precision)
293297 let amountToSendWithoutFee = (amountToSend - fee)
294298 if ((0 >= amountToSendWithoutFee))
295299 then throw(errNotEnoughBalance)
296300 else if ((type == typeBase))
297301 then ([ScriptTransfer(Address(recipient), amountToSendWithoutFee, unit)] ++ (if ((fee > 0))
298302 then [ScriptTransfer(Address(feeCollector), fee, unit)]
299303 else nil))
300304 else if ((type == typeNative))
301305 then ([ScriptTransfer(Address(recipient), amountToSendWithoutFee, assetId)] ++ (if ((fee > 0))
302306 then [ScriptTransfer(Address(feeCollector), fee, assetId)]
303307 else nil))
304308 else if ((type == typeWrapped))
305309 then ([Reissue(assetId, amountToSend, true), ScriptTransfer(Address(recipient), amountToSendWithoutFee, assetId)] ++ (if ((fee > 0))
306310 then [ScriptTransfer(Address(feeCollector), fee, assetId)]
307311 else nil))
308312 else throw(errInvalidValues)
309313 }
310314 }
311315 else throw("Strict value is not equal to itself.")
312316 }
313317 else throw("Strict value is not equal to itself.")
314318 }
315319
316320
317321
318322 @Callable(i)
319323 func setManager (managerType,manager) = {
320324 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
321325 if ((callerCheck == callerCheck))
322326 then [BinaryEntry((managerType + keyManager), manager)]
323327 else throw("Strict value is not equal to itself.")
324328 }
325329
326330
327331
328332 @Callable(i)
329333 func setFeeCollector (feeCollector) = {
330334 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
331335 if ((callerCheck == callerCheck))
332336 then [BinaryEntry(keyFeeCollector, feeCollector)]
333337 else throw("Strict value is not equal to itself.")
334338 }
335339
336340
337341
338342 @Callable(i)
339343 func setValidator (validator) = {
340344 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
341345 if ((callerCheck == callerCheck))
342346 then [BinaryEntry(keyValidator, validator)]
343347 else throw("Strict value is not equal to itself.")
344348 }
345349
346350
347351
348352 @Callable(i)
349353 func startBridge () = {
350354 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
351355 if ((callerCheck == callerCheck))
352356 then [BooleanEntry(keyIsActive, true)]
353357 else throw("Strict value is not equal to itself.")
354358 }
355359
356360
357361
358362 @Callable(i)
359363 func stopBridge () = {
360364 let callerCheck = assertCallerIsManager(i, STOP_MANAGER)
361365 if ((callerCheck == callerCheck))
362366 then [BooleanEntry(keyIsActive, false)]
363367 else throw("Strict value is not equal to itself.")
364368 }
365369
366370
367371
368372 @Callable(i)
369373 func setMinFee (assetId,minFee) = {
370374 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
371375 if ((callerCheck == callerCheck))
372376 then {
373377 let assetIdStr = toBase64String(assetId)
374378 [IntegerEntry((assetIdStr + keyAssetMinFee), minFee)]
375379 }
376380 else throw("Strict value is not equal to itself.")
377381 }
378382
379383
380384
381385 @Callable(i)
382386 func setBaseFeeRate (baseFeeRateBP) = {
383387 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
384388 if ((callerCheck == callerCheck))
385- then [IntegerEntry(ketBaseFeeRateBP, baseFeeRateBP)]
389+ then [IntegerEntry(keyBaseFeeRateBP, baseFeeRateBP)]
386390 else throw("Strict value is not equal to itself.")
387391 }
388392
389393
390394
391395 @Callable(i)
392396 func setAssetState (assetId,state) = {
393397 let callerCheck = assertCallerIsManager(i, BRIDGE_MANAGER)
394398 if ((callerCheck == callerCheck))
395399 then {
396400 let assetIdStr = toBase64String(assetId)
397401 [BooleanEntry((assetIdStr + keyAssetIsActive), state)]
398402 }
399403 else throw("Strict value is not equal to itself.")
400404 }
401405
402406

github/deemru/w8io/3ef1775 
66.17 ms