tx · Gv1U45NncsM3aiCmtw837WHdw4xS1MzpJcqFe15PC6oe

3N2j6yXv5aLx1DTVGpwUmJHKZb5XwMfWZhk:  -0.00500000 Waves

2022.07.13 18:42 [2138154] smart account 3N2j6yXv5aLx1DTVGpwUmJHKZb5XwMfWZhk > SELF 0.00000000 Waves

{ "type": 13, "id": "Gv1U45NncsM3aiCmtw837WHdw4xS1MzpJcqFe15PC6oe", "fee": 500000, "feeAssetId": null, "timestamp": 1657727012736, "version": 2, "chainId": 84, "sender": "3N2j6yXv5aLx1DTVGpwUmJHKZb5XwMfWZhk", "senderPublicKey": "8ZzMCsQ15BKiHk944146A5WQ8eSFd8vaff4xaktCKSBK", "proofs": [ "qscxFYRt4cfmnShq96T5nM4RffASuwGmeuNPBs6QGmm84yd5qkqbGKaMGYTTz4spkRcHvsru8tp98xiGrj2XgQK" ], "script": "base64:BgIMCAISABIAEgQKAggIEAAJc2VwYXJhdG9yAgFfAQ1nZXRQYWlyTGVuZ3RoAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAgpwYWlyTGVuZ3RoAAABDXNldFBhaXJMZW5naHQBCW5ld0xlbmd0aAkBDEludGVnZXJFbnRyeQICCnBhaXJMZW5ndGgFCW5ld0xlbmd0aAEKZ2V0UGFpcktleQIGdG9rZW4wBnRva2VuMQQIdG9rZW4wQlYJALEJAQkA2QQBBQZ0b2tlbjAECHRva2VuMUJWCQCxCQEJANkEAQUGdG9rZW4xAwkAZgIFCHRva2VuMUJWBQh0b2tlbjBCVgkAuQkCCQDMCAIFBnRva2VuMAkAzAgCBQZ0b2tlbjEFA25pbAUJc2VwYXJhdG9yCQC5CQIJAMwIAgUGdG9rZW4xCQDMCAIFBnRva2VuMAUDbmlsBQlzZXBhcmF0b3IBDmdldFBhaXJUb2tlbklkAgZ0b2tlbjAGdG9rZW4xCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEKZ2V0UGFpcktleQIFBnRva2VuMAUGdG9rZW4xAQ5zZXRQYWlyVG9rZW5JZAMGdG9rZW4wBnRva2VuMQdpc3N1ZUlkCQELU3RyaW5nRW50cnkCCQEKZ2V0UGFpcktleQIFBnRva2VuMAUGdG9rZW4xBQdpc3N1ZUlkAQ5qb2luUGFpclN0cnVjdAQGdG9rZW4wBnRva2VuMQhyZXNlcnZlMAhyZXNlcnZlMQkAuQkCCQDMCAIFBnRva2VuMAkAzAgCBQZ0b2tlbjEJAMwIAgkApAMBBQhyZXNlcnZlMAkAzAgCCQCkAwEFCHJlc2VydmUxBQNuaWwFCXNlcGFyYXRvcgEOZ2V0UGFpckRldGFpbHMBCWxwVG9rZW5JZAQHZGV0YWlscwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCWxwVG9rZW5JZAIVYXNzZXRJZDBfYXNzZXRJZDFfMF8wBQlzZXBhcmF0b3IJAJYKBAkAkQMCBQdkZXRhaWxzAAAJAJEDAgUHZGV0YWlscwABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZGV0YWlscwACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZGV0YWlscwADAQ5zZXRQYWlyRGV0YWlscwUJbHBUb2tlbklkBnRva2VuMAZ0b2tlbjEIcmVzZXJ2ZTAIcmVzZXJ2ZTEJAQtTdHJpbmdFbnRyeQIFCWxwVG9rZW5JZAkBDmpvaW5QYWlyU3RydWN0BAUGdG9rZW4wBQZ0b2tlbjEFCHJlc2VydmUwBQhyZXNlcnZlMQESZ2V0UGFpclRvdGFsU3VwcGx5AQlscFRva2VuSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgICC3RvdGFsU3VwcGx5BQlzZXBhcmF0b3IFCWxwVG9rZW5JZAAAARJzZXRQYWlyVG90YWxTdXBwbHkCCWxwVG9rZW5JZA5uZXdUb3RhbFN1cHBseQkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgt0b3RhbFN1cHBseQUJc2VwYXJhdG9yBQlscFRva2VuSWQFDm5ld1RvdGFsU3VwcGx5AQlpc05ld1BhaXICBnRva2VuMAZ0b2tlbjEJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBCmdldFBhaXJLZXkCBQZ0b2tlbjAFBnRva2VuMQENaXNUb2tlbkV4aXN0cwEHdG9rZW5JZAYABG1heHgAgKCUpY0dAAh6ZXJvQWRkcgkBBXZhbHVlAQkApggBAiMzTTRxd0RvbVJhYkpLTFp4dVhod2ZxTEFwUWtVNTkybld4RgARTUlOSU1VTV9MSVFVSURJVFkAoI0GAwFpAQRtaW50AAQGdG9rZW4wCQDYBAEJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQGdG9rZW4xCQDYBAEJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAQHbHBUb2tlbgkBDmdldFBhaXJUb2tlbklkAgUGdG9rZW4wBQZ0b2tlbjEEB2Ftb3VudDAJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdhbW91bnQxCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAQLJHQwMjM3MjI0NTQJAQ5nZXRQYWlyRGV0YWlscwEFB2xwVG9rZW4ECnBhaXJUb2tlbjAIBQskdDAyMzcyMjQ1NAJfMQQKcGFpclRva2VuMQgFCyR0MDIzNzIyNDU0Al8yBAxwYWlyUmVzZXJ2ZTAIBQskdDAyMzcyMjQ1NAJfMwQMcGFpclJlc2VydmUxCAULJHQwMjM3MjI0NTQCXzQEC3RvdGFsU3VwcGx5CQESZ2V0UGFpclRvdGFsU3VwcGx5AQUHbHBUb2tlbgMJAAACBQt0b3RhbFN1cHBseQAABAlsaXF1aWRpdHkJAGUCCQEEc3FydAQJAGgCBQdhbW91bnQwBQdhbW91bnQxAAAAAAUERE9XTgURTUlOSU1VTV9MSVFVSURJVFkJAMwIAgkBB1JlaXNzdWUDCQDZBAEFB2xwVG9rZW4JAGQCBQlsaXF1aWRpdHkFEU1JTklNVU1fTElRVUlESVRZBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh6ZXJvQWRkcgURTUlOSU1VTV9MSVFVSURJVFkJANkEAQUHbHBUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCWxpcXVpZGl0eQkA2QQBBQdscFRva2VuCQDMCAIJARJzZXRQYWlyVG90YWxTdXBwbHkCBQdscFRva2VuCQBkAgUJbGlxdWlkaXR5BRFNSU5JTVVNX0xJUVVJRElUWQkAzAgCCQEOc2V0UGFpckRldGFpbHMFBQdscFRva2VuBQZ0b2tlbjAFBnRva2VuMQkAZAIFDHBhaXJSZXNlcnZlMAUHYW1vdW50MAkAZAIFDHBhaXJSZXNlcnZlMQUHYW1vdW50MQUDbmlsBAlsaXF1aWRpdHkJAJcDAQkAzAgCCQBpAgkAaAIFB2Ftb3VudDAFC3RvdGFsU3VwcGx5BQxwYWlyUmVzZXJ2ZTAJAMwIAgkAaQIJAGgCBQdhbW91bnQxBQt0b3RhbFN1cHBseQUMcGFpclJlc2VydmUxBQNuaWwJAMwIAgkBB1JlaXNzdWUDCQDZBAEFB2xwVG9rZW4FCWxpcXVpZGl0eQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlsaXF1aWRpdHkJANkEAQUHbHBUb2tlbgkAzAgCCQESc2V0UGFpclRvdGFsU3VwcGx5AgUHbHBUb2tlbgUJbGlxdWlkaXR5CQDMCAIJAQ5zZXRQYWlyRGV0YWlscwUFB2xwVG9rZW4FBnRva2VuMAUGdG9rZW4xCQBkAgUMcGFpclJlc2VydmUwBQdhbW91bnQwCQBkAgUMcGFpclJlc2VydmUxBQdhbW91bnQxBQNuaWwBaQEEYnVybgAECGFtb3VudGxwCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQJYXNzZXRJZExwCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECyR0MDM1NDczNjQ3CQEOZ2V0UGFpckRldGFpbHMBCQDYBAEFCWFzc2V0SWRMcAQKcGFpclRva2VuMAgFCyR0MDM1NDczNjQ3Al8xBApwYWlyVG9rZW4xCAULJHQwMzU0NzM2NDcCXzIEDHBhaXJSZXNlcnZlMAgFCyR0MDM1NDczNjQ3Al8zBAxwYWlyUmVzZXJ2ZTEIBQskdDAzNTQ3MzY0NwJfNAQHbHBUb2tlbgkBDmdldFBhaXJUb2tlbklkAgUKcGFpclRva2VuMAUKcGFpclRva2VuMQQLdG90YWxTdXBwbHkJARJnZXRQYWlyVG90YWxTdXBwbHkBBQdscFRva2VuBAVzaGFyZQkAaQIJAGgCBQhhbW91bnRscAUEbWF4eAULdG90YWxTdXBwbHkEB2Ftb3VudDAJAGkCCQBoAgUFc2hhcmUFDHBhaXJSZXNlcnZlMAUEbWF4eAQHYW1vdW50MQkAaQIJAGgCBQVzaGFyZQUMcGFpclJlc2VydmUxBQRtYXh4CQDMCAIJAQRCdXJuAgkA2QQBBQdscFRva2VuBQhhbW91bnRscAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB2Ftb3VudDAJANkEAQUKcGFpclRva2VuMAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB2Ftb3VudDEJANkEAQUKcGFpclRva2VuMQkAzAgCCQESc2V0UGFpclRvdGFsU3VwcGx5AgUHbHBUb2tlbgkAZQIFC3RvdGFsU3VwcGx5BQhhbW91bnRscAkAzAgCCQEOc2V0UGFpckRldGFpbHMFBQdscFRva2VuBQpwYWlyVG9rZW4wBQpwYWlyVG9rZW4xCQBlAgUMcGFpclJlc2VydmUwBQdhbW91bnQwCQBlAgUMcGFpclJlc2VydmUxBQdhbW91bnQxBQNuaWwBaQEQYWRkTGlxdWlkaXR5UG9vbAIGdG9rZW4wBnRva2VuMQMJAQlpc05ld1BhaXICBQZ0b2tlbjAFBnRva2VuMQMJAQIhPQIFBnRva2VuMAUGdG9rZW4xAwMJAQ1pc1Rva2VuRXhpc3RzAQUGdG9rZW4wCQENaXNUb2tlbkV4aXN0cwEFBnRva2VuMQcECG5ld1Rva2VuCQDCCAUJANgEAQkAyQECCAUBaQ10cmFuc2FjdGlvbklkAAoCAAAAAAAGBAdpc3N1ZUlkCQDYBAEJALgIAQUIbmV3VG9rZW4EEGN1cnJlbnRQYWlySW5kZXgJAQ1nZXRQYWlyTGVuZ3RoAAkAzAgCBQhuZXdUb2tlbgkAzAgCCQELU3RyaW5nRW50cnkCCQCkAwEFEGN1cnJlbnRQYWlySW5kZXgFB2lzc3VlSWQJAMwIAgkBDXNldFBhaXJMZW5naHQBCQBkAgUQY3VycmVudFBhaXJJbmRleAABCQDMCAIJAQ5zZXRQYWlyVG9rZW5JZAMFBnRva2VuMAUGdG9rZW4xBQdpc3N1ZUlkCQDMCAIJAQ5zZXRQYWlyRGV0YWlscwUFB2lzc3VlSWQFBnRva2VuMAUGdG9rZW4xAAAAAAUDbmlsCQACAQIMV3JvbmcgdG9rZW5zCQACAQIMRXF1YWwgdG9rZW5zCQACAQITUGFpciBhbHJlYWR5IGV4aXN0cwAkZbmA", "height": 2138154, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: Bvw6u6GTGPf6eG5b2vv3CR4nqVRUFBtTj1xeXpTFn4ib Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let separator = "_"
5+
6+func getPairLength () = valueOrElse(getInteger(this, "pairLength"), 0)
7+
8+
9+func setPairLenght (newLength) = IntegerEntry("pairLength", newLength)
10+
11+
12+func getPairKey (token0,token1) = {
13+ let token0BV = toInt(fromBase58String(token0))
14+ let token1BV = toInt(fromBase58String(token1))
15+ if ((token1BV > token0BV))
16+ then makeString([token0, token1], separator)
17+ else makeString([token1, token0], separator)
18+ }
19+
20+
21+func getPairTokenId (token0,token1) = getStringValue(this, getPairKey(token0, token1))
22+
23+
24+func setPairTokenId (token0,token1,issueId) = StringEntry(getPairKey(token0, token1), issueId)
25+
26+
27+func joinPairStruct (token0,token1,reserve0,reserve1) = makeString([token0, token1, toString(reserve0), toString(reserve1)], separator)
28+
29+
30+func getPairDetails (lpTokenId) = {
31+ let details = split(valueOrElse(getString(this, lpTokenId), "assetId0_assetId1_0_0"), separator)
32+ $Tuple4(details[0], details[1], parseIntValue(details[2]), parseIntValue(details[3]))
33+ }
34+
35+
36+func setPairDetails (lpTokenId,token0,token1,reserve0,reserve1) = StringEntry(lpTokenId, joinPairStruct(token0, token1, reserve0, reserve1))
37+
38+
39+func getPairTotalSupply (lpTokenId) = valueOrElse(getInteger(this, (("totalSupply" + separator) + lpTokenId)), 0)
40+
41+
42+func setPairTotalSupply (lpTokenId,newTotalSupply) = IntegerEntry((("totalSupply" + separator) + lpTokenId), newTotalSupply)
43+
44+
45+func isNewPair (token0,token1) = !(isDefined(getString(getPairKey(token0, token1))))
46+
47+
48+func isTokenExists (tokenId) = true
49+
50+
51+let maxx = 1000000000000
52+
53+let zeroAddr = value(addressFromString("3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF"))
54+
55+let MINIMUM_LIQUIDITY = 100000
56+
57+@Callable(i)
58+func mint () = {
59+ let token0 = toBase58String(value(i.payments[0].assetId))
60+ let token1 = toBase58String(value(i.payments[1].assetId))
61+ let lpToken = getPairTokenId(token0, token1)
62+ let amount0 = value(i.payments[0].amount)
63+ let amount1 = value(i.payments[1].amount)
64+ let $t023722454 = getPairDetails(lpToken)
65+ let pairToken0 = $t023722454._1
66+ let pairToken1 = $t023722454._2
67+ let pairReserve0 = $t023722454._3
68+ let pairReserve1 = $t023722454._4
69+ let totalSupply = getPairTotalSupply(lpToken)
70+ if ((totalSupply == 0))
71+ then {
72+ let liquidity = (sqrt((amount0 * amount1), 0, 0, DOWN) - MINIMUM_LIQUIDITY)
73+[Reissue(fromBase58String(lpToken), (liquidity + MINIMUM_LIQUIDITY), true), ScriptTransfer(zeroAddr, MINIMUM_LIQUIDITY, fromBase58String(lpToken)), ScriptTransfer(i.caller, liquidity, fromBase58String(lpToken)), setPairTotalSupply(lpToken, (liquidity + MINIMUM_LIQUIDITY)), setPairDetails(lpToken, token0, token1, (pairReserve0 + amount0), (pairReserve1 + amount1))]
74+ }
75+ else {
76+ let liquidity = min([((amount0 * totalSupply) / pairReserve0), ((amount1 * totalSupply) / pairReserve1)])
77+[Reissue(fromBase58String(lpToken), liquidity, true), ScriptTransfer(i.caller, liquidity, fromBase58String(lpToken)), setPairTotalSupply(lpToken, liquidity), setPairDetails(lpToken, token0, token1, (pairReserve0 + amount0), (pairReserve1 + amount1))]
78+ }
79+ }
80+
81+
82+
83+@Callable(i)
84+func burn () = {
85+ let amountlp = value(i.payments[0].amount)
86+ let assetIdLp = value(i.payments[0].assetId)
87+ let $t035473647 = getPairDetails(toBase58String(assetIdLp))
88+ let pairToken0 = $t035473647._1
89+ let pairToken1 = $t035473647._2
90+ let pairReserve0 = $t035473647._3
91+ let pairReserve1 = $t035473647._4
92+ let lpToken = getPairTokenId(pairToken0, pairToken1)
93+ let totalSupply = getPairTotalSupply(lpToken)
94+ let share = ((amountlp * maxx) / totalSupply)
95+ let amount0 = ((share * pairReserve0) / maxx)
96+ let amount1 = ((share * pairReserve1) / maxx)
97+[Burn(fromBase58String(lpToken), amountlp), ScriptTransfer(i.caller, amount0, fromBase58String(pairToken0)), ScriptTransfer(i.caller, amount1, fromBase58String(pairToken1)), setPairTotalSupply(lpToken, (totalSupply - amountlp)), setPairDetails(lpToken, pairToken0, pairToken1, (pairReserve0 - amount0), (pairReserve1 - amount1))]
98+ }
99+
100+
101+
102+@Callable(i)
103+func addLiquidityPool (token0,token1) = if (isNewPair(token0, token1))
104+ then if ((token0 != token1))
105+ then if (if (isTokenExists(token0))
106+ then isTokenExists(token1)
107+ else false)
108+ then {
109+ let newToken = Issue(toBase58String(take(i.transactionId, 10)), "", 0, 0, true)
110+ let issueId = toBase58String(calculateAssetId(newToken))
111+ let currentPairIndex = getPairLength()
112+[newToken, StringEntry(toString(currentPairIndex), issueId), setPairLenght((currentPairIndex + 1)), setPairTokenId(token0, token1, issueId), setPairDetails(issueId, token0, token1, 0, 0)]
113+ }
114+ else throw("Wrong tokens")
115+ else throw("Equal tokens")
116+ else throw("Pair already exists")
117+
118+

github/deemru/w8io/03bedc9 
20.77 ms