tx · j97xUAmGW9RbRxMxfnuZFV2eBCY9tWu4BjTcF3x6gbM 3MwHAghvVSNQUvsYHsHSR4tAEYiVarQRrtG: -0.01000000 Waves 2019.10.14 15:57 [719634] smart account 3MwHAghvVSNQUvsYHsHSR4tAEYiVarQRrtG > SELF 0.00000000 Waves
{ "type": 13, "id": "j97xUAmGW9RbRxMxfnuZFV2eBCY9tWu4BjTcF3x6gbM", "fee": 1000000, "feeAssetId": null, "timestamp": 1571057937430, "version": 1, "sender": "3MwHAghvVSNQUvsYHsHSR4tAEYiVarQRrtG", "senderPublicKey": "HSPAMMmqM219QKYupVfBAUubjhXRzmEkPKqGvZWJykXU", "proofs": [ "2H5DoGPdKTRf5Xn4BJT3Yviv1rJbUz6FvMemj2YnQaYdykRsnRGEJWrwSnevnSMmZXfcMtF59sWGkF3Lj9cy5VPY" ], "script": "base64:AAIDAAAAAAAAAEEIARIMCgoICAgBAQEBAQEBEgoKCAgBAQEBAQEBEgASABIDCgEIEgASAwoBCBIAEgMKAQQSABIAEgMKAQQSAwoBBAAAAD0AAAAADGRlcG9zaXRUb2tlbgUAAAAEdW5pdAAAAAANb3JhY2xlRGF0YUtleQIAAAALd2F2ZXNfYnRjXzgAAAAABHRlbjgJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoAAAAAApsZW5kZXJzS2V5AgAAAAdsZW5kZXJzAAAAABFlbmFibGVkTGVuZGVyc0tleQIAAAAOZW5hYmxlZExlbmRlcnMAAAAADmdyYWNlUGVyaW9kS2V5AgAAAAtncmFjZVBlcmlvZAAAAAARaW50ZXJlc3RQZXJpb2RLZXkCAAAADmludGVyZXN0UGVyaW9kAAAAABFidXJuZG93blBlcmlvZEtleQIAAAAOYnVybmRvd25QZXJpb2QAAAAACW9yYWNsZUtleQIAAAAGb3JhY2xlAAAAABVkaXNjb3VudFBlcmNlbnRpbGVLZXkCAAAAEmRpc2NvdW50UGVyY2VudGlsZQAAAAAKbWF4UmF0ZUtleQIAAAAHbWF4UmF0ZQAAAAANYXNzZXRUb2tlbktleQIAAAAKYXNzZXRUb2tlbgAAAAAIYWRtaW5LZXkCAAAABW93bmVyAAAAABdzZXJ2aWNlRmVlUGVyY2VudGlsZUtleQIAAAALc2VydmljZV9mZWUAAAAAC2xlbmRTaXplS2V5AgAAAAlsZW5kX3NpemUAAAAAE2VuYWJsZURlcG9zaXRCdGNLZXkCAAAAEmVuYWJsZV9kZXBvc2l0X2J0YwAAAAARZW5hYmxlTmV3TG9hbnNLZXkCAAAAEGVuYWJsZV9uZXdfbG9hbnMBAAAACnN0YXJ0T2ZLZXkAAAABAAAABnJlbnRlcgkAASwAAAACAgAAAAlzdGFydF9vZl8FAAAABnJlbnRlcgEAAAAPZW5kT2ZHcmFjZU9mS2V5AAAAAQAAAAZyZW50ZXIJAAEsAAAAAgIAAAAQZW5kX29mX2dyYWNlX29mXwUAAAAGcmVudGVyAQAAABJlbmRPZkludGVyZXN0T2ZLZXkAAAABAAAABnJlbnRlcgkAASwAAAACAgAAABNlbmRfb2ZfaW50ZXJlc3Rfb2ZfBQAAAAZyZW50ZXIBAAAAEmVuZE9mQnVybmRvd25PZktleQAAAAEAAAAGcmVudGVyCQABLAAAAAICAAAAE2VuZF9vZl9idXJuZG93bl9vZl8FAAAABnJlbnRlcgEAAAAJcmF0ZU9mS2V5AAAAAQAAAAZyZW50ZXIJAAEsAAAAAgIAAAAIcmF0ZV9vZl8FAAAABnJlbnRlcgEAAAAMZGVwb3NpdE9mS2V5AAAAAQAAAAZyZW50ZXIJAAEsAAAAAgIAAAALZGVwb3NpdF9vZl8FAAAABnJlbnRlcgEAAAAJbGVuZE9mS2V5AAAAAQAAAAZyZW50ZXIJAAEsAAAAAgIAAAAIbGVuZF9vZl8FAAAABnJlbnRlcgEAAAAMbGVuZGVyc09mS2V5AAAAAQAAAAZyZW50ZXIJAAEsAAAAAgIAAAALbGVuZGVyc19vZl8FAAAABnJlbnRlcgEAAAAUY2lyY3VsYXRpbmdBc3NldHNLZXkAAAABAAAABmxlbmRlcgkAASwAAAACAgAAABZjdXJjdWxhdGluZ19hc3NldHNfb2ZfBQAAAAZsZW5kZXIBAAAADm9wZW5MZW5kc09mS2V5AAAAAQAAAAZsZW5kZXIJAAEsAAAAAgIAAAAOb3Blbl9sZW5kc19vZl8FAAAABmxlbmRlcgAAAAAIbGVuZFNpemUJAABoAAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAC2xlbmRTaXplS2V5AgAAAAtubyBsZW5kU2l6ZQUAAAAEdGVuOAAAAAAUbmV3RGVwb3NpdEJ0Y0VuYWJsZWQEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAATZW5hYmxlRGVwb3NpdEJ0Y0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgYAAAAAD25ld0xvYW5zRW5hYmxlZAQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAABFlbmFibGVOZXdMb2Fuc0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgYAAAAADWFsbExlbmRlcnNTdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAAKbGVuZGVyc0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF4BQAAAAckbWF0Y2gwBQAAAAF4AgAAAAAAAAAAEWVuYWJsZWRMZW5kZXJzU3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAEWVuYWJsZWRMZW5kZXJzS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgCAAAAAAAAAAAIb3duZXJTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAhhZG1pbktleQIAAAAITm8gb3duZXIAAAAABW93bmVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAABFhZGRyZXNzRnJvbVN0cmluZwAAAAEFAAAACG93bmVyU3RyAgAAAAhObyBvd25lcgAAAAAKYXNzZXRUb2tlbgkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAANYXNzZXRUb2tlbktleQIAAAAKTm8gYXNzZXRJZAAAAAALZ3JhY2VQZXJpb2QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAA5ncmFjZVBlcmlvZEtleQIAAAAPTm8gZ3JhY2UgcGVyaW9kAAAAAA5pbnRlcmVzdFBlcmlvZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEWludGVyZXN0UGVyaW9kS2V5AgAAABJObyBpbnRlcmVzdCBwZXJpb2QAAAAADmJ1cm5kb3duUGVyaW9kCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAARYnVybmRvd25QZXJpb2RLZXkCAAAAEk5vIGJ1cm5kb3duIHBlcmlvZAAAAAAHbWF4UmF0ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAACm1heFJhdGVLZXkCAAAAE05vIG9yYWNsZSBtYXggdmFsdWUAAAAABm9yYWNsZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACW9yYWNsZUtleQIAAAAJTm8gb3JhY2xlAAAAAAtvcmFjbGVWYWx1ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAAEWFkZHJlc3NGcm9tU3RyaW5nAAAAAQUAAAAGb3JhY2xlAgAAABJiYWQgb3JhY2xlIGFkZHJlc3MFAAAADW9yYWNsZURhdGFLZXkCAAAAD05vIG9yYWNsZSB2YWx1ZQAAAAASZGlzY291bnRQZXJjZW50aWxlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAVZGlzY291bnRQZXJjZW50aWxlS2V5AgAAABZObyBkaXNjb3VudCBwZXJjZW50aWxlAAAAABRzZXJ2aWNlRmVlUGVyY2VudGlsZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAF3NlcnZpY2VGZWVQZXJjZW50aWxlS2V5AgAAABlObyBzZXJ2aWNlIGZlZSBwZXJjZW50aWxlAAAAAARyYXRlAwkAAGcAAAACBQAAAAdtYXhSYXRlBQAAAAtvcmFjbGVWYWx1ZQUAAAALb3JhY2xlVmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAfU3VzcGljaW91cyByYXRlIHZhbHVlOiBhY3R1YWw6IAkAAaQAAAABBQAAAAtvcmFjbGVWYWx1ZQIAAAAHLCBtYXg6IAkAAaQAAAABBQAAAAdtYXhSYXRlAAAAABFtaW5pbWFsTGVuZEFtb3VudAkAAGQAAAACCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAAZAUAAAAEdGVuOAkAAGgAAAACBQAAABJkaXNjb3VudFBlcmNlbnRpbGUFAAAABHJhdGUDCQAAZgAAAAIJAABqAAAAAgkAAGgAAAACAAAAAAAAAABkBQAAAAR0ZW44CQAAaAAAAAIFAAAAEmRpc2NvdW50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AQAAAAhmb2xkRnVuYwAAAAIFAAAADiRhY2MyMDUzMTU1Mzk3CQABkQAAAAIFAAAADSRsaXN0NTMxNTUzOTcAAAAAAAAAABQJAAACAAAAAQIAAAATTGlzdCBzaXplIGV4Y2VlZCAyMAEAAAAVdW5jbGFpbWVkRGlzdHJpYnV0aW9uAAAAAwAAAAV3YXZlcwAAAANidGMAAAAHbGVuZGVycwQAAAAQd2F2ZXNTZXJ2aWNlUGFydAkAAGsAAAADBQAAAAV3YXZlcwUAAAAUc2VydmljZUZlZVBlcmNlbnRpbGUAAAAAAAAAJxAEAAAAD3dhdmVzRGlzdHJpYnV0ZQkAAGUAAAACBQAAAAV3YXZlcwUAAAAQd2F2ZXNTZXJ2aWNlUGFydAQAAAAYbmV3V2F2ZXNTZXJ2aWNlVW5jbGFpbWVkCQAAZAAAAAIJAQAAABN1bmNsYWltZWREZXBvc2l0Rm9yAAAAAQUAAAAIb3duZXJTdHIFAAAAEHdhdmVzU2VydmljZVBhcnQEAAAACmxlbmRlcnNBbXQJAAGQAAAAAQUAAAAHbGVuZGVycwoBAAAACGZvbGRGdW5jAAAAAgAAAAFsAAAABmxlbmRlcgQAAAAMbmV3VW5jbGFpbWVkCQAAZAAAAAIJAQAAABN1bmNsYWltZWREZXBvc2l0Rm9yAAAAAQUAAAAGbGVuZGVyCQAAaQAAAAIFAAAAD3dhdmVzRGlzdHJpYnV0ZQUAAAAKbGVuZGVyc0FtdAQAAAAPbmV3RGVwb3NpdFZhbHVlCQAAZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAQAAABRjaXJjdWxhdGluZ0Fzc2V0c0tleQAAAAEFAAAABmxlbmRlcgkAAGkAAAACBQAAAANidGMFAAAACmxlbmRlcnNBbXQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABZ1bmNsYWltZWREZXBvc2l0Rm9yS2V5AAAAAQUAAAAGbGVuZGVyBQAAAAxuZXdVbmNsYWltZWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRjaXJjdWxhdGluZ0Fzc2V0c0tleQAAAAEFAAAABmxlbmRlcgUAAAAPbmV3RGVwb3NpdFZhbHVlCQAETAAAAAIJAQAAABhkZWNyZW1lbnRPcGVuTGVuZHNBbW91bnQAAAABBQAAAAZsZW5kZXIFAAAAAWwEAAAADSRsaXN0NjE1NzYyNTcFAAAAB2xlbmRlcnMEAAAADSRzaXplNjE1NzYyNTcJAAGQAAAAAQUAAAANJGxpc3Q2MTU3NjI1NwQAAAANJGFjYzA2MTU3NjI1NwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFnVuY2xhaW1lZERlcG9zaXRGb3JLZXkAAAABBQAAAAhvd25lclN0cgUAAAAYbmV3V2F2ZXNTZXJ2aWNlVW5jbGFpbWVkBQAAAANuaWwDCQAAAAAAAAIFAAAADSRzaXplNjE1NzYyNTcAAAAAAAAAAAAFAAAADSRhY2MwNjE1NzYyNTcEAAAADSRhY2MxNjE1NzYyNTcJAQAAAAhmb2xkRnVuYwAAAAIFAAAADSRhY2MwNjE1NzYyNTcJAAGRAAAAAgUAAAANJGxpc3Q2MTU3NjI1NwAAAAAAAAAAAAMJAAAAAAAAAgUAAAANJHNpemU2MTU3NjI1NwAAAAAAAAAAAQUAAAANJGFjYzE2MTU3NjI1NwQAAAANJGFjYzI2MTU3NjI1NwkBAAAACGZvbGRGdW5jAAAAAgUAAAANJGFjYzE2MTU3NjI1NwkAAZEAAAACBQAAAA0kbGlzdDYxNTc2MjU3AAAAAAAAAAABAwkAAAAAAAACBQAAAA0kc2l6ZTYxNTc2MjU3AAAAAAAAAAACBQAAAA0kYWNjMjYxNTc2MjU3BAAAAA0kYWNjMzYxNTc2MjU3CQEAAAAIZm9sZEZ1bmMAAAACBQAAAA0kYWNjMjYxNTc2MjU3CQABkQAAAAIFAAAADSRsaXN0NjE1NzYyNTcAAAAAAAAAAAIDCQAAAAAAAAIFAAAADSRzaXplNjE1NzYyNTcAAAAAAAAAAAMFAAAADSRhY2MzNjE1NzYyNTcEAAAADSRhY2M0NjE1NzYyNTcJAQAAAAhmb2xkRnVuYwAAAAIFAAAADSRhY2MzNjE1NzYyNTcJAAGRAAAAAgUAAAANJGxpc3Q2MTU3NjI1NwAAAAAAAAAAAwMJAAAAAAAAAgUAAAANJHNpemU2MTU3NjI1NwAAAAAAAAAABAUAAAANJGFjYzQ2MTU3NjI1NwQAAAANJGFjYzU2MTU3NjI1NwkBAAAACGZvbGRGdW5jAAAA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dFRva2VuBAAAAApsb2FuQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQEAAAAJbGVuZE9mS2V5AAAAAQUAAAAJcmVudGVyU3RyBAAAAA5kZXBvc2l0ZWRWYWx1ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAADGRlcG9zaXRPZktleQAAAAEFAAAACXJlbnRlclN0cgMJAQAAAAEhAAAAAQUAAAALaGFzT3BlbkxvYW4JAAACAAAAAQIAAAAXTm8gb3BlbiBsb2FuIGZvciBjYWxsZXIDCQEAAAABIQAAAAEFAAAADmlzVG9rZW5Db3JyZWN0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAF1VzZXIgbXVzdCByZXR1cm4gV0JUQzogCQACWAAAAAEFAAAACmFzc2V0VG9rZW4CAAAAECBidXQgcmV0dXJuaW5nOiAJAAJYAAAAAQUAAAANcmV0dXJuQXNzZXRJZAQAAAAKZW5kT2ZHcmFjZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAAD2VuZE9mR3JhY2VPZktleQAAAAEFAAAACXJlbnRlclN0cgQAAAANZW5kT2ZCdXJuZG93bgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAAEmVuZE9mQnVybmRvd25PZktleQAAAAEFAAAACXJlbnRlclN0cgQAAAANZW5kT2ZJbnRlcmVzdAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAAEmVuZE9mSW50ZXJlc3RPZktleQAAAAEFAAAACXJlbnRlclN0cgQAAAATY2FuUmV0dXJuRnVsbEFtb3VudAkAAGcAAAACBQAAAAplbmRPZkdyYWNlBQAAAAZoZWlnaHQEAAAAFHJldHVybnNUaGVTYW1lQW1vdW50CQAAZwAAAAIFAAAACmVuZE9mR3JhY2UFAAAABmhlaWdodAMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAA1lbmRPZkludGVyZXN0CQAAAgAAAAECAAAAFXlvdXIgbG9hbiBoYXMgZXhwaXJlZAQAAAANbGVuZGVyc1Byb2ZpdAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAplbmRPZkdyYWNlCQAAawAAAAMFAAAACmxvYW5BbW91bnQJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAAplbmRPZkdyYWNlCQAAZQAAAAIFAAAADWVuZE9mQnVybmRvd24FAAAACmVuZE9mR3JhY2UAAAAAAAAAAAAEAAAADnJlcXVpcmVkQW1vdW50AwUAAAAUcmV0dXJuc1RoZVNhbWVBbW91bnQFAAAACmxvYW5BbW91bnQJAABkAAAAAgUAAAAKbG9hbkFtb3VudAUAAAANbGVuZGVyc1Byb2ZpdAQAAAAVaXNSZXR1cm5BbW91bnRDb3JyZWN0CQAAZwAAAAIFAAAACXJldHVybkFtdAUAAAAOcmVxdWlyZWRBbW91bnQEAAAAE2lzUmV0dXJuQW1vdW50RXhhY3QJAAAAAAAAAgUAAAAJcmV0dXJuQW10BQAAAA5yZXF1aXJlZEFtb3VudAMJAQAAAAEhAAAAAQUAAAAVaXNSZXR1cm5BbW91bnRDb3JyZWN0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEVVzZXIgbXVzdCByZXR1cm4gCQABpAAAAAEFAAAACmxvYW5BbW91bnQCAAAAGSBzYXRvc2hpcywgYnV0IHJldHVybmluZyAJAAGkAAAAAQUAAAAJcmV0dXJuQW10BAAAAAtkZXBvc2l0QmFjawkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGcmVudGVyBQAAAA5kZXBvc2l0ZWRWYWx1ZQUAAAAMZGVwb3NpdFRva2VuBAAAABJleGNlc3NSZXR1cm5BbW91bnQJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABnJlbnRlcgkAAGUAAAACBQAAAAlyZXR1cm5BbXQFAAAADnJlcXVpcmVkQW1vdW50BQAAAAphc3NldFRva2VuBAAAAAl0cmFuc2ZlcnMDBQAAABNpc1JldHVybkFtb3VudEV4YWN0CQAETAAAAAIFAAAAC2RlcG9zaXRCYWNrBQAAAANuaWwJAARMAAAAAgUAAAALZGVwb3NpdEJhY2sJAARMAAAAAgUAAAASZXhjZXNzUmV0dXJuQW1vdW50BQAAAANuaWwEAAAAB2xlbmRlcnMJAAS1AAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAAAxsZW5kZXJzT2ZLZXkAAAABBQAAAAlyZW50ZXJTdHICAAAAG05vIGxlbmRlcnMgZm9yIGFuIG9wZW4gbG9hbgIAAAABfAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAdjbG9zaW5nAAAABQUAAAAJcmVudGVyU3RyAAAAAAAAAAAABQAAAA1sZW5kZXJzUHJvZml0BgUAAAAHbGVuZGVycwkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAJdHJhbnNmZXJzAQAAAANhZGQAAAACAAAAB2xlbmRlcnMAAAAGbGVuZGVyAwkAAAAAAAACBQAAAAdsZW5kZXJzAgAAAAAFAAAABmxlbmRlcgkAASwAAAACCQABLAAAAAIFAAAAB2xlbmRlcnMCAAAAAXwFAAAABmxlbmRlcgEAAAAGcmVtb3ZlAAAAAgAAAAdsZW5kZXJzAAAABmxlbmRlcgQAAAADYXJyCQAEtQAAAAIFAAAAB2xlbmRlcnMCAAAAAXwKAQAAAAhmb2xkRnVuYwAAAAIAAAADYWNjAAAABGl0ZW0DCQAAAAAAAAIFAAAABGl0ZW0FAAAABmxlbmRlcgUAAAADYWNjCQEAAAADYWRkAAAAAgUAAAADYWNjBQAAAARpdGVtBAAAAA8kbGlzdDEwMDI4MTAwNTUFAAAAA2FycgQAAAAPJHNpemUxMDAyODEwMDU1CQABkAAAAAEFAAAADyRsaXN0MTAwMjgxMDA1NQQAAAAPJGFjYzAxMDAyODEwMDU1AgAAAAADCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAAAAUAAAAPJGFjYzAxMDAyODEwMDU1BAAAAA8kYWNjMTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2MwMTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAAAQUAAAAPJGFjYzExMDAyODEwMDU1BAAAAA8kYWNjMjEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2MxMTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAEDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAAAgUAAAAPJGFjYzIxMDAyODEwMDU1BAAAAA8kYWNjMzEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2MyMTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAIDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAAAwUAAAAPJGFjYzMxMDAyODEwMDU1BAAAAA8kYWNjNDEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2MzMTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAABAUAAAAPJGFjYzQxMDAyODEwMDU1BAAAAA8kYWNjNTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2M0MTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAQDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAABQUAAAAPJGFjYzUxMDAyODEwMDU1BAAAAA8kYWNjNjEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2M1MTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAUDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAABgUAAAAPJGFjYzYxMDAyODEwMDU1BAAAAA8kYWNjNzEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2M2MTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAYDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAABwUAAAAPJGFjYzcxMDAyODEwMDU1BAAAAA8kYWNjODEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2M3MTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAcDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAACAUAAAAPJGFjYzgxMDAyODEwMDU1BAAAAA8kYWNjOTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAADyRhY2M4MTAwMjgxMDA1NQkAAZEAAAACBQAAAA8kbGlzdDEwMDI4MTAwNTUAAAAAAAAAAAgDCQAAAAAAAAIFAAAADyRzaXplMTAwMjgxMDA1NQAAAAAAAAAACQUAAAAPJGFjYzkxMDAyODEwMDU1BAAAABAkYWNjMTAxMDAyODEwMDU1CQEAAAAIZm9sZEZ1bmMAAAACBQAAAA8kYWNjOTEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAJAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAAAoFAAAAECRhY2MxMDEwMDI4MTAwNTUEAAAAECRhY2MxMTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxMDEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAKAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAAAsFAAAAECRhY2MxMTEwMDI4MTAwNTUEAAAAECRhY2MxMjEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxMTEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAALAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAAAwFAAAAECRhY2MxMjEwMDI4MTAwNTUEAAAAECRhY2MxMzEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxMjEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAMAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAAA0FAAAAECRhY2MxMzEwMDI4MTAwNTUEAAAAECRhY2MxNDEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxMzEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAANAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAAA4FAAAAECRhY2MxNDEwMDI4MTAwNTUEAAAAECRhY2MxNTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxNDEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAOAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAAA8FAAAAECRhY2MxNTEwMDI4MTAwNTUEAAAAECRhY2MxNjEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxNTEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAPAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAABAFAAAAECRhY2MxNjEwMDI4MTAwNTUEAAAAECRhY2MxNzEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxNjEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAQAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAABEFAAAAECRhY2MxNzEwMDI4MTAwNTUEAAAAECRhY2MxODEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxNzEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAARAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAABIFAAAAECRhY2MxODEwMDI4MTAwNTUEAAAAECRhY2MxOTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxODEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAASAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAABMFAAAAECRhY2MxOTEwMDI4MTAwNTUEAAAAECRhY2MyMDEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MxOTEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAATAwkAAAAAAAACBQAAAA8kc2l6ZTEwMDI4MTAwNTUAAAAAAAAAABQFAAAAECRhY2MyMDEwMDI4MTAwNTUEAAAAECRhY2MyMTEwMDI4MTAwNTUJAQAAAAhmb2xkRnVuYwAAAAIFAAAAECRhY2MyMDEwMDI4MTAwNTUJAAGRAAAAAgUAAAAPJGxpc3QxMDAyODEwMDU1AAAAAAAAAAAUCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWQgMjABAAAADGRvVGFrZVByb2ZpdAAAAAEAAAAGbGVuZGVyBAAAAANzdHIJAAJYAAAAAQgFAAAABmxlbmRlcgAAAAVieXRlcwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAAxwcm9maXRGb3JLZXkAAAABBQAAAANzdHIAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABZ1bmNsYWltZWREZXBvc2l0Rm9yS2V5AAAAAQUAAAADc3RyAAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGbGVuZGVyCQEAAAAJcHJvZml0Rm9yAAAAAQUAAAADc3RyBQAAAAphc3NldFRva2VuCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABmxlbmRlcgkBAAAAE3VuY2xhaW1lZERlcG9zaXRGb3IAAAABBQAAAANzdHIFAAAADGRlcG9zaXRUb2tlbgUAAAADbmlsAAAADQAAAAFpAQAAAARpbml0AAAACgAAAAVvd25lcgAAAAV0b2tlbgAAAAZvcmFjbGUAAAAHbWF4UmF0ZQAAAAhkaXNjb3VudAAAAAVncmFjZQAAAAhpbnRlcmVzdAAAAAhidXJuZG93bgAAAApzZXJ2aWNlRmVlAAAACGxlbmRTaXplAwkAAGYAAAACBQAAAAhpbnRlcmVzdAUAAAAIYnVybmRvd24JAAACAAAAAQIAAAAqaW50ZXJlc3QgbXVzdCBiZSBsZXNzIG9yIGVxdWFsIHRvIGJ1cm5kb3duAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAGW9ubHkgZGFwcCBpdHNlbGYgY2FuIGluaXQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACGFkbWluS2V5BQAAAAVvd25lcgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAANYXNzZXRUb2tlbktleQUAAAAFdG9rZW4JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACW9yYWNsZUtleQUAAAAGb3JhY2xlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAptYXhSYXRlS2V5BQAAAAdtYXhSYXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABVkaXNjb3VudFBlcmNlbnRpbGVLZXkFAAAACGRpc2NvdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5ncmFjZVBlcmlvZEtleQUAAAAFZ3JhY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEWludGVyZXN0UGVyaW9kS2V5BQAAAAhpbnRlcmVzdAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARYnVybmRvd25QZXJpb2RLZXkFAAAACGJ1cm5kb3duCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABdzZXJ2aWNlRmVlUGVyY2VudGlsZUtleQUAAAAKc2VydmljZUZlZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAALbGVuZFNpemVLZXkFAAAACGxlbmRTaXplBQAAAANuaWwAAAABaQEAAAAMdXBkYXRlUGFyYW1zAAAACAAAAAZvcmFjbGUAAAAHbWF4UmF0ZQAAAAhkaXNjb3VudAAAAAVncmFjZQAAAAhpbnRlcmVzdAAAAAhidXJuZG93bgAAAApzZXJ2aWNlRmVlAAAACGxlbmRTaXplAwkAAGYAAAACBQAAAAhpbnRlcmVzdAUAAAAIYnVybmRvd24JAAACAAAAAQIAAAAqaW50ZXJlc3QgbXVzdCBiZSBsZXNzIG9yIGVxdWFsIHRvIGJ1cm5kb3duAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAVvd25lcgkAAAIAAAABAgAAABxvbmx5IG93bmVyIGNhbiB1cGRhdGUgcGFyYW1zCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAlvcmFjbGVLZXkFAAAABm9yYWNsZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAKbWF4UmF0ZUtleQUAAAAHbWF4UmF0ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAVZGlzY291bnRQZXJjZW50aWxlS2V5BQAAAAhkaXNjb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAOZ3JhY2VQZXJpb2RLZXkFAAAABWdyYWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFpbnRlcmVzdFBlcmlvZEtleQUAAAAIaW50ZXJlc3QJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEWJ1cm5kb3duUGVyaW9kS2V5BQAAAAhidXJuZG93bgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAXc2VydmljZUZlZVBlcmNlbnRpbGVLZXkFAAAACnNlcnZpY2VGZWUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAC2xlbmRTaXplS2V5BQAAAAhsZW5kU2l6ZQUAAAADbmlsAAAAAWkBAAAABmJvcnJvdwAAAAAEAAAABnJlbnRlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAASEAAAABBQAAAA9uZXdMb2Fuc0VuYWJsZWQJAAACAAAAAQIAAAAeTmV3IGxvYW5zIHRlbXBvcmFyaWx5IGRpc2FibGVkAwkBAAAACmlzTGVuZE9wZW4AAAABBQAAAAZyZW50ZXIJAAACAAAAAQkAASwAAAACBQAAAAZyZW50ZXICAAAAGSBhbHJlYWR5IGhhcyBhbiBvcGVuIGxvYW4EAAAAByRtYXRjaDAIBQAAAAFpAAAAB3BheW1lbnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAD0F0dGFjaGVkUGF5bWVudAQAAAABYQUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWEAAAAHYXNzZXRJZAUAAAAMZGVwb3NpdFRva2VuBAAAAA1jdXJyZW50SGVpZ2h0BQAAAAZoZWlnaHQEAAAACmVuZE9mR3JhY2UJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAtncmFjZVBlcmlvZAQAAAANZW5kT2ZJbnRlcmVzdAkAAGQAAAACBQAAAAplbmRPZkdyYWNlBQAAAA5pbnRlcmVzdFBlcmlvZAQAAAANZW5kT2ZCdXJuZG93bgkAAGQAAAACBQAAAAplbmRPZkdyYWNlBQAAAA5idXJuZG93blBlcmlvZAQAAAANZGVwb3NpdEFtb3VudAgFAAAAAWEAAAAGYW1vdW50BAAAAA9hc3NldFRva2Vuc0xlbnQJAABrAAAAAwUAAAANZGVwb3NpdEFtb3VudAkAAGgAAAACBQAAAARyYXRlBQAAABJkaXNjb3VudFBlcmNlbnRpbGUJAABoAAAAAgUAAAAEdGVuOAAAAAAAAAAAZAMJAABmAAAAAgUAAAAPYXNzZXRUb2tlbnNMZW50AAAAAAAAAAAABAAAAAVkYXRhcwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAACnN0YXJ0T2ZLZXkAAAABBQAAAAZyZW50ZXIFAAAADWN1cnJlbnRIZWlnaHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9lbmRPZkdyYWNlT2ZLZXkAAAABBQAAAAZyZW50ZXIFAAAACmVuZE9mR3JhY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJlbmRPZkludGVyZXN0T2ZLZXkAAAABBQAAAAZyZW50ZXIFAAAADWVuZE9mSW50ZXJlc3QJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJlbmRPZkJ1cm5kb3duT2ZLZXkAAAABBQAAAAZyZW50ZXIFAAAADWVuZE9mQnVybmRvd24JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJ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", "chainId": 84, "height": 719634, "spentComplexity": 0 } View: original | compacted Prev: none Next: 5SszvmW9JPJ6wRwx158JBG2RzUDSMdvVR8zaAZ8R5Kdi Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let depositToken = unit | |
5 | + | ||
6 | + | let oracleDataKey = "waves_btc_8" | |
7 | + | ||
8 | + | let ten8 = ((100 * 1000) * 1000) | |
9 | + | ||
10 | + | let lendersKey = "lenders" | |
11 | + | ||
12 | + | let enabledLendersKey = "enabledLenders" | |
13 | + | ||
14 | + | let gracePeriodKey = "gracePeriod" | |
15 | + | ||
16 | + | let interestPeriodKey = "interestPeriod" | |
17 | + | ||
18 | + | let burndownPeriodKey = "burndownPeriod" | |
19 | + | ||
20 | + | let oracleKey = "oracle" | |
21 | + | ||
22 | + | let discountPercentileKey = "discountPercentile" | |
23 | + | ||
24 | + | let maxRateKey = "maxRate" | |
25 | + | ||
26 | + | let assetTokenKey = "assetToken" | |
27 | + | ||
28 | + | let adminKey = "owner" | |
29 | + | ||
30 | + | let serviceFeePercentileKey = "service_fee" | |
31 | + | ||
32 | + | let lendSizeKey = "lend_size" | |
33 | + | ||
34 | + | let enableDepositBtcKey = "enable_deposit_btc" | |
35 | + | ||
36 | + | let enableNewLoansKey = "enable_new_loans" | |
37 | + | ||
38 | + | func startOfKey (renter) = ("start_of_" + renter) | |
39 | + | ||
40 | + | ||
41 | + | func endOfGraceOfKey (renter) = ("end_of_grace_of_" + renter) | |
42 | + | ||
43 | + | ||
44 | + | func endOfInterestOfKey (renter) = ("end_of_interest_of_" + renter) | |
45 | + | ||
46 | + | ||
47 | + | func endOfBurndownOfKey (renter) = ("end_of_burndown_of_" + renter) | |
48 | + | ||
49 | + | ||
50 | + | func rateOfKey (renter) = ("rate_of_" + renter) | |
51 | + | ||
52 | + | ||
53 | + | func depositOfKey (renter) = ("deposit_of_" + renter) | |
54 | + | ||
55 | + | ||
56 | + | func lendOfKey (renter) = ("lend_of_" + renter) | |
57 | + | ||
58 | + | ||
59 | + | func lendersOfKey (renter) = ("lenders_of_" + renter) | |
60 | + | ||
61 | + | ||
62 | + | func circulatingAssetsKey (lender) = ("curculating_assets_of_" + lender) | |
63 | + | ||
64 | + | ||
65 | + | func openLendsOfKey (lender) = ("open_lends_of_" + lender) | |
66 | + | ||
67 | + | ||
68 | + | let lendSize = (valueOrErrorMessage(getInteger(this, lendSizeKey), "no lendSize") * ten8) | |
69 | + | ||
70 | + | let newDepositBtcEnabled = match getBoolean(this, enableDepositBtcKey) { | |
71 | + | case b: Boolean => | |
72 | + | b | |
73 | + | case _ => | |
74 | + | true | |
75 | + | } | |
76 | + | ||
77 | + | let newLoansEnabled = match getBoolean(this, enableNewLoansKey) { | |
78 | + | case b: Boolean => | |
79 | + | b | |
80 | + | case _ => | |
81 | + | true | |
82 | + | } | |
83 | + | ||
84 | + | let allLendersStr = match getString(this, lendersKey) { | |
85 | + | case x: String => | |
86 | + | x | |
87 | + | case _ => | |
88 | + | "" | |
89 | + | } | |
90 | + | ||
91 | + | let enabledLendersStr = match getString(this, enabledLendersKey) { | |
92 | + | case x: String => | |
93 | + | x | |
94 | + | case _ => | |
95 | + | "" | |
96 | + | } | |
97 | + | ||
98 | + | let ownerStr = valueOrErrorMessage(getString(this, adminKey), "No owner") | |
99 | + | ||
100 | + | let owner = valueOrErrorMessage(addressFromString(ownerStr), "No owner") | |
101 | + | ||
102 | + | let assetToken = fromBase58String(valueOrErrorMessage(getString(this, assetTokenKey), "No assetId")) | |
103 | + | ||
104 | + | let gracePeriod = valueOrErrorMessage(getInteger(this, gracePeriodKey), "No grace period") | |
105 | + | ||
106 | + | let interestPeriod = valueOrErrorMessage(getInteger(this, interestPeriodKey), "No interest period") | |
107 | + | ||
108 | + | let burndownPeriod = valueOrErrorMessage(getInteger(this, burndownPeriodKey), "No burndown period") | |
109 | + | ||
110 | + | let maxRate = valueOrErrorMessage(getInteger(this, maxRateKey), "No oracle max value") | |
111 | + | ||
112 | + | let oracle = valueOrErrorMessage(getString(this, oracleKey), "No oracle") | |
113 | + | ||
114 | + | let oracleValue = valueOrErrorMessage(getInteger(valueOrErrorMessage(addressFromString(oracle), "bad oracle address"), oracleDataKey), "No oracle value") | |
115 | + | ||
116 | + | let discountPercentile = valueOrErrorMessage(getInteger(this, discountPercentileKey), "No discount percentile") | |
117 | + | ||
118 | + | let serviceFeePercentile = valueOrErrorMessage(getInteger(this, serviceFeePercentileKey), "No service fee percentile") | |
119 | + | ||
120 | + | let rate = if ((maxRate >= oracleValue)) | |
121 | + | then oracleValue | |
122 | + | else throw(((("Suspicious rate value: actual: " + toString(oracleValue)) + ", max: ") + toString(maxRate))) | |
123 | + | ||
124 | + | let minimalLendAmount = (((100 * ten8) / (discountPercentile * rate)) + (if ((((100 * ten8) % (discountPercentile * rate)) > 0)) | |
125 | + | then 1 | |
126 | + | else 0)) | |
127 | + | ||
128 | + | let initialized = isDefined(getString(this, assetTokenKey)) | |
129 | + | ||
130 | + | func isLendOpen (renter) = match getInteger(this, startOfKey(renter)) { | |
131 | + | case s: Int => | |
132 | + | (s > 0) | |
133 | + | case _ => | |
134 | + | false | |
135 | + | } | |
136 | + | ||
137 | + | ||
138 | + | func profitForKey (s) = ("profit_for_" + s) | |
139 | + | ||
140 | + | ||
141 | + | func profitFor (r) = match getInteger(this, profitForKey(r)) { | |
142 | + | case i: Int => | |
143 | + | i | |
144 | + | case _ => | |
145 | + | 0 | |
146 | + | } | |
147 | + | ||
148 | + | ||
149 | + | func unclaimedDepositForKey (s) = ("unclaimied_for_" + s) | |
150 | + | ||
151 | + | ||
152 | + | func unclaimedDepositFor (r) = match getInteger(this, unclaimedDepositForKey(r)) { | |
153 | + | case i: Int => | |
154 | + | i | |
155 | + | case _ => | |
156 | + | 0 | |
157 | + | } | |
158 | + | ||
159 | + | ||
160 | + | func decrementOpenLendsAmount (lender) = { | |
161 | + | let cur = valueOrErrorMessage(getInteger(this, openLendsOfKey(lender)), "must have open lends at the moment") | |
162 | + | DataEntry(openLendsOfKey(lender), (cur - 1)) | |
163 | + | } | |
164 | + | ||
165 | + | ||
166 | + | func incrementOpenLends () = { | |
167 | + | func foldFunc (acc,s) = { | |
168 | + | let cur = match getInteger(this, openLendsOfKey(s)) { | |
169 | + | case x: Int => | |
170 | + | x | |
171 | + | case _ => | |
172 | + | 0 | |
173 | + | } | |
174 | + | DataEntry(openLendsOfKey(s), (cur + 1)) :: acc | |
175 | + | } | |
176 | + | ||
177 | + | let $list47564808 = split(enabledLendersStr, "|") | |
178 | + | let $size47564808 = size($list47564808) | |
179 | + | let $acc047564808 = nil | |
180 | + | if (($size47564808 == 0)) | |
181 | + | then $acc047564808 | |
182 | + | else { | |
183 | + | let $acc147564808 = foldFunc($acc047564808, $list47564808[0]) | |
184 | + | if (($size47564808 == 1)) | |
185 | + | then $acc147564808 | |
186 | + | else { | |
187 | + | let $acc247564808 = foldFunc($acc147564808, $list47564808[1]) | |
188 | + | if (($size47564808 == 2)) | |
189 | + | then $acc247564808 | |
190 | + | else { | |
191 | + | let $acc347564808 = foldFunc($acc247564808, $list47564808[2]) | |
192 | + | if (($size47564808 == 3)) | |
193 | + | then $acc347564808 | |
194 | + | else { | |
195 | + | let $acc447564808 = foldFunc($acc347564808, $list47564808[3]) | |
196 | + | if (($size47564808 == 4)) | |
197 | + | then $acc447564808 | |
198 | + | else { | |
199 | + | let $acc547564808 = foldFunc($acc447564808, $list47564808[4]) | |
200 | + | if (($size47564808 == 5)) | |
201 | + | then $acc547564808 | |
202 | + | else { | |
203 | + | let $acc647564808 = foldFunc($acc547564808, $list47564808[5]) | |
204 | + | if (($size47564808 == 6)) | |
205 | + | then $acc647564808 | |
206 | + | else { | |
207 | + | let $acc747564808 = foldFunc($acc647564808, $list47564808[6]) | |
208 | + | if (($size47564808 == 7)) | |
209 | + | then $acc747564808 | |
210 | + | else { | |
211 | + | let $acc847564808 = foldFunc($acc747564808, $list47564808[7]) | |
212 | + | if (($size47564808 == 8)) | |
213 | + | then $acc847564808 | |
214 | + | else { | |
215 | + | let $acc947564808 = foldFunc($acc847564808, $list47564808[8]) | |
216 | + | if (($size47564808 == 9)) | |
217 | + | then $acc947564808 | |
218 | + | else { | |
219 | + | let $acc1047564808 = foldFunc($acc947564808, $list47564808[9]) | |
220 | + | if (($size47564808 == 10)) | |
221 | + | then $acc1047564808 | |
222 | + | else { | |
223 | + | let $acc1147564808 = foldFunc($acc1047564808, $list47564808[10]) | |
224 | + | if (($size47564808 == 11)) | |
225 | + | then $acc1147564808 | |
226 | + | else { | |
227 | + | let $acc1247564808 = foldFunc($acc1147564808, $list47564808[11]) | |
228 | + | if (($size47564808 == 12)) | |
229 | + | then $acc1247564808 | |
230 | + | else { | |
231 | + | let $acc1347564808 = foldFunc($acc1247564808, $list47564808[12]) | |
232 | + | if (($size47564808 == 13)) | |
233 | + | then $acc1347564808 | |
234 | + | else { | |
235 | + | let $acc1447564808 = foldFunc($acc1347564808, $list47564808[13]) | |
236 | + | if (($size47564808 == 14)) | |
237 | + | then $acc1447564808 | |
238 | + | else { | |
239 | + | let $acc1547564808 = foldFunc($acc1447564808, $list47564808[14]) | |
240 | + | if (($size47564808 == 15)) | |
241 | + | then $acc1547564808 | |
242 | + | else { | |
243 | + | let $acc1647564808 = foldFunc($acc1547564808, $list47564808[15]) | |
244 | + | if (($size47564808 == 16)) | |
245 | + | then $acc1647564808 | |
246 | + | else { | |
247 | + | let $acc1747564808 = foldFunc($acc1647564808, $list47564808[16]) | |
248 | + | if (($size47564808 == 17)) | |
249 | + | then $acc1747564808 | |
250 | + | else { | |
251 | + | let $acc1847564808 = foldFunc($acc1747564808, $list47564808[17]) | |
252 | + | if (($size47564808 == 18)) | |
253 | + | then $acc1847564808 | |
254 | + | else { | |
255 | + | let $acc1947564808 = foldFunc($acc1847564808, $list47564808[18]) | |
256 | + | if (($size47564808 == 19)) | |
257 | + | then $acc1947564808 | |
258 | + | else { | |
259 | + | let $acc2047564808 = foldFunc($acc1947564808, $list47564808[19]) | |
260 | + | if (($size47564808 == 20)) | |
261 | + | then $acc2047564808 | |
262 | + | else { | |
263 | + | let $acc2147564808 = foldFunc($acc2047564808, $list47564808[20]) | |
264 | + | throw("List size exceed 20") | |
265 | + | } | |
266 | + | } | |
267 | + | } | |
268 | + | } | |
269 | + | } | |
270 | + | } | |
271 | + | } | |
272 | + | } | |
273 | + | } | |
274 | + | } | |
275 | + | } | |
276 | + | } | |
277 | + | } | |
278 | + | } | |
279 | + | } | |
280 | + | } | |
281 | + | } | |
282 | + | } | |
283 | + | } | |
284 | + | } | |
285 | + | } | |
286 | + | } | |
287 | + | ||
288 | + | ||
289 | + | func profitDistribution (btc,lenders) = { | |
290 | + | let servicePart = fraction(btc, serviceFeePercentile, 10000) | |
291 | + | let distribute = (btc - servicePart) | |
292 | + | let newServiceProfit = (profitFor(ownerStr) + servicePart) | |
293 | + | let lendersAmt = size(lenders) | |
294 | + | func foldFunc (l,lender) = { | |
295 | + | let newProfit = (profitFor(lender) + (distribute / lendersAmt)) | |
296 | + | [DataEntry(profitForKey(lender), newProfit), decrementOpenLendsAmount(lender)] :: l | |
297 | + | } | |
298 | + | ||
299 | + | let $list53155397 = lenders | |
300 | + | let $size53155397 = size($list53155397) | |
301 | + | let $acc053155397 = [DataEntry(profitForKey(ownerStr), newServiceProfit)] | |
302 | + | if (($size53155397 == 0)) | |
303 | + | then $acc053155397 | |
304 | + | else { | |
305 | + | let $acc153155397 = foldFunc($acc053155397, $list53155397[0]) | |
306 | + | if (($size53155397 == 1)) | |
307 | + | then $acc153155397 | |
308 | + | else { | |
309 | + | let $acc253155397 = foldFunc($acc153155397, $list53155397[1]) | |
310 | + | if (($size53155397 == 2)) | |
311 | + | then $acc253155397 | |
312 | + | else { | |
313 | + | let $acc353155397 = foldFunc($acc253155397, $list53155397[2]) | |
314 | + | if (($size53155397 == 3)) | |
315 | + | then $acc353155397 | |
316 | + | else { | |
317 | + | let $acc453155397 = foldFunc($acc353155397, $list53155397[3]) | |
318 | + | if (($size53155397 == 4)) | |
319 | + | then $acc453155397 | |
320 | + | else { | |
321 | + | let $acc553155397 = foldFunc($acc453155397, $list53155397[4]) | |
322 | + | if (($size53155397 == 5)) | |
323 | + | then $acc553155397 | |
324 | + | else { | |
325 | + | let $acc653155397 = foldFunc($acc553155397, $list53155397[5]) | |
326 | + | if (($size53155397 == 6)) | |
327 | + | then $acc653155397 | |
328 | + | else { | |
329 | + | let $acc753155397 = foldFunc($acc653155397, $list53155397[6]) | |
330 | + | if (($size53155397 == 7)) | |
331 | + | then $acc753155397 | |
332 | + | else { | |
333 | + | let $acc853155397 = foldFunc($acc753155397, $list53155397[7]) | |
334 | + | if (($size53155397 == 8)) | |
335 | + | then $acc853155397 | |
336 | + | else { | |
337 | + | let $acc953155397 = foldFunc($acc853155397, $list53155397[8]) | |
338 | + | if (($size53155397 == 9)) | |
339 | + | then $acc953155397 | |
340 | + | else { | |
341 | + | let $acc1053155397 = foldFunc($acc953155397, $list53155397[9]) | |
342 | + | if (($size53155397 == 10)) | |
343 | + | then $acc1053155397 | |
344 | + | else { | |
345 | + | let $acc1153155397 = foldFunc($acc1053155397, $list53155397[10]) | |
346 | + | if (($size53155397 == 11)) | |
347 | + | then $acc1153155397 | |
348 | + | else { | |
349 | + | let $acc1253155397 = foldFunc($acc1153155397, $list53155397[11]) | |
350 | + | if (($size53155397 == 12)) | |
351 | + | then $acc1253155397 | |
352 | + | else { | |
353 | + | let $acc1353155397 = foldFunc($acc1253155397, $list53155397[12]) | |
354 | + | if (($size53155397 == 13)) | |
355 | + | then $acc1353155397 | |
356 | + | else { | |
357 | + | let $acc1453155397 = foldFunc($acc1353155397, $list53155397[13]) | |
358 | + | if (($size53155397 == 14)) | |
359 | + | then $acc1453155397 | |
360 | + | else { | |
361 | + | let $acc1553155397 = foldFunc($acc1453155397, $list53155397[14]) | |
362 | + | if (($size53155397 == 15)) | |
363 | + | then $acc1553155397 | |
364 | + | else { | |
365 | + | let $acc1653155397 = foldFunc($acc1553155397, $list53155397[15]) | |
366 | + | if (($size53155397 == 16)) | |
367 | + | then $acc1653155397 | |
368 | + | else { | |
369 | + | let $acc1753155397 = foldFunc($acc1653155397, $list53155397[16]) | |
370 | + | if (($size53155397 == 17)) | |
371 | + | then $acc1753155397 | |
372 | + | else { | |
373 | + | let $acc1853155397 = foldFunc($acc1753155397, $list53155397[17]) | |
374 | + | if (($size53155397 == 18)) | |
375 | + | then $acc1853155397 | |
376 | + | else { | |
377 | + | let $acc1953155397 = foldFunc($acc1853155397, $list53155397[18]) | |
378 | + | if (($size53155397 == 19)) | |
379 | + | then $acc1953155397 | |
380 | + | else { | |
381 | + | let $acc2053155397 = foldFunc($acc1953155397, $list53155397[19]) | |
382 | + | if (($size53155397 == 20)) | |
383 | + | then $acc2053155397 | |
384 | + | else { | |
385 | + | let $acc2153155397 = foldFunc($acc2053155397, $list53155397[20]) | |
386 | + | throw("List size exceed 20") | |
387 | + | } | |
388 | + | } | |
389 | + | } | |
390 | + | } | |
391 | + | } | |
392 | + | } | |
393 | + | } | |
394 | + | } | |
395 | + | } | |
396 | + | } | |
397 | + | } | |
398 | + | } | |
399 | + | } | |
400 | + | } | |
401 | + | } | |
402 | + | } | |
403 | + | } | |
404 | + | } | |
405 | + | } | |
406 | + | } | |
407 | + | } | |
408 | + | } | |
409 | + | ||
410 | + | ||
411 | + | func unclaimedDistribution (waves,btc,lenders) = { | |
412 | + | let wavesServicePart = fraction(waves, serviceFeePercentile, 10000) | |
413 | + | let wavesDistribute = (waves - wavesServicePart) | |
414 | + | let newWavesServiceUnclaimed = (unclaimedDepositFor(ownerStr) + wavesServicePart) | |
415 | + | let lendersAmt = size(lenders) | |
416 | + | func foldFunc (l,lender) = { | |
417 | + | let newUnclaimed = (unclaimedDepositFor(lender) + (wavesDistribute / lendersAmt)) | |
418 | + | let newDepositValue = (getIntegerValue(this, circulatingAssetsKey(lender)) - (btc / lendersAmt)) | |
419 | + | [DataEntry(unclaimedDepositForKey(lender), newUnclaimed), DataEntry(circulatingAssetsKey(lender), newDepositValue), decrementOpenLendsAmount(lender)] :: l | |
420 | + | } | |
421 | + | ||
422 | + | let $list61576257 = lenders | |
423 | + | let $size61576257 = size($list61576257) | |
424 | + | let $acc061576257 = [DataEntry(unclaimedDepositForKey(ownerStr), newWavesServiceUnclaimed)] | |
425 | + | if (($size61576257 == 0)) | |
426 | + | then $acc061576257 | |
427 | + | else { | |
428 | + | let $acc161576257 = foldFunc($acc061576257, $list61576257[0]) | |
429 | + | if (($size61576257 == 1)) | |
430 | + | then $acc161576257 | |
431 | + | else { | |
432 | + | let $acc261576257 = foldFunc($acc161576257, $list61576257[1]) | |
433 | + | if (($size61576257 == 2)) | |
434 | + | then $acc261576257 | |
435 | + | else { | |
436 | + | let $acc361576257 = foldFunc($acc261576257, $list61576257[2]) | |
437 | + | if (($size61576257 == 3)) | |
438 | + | then $acc361576257 | |
439 | + | else { | |
440 | + | let $acc461576257 = foldFunc($acc361576257, $list61576257[3]) | |
441 | + | if (($size61576257 == 4)) | |
442 | + | then $acc461576257 | |
443 | + | else { | |
444 | + | let $acc561576257 = foldFunc($acc461576257, $list61576257[4]) | |
445 | + | if (($size61576257 == 5)) | |
446 | + | then $acc561576257 | |
447 | + | else { | |
448 | + | let $acc661576257 = foldFunc($acc561576257, $list61576257[5]) | |
449 | + | if (($size61576257 == 6)) | |
450 | + | then $acc661576257 | |
451 | + | else { | |
452 | + | let $acc761576257 = foldFunc($acc661576257, $list61576257[6]) | |
453 | + | if (($size61576257 == 7)) | |
454 | + | then $acc761576257 | |
455 | + | else { | |
456 | + | let $acc861576257 = foldFunc($acc761576257, $list61576257[7]) | |
457 | + | if (($size61576257 == 8)) | |
458 | + | then $acc861576257 | |
459 | + | else { | |
460 | + | let $acc961576257 = foldFunc($acc861576257, $list61576257[8]) | |
461 | + | if (($size61576257 == 9)) | |
462 | + | then $acc961576257 | |
463 | + | else { | |
464 | + | let $acc1061576257 = foldFunc($acc961576257, $list61576257[9]) | |
465 | + | if (($size61576257 == 10)) | |
466 | + | then $acc1061576257 | |
467 | + | else { | |
468 | + | let $acc1161576257 = foldFunc($acc1061576257, $list61576257[10]) | |
469 | + | if (($size61576257 == 11)) | |
470 | + | then $acc1161576257 | |
471 | + | else { | |
472 | + | let $acc1261576257 = foldFunc($acc1161576257, $list61576257[11]) | |
473 | + | if (($size61576257 == 12)) | |
474 | + | then $acc1261576257 | |
475 | + | else { | |
476 | + | let $acc1361576257 = foldFunc($acc1261576257, $list61576257[12]) | |
477 | + | if (($size61576257 == 13)) | |
478 | + | then $acc1361576257 | |
479 | + | else { | |
480 | + | let $acc1461576257 = foldFunc($acc1361576257, $list61576257[13]) | |
481 | + | if (($size61576257 == 14)) | |
482 | + | then $acc1461576257 | |
483 | + | else { | |
484 | + | let $acc1561576257 = foldFunc($acc1461576257, $list61576257[14]) | |
485 | + | if (($size61576257 == 15)) | |
486 | + | then $acc1561576257 | |
487 | + | else { | |
488 | + | let $acc1661576257 = foldFunc($acc1561576257, $list61576257[15]) | |
489 | + | if (($size61576257 == 16)) | |
490 | + | then $acc1661576257 | |
491 | + | else { | |
492 | + | let $acc1761576257 = foldFunc($acc1661576257, $list61576257[16]) | |
493 | + | if (($size61576257 == 17)) | |
494 | + | then $acc1761576257 | |
495 | + | else { | |
496 | + | let $acc1861576257 = foldFunc($acc1761576257, $list61576257[17]) | |
497 | + | if (($size61576257 == 18)) | |
498 | + | then $acc1861576257 | |
499 | + | else { | |
500 | + | let $acc1961576257 = foldFunc($acc1861576257, $list61576257[18]) | |
501 | + | if (($size61576257 == 19)) | |
502 | + | then $acc1961576257 | |
503 | + | else { | |
504 | + | let $acc2061576257 = foldFunc($acc1961576257, $list61576257[19]) | |
505 | + | if (($size61576257 == 20)) | |
506 | + | then $acc2061576257 | |
507 | + | else { | |
508 | + | let $acc2161576257 = foldFunc($acc2061576257, $list61576257[20]) | |
509 | + | throw("List size exceed 20") | |
510 | + | } | |
511 | + | } | |
512 | + | } | |
513 | + | } | |
514 | + | } | |
515 | + | } | |
516 | + | } | |
517 | + | } | |
518 | + | } | |
519 | + | } | |
520 | + | } | |
521 | + | } | |
522 | + | } | |
523 | + | } | |
524 | + | } | |
525 | + | } | |
526 | + | } | |
527 | + | } | |
528 | + | } | |
529 | + | } | |
530 | + | } | |
531 | + | } | |
532 | + | ||
533 | + | ||
534 | + | func closing (renter,waves,btc,isProfit,lenders) = WriteSet([DataEntry(startOfKey(renter), 0), DataEntry(endOfGraceOfKey(renter), 0), DataEntry(endOfInterestOfKey(renter), 0), DataEntry(endOfBurndownOfKey(renter), 0), DataEntry(rateOfKey(renter), 0), DataEntry(depositOfKey(renter), 0), DataEntry(lendOfKey(renter), 0), DataEntry(lendersOfKey(renter), ""), if (isProfit) | |
535 | + | then profitDistribution(btc, lenders) | |
536 | + | else unclaimedDistribution(waves, btc, lenders)]) | |
537 | + | ||
538 | + | ||
539 | + | func closeExpired (address,waves,btc,lenders) = { | |
540 | + | let loanSize = valueOrErrorMessage(getInteger(this, depositOfKey(address)), "No loan size for address") | |
541 | + | closing(address, waves, btc, false, lenders) | |
542 | + | } | |
543 | + | ||
544 | + | ||
545 | + | func doBB (renter,returnAssetId,returnAmt) = { | |
546 | + | let renterStr = toString(renter) | |
547 | + | let hasOpenLoan = isLendOpen(renterStr) | |
548 | + | let isTokenCorrect = (returnAssetId == assetToken) | |
549 | + | let loanAmount = getIntegerValue(this, lendOfKey(renterStr)) | |
550 | + | let depositedValue = getIntegerValue(this, depositOfKey(renterStr)) | |
551 | + | if (!(hasOpenLoan)) | |
552 | + | then throw("No open loan for caller") | |
553 | + | else if (!(isTokenCorrect)) | |
554 | + | then throw(((("User must return WBTC: " + toBase58String(assetToken)) + " but returning: ") + toBase58String(returnAssetId))) | |
555 | + | else { | |
556 | + | let endOfGrace = getIntegerValue(this, endOfGraceOfKey(renterStr)) | |
557 | + | let endOfBurndown = getIntegerValue(this, endOfBurndownOfKey(renterStr)) | |
558 | + | let endOfInterest = getIntegerValue(this, endOfInterestOfKey(renterStr)) | |
559 | + | let canReturnFullAmount = (endOfGrace >= height) | |
560 | + | let returnsTheSameAmount = (endOfGrace >= height) | |
561 | + | if ((height >= endOfInterest)) | |
562 | + | then throw("your loan has expired") | |
563 | + | else { | |
564 | + | let lendersProfit = if ((height > endOfGrace)) | |
565 | + | then fraction(loanAmount, (height - endOfGrace), (endOfBurndown - endOfGrace)) | |
566 | + | else 0 | |
567 | + | let requiredAmount = if (returnsTheSameAmount) | |
568 | + | then loanAmount | |
569 | + | else (loanAmount + lendersProfit) | |
570 | + | let isReturnAmountCorrect = (returnAmt >= requiredAmount) | |
571 | + | let isReturnAmountExact = (returnAmt == requiredAmount) | |
572 | + | if (!(isReturnAmountCorrect)) | |
573 | + | then throw(((("User must return " + toString(loanAmount)) + " satoshis, but returning ") + toString(returnAmt))) | |
574 | + | else { | |
575 | + | let depositBack = ScriptTransfer(renter, depositedValue, depositToken) | |
576 | + | let excessReturnAmount = ScriptTransfer(renter, (returnAmt - requiredAmount), assetToken) | |
577 | + | let transfers = if (isReturnAmountExact) | |
578 | + | then [depositBack] | |
579 | + | else [depositBack, excessReturnAmount] | |
580 | + | let lenders = split(valueOrErrorMessage(getString(this, lendersOfKey(renterStr)), "No lenders for an open loan"), "|") | |
581 | + | ScriptResult(closing(renterStr, 0, lendersProfit, true, lenders), TransferSet(transfers)) | |
582 | + | } | |
583 | + | } | |
584 | + | } | |
585 | + | } | |
586 | + | ||
587 | + | ||
588 | + | func add (lenders,lender) = if ((lenders == "")) | |
589 | + | then lender | |
590 | + | else ((lenders + "|") + lender) | |
591 | + | ||
592 | + | ||
593 | + | func remove (lenders,lender) = { | |
594 | + | let arr = split(lenders, "|") | |
595 | + | func foldFunc (acc,item) = if ((item == lender)) | |
596 | + | then acc | |
597 | + | else add(acc, item) | |
598 | + | ||
599 | + | let $list1002810055 = arr | |
600 | + | let $size1002810055 = size($list1002810055) | |
601 | + | let $acc01002810055 = "" | |
602 | + | if (($size1002810055 == 0)) | |
603 | + | then $acc01002810055 | |
604 | + | else { | |
605 | + | let $acc11002810055 = foldFunc($acc01002810055, $list1002810055[0]) | |
606 | + | if (($size1002810055 == 1)) | |
607 | + | then $acc11002810055 | |
608 | + | else { | |
609 | + | let $acc21002810055 = foldFunc($acc11002810055, $list1002810055[1]) | |
610 | + | if (($size1002810055 == 2)) | |
611 | + | then $acc21002810055 | |
612 | + | else { | |
613 | + | let $acc31002810055 = foldFunc($acc21002810055, $list1002810055[2]) | |
614 | + | if (($size1002810055 == 3)) | |
615 | + | then $acc31002810055 | |
616 | + | else { | |
617 | + | let $acc41002810055 = foldFunc($acc31002810055, $list1002810055[3]) | |
618 | + | if (($size1002810055 == 4)) | |
619 | + | then $acc41002810055 | |
620 | + | else { | |
621 | + | let $acc51002810055 = foldFunc($acc41002810055, $list1002810055[4]) | |
622 | + | if (($size1002810055 == 5)) | |
623 | + | then $acc51002810055 | |
624 | + | else { | |
625 | + | let $acc61002810055 = foldFunc($acc51002810055, $list1002810055[5]) | |
626 | + | if (($size1002810055 == 6)) | |
627 | + | then $acc61002810055 | |
628 | + | else { | |
629 | + | let $acc71002810055 = foldFunc($acc61002810055, $list1002810055[6]) | |
630 | + | if (($size1002810055 == 7)) | |
631 | + | then $acc71002810055 | |
632 | + | else { | |
633 | + | let $acc81002810055 = foldFunc($acc71002810055, $list1002810055[7]) | |
634 | + | if (($size1002810055 == 8)) | |
635 | + | then $acc81002810055 | |
636 | + | else { | |
637 | + | let $acc91002810055 = foldFunc($acc81002810055, $list1002810055[8]) | |
638 | + | if (($size1002810055 == 9)) | |
639 | + | then $acc91002810055 | |
640 | + | else { | |
641 | + | let $acc101002810055 = foldFunc($acc91002810055, $list1002810055[9]) | |
642 | + | if (($size1002810055 == 10)) | |
643 | + | then $acc101002810055 | |
644 | + | else { | |
645 | + | let $acc111002810055 = foldFunc($acc101002810055, $list1002810055[10]) | |
646 | + | if (($size1002810055 == 11)) | |
647 | + | then $acc111002810055 | |
648 | + | else { | |
649 | + | let $acc121002810055 = foldFunc($acc111002810055, $list1002810055[11]) | |
650 | + | if (($size1002810055 == 12)) | |
651 | + | then $acc121002810055 | |
652 | + | else { | |
653 | + | let $acc131002810055 = foldFunc($acc121002810055, $list1002810055[12]) | |
654 | + | if (($size1002810055 == 13)) | |
655 | + | then $acc131002810055 | |
656 | + | else { | |
657 | + | let $acc141002810055 = foldFunc($acc131002810055, $list1002810055[13]) | |
658 | + | if (($size1002810055 == 14)) | |
659 | + | then $acc141002810055 | |
660 | + | else { | |
661 | + | let $acc151002810055 = foldFunc($acc141002810055, $list1002810055[14]) | |
662 | + | if (($size1002810055 == 15)) | |
663 | + | then $acc151002810055 | |
664 | + | else { | |
665 | + | let $acc161002810055 = foldFunc($acc151002810055, $list1002810055[15]) | |
666 | + | if (($size1002810055 == 16)) | |
667 | + | then $acc161002810055 | |
668 | + | else { | |
669 | + | let $acc171002810055 = foldFunc($acc161002810055, $list1002810055[16]) | |
670 | + | if (($size1002810055 == 17)) | |
671 | + | then $acc171002810055 | |
672 | + | else { | |
673 | + | let $acc181002810055 = foldFunc($acc171002810055, $list1002810055[17]) | |
674 | + | if (($size1002810055 == 18)) | |
675 | + | then $acc181002810055 | |
676 | + | else { | |
677 | + | let $acc191002810055 = foldFunc($acc181002810055, $list1002810055[18]) | |
678 | + | if (($size1002810055 == 19)) | |
679 | + | then $acc191002810055 | |
680 | + | else { | |
681 | + | let $acc201002810055 = foldFunc($acc191002810055, $list1002810055[19]) | |
682 | + | if (($size1002810055 == 20)) | |
683 | + | then $acc201002810055 | |
684 | + | else { | |
685 | + | let $acc211002810055 = foldFunc($acc201002810055, $list1002810055[20]) | |
686 | + | throw("List size exceed 20") | |
687 | + | } | |
688 | + | } | |
689 | + | } | |
690 | + | } | |
691 | + | } | |
692 | + | } | |
693 | + | } | |
694 | + | } | |
695 | + | } | |
696 | + | } | |
697 | + | } | |
698 | + | } | |
699 | + | } | |
700 | + | } | |
701 | + | } | |
702 | + | } | |
703 | + | } | |
704 | + | } | |
705 | + | } | |
706 | + | } | |
707 | + | } | |
708 | + | } | |
709 | + | ||
710 | + | ||
711 | + | func doTakeProfit (lender) = { | |
712 | + | let str = toBase58String(lender.bytes) | |
713 | + | ScriptResult(WriteSet([DataEntry(profitForKey(str), 0), DataEntry(unclaimedDepositForKey(str), 0)]), TransferSet([ScriptTransfer(lender, profitFor(str), assetToken), ScriptTransfer(lender, unclaimedDepositFor(str), depositToken)])) | |
714 | + | } | |
715 | + | ||
716 | + | ||
717 | + | @Callable(i) | |
718 | + | func init (owner,token,oracle,maxRate,discount,grace,interest,burndown,serviceFee,lendSize) = if ((interest > burndown)) | |
719 | + | then throw("interest must be less or equal to burndown") | |
720 | + | else if ((i.caller != this)) | |
721 | + | then throw("only dapp itself can init") | |
722 | + | else WriteSet([DataEntry(adminKey, owner), DataEntry(assetTokenKey, token), DataEntry(oracleKey, oracle), DataEntry(maxRateKey, maxRate), DataEntry(discountPercentileKey, discount), DataEntry(gracePeriodKey, grace), DataEntry(interestPeriodKey, interest), DataEntry(burndownPeriodKey, burndown), DataEntry(serviceFeePercentileKey, serviceFee), DataEntry(lendSizeKey, lendSize)]) | |
723 | + | ||
724 | + | ||
725 | + | ||
726 | + | @Callable(i) | |
727 | + | func updateParams (oracle,maxRate,discount,grace,interest,burndown,serviceFee,lendSize) = if ((interest > burndown)) | |
728 | + | then throw("interest must be less or equal to burndown") | |
729 | + | else if ((i.caller != owner)) | |
730 | + | then throw("only owner can update params") | |
731 | + | else WriteSet([DataEntry(oracleKey, oracle), DataEntry(maxRateKey, maxRate), DataEntry(discountPercentileKey, discount), DataEntry(gracePeriodKey, grace), DataEntry(interestPeriodKey, interest), DataEntry(burndownPeriodKey, burndown), DataEntry(serviceFeePercentileKey, serviceFee), DataEntry(lendSizeKey, lendSize)]) | |
732 | + | ||
733 | + | ||
734 | + | ||
735 | + | @Callable(i) | |
736 | + | func borrow () = { | |
737 | + | let renter = toBase58String(i.caller.bytes) | |
738 | + | if (!(newLoansEnabled)) | |
739 | + | then throw("New loans temporarily disabled") | |
740 | + | else if (isLendOpen(renter)) | |
741 | + | then throw((renter + " already has an open loan")) | |
742 | + | else match i.payment { | |
743 | + | case a: AttachedPayment => | |
744 | + | if ((a.assetId == depositToken)) | |
745 | + | then { | |
746 | + | let currentHeight = height | |
747 | + | let endOfGrace = (height + gracePeriod) | |
748 | + | let endOfInterest = (endOfGrace + interestPeriod) | |
749 | + | let endOfBurndown = (endOfGrace + burndownPeriod) | |
750 | + | let depositAmount = a.amount | |
751 | + | let assetTokensLent = fraction(depositAmount, (rate * discountPercentile), (ten8 * 100)) | |
752 | + | if ((assetTokensLent > 0)) | |
753 | + | then { | |
754 | + | let datas = WriteSet([DataEntry(startOfKey(renter), currentHeight), DataEntry(endOfGraceOfKey(renter), endOfGrace), DataEntry(endOfInterestOfKey(renter), endOfInterest), DataEntry(endOfBurndownOfKey(renter), endOfBurndown), DataEntry(rateOfKey(renter), fraction(rate, discountPercentile, 100)), DataEntry(depositOfKey(renter), depositAmount), DataEntry(lendOfKey(renter), assetTokensLent), DataEntry(lendersOfKey(renter), enabledLendersStr), incrementOpenLends()]) | |
755 | + | ScriptResult(datas, TransferSet([ScriptTransfer(i.caller, assetTokensLent, assetToken)])) | |
756 | + | } | |
757 | + | else throw((("payment can't be less than " + toString(minimalLendAmount)) + " wavelets (price of 1 satoshi)")) | |
758 | + | } | |
759 | + | else throw(("can only lend WBTC for WAVES, but got " + toBase58String(valueOrErrorMessage(a.assetId, "No asset provided")))) | |
760 | + | case _ => | |
761 | + | throw("payment in assetTokens must be attached") | |
762 | + | } | |
763 | + | } | |
764 | + | ||
765 | + | ||
766 | + | ||
767 | + | @Callable(i) | |
768 | + | func buyBack () = { | |
769 | + | let pmt = valueOrErrorMessage(i.payment, "payment must be attached") | |
770 | + | doBB(i.caller, valueOrErrorMessage(pmt.assetId, "payment in WBTC must be attached"), pmt.amount) | |
771 | + | } | |
772 | + | ||
773 | + | ||
774 | + | ||
775 | + | @Callable(i) | |
776 | + | func closeExpiredFor (address) = { | |
777 | + | let endOfInterest = valueOrErrorMessage(getInteger(this, endOfInterestOfKey(address)), "no end of interest") | |
778 | + | let loanExpired = (height > endOfInterest) | |
779 | + | if (!(loanExpired)) | |
780 | + | then throw(((("Owner can only close expired rents. Expiring on height " + toString(endOfInterest)) + ", current height") + toString(height))) | |
781 | + | else closeExpired(address, getIntegerValue(this, depositOfKey(address)), getIntegerValue(this, lendOfKey(address)), split(getStringValue(this, lendersOfKey(address)), "|")) | |
782 | + | } | |
783 | + | ||
784 | + | ||
785 | + | ||
786 | + | @Callable(i) | |
787 | + | func discard () = { | |
788 | + | let address = toBase58String(i.caller.bytes) | |
789 | + | closeExpired(address, getIntegerValue(this, depositOfKey(address)), getIntegerValue(this, lendOfKey(address)), split(getStringValue(this, lendersOfKey(address)), "|")) | |
790 | + | } | |
791 | + | ||
792 | + | ||
793 | + | ||
794 | + | @Callable(i) | |
795 | + | func sendProfit (lender) = doTakeProfit(valueOrErrorMessage(addressFromString(lender), "incorrect address")) | |
796 | + | ||
797 | + | ||
798 | + | ||
799 | + | @Callable(i) | |
800 | + | func takeProfit () = doTakeProfit(i.caller) | |
801 | + | ||
802 | + | ||
803 | + | ||
804 | + | @Callable(i) | |
805 | + | func enableLending (b) = { | |
806 | + | let lender = toBase58String(i.caller.bytes) | |
807 | + | let isLender = isDefined(indexOf(allLendersStr, lender)) | |
808 | + | let isActiveLender = isDefined(indexOf(enabledLendersStr, lender)) | |
809 | + | if (!(isLender)) | |
810 | + | then throw("is not lender") | |
811 | + | else { | |
812 | + | let r = if (isActiveLender) | |
813 | + | then if (b) | |
814 | + | then throw("is already active lender") | |
815 | + | else remove(enabledLendersStr, lender) | |
816 | + | else if (!(b)) | |
817 | + | then throw("is already disabled lender") | |
818 | + | else add(enabledLendersStr, lender) | |
819 | + | WriteSet([DataEntry(enabledLendersKey, r)]) | |
820 | + | } | |
821 | + | } | |
822 | + | ||
823 | + | ||
824 | + | ||
825 | + | @Callable(i) | |
826 | + | func depositBtc () = { | |
827 | + | let lender = toBase58String(i.caller.bytes) | |
828 | + | let hasCapacity = (20 > size(split(allLendersStr, "|"))) | |
829 | + | let alreadyParticipates = isDefined(indexOf(allLendersStr, lender)) | |
830 | + | if (!(newDepositBtcEnabled)) | |
831 | + | then throw("New deposits temporarily disabled") | |
832 | + | else if (!(hasCapacity)) | |
833 | + | then throw("too much lenders already") | |
834 | + | else if (alreadyParticipates) | |
835 | + | then throw((("lender " + lender) + " already participates in the dApp")) | |
836 | + | else { | |
837 | + | let errorMessage = (("exactly" + toString(lendSize)) + " BTC must be attached") | |
838 | + | let pmt = valueOrErrorMessage(i.payment, errorMessage) | |
839 | + | if (if ((pmt.assetId != assetToken)) | |
840 | + | then true | |
841 | + | else (pmt.amount != lendSize)) | |
842 | + | then throw(errorMessage) | |
843 | + | else WriteSet([DataEntry(circulatingAssetsKey(lender), lendSize), DataEntry(lendersKey, add(allLendersStr, lender)), DataEntry(enabledLendersKey, add(enabledLendersStr, lender))]) | |
844 | + | } | |
845 | + | } | |
846 | + | ||
847 | + | ||
848 | + | ||
849 | + | @Callable(i) | |
850 | + | func withdrawBtc () = { | |
851 | + | let lender = toBase58String(i.caller.bytes) | |
852 | + | let isWithdrawAllowed = match getInteger(this, openLendsOfKey(lender)) { | |
853 | + | case a: Int => | |
854 | + | (a == 0) | |
855 | + | case _ => | |
856 | + | true | |
857 | + | } | |
858 | + | if (!(isWithdrawAllowed)) | |
859 | + | then throw("withdraw not allowed, you have open lends. invoke enableLending(false) and wait for loans to be closed") | |
860 | + | else ScriptResult(WriteSet([DataEntry(circulatingAssetsKey(lender), 0), DataEntry(lendersKey, remove(allLendersStr, lender)), DataEntry(enabledLendersKey, remove(enabledLendersStr, lender))]), TransferSet([ScriptTransfer(i.caller, getIntegerValue(this, circulatingAssetsKey(lender)), assetToken)])) | |
861 | + | } | |
862 | + | ||
863 | + | ||
864 | + | ||
865 | + | @Callable(i) | |
866 | + | func enableDepositBtc (b) = if ((i.caller != owner)) | |
867 | + | then throw("admin permissions required") | |
868 | + | else if ((b == newDepositBtcEnabled)) | |
869 | + | then throw("the value already set") | |
870 | + | else WriteSet([DataEntry(enableDepositBtcKey, b)]) | |
871 | + | ||
872 | + | ||
873 | + | ||
874 | + | @Callable(i) | |
875 | + | func enableNewLoans (b) = if ((i.caller != owner)) | |
876 | + | then throw("admin permissions required") | |
877 | + | else if ((b == newLoansEnabled)) | |
878 | + | then throw("the value already set") | |
879 | + | else WriteSet([DataEntry(enableNewLoansKey, b)]) | |
880 | + | ||
881 | + |
github/deemru/w8io/169f3d6 56.79 ms ◑