tx · E3vfbtkmN1MFjtjdLJ9G6o5CvjKkw3ZNGepKuZYevCpX

3N3LWiYdT9n8o6ecwFZGy6MCehhq6sLUFFL:  -0.01400000 Waves

2019.08.22 15:02 [642295] smart account 3N3LWiYdT9n8o6ecwFZGy6MCehhq6sLUFFL > SELF 0.00000000 Waves

{ "type": 13, "id": "E3vfbtkmN1MFjtjdLJ9G6o5CvjKkw3ZNGepKuZYevCpX", "fee": 1400000, "feeAssetId": null, "timestamp": 1566475413716, "version": 1, "sender": "3N3LWiYdT9n8o6ecwFZGy6MCehhq6sLUFFL", "senderPublicKey": "3RTmBp69DqXiohzMXcmVU1pMFssmztWoibFARiKrgTr7", "proofs": [ "yP4CUjVarpq1st11t3tottjaPd11vpjTWEfVBZh2LQs1oxsX53SXWUBnAvYG61Ym69YHnJMJ76UK1SLsaX14VEt" ], "script": "base64:AAIDAAAAAAAAAAAAAAAEAAAAAAVvd25lcgEAAAAaAVSTOHBLt7RyJdugRiL5k8zovFc+bobXqh8AAAAADWFzc2V0SWRUb2tlbkEBAAAAIHtxzCCjiO5MvMQa1Azqp+Y2rXgVKpJSDL3j5MzZkFIFAAAAAA1hc3NldElkVG9rZW5CBQAAAAR1bml0AAAAAAljb21pc3Npb24AAAAAAAAAAAAAAAADAAAACmNvbnRleHRPYmoBAAAABGZ1bmQAAAAABAAAAAdwYXltZW50BAAAAAckbWF0Y2gwCAUAAAAKY29udGV4dE9iagAAAAdwYXltZW50AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9BdHRhY2hlZFBheW1lbnQEAAAAAXAFAAAAByRtYXRjaDAFAAAAAXAJAAACAAAAAQIAAAAUUGF5bWVudCBub3QgYXR0YWNoZWQEAAAAD2Fzc2V0SWRSZWNlaXZlZAgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAQAAAASdG9rZW5SZWNlaXZlQW1vdW50CAUAAAAHcGF5bWVudAAAAAZhbW91bnQDAwkAAAAAAAACBQAAAA9hc3NldElkUmVjZWl2ZWQFAAAADWFzc2V0SWRUb2tlbkEJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwIAAAAFZnVuZEEHCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAxhbW91bnRUb2tlbkEFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAFZnVuZEECAAAABmZ1bmRlZAUAAAADbmlsAwkAAAAAAAACBQAAAA9hc3NldElkUmVjZWl2ZWQFAAAADWFzc2V0SWRUb2tlbkIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAADGFtb3VudFRva2VuQgUAAAASdG9rZW5SZWNlaXZlQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAVmdW5kQgIAAAAGZnVuZGVkBQAAAANuaWwJAAACAAAAAQIAAAA2YWxyZWFkeSBmdW5kZWQgb3IgeW91IHRyeSB0byBmdW5kIHdpdGggaW5jb3JyZWN0IGFzc2V0AAAACmNvbnRleHRPYmoBAAAACWV4Y2hhbmdlcgAAAAEAAAAPbWluVG9rZW5SZWNpZXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAJY29taXNzaW9uBgkAAGYAAAACBQAAAAljb21pc3Npb24AAAAAAAAAAGQJAAACAAAAAQIAAAAZaW5jb3JyZWN0IGNvbWlzc2lvbiB2YWx1ZQQAAAAMYW1vdW50VG9rZW5CCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAAAxhbW91bnRUb2tlbkIEAAAADGFtb3VudFRva2VuQQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAMYW1vdW50VG9rZW5BBAAAAAdwYXltZW50BAAAAAckbWF0Y2gwCAUAAAAKY29udGV4dE9iagAAAAdwYXltZW50AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9BdHRhY2hlZFBheW1lbnQEAAAAAXAFAAAAByRtYXRjaDAFAAAAAXAJAAACAAAAAQIAAAAUUGF5bWVudCBub3QgYXR0YWNoZWQEAAAAD2Fzc2V0SWRSZWNlaXZlZAgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAQAAAASdG9rZW5SZWNlaXZlQW1vdW50CAUAAAAHcGF5bWVudAAAAAZhbW91bnQDCQAAAAAAAAIFAAAAD2Fzc2V0SWRSZWNlaXZlZAUAAAANYXNzZXRJZFRva2VuQgQAAAAPdG9rZW5TZW5kQW1vdW50CQAAaQAAAAIJAABoAAAAAgkAAGsAAAADBQAAAAxhbW91bnRUb2tlbkEFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkAAGQAAAACBQAAABJ0b2tlblJlY2VpdmVBbW91bnQFAAAADGFtb3VudFRva2VuQgkAAGUAAAACAAAAAAAAAABkBQAAAAljb21pc3Npb24AAAAAAAAAAGQDCQAAZgAAAAIFAAAAD21pblRva2VuUmVjaWV2ZQUAAAAPdG9rZW5TZW5kQW1vdW50CQAAAgAAAAECAAAAWVByaWNlIGhhcyBjaGFuZ2VkIGRyYW1hdGljYWx5LiBSZWNlaXZpbmcgdG9rZW4gYW1vdW50IGRvbid0IHNhdGlzZnkgc3BlY2lmaWVkIHByaWNlIGxldmVsBAAAAAthc3NldElkU2VudAUAAAANYXNzZXRJZFRva2VuQQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAADGFtb3VudFRva2VuQQkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAD3Rva2VuU2VuZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5CCQAAZAAAAAIFAAAADGFtb3VudFRva2VuQgUAAAASdG9rZW5SZWNlaXZlQW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyBQAAAA90b2tlblNlbmRBbW91bnQFAAAAC2Fzc2V0SWRTZW50BQAAAANuaWwDCQAAAAAAAAIFAAAAD2Fzc2V0SWRSZWNlaXZlZAUAAAANYXNzZXRJZFRva2VuQQQAAAAPdG9rZW5TZW5kQW1vdW50CQAAaQAAAAIJAABoAAAAAgkAAGsAAAADBQAAAAxhbW91bnRUb2tlbkIFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkAAGQAAAACBQAAABJ0b2tlblJlY2VpdmVBbW91bnQFAAAADGFtb3VudFRva2VuQQkAAGUAAAACAAAAAAAAAABkBQAAAAljb21pc3Npb24AAAAAAAAAAGQDCQAAZgAAAAIFAAAAD21pblRva2VuUmVjaWV2ZQUAAAAPdG9rZW5TZW5kQW1vdW50CQAAAgAAAAECAAAAWVByaWNlIGhhcyBjaGFuZ2VkIGRyYW1hdGljYWx5LiBSZWNlaXZpbmcgdG9rZW4gYW1vdW50IGRvbid0IHNhdGlzZnkgc3BlY2lmaWVkIHByaWNlIGxldmVsBAAAAAthc3NldElkU2VudAUAAAANYXNzZXRJZFRva2VuQgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAADGFtb3VudFRva2VuQQkAAGQAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAEnRva2VuUmVjZWl2ZUFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5CCQAAZQAAAAIFAAAADGFtb3VudFRva2VuQgUAAAAPdG9rZW5TZW5kQW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyBQAAAA90b2tlblNlbmRBbW91bnQFAAAAC2Fzc2V0SWRTZW50BQAAAANuaWwJAAACAAAAAQIAAAAUQXNzZXQgaXMgbm90IGFsbG93ZWQAAAAKY29udGV4dE9iagEAAAAId2l0aGRyYXcAAAAABAAAAA1CYWxhbmNlVG9rZW5BCQAD6wAAAAIFAAAABHRoaXMFAAAADWFzc2V0SWRUb2tlbkEEAAAADUJhbGFuY2VUb2tlbkIJAAPrAAAAAgUAAAAEdGhpcwUAAAANYXNzZXRJZFRva2VuQgMJAAAAAAAAAggIBQAAAApjb250ZXh0T2JqAAAABmNhbGxlcgAAAAVieXRlcwUAAAAFb3duZXIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAxhbW91bnRUb2tlbkECAAAACXdpdGhkcmF3bgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAMYW1vdW50VG9rZW5CAgAAAAl3aXRoZHJhd24FAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAAKY29udGV4dE9iagAAAAZjYWxsZXIFAAAADUJhbGFuY2VUb2tlbkEFAAAADWFzc2V0SWRUb2tlbkEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyBQAAAA1CYWxhbmNlVG9rZW5CBQAAAA1hc3NldElkVG9rZW5CBQAAAANuaWwJAAACAAAAAQIAAAAdWW91IGFyZSBub3QgZXhjaGFuZ2VyJ3Mgb3duZXIAAAABAAAACmNvbnRleHRPYmoBAAAABnZlcmlmeQAAAAAG8eS6vQ==", "chainId": 84, "height": 642295, "spentComplexity": 0 } View: original | compacted Prev: 4U3FEhoZjDbjWBaQBgMhSuu3GjoudCiztd6NQnh6Es6u Next: 3mbQpL9V1L9bRAkhiood43XYiLcUrQKt5bHjxRxs58bh Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let owner = base58'3MpVFGJWgiGyh5LmE1nxNLsjjtSL3Bgh9NV'
4+let owner = base58'3N3LWiYdT9n8o6ecwFZGy6MCehhq6sLUFFL'
55
66 let assetIdTokenA = base58'9Jsnot7RWQmTsfXtezQN7igoS2q1QF1jsotaxwh8Fxp4'
77
88 let assetIdTokenB = unit
99
10-let comission = 99
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 ((assetIdReceived == assetIdTokenB))
27+ then WriteSet([DataEntry("amountTokenB", tokenReceiveAmount), DataEntry("fundB", "funded")])
28+ else throw("already funded or you try to fund with incorrect asset")
29+ }
30+
31+
1132
1233 @Callable(contextObj)
1334 func exchanger (minTokenRecieve) = if (if ((0 > comission))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let owner = base58'3MpVFGJWgiGyh5LmE1nxNLsjjtSL3Bgh9NV'
4+let owner = base58'3N3LWiYdT9n8o6ecwFZGy6MCehhq6sLUFFL'
55
66 let assetIdTokenA = base58'9Jsnot7RWQmTsfXtezQN7igoS2q1QF1jsotaxwh8Fxp4'
77
88 let assetIdTokenB = unit
99
10-let comission = 99
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 ((assetIdReceived == assetIdTokenB))
27+ then WriteSet([DataEntry("amountTokenB", tokenReceiveAmount), DataEntry("fundB", "funded")])
28+ else throw("already funded or you try to fund with incorrect asset")
29+ }
30+
31+
1132
1233 @Callable(contextObj)
1334 func exchanger (minTokenRecieve) = if (if ((0 > comission))
1435 then true
1536 else (comission > 100))
1637 then throw("incorrect comission value")
1738 else {
1839 let amountTokenB = getIntegerValue(this, "amountTokenB")
1940 let amountTokenA = getIntegerValue(this, "amountTokenA")
2041 let payment = match contextObj.payment {
2142 case p: AttachedPayment =>
2243 p
2344 case _ =>
2445 throw("Payment not attached")
2546 }
2647 let assetIdReceived = payment.assetId
2748 let tokenReceiveAmount = payment.amount
2849 if ((assetIdReceived == assetIdTokenB))
2950 then {
3051 let tokenSendAmount = ((fraction(amountTokenA, tokenReceiveAmount, (tokenReceiveAmount + amountTokenB)) * (100 - comission)) / 100)
3152 if ((minTokenRecieve > tokenSendAmount))
3253 then throw("Price has changed dramaticaly. Receiving token amount don't satisfy specified price level")
3354 else {
3455 let assetIdSent = assetIdTokenA
3556 ScriptResult(WriteSet([DataEntry("amountTokenA", (amountTokenA - tokenSendAmount)), DataEntry("amountTokenB", (amountTokenB + tokenReceiveAmount))]), TransferSet([ScriptTransfer(contextObj.caller, tokenSendAmount, assetIdSent)]))
3657 }
3758 }
3859 else if ((assetIdReceived == assetIdTokenA))
3960 then {
4061 let tokenSendAmount = ((fraction(amountTokenB, tokenReceiveAmount, (tokenReceiveAmount + amountTokenA)) * (100 - comission)) / 100)
4162 if ((minTokenRecieve > tokenSendAmount))
4263 then throw("Price has changed dramaticaly. Receiving token amount don't satisfy specified price level")
4364 else {
4465 let assetIdSent = assetIdTokenB
4566 ScriptResult(WriteSet([DataEntry("amountTokenA", (amountTokenA + tokenReceiveAmount)), DataEntry("amountTokenB", (amountTokenB - tokenSendAmount))]), TransferSet([ScriptTransfer(contextObj.caller, tokenSendAmount, assetIdSent)]))
4667 }
4768 }
4869 else throw("Asset is not allowed")
4970 }
5071
5172
5273
5374 @Callable(contextObj)
5475 func withdraw () = {
5576 let BalanceTokenA = assetBalance(this, assetIdTokenA)
5677 let BalanceTokenB = assetBalance(this, assetIdTokenB)
5778 if ((contextObj.caller.bytes == owner))
5879 then ScriptResult(WriteSet([DataEntry("amountTokenA", "withdrawn"), DataEntry("amountTokenB", "withdrawn")]), TransferSet([ScriptTransfer(contextObj.caller, BalanceTokenA, assetIdTokenA), ScriptTransfer(contextObj.caller, BalanceTokenB, assetIdTokenB)]))
5980 else throw("You are not exchanger's owner")
6081 }
6182
6283
6384 @Verifier(contextObj)
6485 func verify () = true
6586

github/deemru/w8io/3ef1775 
71.29 ms