tx · 6U5X3NMAjSvS9hJrjt6aoVzLq5oifQXj36R69G3G3YXr

3MvJG7JaQ2RNvCDZLUjDmnVMLkUNZxabFU1:  -0.01000000 Waves

2019.08.30 10:07 [653658] smart account 3MvJG7JaQ2RNvCDZLUjDmnVMLkUNZxabFU1 > SELF 0.00000000 Waves

{ "type": 13, "id": "6U5X3NMAjSvS9hJrjt6aoVzLq5oifQXj36R69G3G3YXr", "fee": 1000000, "feeAssetId": null, "timestamp": 1567148765813, "version": 1, "sender": "3MvJG7JaQ2RNvCDZLUjDmnVMLkUNZxabFU1", "senderPublicKey": "Aja55TXTnqyVFswMyKYZmFKJhr4Dui4fMaUJrSPuo9UH", "proofs": [ "VXXhcbYkjNXcJREpBSGhErazexG7goF9Sxg2JA3wD2bTVeRSgWjecnzyrYSc6KXrZKDaSGQemUDXQQx7H9vVnM2" ], "script": "base64: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YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5BCQAAZAAAAAIFAAAADGFtb3VudFRva2VuQgUAAAASdG9rZW5SZWNlaXZlQW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAAndGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSByZXBsZW5pc2htZW50AAAACmNvbnRleHRPYmoBAAAACWV4Y2hhbmdlcgAAAAEAAAAPbWluVG9rZW5SZWNpZXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAJY29taXNzaW9uBgkAAGYAAAACBQAAAAljb21pc3Npb24AAAAAAAAAAGQJAAACAAAAAQIAAAAZaW5jb3JyZWN0IGNvbWlzc2lvbiB2YWx1ZQQAAAAMYW1vdW50VG9rZW5CCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAAAxhbW91bnRUb2tlbkIEAAAADGFtb3VudFRva2VuQQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAMYW1vdW50VG9rZW5BBAAAAAdwYXltZW50BAAAAAckbWF0Y2gwCAUAAAAKY29udGV4dE9iagAAAAdwYXltZW50AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9BdHRhY2hlZFBheW1lbnQEAAAAAXAFAAAAByRtYXRjaDAFAAAAAXAJAAACAAAAAQIAAAAUUGF5bWVudCBub3QgYXR0YWNoZWQEAAAAD2Fzc2V0SWRSZWNlaXZlZAgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAQAAAASdG9rZW5SZWNlaXZlQW1vdW50CAUAAAAHcGF5bWVudAAAAAZhbW91bnQDCQAAAAAAAAIFAAAAD2Fzc2V0SWRSZWNlaXZlZAUAAAANYXNzZXRJZFRva2VuQgQAAAAPdG9rZW5TZW5kQW1vdW50CQAAaQAAAAIJAABoAAAAAgkAAGsAAAADBQAAAAxhbW91bnRUb2tlbkEFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkAAGQAAAACBQAAABJ0b2tlblJlY2VpdmVBbW91bnQFAAAADGFtb3VudFRva2VuQgkAAGUAAAACAAAAAAAAAABkBQAAAAljb21pc3Npb24AAAAAAAAAAGQDCQAAZgAAAAIFAAAAD21pblRva2VuUmVjaWV2ZQUAAAAPdG9rZW5TZW5kQW1vdW50CQAAAgAAAAECAAAAWVByaWNlIGhhcyBjaGFuZ2VkIGRyYW1hdGljYWx5LiBSZWNlaXZpbmcgdG9rZW4gYW1vdW50IGRvbid0IHNhdGlzZnkgc3BlY2lmaWVkIHByaWNlIGxldmVsBAAAAAthc3NldElkU2VudAUAAAANYXNzZXRJZFRva2VuQQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAADGFtb3VudFRva2VuQQkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAD3Rva2VuU2VuZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5CCQAAZAAAAAIFAAAADGFtb3VudFRva2VuQgUAAAASdG9rZW5SZWNlaXZlQW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyBQAAAA90b2tlblNlbmRBbW91bnQFAAAAC2Fzc2V0SWRTZW50BQAAAANuaWwDCQAAAAAAAAIFAAAAD2Fzc2V0SWRSZWNlaXZlZAUAAAANYXNzZXRJZFRva2VuQQQAAAAPdG9rZW5TZW5kQW1vdW50CQAAaQAAAAIJAABoAAAAAgkAAGsAAAADBQAAAAxhbW91bnRUb2tlbkIFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkAAGQAAAACBQAAABJ0b2tlblJlY2VpdmVBbW91bnQFAAAADGFtb3VudFRva2VuQQkAAGUAAAACAAAAAAAAAABkBQAAAAljb21pc3Npb24AAAAAAAAAAGQDCQAAZgAAAAIFAAAAD21pblRva2VuUmVjaWV2ZQUAAAAPdG9rZW5TZW5kQW1vdW50CQAAAgAAAAECAAAAWVByaWNlIGhhcyBjaGFuZ2VkIGRyYW1hdGljYWx5LiBSZWNlaXZpbmcgdG9rZW4gYW1vdW50IGRvbid0IHNhdGlzZnkgc3BlY2lmaWVkIHByaWNlIGxldmVsBAAAAAthc3NldElkU2VudAUAAAANYXNzZXRJZFRva2VuQgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAADGFtb3VudFRva2VuQQkAAGQAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5CCQAAZQAAAAIFAAAADGFtb3VudFRva2VuQgUAAAAPdG9rZW5TZW5kQW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyBQAAAA90b2tlblNlbmRBbW91bnQFAAAAC2Fzc2V0SWRTZW50BQAAAANuaWwJAAACAAAAAQIAAAAUQXNzZXQgaXMgbm90IGFsbG93ZWQAAAAKY29udGV4dE9iagEAAAAId2l0aGRyYXcAAAAABAAAAA1CYWxhbmNlVG9rZW5BCQAD6wAAAAIFAAAABHRoaXMFAAAADWFzc2V0SWRUb2tlbkEEAAAADUJhbGFuY2VUb2tlbkIJAAPrAAAAAgUAAAAEdGhpcwUAAAANYXNzZXRJZFRva2VuQgMJAAAAAAAAAggIBQAAAApjb250ZXh0T2JqAAAABmNhbGxlcgAAAAVieXRlcwUAAAAFb3duZXIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAxhbW91bnRUb2tlbkECAAAACXdpdGhkcmF3bgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5CAgAAAAl3aXRoZHJhd24FAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAAKY29udGV4dE9iagAAAAZjYWxsZXIFAAAADUJhbGFuY2VUb2tlbkEFAAAADWFzc2V0SWRUb2tlbkEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyBQAAAA1CYWxhbmNlVG9rZW5CBQAAAA1hc3NldElkVG9rZW5CBQAAAANuaWwJAAACAAAAAQIAAAAdWW91IGFyZSBub3QgZXhjaGFuZ2VyJ3Mgb3duZXIAAAABAAAACmNvbnRleHRPYmoBAAAABnZlcmlmeQAAAAAG+qmv+A==", "chainId": 84, "height": 653658, "spentComplexity": 0 } View: original | compacted Prev: none Next: 7mo1fnUfWSu8XgsUjf2iKtVQTYtXhSPnkeCNrFvnKiHi Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let owner = base58'3MvJG7JaQ2RNvCDZLUjDmnVMLkUNZxabFU1'
5+
6+let assetIdTokenA = base58'5XKoQDZphxtgtXxm36qhXrYo1F6mRLa9M8QHUDPWQ4mi'
7+
8+let assetIdTokenB = base58'EAQmgtbWGdquUu2mz853vKXRmHaUw83tSWAQfkdsevNp'
9+
10+let comission = 0
11+
12+@Callable(contextObj)
13+func fund () = {
14+ let payment = match contextObj.payment {
15+ case p: AttachedPayment =>
16+ p
17+ case _ =>
18+ throw("Payment not attached")
19+ }
20+ let assetIdReceived = payment.assetId
21+ let tokenReceiveAmount = payment.amount
22+ if (if ((assetIdReceived == assetIdTokenA))
23+ then !(isDefined(getString(this, "fundA")))
24+ else false)
25+ then WriteSet([DataEntry("amountTokenA", tokenReceiveAmount), DataEntry("fundA", "funded")])
26+ else if (if ((assetIdReceived == assetIdTokenB))
27+ then !(isDefined(getString(this, "fundB")))
28+ else false)
29+ then WriteSet([DataEntry("amountTokenB", tokenReceiveAmount), DataEntry("fundB", "funded")])
30+ else throw("already funded or you try to fund with incorrect asset")
31+ }
32+
33+
34+
35+@Callable(contextObj)
36+func replenishment () = {
37+ let payment = match contextObj.payment {
38+ case p: AttachedPayment =>
39+ p
40+ case _ =>
41+ throw("Payment not attached")
42+ }
43+ let assetIdReceived = payment.assetId
44+ let tokenReceiveAmount = payment.amount
45+ if (if ((assetIdReceived == assetIdTokenA))
46+ then !(isDefined(getString(this, "fundA")))
47+ else false)
48+ then {
49+ let amountTokenA = getIntegerValue(this, "amountTokenA")
50+ WriteSet([DataEntry("amountTokenA", (amountTokenA + tokenReceiveAmount))])
51+ }
52+ else if (if ((assetIdReceived == assetIdTokenB))
53+ then !(isDefined(getString(this, "fundB")))
54+ else false)
55+ then {
56+ let amountTokenB = getIntegerValue(this, "amountTokenB")
57+ WriteSet([DataEntry("amountTokenA", (amountTokenB + tokenReceiveAmount))])
58+ }
59+ else throw("there was an error in the replenishment")
60+ }
61+
62+
63+
64+@Callable(contextObj)
65+func exchanger (minTokenRecieve) = if (if ((0 > comission))
66+ then true
67+ else (comission > 100))
68+ then throw("incorrect comission value")
69+ else {
70+ let amountTokenB = getIntegerValue(this, "amountTokenB")
71+ let amountTokenA = getIntegerValue(this, "amountTokenA")
72+ let payment = match contextObj.payment {
73+ case p: AttachedPayment =>
74+ p
75+ case _ =>
76+ throw("Payment not attached")
77+ }
78+ let assetIdReceived = payment.assetId
79+ let tokenReceiveAmount = payment.amount
80+ if ((assetIdReceived == assetIdTokenB))
81+ then {
82+ let tokenSendAmount = ((fraction(amountTokenA, tokenReceiveAmount, (tokenReceiveAmount + amountTokenB)) * (100 - comission)) / 100)
83+ if ((minTokenRecieve > tokenSendAmount))
84+ then throw("Price has changed dramaticaly. Receiving token amount don't satisfy specified price level")
85+ else {
86+ let assetIdSent = assetIdTokenA
87+ ScriptResult(WriteSet([DataEntry("amountTokenA", (amountTokenA - tokenSendAmount)), DataEntry("amountTokenB", (amountTokenB + tokenReceiveAmount))]), TransferSet([ScriptTransfer(contextObj.caller, tokenSendAmount, assetIdSent)]))
88+ }
89+ }
90+ else if ((assetIdReceived == assetIdTokenA))
91+ then {
92+ let tokenSendAmount = ((fraction(amountTokenB, tokenReceiveAmount, (tokenReceiveAmount + amountTokenA)) * (100 - comission)) / 100)
93+ if ((minTokenRecieve > tokenSendAmount))
94+ then throw("Price has changed dramaticaly. Receiving token amount don't satisfy specified price level")
95+ else {
96+ let assetIdSent = assetIdTokenB
97+ ScriptResult(WriteSet([DataEntry("amountTokenA", (amountTokenA + tokenReceiveAmount)), DataEntry("amountTokenB", (amountTokenB - tokenSendAmount))]), TransferSet([ScriptTransfer(contextObj.caller, tokenSendAmount, assetIdSent)]))
98+ }
99+ }
100+ else throw("Asset is not allowed")
101+ }
102+
103+
104+
105+@Callable(contextObj)
106+func withdraw () = {
107+ let BalanceTokenA = assetBalance(this, assetIdTokenA)
108+ let BalanceTokenB = assetBalance(this, assetIdTokenB)
109+ if ((contextObj.caller.bytes == owner))
110+ then ScriptResult(WriteSet([DataEntry("amountTokenA", "withdrawn"), DataEntry("amountTokenB", "withdrawn")]), TransferSet([ScriptTransfer(contextObj.caller, BalanceTokenA, assetIdTokenA), ScriptTransfer(contextObj.caller, BalanceTokenB, assetIdTokenB)]))
111+ else throw("You are not exchanger's owner")
112+ }
113+
114+
115+@Verifier(contextObj)
116+func verify () = true
117+

github/deemru/w8io/3ef1775 
45.56 ms