tx · BLvpCB8sYfstfWgG5N8f7sfTBQHhyCFrGXhyrtgvuViA 3P7VznyyJc91e2SXpWTgc9Zp2d9XWHdwLJ1: -0.00300000 Waves 2023.09.27 00:10 [3838706] smart account 3P7VznyyJc91e2SXpWTgc9Zp2d9XWHdwLJ1 > SELF 0.00000000 Waves
{ "type": 13, "id": "BLvpCB8sYfstfWgG5N8f7sfTBQHhyCFrGXhyrtgvuViA", "fee": 300000, "feeAssetId": null, "timestamp": 1695762696005, "version": 2, "chainId": 87, "sender": "3P7VznyyJc91e2SXpWTgc9Zp2d9XWHdwLJ1", "senderPublicKey": "DiCe6VGgddpG7YfGhT4XXsPuQtiyzaV68EZUB8GNT3hs", "proofs": [ "3ewgsxAgGtNaeSo8fQMggKxkHfKo82QGLvEHkM8vXJayFDkA6iwKgmps4DvskiL1mLQ3jZyHCATcfaCsquCKVeVa" ], "script": "base64:BgIECAISAAkABnBycHJwcgIjM1BKRVNWRFRIUnY4aTgzWGJtSHJSR1FoRGM1cmdSM2F6UXMAAm1wAiMzUDR1QTVldG5aaTRBbUJhYktpbnEyYk1pV1U4S2NuSFpkSAAHc2NhbGUxNgCAgIT+pt7hEQEMdHJ5R2V0U3RyaW5nAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABDXRyeUdldEludGVnZXICA2tleQdhZGRyZXNzBAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QWNjQmFsYW5jZQEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkAQlnZXRfc3JhdGUCC3Bvb2xBZGRyZXNzB2Fzc2V0SWQJAQ10cnlHZXRJbnRlZ2VyAgkArAICBQdhc3NldElkAgZfc1JhdGUJAQdBZGRyZXNzAQkA2QQBBQtwb29sQWRkcmVzcwEQZ2V0X3BhcmFtc19ieV9QTAEJcGxBc3NldElkBAlwckFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQZwcnBycHIEB2Fzc2V0SWQJAQx0cnlHZXRTdHJpbmcCCQCsAgIJAKwCAgIGc2V0dXBfBQlwbEFzc2V0SWQCCF9hc3NldElkBQlwckFkZHJlc3MEC3Bvb2xBZGRyZXNzCQEMdHJ5R2V0U3RyaW5nAgkArAICCQCsAgICBnNldHVwXwUJcGxBc3NldElkAgxfcG9vbEFkZHJlc3MFCXByQWRkcmVzcwQKcG9vbERvbWFpbgkBDHRyeUdldFN0cmluZwIJAKwCAgkArAICAgZzZXR1cF8FCXBsQXNzZXRJZAILX3Bvb2xEb21haW4FCXByQWRkcmVzcwkAlQoDBQdhc3NldElkBQtwb29sQWRkcmVzcwUKcG9vbERvbWFpbgEBaQEDcHR3AAQKcGF5QXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwYXlBbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAskdDAxNDg0MTU3MAkBEGdldF9wYXJhbXNfYnlfUEwBCQEOZ2V0QXNzZXRTdHJpbmcBBQpwYXlBc3NldElkBAdhc3NldElkCAULJHQwMTQ4NDE1NzACXzEEC3Bvb2xBZGRyZXNzCAULJHQwMTQ4NDE1NzACXzIECnBvb2xEb21haW4IBQskdDAxNDg0MTU3MAJfMwQHcG9vbEFkcgkBB0FkZHJlc3MBCQDZBAEFC3Bvb2xBZGRyZXNzBAhzdXBwbEJlZgkBDXRyeUdldEludGVnZXICCQCsAgIJAKwCAgkApQgBBQR0aGlzAgpfc3VwcGxpZWRfBQdhc3NldElkBQdwb29sQWRyAwkAAAIFCHN1cHBsQmVmBQhzdXBwbEJlZgQGYmFsQmVmCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SWQDCQAAAgUGYmFsQmVmBQZiYWxCZWYECGltcG9ydFBMCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQZwcnBycHICCGltcG9ydFBMCQDMCAIFCnBvb2xEb21haW4JAMwIAgkApQgBBQR0aGlzBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFCGltcG9ydFBMBQhpbXBvcnRQTAQKc3VwcGxBZnRlcgkBDXRyeUdldEludGVnZXICCQCsAgIJAKwCAgkApQgBBQR0aGlzAgpfc3VwcGxpZWRfBQdhc3NldElkBQdwb29sQWRyAwkAAAIFCnN1cHBsQWZ0ZXIFCnN1cHBsQWZ0ZXIEEGFtb3VudFRvV2l0aGRyYXcJAGsDCQBlAgUKc3VwcGxBZnRlcgUIc3VwcGxCZWYJAQlnZXRfc3JhdGUCBQtwb29sQWRkcmVzcwUHYXNzZXRJZAUHc2NhbGUxNgMJAAACBRBhbW91bnRUb1dpdGhkcmF3BRBhbW91bnRUb1dpdGhkcmF3BAd3aXRkcmF3CQD8BwQJAQdBZGRyZXNzAQkA2QQBBQtwb29sQWRkcmVzcwIId2l0aGRyYXcJAMwIAgUHYXNzZXRJZAkAzAgCBRBhbW91bnRUb1dpdGhkcmF3BQNuaWwFA25pbAMJAAACBQd3aXRkcmF3BQd3aXRkcmF3BAhiYWxBZnRlcgkBDWdldEFjY0JhbGFuY2UBBQdhc3NldElkAwkAAAIFCGJhbEFmdGVyBQhiYWxBZnRlcgQKd2l0aGRyYXdlZAkAZQIFCGJhbEFmdGVyBQZiYWxCZWYDCQAAAgUKd2l0aGRyYXdlZAUKd2l0aGRyYXdlZAMGCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIDMTogCQCkAwEFCXBheUFtb3VudAIFLCAyOiAJAKQDAQUKd2l0aGRyYXdlZAIOLCBzdXBwbEFmdGVyOiAJAKQDAQUKc3VwcGxBZnRlcgIKLCBiYWxiZWY6IAkApAMBBQZiYWxCZWYCDCwgYmFsQWZ0ZXI6IAkApAMBBQhiYWxBZnRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuANRRNGw=", "height": 3838706, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HfusYovrmuQm7cGrwC8RQW8VgWAYw8RCpusW727hZrGw Next: 6zCetuLs7EqsN5fmnNWNUHQVwtVgtW2yZZ9pWLPufTex Diff:
Old | New | Differences | |
---|---|---|---|
4 | 4 | let prprpr = "3PJESVDTHRv8i83XbmHrRGQhDc5rgR3azQs" | |
5 | 5 | ||
6 | 6 | let mp = "3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" | |
7 | + | ||
8 | + | let scale16 = 10000000000000000 | |
7 | 9 | ||
8 | 10 | func tryGetString (key,address) = match getString(address, key) { | |
9 | 11 | case b: String => | |
34 | 36 | else assetBalance(this, fromBase58String(assetId)) | |
35 | 37 | ||
36 | 38 | ||
39 | + | func get_srate (poolAddress,assetId) = tryGetInteger((assetId + "_sRate"), Address(fromBase58String(poolAddress))) | |
40 | + | ||
41 | + | ||
37 | 42 | func get_params_by_PL (plAssetId) = { | |
38 | 43 | let prAddress = Address(fromBase58String(prprpr)) | |
39 | 44 | let assetId = tryGetString((("setup_" + plAssetId) + "_assetId"), prAddress) | |
47 | 52 | func ptw () = { | |
48 | 53 | let payAssetId = i.payments[0].assetId | |
49 | 54 | let payAmount = value(i.payments[0].amount) | |
50 | - | let $ | |
51 | - | let assetId = $ | |
52 | - | let poolAddress = $ | |
53 | - | let poolDomain = $ | |
55 | + | let $t014841570 = get_params_by_PL(getAssetString(payAssetId)) | |
56 | + | let assetId = $t014841570._1 | |
57 | + | let poolAddress = $t014841570._2 | |
58 | + | let poolDomain = $t014841570._3 | |
54 | 59 | let poolAdr = Address(fromBase58String(poolAddress)) | |
55 | 60 | let supplBef = tryGetInteger(((toString(this) + "_supplied_") + assetId), poolAdr) | |
56 | 61 | if ((supplBef == supplBef)) | |
64 | 69 | let supplAfter = tryGetInteger(((toString(this) + "_supplied_") + assetId), poolAdr) | |
65 | 70 | if ((supplAfter == supplAfter)) | |
66 | 71 | then { | |
67 | - | let amountToWithdraw = (supplAfter - supplBef) | |
72 | + | let amountToWithdraw = fraction((supplAfter - supplBef), get_srate(poolAddress, assetId), scale16) | |
68 | 73 | if ((amountToWithdraw == amountToWithdraw)) | |
69 | 74 | then { | |
70 | 75 | let witdraw = invoke(Address(fromBase58String(poolAddress)), "withdraw", [assetId, amountToWithdraw], nil) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let prprpr = "3PJESVDTHRv8i83XbmHrRGQhDc5rgR3azQs" | |
5 | 5 | ||
6 | 6 | let mp = "3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" | |
7 | + | ||
8 | + | let scale16 = 10000000000000000 | |
7 | 9 | ||
8 | 10 | func tryGetString (key,address) = match getString(address, key) { | |
9 | 11 | case b: String => | |
10 | 12 | b | |
11 | 13 | case _ => | |
12 | 14 | "" | |
13 | 15 | } | |
14 | 16 | ||
15 | 17 | ||
16 | 18 | func tryGetInteger (key,address) = match getInteger(address, key) { | |
17 | 19 | case b: Int => | |
18 | 20 | b | |
19 | 21 | case _ => | |
20 | 22 | 0 | |
21 | 23 | } | |
22 | 24 | ||
23 | 25 | ||
24 | 26 | func getAssetString (assetId) = match assetId { | |
25 | 27 | case b: ByteVector => | |
26 | 28 | toBase58String(b) | |
27 | 29 | case _ => | |
28 | 30 | "WAVES" | |
29 | 31 | } | |
30 | 32 | ||
31 | 33 | ||
32 | 34 | func getAccBalance (assetId) = if ((assetId == "WAVES")) | |
33 | 35 | then wavesBalance(this).available | |
34 | 36 | else assetBalance(this, fromBase58String(assetId)) | |
35 | 37 | ||
36 | 38 | ||
39 | + | func get_srate (poolAddress,assetId) = tryGetInteger((assetId + "_sRate"), Address(fromBase58String(poolAddress))) | |
40 | + | ||
41 | + | ||
37 | 42 | func get_params_by_PL (plAssetId) = { | |
38 | 43 | let prAddress = Address(fromBase58String(prprpr)) | |
39 | 44 | let assetId = tryGetString((("setup_" + plAssetId) + "_assetId"), prAddress) | |
40 | 45 | let poolAddress = tryGetString((("setup_" + plAssetId) + "_poolAddress"), prAddress) | |
41 | 46 | let poolDomain = tryGetString((("setup_" + plAssetId) + "_poolDomain"), prAddress) | |
42 | 47 | $Tuple3(assetId, poolAddress, poolDomain) | |
43 | 48 | } | |
44 | 49 | ||
45 | 50 | ||
46 | 51 | @Callable(i) | |
47 | 52 | func ptw () = { | |
48 | 53 | let payAssetId = i.payments[0].assetId | |
49 | 54 | let payAmount = value(i.payments[0].amount) | |
50 | - | let $ | |
51 | - | let assetId = $ | |
52 | - | let poolAddress = $ | |
53 | - | let poolDomain = $ | |
55 | + | let $t014841570 = get_params_by_PL(getAssetString(payAssetId)) | |
56 | + | let assetId = $t014841570._1 | |
57 | + | let poolAddress = $t014841570._2 | |
58 | + | let poolDomain = $t014841570._3 | |
54 | 59 | let poolAdr = Address(fromBase58String(poolAddress)) | |
55 | 60 | let supplBef = tryGetInteger(((toString(this) + "_supplied_") + assetId), poolAdr) | |
56 | 61 | if ((supplBef == supplBef)) | |
57 | 62 | then { | |
58 | 63 | let balBef = getAccBalance(assetId) | |
59 | 64 | if ((balBef == balBef)) | |
60 | 65 | then { | |
61 | 66 | let importPL = invoke(Address(fromBase58String(prprpr)), "importPL", [poolDomain, toString(this)], i.payments) | |
62 | 67 | if ((importPL == importPL)) | |
63 | 68 | then { | |
64 | 69 | let supplAfter = tryGetInteger(((toString(this) + "_supplied_") + assetId), poolAdr) | |
65 | 70 | if ((supplAfter == supplAfter)) | |
66 | 71 | then { | |
67 | - | let amountToWithdraw = (supplAfter - supplBef) | |
72 | + | let amountToWithdraw = fraction((supplAfter - supplBef), get_srate(poolAddress, assetId), scale16) | |
68 | 73 | if ((amountToWithdraw == amountToWithdraw)) | |
69 | 74 | then { | |
70 | 75 | let witdraw = invoke(Address(fromBase58String(poolAddress)), "withdraw", [assetId, amountToWithdraw], nil) | |
71 | 76 | if ((witdraw == witdraw)) | |
72 | 77 | then { | |
73 | 78 | let balAfter = getAccBalance(assetId) | |
74 | 79 | if ((balAfter == balAfter)) | |
75 | 80 | then { | |
76 | 81 | let withdrawed = (balAfter - balBef) | |
77 | 82 | if ((withdrawed == withdrawed)) | |
78 | 83 | then if (true) | |
79 | 84 | then throw(((((((((("1: " + toString(payAmount)) + ", 2: ") + toString(withdrawed)) + ", supplAfter: ") + toString(supplAfter)) + ", balbef: ") + toString(balBef)) + ", balAfter: ") + toString(balAfter))) | |
80 | 85 | else nil | |
81 | 86 | else throw("Strict value is not equal to itself.") | |
82 | 87 | } | |
83 | 88 | else throw("Strict value is not equal to itself.") | |
84 | 89 | } | |
85 | 90 | else throw("Strict value is not equal to itself.") | |
86 | 91 | } | |
87 | 92 | else throw("Strict value is not equal to itself.") | |
88 | 93 | } | |
89 | 94 | else throw("Strict value is not equal to itself.") | |
90 | 95 | } | |
91 | 96 | else throw("Strict value is not equal to itself.") | |
92 | 97 | } | |
93 | 98 | else throw("Strict value is not equal to itself.") | |
94 | 99 | } | |
95 | 100 | else throw("Strict value is not equal to itself.") | |
96 | 101 | } | |
97 | 102 | ||
98 | 103 |
github/deemru/w8io/3ef1775 34.13 ms ◑