tx · B7LnJBzoDvajfnDqSFAPgQrKdDwUpRco2CnqWCvvSRxH

3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2:  -0.01500000 Waves

2019.09.24 16:56 [690511] smart account 3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2 > SELF 0.00000000 Waves

{ "type": 13, "id": "B7LnJBzoDvajfnDqSFAPgQrKdDwUpRco2CnqWCvvSRxH", "fee": 1500000, "feeAssetId": null, "timestamp": 1569333253297, "version": 1, "sender": "3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2", "senderPublicKey": "8y2Uc9uYf5gRD6Dzm1aC73zYe3LZvtVDUVAnAhNdN2mg", "proofs": [ "UmJMTzu5rCZNGV9W4B94MkPEAoxyQC1h9RwMnpMkugDVhJjcgn1YGqffo8ZnzNP8Tx4tVCkzR8fVZvXCeGxW7W1" ], "script": "base64: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aGVjawAAAAMAAAALY3VycmVudFRpbWUAAAAJc3RhcnRUaW1lAAAADmV4cGlyYXRpb25UaW1lCQAAZgAAAAIJAABlAAAAAgUAAAALY3VycmVudFRpbWUFAAAACXN0YXJ0VGltZQUAAAAOZXhwaXJhdGlvblRpbWUBAAAAFmluY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACAAAADHBtdEFzc2V0TmFtZQAAAAxhdWN0aW9uUHJpY2UEAAAAD2tleUZyZWV6ZWRGdW5kcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQEAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAPa2V5RnJlZXplZEZ1bmRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAJAABkAAAAAgUAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBQAAAAxhdWN0aW9uUHJpY2UBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACAAAADHBtdEFzc2V0TmFtZQAAAAxhdWN0aW9uUHJpY2UEAAAAD2tleUZyZWV6ZWRGdW5kcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQEAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAPa2V5RnJlZXplZEZ1bmRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAAWEJAABlAAAAAgUAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBQAAAAxhdWN0aW9uUHJpY2UDCQAAZgAAAAIFAAAAAWEAAAAAAAAAAAAFAAAAAWEJAAACAAAAAQIAAAAmRnJlZXplZCBhbW91bnQgY291bGRuJ3QgYmUgbGVzcyB0aGFuIDABAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQAAAABAAAACWNhbGxlclB1YgQAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWNhbGxlclB1YgIAAAALX0ZyZWVsYW5jZXIEAAAAByRtYXRjaDAFAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAAJY2FsbGVyUHViCQAAAgAAAAECAAAAI09ubHkgcmVnaXN0ZXJlZCB1c2VycyBjYW4gbWFrZSBiZXRzAAAACwAAAAFpAQAAABBmcmVlbGFuY2VyU2lnblVwAAAAAQAAAARpbmZvBAAAAA11c2VyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAARYWxyZWFkeVJlZ2lzdGVyZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAtfRnJlZWxhbmNlcgMJAQAAAAlpc0RlZmluZWQAAAABBQAAABFhbHJlYWR5UmVnaXN0ZXJlZAkAAAIAAAABAgAAABdVc2VyIGFscmVhZHkgcmVnaXN0ZXJlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAtfRnJlZWxhbmNlcgUAAAAEaW5mbwUAAAADbmlsAAAAAWkBAAAADGNsaWVudFNpZ25VcAAAAAEAAAAEaW5mbwQAAAANdXNlclB1YmxpY0tleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAEWFscmVhZHlSZWdpc3RlcmVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAAHX0NsaWVudAMJAQAAAAlpc0RlZmluZWQAAAABBQAAABFhbHJlYWR5UmVnaXN0ZXJlZAkAAAIAAAABAgAAABdVc2VyIGFscmVhZHkgcmVnaXN0ZXJlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAdfQ2xpZW50BQAAAARpbmZvBQAAAANuaWwAAAABaQEAAAANY3JlYXRlQXVjdGlvbgAAAAMAAAAQam9iRXhlY3V0aW9uRGF5cwAAABNhdWN0aW9uRHVyYXRpb25EYXlzAAAAC2F1Y3Rpb25JbmZvBAAAAAlhdWN0aW9uSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAPYXVjdGlvbkN1c3RvbWVyCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAACXBtdEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAADGF1Y3Rpb25QcmljZQMJAABmAAAAAgUAAAAJcG10QW1vdW50AAAAAAAAAAAABQAAAAlwbXRBbW91bnQJAAACAAAAAQIAAAAcQW1vdW50IG11c3QgYmUgaGlnaGVyIHRoZW4gMAQAAAAMYXVjdGlvblN0YXJ0BQAAAAZoZWlnaHQEAAAAFWF1Y3Rpb25EdXJhdGlvbkJsb2NrcwkAAGgAAAACBQAAABNhdWN0aW9uRHVyYXRpb25EYXlzBQAAAANkYXkEAAAAEmJsb2Nrc0ZvckV4ZWN1dGlvbgkAAGgAAAACBQAAABBqb2JFeGVjdXRpb25EYXlzBQAAAANkYXkEAAAADHBtdEFzc2V0TmFtZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAIAAAAFV0FWRVMDCQAAAAAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAEd0JUQwIAAAADQlRDAwkAAAAAAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAABHdFVVICAAAAA0VVUgMJAAAAAAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAR3VVNEAgAAAANVU0QJAAACAAAAAQIAAAAUQXNzZXRJZCBpcyBpbmNvcnJlY3QEAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQEAAAAWaW5jcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIFAAAADHBtdEFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAQQXVjdGlvbklkRGF0YUtleQAAAAEFAAAACWF1Y3Rpb25JZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACXN0YXRlT3BlbgIAAAABXwUAAAALYXVjdGlvbkluZm8CAAAAAV8FAAAAD2F1Y3Rpb25DdXN0b21lcgIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uU3RhcnQCAAAAAV8JAAGkAAAAAQUAAAAVYXVjdGlvbkR1cmF0aW9uQmxvY2tzAgAAAAFfCQABpAAAAAEFAAAAEmJsb2Nrc0ZvckV4ZWN1dGlvbgIAAAABXwUAAAAMcG10QXNzZXROYW1lAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAxwbXRBc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQUAAAADbmlsAAAAAWkBAAAAB21ha2VCaWQAAAACAAAACWF1Y3Rpb25JZAAAAAhiZXRQcmljZQQAAAAJY2FsbGVyUHViCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAHYmV0VGltZQUAAAAGaGVpZ2h0BAAAAAxBdWN0aW9uSWRLZXkJAQAAABBBdWN0aW9uSWREYXRhS2V5AAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRGF0YUxpc3QJAQAAAAtnZXREYXRhTGlzdAAAAAEFAAAADEF1Y3Rpb25JZEtleQQAAAAMYXVjdGlvblN0YXRlCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAAQAAAALYXVjdGlvbkluZm8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAABBAAAAA9hdWN0aW9uQ3VzdG9tZXIJAAJZAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAIEAAAADGF1Y3Rpb25TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAwQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAEBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAFBAAAABBhdWN0aW9uQXNzZXROYW1lCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABgQAAAAMYXVjdGlvblByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAHBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAAAZuZXdCaWQJAQAAAA1iZXRQcmljZUNoZWNrAAAAAgUAAAAIYmV0UHJpY2UFAAAADGF1Y3Rpb25QcmljZQQAAAANbmV3RnJlZWxhbmNlcgkBAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQAAAABBQAAAAljYWxsZXJQdWIEAAAADmRBcHBDb21taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABFuZXdGcmVlemVkQmFsYW5jZQkBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lBQAAAAxhdWN0aW9uUHJpY2UEAAAAEWF1Y3Rpb25UaW1laXNPdmVyCQEAAAAJdGltZUNoZWNrAAAAAwUAAAAHYmV0VGltZQUAAAAMYXVjdGlvblN0YXJ0BQAAAA9hdWN0aW9uRHVyYXRpb24DBQAAABFhdWN0aW9uVGltZWlzT3ZlcgMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3Jp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kQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAgQAAAAMYXVjdGlvblN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAADBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAQEAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAUEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAGBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAcEAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAAE0ZyZWVsYW5jZXJCaWRBbW91bnQEAAAAEGtleUZyZWVsYW5jZXJCaWQJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAAV8FAAAADWZyZWVsYW5jZXJQdWIEAAAAEXZhbHVlRnJlZWxhY2VyQmlkCQAEGgAAAAIFAAAABHRoaXMFAAAAEGtleUZyZWVsYW5jZXJCaWQEAAAAByRtYXRjaDAFAAAAEXZhbHVlRnJlZWxhY2VyQmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAeRnJlZWxhbmNlcidzIGJldCB3YXMgbm90IGZvdW5kBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAQAAAAQYW1vdW50RGlmZmVyZW5jZQkAAGUAAAACCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUA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BQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uAgAAAAFfBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAFfCQABpAAAAAEFAAAAE0ZyZWVsYW5jZXJCaWRBbW91bnQCAAAAAV8FAAAADWZyZWVsYW5jZXJQdWIFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA9hdWN0aW9uQ3VzdG9tZXIFAAAAEGFtb3VudERpZmZlcmVuY2UFAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAkAAAIAAAABAgAAAC1Pbmx5IGF1Y3Rpb24gY3VzdG9tZXIgY2FuIGNob29zZSBhIGZyZWVsYW5jZXIAAAABaQEAAAAVaW5jcmVhc2VFeGVjdXRpb25UaW1lAAAAAgAAAAlhdWN0aW9uSWQAAAANZXhlY3V0aW9uRGF5cwQAAAAGY2FsbGVyCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMQXVjdGlvbklkS2V5CQEAAAAQQXVjdGlvbklkRGF0YUtleQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkRhdGFMaXN0CQEAAAALZ2V0RGF0YUxpc3QAAAABBQAAAAxBdWN0aW9uSWRLZXkEAAAADGF1Y3Rpb25TdGF0ZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAAEAAAAC2F1Y3Rpb25JbmZvCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAQQAAAAPYXVjdGlvbkN1c3RvbWVyCQACWQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAACBAAAAAxhdWN0aW9uU3RhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAMEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABAQAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABQQAAAAQYXVjdGlvbkFzc2V0TmFtZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAYEAAAADGF1Y3Rpb25QcmljZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABwQAAAAXbmV3QXVjdGlvbkV4ZWN1dGlvblRpbWUEAAAAHG5ld0F1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAABoAAAAAgUAAAANZXhlY3V0aW9uRGF5cwUAAAADZGF5AwkAAGYAAAACBQAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uBQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uBQAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQAAAgAAAAECAAAAOE5ldyBleGVjdXRpb24gdGltZSBtdXN0IG1vcmUgdGhhbiBjdXJyZW50IGV4ZWN1dGlvbiB0aW1lAwkAAAAAAAACBQAAAAZjYWxsZXIFAAAAD2F1Y3Rpb25DdXN0b21lcgMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADEF1Y3Rpb25JZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQIAAAABXwUAAAALYXVjdGlvbkluZm8CAAAAAV8JAAJYAAAAAQUAAAAPYXVjdGlvbkN1c3RvbWVyAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25TdGFydAIAAAABXwkAAaQAAAABBQAAAA9hdWN0aW9uRHVyYXRpb24CAAAAAV8JAAGkAAAAAQUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgIAAAABXwUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uUHJpY2UFAAAAA25pbAMDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQGCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzBAAAAA1mcmVlbGFuY2VyUHViCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMQXVjdGlvbklkS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQIAAAABXwUAAAALYXVjdGlvbkluZm8CAAAAAV8JAAJYAAAAAQUAAAAPYXVjdGlvbkN1c3RvbWVyAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25TdGFydAIAAAABXwkAAaQAAAABBQAAAA9hdWN0aW9uRHVyYXRpb24CAAAAAV8JAAGkAAAAAQUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgIAAAABXwUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uUHJpY2UCAAAAAV8FAAAADWZyZWVsYW5jZXJQdWIFAAAAA25pbAkAAAIAAAABAgAAAA9JbmNvcnJlY3Qgc3RhdGUJAAACAAAAAQIAAAApT25seSBjdXN0b21lciBjYW4gaW5jcmVhc2UgZXhlY3V0aW9uIHRpbWUAAAABaQEAAAANY2FuY2VsQXVjdGlvbgAAAAEAAAAJYXVjdGlvbklkBAAAAAxBdWN0aW9uSWRLZXkJAQAAABBBdWN0aW9uSWREYXRhS2V5AAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRGF0YUxpc3QJAQAAAAtnZXREYXRhTGlzdAAAAAEFAAAADEF1Y3Rpb25JZEtleQQAAAAMYXVjdGlvblN0YXRlCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAAQAAAALYXVjdGlvbkluZm8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAABBAAAAA9hdWN0aW9uQ3VzdG9tZXIJAAJZAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAIEAAAADGF1Y3Rpb25TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAwQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAEBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAFBAAAABBhdWN0aW9uQXNzZXROYW1lCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABgQAAAAMYXVjdGlvblByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAHBAAAABNhdWN0aW9uSWRPd25lckNoZWNrAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAD2F1Y3Rpb25DdXN0b21lcgYJAAACAAAAAQIAAAAmQXVjdGlvbiBjYW4gYmUgY2FuY2VsZWQgb25seSBieSBvd25lci4DCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxBdWN0aW9uSWRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAtzdGF0ZUNhbmNlbAIAAAABXwUAAAALYXVjdGlvbkluZm8CAAAAAV8JAAJYAAAAAQUAAAAPYXVjdGlvbkN1c3RvbWVyAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25TdGFydAIAAAABXwkAAaQAAAABBQAAAA9hdWN0aW9uRHVyYXRpb24CAAAAAV8JAAGkAAAAAQUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgIAAAABXwUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uUHJpY2UFAAAAA25pbAkAAAIAAAABAgAAABhJbmNvcnJlY3QgYXVjdGlvbiBzdGF0ZS4AAAABaQEAAAALb3BlbkRpc3B1dGUAAAABAAAACWF1Y3Rpb25JZAQAAAAGY2FsbGVyCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMQXVjdGlvbklkS2V5CQEAAAAQQXVjdGlvbklkRGF0YUtleQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkRhdGFMaXN0CQEAAAALZ2V0RGF0YUxpc3QAAAABBQAAAAxBdWN0aW9uSWRLZXkEAAAADGF1Y3Rpb25TdGF0ZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAAEAAAAC2F1Y3Rpb25JbmZvCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAQQAAAAPYXVjdGlvbkN1c3RvbWVyCQACWQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAACBAAAAAxhdWN0aW9uU3RhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAMEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABAQAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABQQAAAAQYXVjdGlvbkFzc2V0TmFtZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAYEAAAADGF1Y3Rpb25QcmljZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABwQAAAARYXVjdGlvbkZyZWVsYW5jZXIJAAJZAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAgDAwkAAAAAAAACBQAAAAZjYWxsZXIFAAAAD2F1Y3Rpb25DdXN0b21lcgYJAAAAAAAAAgUAAAAGY2FsbGVyBQAAABFhdWN0aW9uRnJlZWxhbmNlcgQAAAAKZGF0YVN0cmluZwIAAAABMQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMQXVjdGlvbklkS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADHN0YXRlRGlzcHV0ZQIAAAABXwUAAAALYXVjdGlvbkluZm8CAAAAAV8FAAAACmRhdGFTdHJpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAhfRGlzcHV0ZQIAAAABMAUAAAADbmlsCQAAAgAAAAECAAAALU9ubHkgY3VzdG9tZXIgYW5kIGZyZWVsYW5jZXIgY2FuIG9wZW4gZGlzcHV0ZQAAAAFpAQAAAAt2b3RlRGlzcHV0ZQAAAAIAAAAJYXVjdGlvbklkAAAABHZvdGUEAAAADEF1Y3Rpb25JZEtleQkBAAAAEEF1Y3Rpb25JZERhdGFLZXkAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EYXRhTGlzdAkBAAAAC2dldERhdGFMaXN0AAAAAQUAAAAMQXVjdGlvbklkS2V5BAAAAAxhdWN0aW9uU3RhdGUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAABAAAAAthdWN0aW9uSW5mbwkAAZEAAAACBQAAAA9hdWN0aW9uRGF0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dGlvbklkRGF0YUtleQAAAAEFAAAACWF1Y3Rpb25JZAkAASwAAAACCQABLAAAAAIFAAAAFHN0YXRlRGlzcHV0ZVJlc29sdmVkAgAAAAFfBQAAAA1uZXdEYXRhU3RyaW5nCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAFfBQAAAAxzdGF0ZURpc3B1dGUFAAAAFG5ld0Rpc3B1dGVEYXRhU3RyaW5nBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAATZGlzcHV0ZVdpbm5lclB1YmxpYwUAAAARYW1vdW50V2l0aG91dENvbW0JAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUFAAAAA25pbAQAAAAUbmV3RGlzcHV0ZURhdGFTdHJpbmcDCQAAAAAAAAIFAAAADHZvdGVzQ291bnRlcgIAAAABMAQAAAAPbmV3Vm90ZXNDb3VudGVyAgAAAAExBAAAAAluZXdWb3RlcnMFAAAACG5ld1ZvdGVyBAAAAAhuZXdWb3RlcwUAAAAHbmV3Vm90ZQQAAAANbmV3RGF0YVN0cmluZwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdWb3Rlc0NvdW50ZXICAAAAAS8FAAAACW5ld1ZvdGVycwIAAAABLwUAAAAIbmV3Vm90ZXMFAAAADW5ld0RhdGFTdHJpbmcDCQAAAAAAAAIFAAAADHZvdGVzQ291bnRlcgIAAAABMQQAAAAGdm90ZXIxCQABkQAAAAIFAAAAD2Rpc3B1dGVEYXRhTGlzdAAAAAAAAAAAAQQAAAAFdm90ZTEJAAGRAAAAAgUAAAAPZGlzcHV0ZURhdGFMaXN0AAAAAAAAAAACBAAAAAxhbHJlYWR5Vm90ZWQJAAAAAAAAAgUAAAAIbmV3Vm90ZXIFAAAABnZvdGVyMQMFAAAADGFscmVhZHlWb3RlZAkAAAIAAAABAgAAABFZb3UgYWxyZWFkeSB2b3RlZAQAAAAPbmV3Vm90ZXNDb3VudGVy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AAlhdWN0aW9uSWQEAAAACWNhbGxlclB1YgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADEF1Y3Rpb25JZEtleQkBAAAAEEF1Y3Rpb25JZERhdGFLZXkAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EYXRhTGlzdAkBAAAAC2dldERhdGFMaXN0AAAAAQUAAAAMQXVjdGlvbklkS2V5BAAAAAxhdWN0aW9uU3RhdGUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAABAAAAAthdWN0aW9uSW5mbwkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAEEAAAAD2F1Y3Rpb25DdXN0b21lcgkAAlkAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAgQAAAAMYXVjdGlvblN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAADBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAQEAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAUEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAGBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAcEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQACWQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAIBAAAAAtjdXJyZW50VGltZQUAAAAGaGVpZ2h0BAAAABJmcmVlbGFuY2VyUHViQ2hlY2sDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAARYXVjdGlvbkZyZWVsYW5jZXIF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", "chainId": 84, "height": 690511, "spentComplexity": 0 } View: original | compacted Prev: 9CGbAfVy4B2cCeQMiGv162p29ngsBbBFKe4Yb4MULuaU Next: 7rvQMyy4CtojGSToxHZYVY9okMpf53U8Fdwv8LiVYyex Diff:
OldNewDifferences
200200 then ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + "NoFreelancer") + "_") + "NoBid")), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), (auctionPrice - dAppCommission), auctionAssetId58)]))
201201 else if ((auctionState == stateSuggested))
202202 then {
203- let auctionLowestBidder = auctionDataList[9]
204203 let auctionFreelancer = auctionDataList[8]
205- WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer) + "_") + auctionLowestBidder))])
204+ WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer))])
206205 }
207206 else throw("Incorrect auction state")
208207 else if ((auctionState == stateOpen))
209208 then WriteSet([DataEntry(((auctionId + "_") + newFreelancer), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newFreelancer))])
210209 else if ((auctionState == stateSuggested))
211210 then {
212- let auctionLowestBidder = auctionDataList[9]
211+ let auctionLowestBidder = auctionDataList[8]
213212 let newAuctionLowestBidder = {
214213 let keyCurrentLowestBid = ((auctionId + "_") + auctionLowestBidder)
215214 let valueCurrentLowestBid = getInteger(this, keyCurrentLowestBid)
223222 then newFreelancer
224223 else auctionLowestBidder
225224 }
226- WriteSet([DataEntry(((auctionId + "_") + callerPub), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newAuctionLowestBidder))])
225+ WriteSet([DataEntry(((auctionId + "_Bid_") + callerPub), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newAuctionLowestBidder))])
227226 }
228227 else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
229228 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let day = 1440
55
66 let WAVES = unit
77
88 let wBTC = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
99
1010 let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
1111
1212 let wUSD = base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'
1313
1414 let stateOpen = "Opened"
1515
1616 let stateSuggested = "Suggested"
1717
1818 let stateCancel = "Canceled"
1919
2020 let stateInProgress = "InProgress"
2121
2222 let stateWait4Confirm = "WaitForConfirmation"
2323
2424 let stateComplete = "Completed"
2525
2626 let stateDispute = "Dispute"
2727
2828 let stateDisputeResolved = "DisputeResolved"
2929
3030 let customer = "CMR"
3131
3232 let freelancer = "FL"
3333
3434 let ambassador1 = base58'1'
3535
3636 let ambassador2 = base58'1'
3737
3838 let ambassador3 = base58'1'
3939
4040 let ambassador4 = base58'1'
4141
4242 let ambassador5 = base58'1'
4343
4444 func AuctionIdDataKey (auctionId) = (auctionId + "_AuctionData")
4545
4646
4747 func getDataList (auctionId) = {
4848 let getDataString = getString(this, auctionId)
4949 let a = match getDataString {
5050 case a: String =>
5151 a
5252 case _ =>
5353 throw("AuctionId was not found")
5454 }
5555 split(a, "_")
5656 }
5757
5858
5959 func getDisputeDataList (auctionId) = {
6060 let keyDisputeData = ((auctionId + "_") + stateDispute)
6161 let getDisputeDataString = getString(this, keyDisputeData)
6262 let a = match getDisputeDataString {
6363 case a: String =>
6464 a
6565 case _ =>
6666 throw("Dispute data was not found")
6767 }
6868 split(a, "/")
6969 }
7070
7171
7272 func AssetNameToBase58 (auctionAssetName) = if ((auctionAssetName == "WAVES"))
7373 then WAVES
7474 else if ((auctionAssetName == "BTC"))
7575 then wBTC
7676 else if ((auctionAssetName == "EUR"))
7777 then wEUR
7878 else if ((auctionAssetName == "USD"))
7979 then wUSD
8080 else throw("Incorrect Asset Id")
8181
8282
8383 func betPriceCheck (betPrice,auctionPrice) = if ((auctionPrice > betPrice))
8484 then betPrice
8585 else throw(("Bet price must be lower than actual price. Actual price: " + toString(auctionPrice)))
8686
8787
8888 func timeCheck (currentTime,startTime,expirationTime) = ((currentTime - startTime) > expirationTime)
8989
9090
9191 func increaseFreezedBalance (pmtAssetName,auctionPrice) = {
9292 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
9393 let currentFreezedBalance = match keyFreezedFunds {
9494 case a: Int =>
9595 a
9696 case _ =>
9797 0
9898 }
9999 (currentFreezedBalance + auctionPrice)
100100 }
101101
102102
103103 func decreaseFreezedBalance (pmtAssetName,auctionPrice) = {
104104 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
105105 let currentFreezedBalance = match keyFreezedFunds {
106106 case a: Int =>
107107 a
108108 case _ =>
109109 0
110110 }
111111 let a = (currentFreezedBalance - auctionPrice)
112112 if ((a > 0))
113113 then a
114114 else throw("Freezed amount couldn't be less than 0")
115115 }
116116
117117
118118 func freelancerIsRegistered (callerPub) = {
119119 let freelancerIsRegistered = getString(this, (callerPub + "_Freelancer"))
120120 match freelancerIsRegistered {
121121 case a: String =>
122122 callerPub
123123 case _ =>
124124 throw("Only registered users can make bets")
125125 }
126126 }
127127
128128
129129 @Callable(i)
130130 func freelancerSignUp (info) = {
131131 let userPublicKey = toBase58String(i.callerPublicKey)
132132 let alreadyRegistered = getString(this, (userPublicKey + "_Freelancer"))
133133 if (isDefined(alreadyRegistered))
134134 then throw("User already registered")
135135 else WriteSet([DataEntry((userPublicKey + "_Freelancer"), info)])
136136 }
137137
138138
139139
140140 @Callable(i)
141141 func clientSignUp (info) = {
142142 let userPublicKey = toBase58String(i.callerPublicKey)
143143 let alreadyRegistered = getString(this, (userPublicKey + "_Client"))
144144 if (isDefined(alreadyRegistered))
145145 then throw("User already registered")
146146 else WriteSet([DataEntry((userPublicKey + "_Client"), info)])
147147 }
148148
149149
150150
151151 @Callable(i)
152152 func createAuction (jobExecutionDays,auctionDurationDays,auctionInfo) = {
153153 let auctionId = toBase58String(i.transactionId)
154154 let auctionCustomer = toBase58String(i.callerPublicKey)
155155 let pmt = extract(i.payment)
156156 let pmtAmount = pmt.amount
157157 let auctionPrice = if ((pmtAmount > 0))
158158 then pmtAmount
159159 else throw("Amount must be higher then 0")
160160 let auctionStart = height
161161 let auctionDurationBlocks = (auctionDurationDays * day)
162162 let blocksForExecution = (jobExecutionDays * day)
163163 let pmtAssetName = if (!(isDefined(pmt.assetId)))
164164 then "WAVES"
165165 else if ((pmt.assetId == wBTC))
166166 then "BTC"
167167 else if ((pmt.assetId == wEUR))
168168 then "EUR"
169169 else if ((pmt.assetId == wUSD))
170170 then "USD"
171171 else throw("AssetId is incorrect")
172172 let newFreezedBalance = increaseFreezedBalance(pmtAssetName, auctionPrice)
173173 WriteSet([DataEntry(AuctionIdDataKey(auctionId), ((((((((((((((stateOpen + "_") + auctionInfo) + "_") + auctionCustomer) + "_") + toString(auctionStart)) + "_") + toString(auctionDurationBlocks)) + "_") + toString(blocksForExecution)) + "_") + pmtAssetName) + "_") + toString(auctionPrice))), DataEntry((pmtAssetName + "_Freezed"), newFreezedBalance)])
174174 }
175175
176176
177177
178178 @Callable(i)
179179 func makeBid (auctionId,betPrice) = {
180180 let callerPub = toBase58String(i.callerPublicKey)
181181 let betTime = height
182182 let AuctionIdKey = AuctionIdDataKey(auctionId)
183183 let auctionDataList = getDataList(AuctionIdKey)
184184 let auctionState = auctionDataList[0]
185185 let auctionInfo = auctionDataList[1]
186186 let auctionCustomer = fromBase58String(auctionDataList[2])
187187 let auctionStart = parseIntValue(auctionDataList[3])
188188 let auctionDuration = parseIntValue(auctionDataList[4])
189189 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
190190 let auctionAssetName = auctionDataList[6]
191191 let auctionPrice = parseIntValue(auctionDataList[7])
192192 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
193193 let newBid = betPriceCheck(betPrice, auctionPrice)
194194 let newFreelancer = freelancerIsRegistered(callerPub)
195195 let dAppCommission = ((auctionPrice * 3) / 100)
196196 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
197197 let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
198198 if (auctionTimeisOver)
199199 then if ((auctionState == stateOpen))
200200 then ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + "NoFreelancer") + "_") + "NoBid")), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), (auctionPrice - dAppCommission), auctionAssetId58)]))
201201 else if ((auctionState == stateSuggested))
202202 then {
203- let auctionLowestBidder = auctionDataList[9]
204203 let auctionFreelancer = auctionDataList[8]
205- WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer) + "_") + auctionLowestBidder))])
204+ WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer))])
206205 }
207206 else throw("Incorrect auction state")
208207 else if ((auctionState == stateOpen))
209208 then WriteSet([DataEntry(((auctionId + "_") + newFreelancer), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newFreelancer))])
210209 else if ((auctionState == stateSuggested))
211210 then {
212- let auctionLowestBidder = auctionDataList[9]
211+ let auctionLowestBidder = auctionDataList[8]
213212 let newAuctionLowestBidder = {
214213 let keyCurrentLowestBid = ((auctionId + "_") + auctionLowestBidder)
215214 let valueCurrentLowestBid = getInteger(this, keyCurrentLowestBid)
216215 let currentLowestBid = match valueCurrentLowestBid {
217216 case a: Int =>
218217 a
219218 case _ =>
220219 throw("Can't find lowest bid by public key")
221220 }
222221 if ((currentLowestBid > newBid))
223222 then newFreelancer
224223 else auctionLowestBidder
225224 }
226- WriteSet([DataEntry(((auctionId + "_") + callerPub), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newAuctionLowestBidder))])
225+ WriteSet([DataEntry(((auctionId + "_Bid_") + callerPub), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newAuctionLowestBidder))])
227226 }
228227 else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
229228 }
230229
231230
232231
233232 @Callable(i)
234233 func chooseFreelancer (auctionId,freelancerPub) = {
235234 let callerPub = extract(i.callerPublicKey)
236235 let betTime = height
237236 let AuctionIdKey = AuctionIdDataKey(auctionId)
238237 let auctionDataList = getDataList(AuctionIdKey)
239238 let auctionState = auctionDataList[0]
240239 let auctionInfo = auctionDataList[1]
241240 let auctionCustomer = fromBase58String(auctionDataList[2])
242241 let auctionStart = parseIntValue(auctionDataList[3])
243242 let auctionDuration = parseIntValue(auctionDataList[4])
244243 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
245244 let auctionAssetName = auctionDataList[6]
246245 let auctionPrice = parseIntValue(auctionDataList[7])
247246 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
248247 let FreelancerBidAmount = {
249248 let keyFreelancerBid = ((auctionId + "_") + freelancerPub)
250249 let valueFreelacerBid = getInteger(this, keyFreelancerBid)
251250 match valueFreelacerBid {
252251 case a: Int =>
253252 a
254253 case _ =>
255254 throw("Freelancer's bet was not found")
256255 }
257256 }
258257 let dAppCommission = ((auctionPrice * 3) / 100)
259258 let amountDifference = ((auctionPrice - FreelancerBidAmount) - dAppCommission)
260259 let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
261260 if ((callerPub == auctionCustomer))
262261 then if (auctionTimeisOver)
263262 then if ((auctionState == stateOpen))
264263 then ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + "NoFreelancer") + "_") + "NoBid"))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), (auctionPrice - dAppCommission), auctionAssetId58)]))
265264 else if ((auctionState == stateSuggested))
266265 then WriteSet([DataEntry(AuctionIdKey, ((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)))])
267266 else throw("Incorrect auction state")
268267 else ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(FreelancerBidAmount)) + "_") + freelancerPub))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), amountDifference, auctionAssetId58)]))
269268 else throw("Only auction customer can choose a freelancer")
270269 }
271270
272271
273272
274273 @Callable(i)
275274 func increaseExecutionTime (auctionId,executionDays) = {
276275 let caller = extract(i.callerPublicKey)
277276 let AuctionIdKey = AuctionIdDataKey(auctionId)
278277 let auctionDataList = getDataList(AuctionIdKey)
279278 let auctionState = auctionDataList[0]
280279 let auctionInfo = auctionDataList[1]
281280 let auctionCustomer = fromBase58String(auctionDataList[2])
282281 let auctionStart = parseIntValue(auctionDataList[3])
283282 let auctionDuration = parseIntValue(auctionDataList[4])
284283 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
285284 let auctionAssetName = auctionDataList[6]
286285 let auctionPrice = parseIntValue(auctionDataList[7])
287286 let newAuctionExecutionTime = {
288287 let newAuctionBlocksForExecution = (executionDays * day)
289288 if ((newAuctionBlocksForExecution > auctionBlocksForExecution))
290289 then newAuctionBlocksForExecution
291290 else throw("New execution time must more than current execution time")
292291 }
293292 if ((caller == auctionCustomer))
294293 then if ((auctionState == stateOpen))
295294 then WriteSet([DataEntry(AuctionIdKey, ((((((((((((((auctionState + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)))])
296295 else if (if ((auctionState == stateSuggested))
297296 then true
298297 else (auctionState == stateInProgress))
299298 then {
300299 let freelancerPub = auctionDataList[7]
301300 WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((auctionState + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + freelancerPub))])
302301 }
303302 else throw("Incorrect state")
304303 else throw("Only customer can increase execution time")
305304 }
306305
307306
308307
309308 @Callable(i)
310309 func cancelAuction (auctionId) = {
311310 let AuctionIdKey = AuctionIdDataKey(auctionId)
312311 let auctionDataList = getDataList(AuctionIdKey)
313312 let auctionState = auctionDataList[0]
314313 let auctionInfo = auctionDataList[1]
315314 let auctionCustomer = fromBase58String(auctionDataList[2])
316315 let auctionStart = parseIntValue(auctionDataList[3])
317316 let auctionDuration = parseIntValue(auctionDataList[4])
318317 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
319318 let auctionAssetName = auctionDataList[6]
320319 let auctionPrice = parseIntValue(auctionDataList[7])
321320 let auctionIdOwnerCheck = if ((i.callerPublicKey == auctionCustomer))
322321 then true
323322 else throw("Auction can be canceled only by owner.")
324323 if ((auctionState == stateOpen))
325324 then WriteSet([DataEntry(AuctionIdKey, ((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)))])
326325 else throw("Incorrect auction state.")
327326 }
328327
329328
330329
331330 @Callable(i)
332331 func openDispute (auctionId) = {
333332 let caller = extract(i.callerPublicKey)
334333 let AuctionIdKey = AuctionIdDataKey(auctionId)
335334 let auctionDataList = getDataList(AuctionIdKey)
336335 let auctionState = auctionDataList[0]
337336 let auctionInfo = auctionDataList[1]
338337 let auctionCustomer = fromBase58String(auctionDataList[2])
339338 let auctionStart = parseIntValue(auctionDataList[3])
340339 let auctionDuration = parseIntValue(auctionDataList[4])
341340 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
342341 let auctionAssetName = auctionDataList[6]
343342 let auctionPrice = parseIntValue(auctionDataList[7])
344343 let auctionFreelancer = fromBase58String(auctionDataList[8])
345344 if (if ((caller == auctionCustomer))
346345 then true
347346 else (caller == auctionFreelancer))
348347 then {
349348 let dataString = "1"
350349 WriteSet([DataEntry(AuctionIdKey, ((((stateDispute + "_") + auctionInfo) + "_") + dataString)), DataEntry((auctionId + "_Dispute"), "0")])
351350 }
352351 else throw("Only customer and freelancer can open dispute")
353352 }
354353
355354
356355
357356 @Callable(i)
358357 func voteDispute (auctionId,vote) = {
359358 let AuctionIdKey = AuctionIdDataKey(auctionId)
360359 let auctionDataList = getDataList(AuctionIdKey)
361360 let auctionState = auctionDataList[0]
362361 let auctionInfo = auctionDataList[1]
363362 let auctionCustomer = fromBase58String(auctionDataList[2])
364363 let auctionStart = parseIntValue(auctionDataList[3])
365364 let auctionDuration = parseIntValue(auctionDataList[4])
366365 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
367366 let auctionAssetName = auctionDataList[6]
368367 let auctionPrice = parseIntValue(auctionDataList[7])
369368 let auctionFreelancer = fromBase58String(auctionDataList[8])
370369 let comission = ((auctionPrice * 3) / 100)
371370 let auctionStateCheck = if ((auctionState == stateDispute))
372371 then true
373372 else throw(("Incorrect state. Must be: " + stateDispute))
374373 let newVote = if (if ((vote == customer))
375374 then true
376375 else (vote == freelancer))
377376 then vote
378377 else throw(((("Vote is incorrect. Must be: " + customer) + " or ") + freelancer))
379378 let newVoter = if (if (if (if (if ((i.callerPublicKey == ambassador1))
380379 then true
381380 else (i.callerPublicKey == ambassador2))
382381 then true
383382 else (i.callerPublicKey == ambassador3))
384383 then true
385384 else (i.callerPublicKey == ambassador4))
386385 then true
387386 else (i.callerPublicKey == ambassador5))
388387 then toBase58String(i.callerPublicKey)
389388 else throw("You have no rights for disputes resolving")
390389 let disputeData = {
391390 let keyDispute = ((auctionId + "_") + stateDispute)
392391 let valueDispute = getString(this, keyDispute)
393392 match valueDispute {
394393 case a: String =>
395394 a
396395 case _ =>
397396 throw("Cannot find data of dispute in storage")
398397 }
399398 }
400399 let disputeDataList = split(disputeData, "/")
401400 let votesCounter = disputeDataList[0]
402401 if ((votesCounter == "4"))
403402 then {
404403 let votersList = split(disputeDataList[1], "_")
405404 let votesList = split(disputeDataList[2], "_")
406405 let alreadyVoted = if ((newVoter == votersList[0]))
407406 then true
408407 else (newVoter == votersList[1])
409408 if (alreadyVoted)
410409 then throw("You already voted")
411410 else {
412411 let newVotesCounter = "5"
413412 let newVoters = ((disputeDataList[1] + "_") + newVoter)
414413 let newVotes = ((disputeDataList[2] + "_") + newVote)
415414 let newDisputeDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
416415 let disputeWinner = {
417416 let vote1 = if ((votesList[0] == customer))
418417 then 1
419418 else 0
420419 let vote2 = if ((votesList[1] == customer))
421420 then 1
422421 else 0
423422 let vote3 = if ((votesList[2] == customer))
424423 then 1
425424 else 0
426425 let vote4 = if ((votesList[3] == customer))
427426 then 1
428427 else 0
429428 let vote5 = if ((newVote == customer))
430429 then 1
431430 else 0
432431 let customerVotes = ((((vote1 + vote2) + vote3) + vote4) + vote5)
433432 if ((customerVotes > 2))
434433 then customer
435434 else freelancer
436435 }
437436 let newDataString = ((((((((((((((auctionInfo + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + toBase58String(auctionFreelancer))
438437 let disputeWinnerPublic = if ((disputeWinner == customer))
439438 then auctionCustomer
440439 else auctionFreelancer
441440 let amountWithoutComm = if ((disputeWinnerPublic == auctionCustomer))
442441 then (auctionPrice - comission)
443442 else ((auctionPrice - comission) - comission)
444443 ScriptResult(WriteSet([DataEntry(AuctionIdDataKey(auctionId), ((stateDisputeResolved + "_") + newDataString)), DataEntry(((auctionId + "_") + stateDispute), newDisputeDataString)]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinnerPublic), amountWithoutComm, AssetNameToBase58(auctionAssetName))]))
445444 }
446445 }
447446 else {
448447 let newDisputeDataString = if ((votesCounter == "0"))
449448 then {
450449 let newVotesCounter = "1"
451450 let newVoters = newVoter
452451 let newVotes = newVote
453452 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
454453 newDataString
455454 }
456455 else if ((votesCounter == "1"))
457456 then {
458457 let voter1 = disputeDataList[1]
459458 let vote1 = disputeDataList[2]
460459 let alreadyVoted = (newVoter == voter1)
461460 if (alreadyVoted)
462461 then throw("You already voted")
463462 else {
464463 let newVotesCounter = "1"
465464 let newVoters = (voter1 + newVoter)
466465 let newVotes = (vote1 + newVote)
467466 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
468467 newDataString
469468 }
470469 }
471470 else if ((votesCounter == "2"))
472471 then {
473472 let votersList = split(disputeDataList[1], "_")
474473 let votesList = split(disputeDataList[2], "_")
475474 let alreadyVoted = if ((newVoter == votersList[0]))
476475 then true
477476 else (newVoter == votersList[1])
478477 if (alreadyVoted)
479478 then throw("You already voted")
480479 else {
481480 let newVotesCounter = "3"
482481 let newVoters = ((disputeDataList[1] + "_") + newVoter)
483482 let newVotes = ((disputeDataList[2] + "_") + newVote)
484483 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
485484 newDataString
486485 }
487486 }
488487 else if ((votesCounter == "3"))
489488 then {
490489 let votersList = split(disputeDataList[1], "_")
491490 let votesList = split(disputeDataList[2], "_")
492491 let alreadyVoted = if (if ((newVoter == votersList[0]))
493492 then true
494493 else (newVoter == votersList[1]))
495494 then true
496495 else (newVoter == votersList[2])
497496 if (alreadyVoted)
498497 then throw("You already voted")
499498 else {
500499 let newVotesCounter = "4"
501500 let newVoters = ((disputeDataList[1] + "_") + newVoter)
502501 let newVotes = ((disputeDataList[2] + "_") + newVote)
503502 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
504503 newDataString
505504 }
506505 }
507506 else throw("Dispute has been already resolved")
508507 WriteSet([DataEntry(((auctionId + "_") + stateDispute), newDisputeDataString)])
509508 }
510509 }
511510
512511
513512
514513 @Callable(i)
515514 func workHandOver (auctionId) = {
516515 let callerPub = extract(i.callerPublicKey)
517516 let AuctionIdKey = AuctionIdDataKey(auctionId)
518517 let auctionDataList = getDataList(AuctionIdKey)
519518 let auctionState = auctionDataList[0]
520519 let auctionInfo = auctionDataList[1]
521520 let auctionCustomer = fromBase58String(auctionDataList[2])
522521 let auctionStart = parseIntValue(auctionDataList[3])
523522 let auctionDuration = parseIntValue(auctionDataList[4])
524523 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
525524 let auctionAssetName = auctionDataList[6]
526525 let auctionPrice = parseIntValue(auctionDataList[7])
527526 let auctionFreelancer = fromBase58String(auctionDataList[8])
528527 let currentTime = height
529528 let freelancerPubCheck = if ((callerPub == auctionFreelancer))
530529 then callerPub
531530 else throw("Only a freelancer can indicate that the work is done")
532531 let timeIsOver = ((currentTime - auctionStart) > auctionBlocksForExecution)
533532 if ((auctionState == stateInProgress))
534533 then if (timeIsOver)
535534 then {
536535 let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
537536 WriteSet([DataEntry(AuctionIdKey, ((((stateDispute + "_") + auctionInfo) + "_") + newDataString))])
538537 }
539538 else {
540539 let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
541540 WriteSet([DataEntry(AuctionIdKey, ((((stateWait4Confirm + "_") + auctionInfo) + "_") + newDataString))])
542541 }
543542 else throw("Auction state is incorrect")
544543 }
545544
546545
547546
548547 @Callable(i)
549548 func acceptWork (auctionId) = {
550549 let AuctionIdKey = AuctionIdDataKey(auctionId)
551550 let auctionDataList = getDataList(AuctionIdKey)
552551 let auctionState = auctionDataList[0]
553552 let auctionInfo = auctionDataList[1]
554553 let auctionCustomer = fromBase58String(auctionDataList[2])
555554 let auctionStart = parseIntValue(auctionDataList[3])
556555 let auctionDuration = parseIntValue(auctionDataList[4])
557556 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
558557 let auctionAssetName = auctionDataList[6]
559558 let auctionPrice = parseIntValue(auctionDataList[7])
560559 let auctionFreelancer = auctionDataList[2]
561560 let caller = extract(i.callerPublicKey)
562561 let dAppCommission = ((auctionPrice * 3) / 100)
563562 let amountWithoutComm = (auctionPrice - dAppCommission)
564563 let newRating = {
565564 let valueRating = getInteger(this, (auctionFreelancer + "_Rating"))
566565 let currentRating = match valueRating {
567566 case a: Int =>
568567 a
569568 case _ =>
570569 0
571570 }
572571 (currentRating + 1)
573572 }
574573 if ((caller == auctionCustomer))
575574 then if ((auctionState == stateWait4Confirm))
576575 then {
577576 let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
578577 ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((stateComplete + "_") + auctionInfo) + "_") + newDataString)), DataEntry((auctionFreelancer + "_Rating"), newRating)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionFreelancer)), amountWithoutComm, AssetNameToBase58(auctionAssetName))]))
579578 }
580579 else throw(("Incorrect state. Must be: " + stateWait4Confirm))
581580 else throw("Only auction customer can use this function")
582581 }
583582
584583
585584 @Verifier(tx)
586585 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
587586 then match tx {
588587 case ttx: TransferTransaction =>
589588 true
590589 case stx: SetScriptTransaction =>
591590 true
592591 case _ =>
593592 false
594593 }
595594 else false
596595

github/deemru/w8io/169f3d6 
85.93 ms