tx · CV76Gu52rQfRR5S6qMdzhkRdrfSWV2w9hGMDSEZop9bC

3PHTVMSCV4KQaeBEXWAwpCg9cxt2CqC6HHb:  -0.01400000 Waves

2022.04.05 15:28 [3060543] smart account 3PHTVMSCV4KQaeBEXWAwpCg9cxt2CqC6HHb > SELF 0.00000000 Waves

{ "type": 13, "id": "CV76Gu52rQfRR5S6qMdzhkRdrfSWV2w9hGMDSEZop9bC", "fee": 1400000, "feeAssetId": null, "timestamp": 1649161778772, "version": 2, "chainId": 87, "sender": "3PHTVMSCV4KQaeBEXWAwpCg9cxt2CqC6HHb", "senderPublicKey": "CgEn2SEp4TtgTwCfnVwdJ7n3buCtzo3574yGFK2YyZER", "proofs": [ "3CpiC1VMcdia3Rf6wTzFBfB3Wbp4bWZ7UWczsg2mKd6ssSU5TVYbzzUugGNsAcxrJwHtiLuqrzjzJ5KKz9mebKki" ], "script": "base64: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", "height": 3060543, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 21GssJMF6wWrFymufU4BAEuPkRCGGgYVA1a59RRLuXGC Next: HPQKC8BHJM3L7PdZZdQBhKf78bdj8AKT7ZuAKufG5bjU Diff:
OldNewDifferences
55
66 let snsbtId = base58'8wUmN9Y15f3JR4KZfE81XLXpkdgwnqoBNG6NmocZpKQx'
77
8+let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9+
810 let isStopped = false
11+
12+let SwapFee = 50
13+
14+func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
15+ then unit
16+ else fromBase58String(assetIdStr)
17+
18+
19+func tryGetInteger (key) = match getInteger(this, key) {
20+ case b: Int =>
21+ b
22+ case _ =>
23+ 0
24+}
25+
26+
27+func tryGetString (key) = match getString(this, key) {
28+ case b: String =>
29+ b
30+ case _ =>
31+ ""
32+}
33+
934
1035 @Callable(i)
1136 func stakeNSBT () = {
2752 }
2853
2954
55+
56+@Callable(i)
57+func initSwap () = if ((tryGetString("swap_author") != ""))
58+ then throw("previous swap needs to be finished first")
59+ else if ((i.payments[0].assetId != usdnId))
60+ then throw("you need to attach usdn payment")
61+ else {
62+ let inv = invoke(Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo'), "swapNeutrinoToWaves", nil, [i.payments[0]])
63+ if ((inv == inv))
64+ then [StringEntry("swap_author", toString(i.caller)), IntegerEntry("swap_usdnSpent", i.payments[0].amount), IntegerEntry("swap_usdnBalance0", assetBalance(this, usdnId)), IntegerEntry("swap_wavesBalance0", wavesBalance(this).available)]
65+ else throw("Strict value is not equal to itself.")
66+ }
67+
68+
69+
70+@Callable(i)
71+func finishSwap () = if ((tryGetString("swap_author") == ""))
72+ then throw("there is no first in progress")
73+ else {
74+ let wavesBalance1 = wavesBalance(this).available
75+ let wavesBalance0 = tryGetInteger("swap_wavesBalance0")
76+ let usdnBalance0 = tryGetInteger("swap_usdnBalance0")
77+ let deltaWaves = ((wavesBalance1 - wavesBalance0) - 10000000)
78+ let inv = invoke(Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG'), "exchange", [0], [AttachedPayment(unit, deltaWaves)])
79+ if ((inv == inv))
80+ then {
81+ let usdnBalance1 = assetBalance(this, usdnId)
82+ if ((usdnBalance1 == usdnBalance1))
83+ then {
84+ let usdnSpent = tryGetInteger("swap_usdnSpent")
85+ let deltaUsdn = (usdnBalance1 - usdnBalance0)
86+ if ((usdnSpent > deltaUsdn))
87+ then throw("operation leads to trader's negative saldo")
88+ else {
89+ let traderProfit = fraction(deltaUsdn, SwapFee, 100)
90+[DeleteEntry("swap_author"), DeleteEntry("swap_usdnSpent"), DeleteEntry("swap_usdnBalance0"), DeleteEntry("swap_wavesBalance0"), ScriptTransfer(addressFromStringValue(tryGetString("swap_author")), (usdnSpent + traderProfit), usdnId), IntegerEntry("stats_swapsProfit", (((tryGetInteger("stats_swapsProfit") + deltaUsdn) - usdnSpent) - traderProfit))]
91+ }
92+ }
93+ else throw("Strict value is not equal to itself.")
94+ }
95+ else throw("Strict value is not equal to itself.")
96+ }
97+
98+
3099 @Verifier(tx)
31100 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
32101
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let nsbtId = base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g'
55
66 let snsbtId = base58'8wUmN9Y15f3JR4KZfE81XLXpkdgwnqoBNG6NmocZpKQx'
77
8+let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9+
810 let isStopped = false
11+
12+let SwapFee = 50
13+
14+func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
15+ then unit
16+ else fromBase58String(assetIdStr)
17+
18+
19+func tryGetInteger (key) = match getInteger(this, key) {
20+ case b: Int =>
21+ b
22+ case _ =>
23+ 0
24+}
25+
26+
27+func tryGetString (key) = match getString(this, key) {
28+ case b: String =>
29+ b
30+ case _ =>
31+ ""
32+}
33+
934
1035 @Callable(i)
1136 func stakeNSBT () = {
1237 let pmt = value(i.payments[0])
1338 let amount = pmt.amount
1439 if ((pmt.assetId != nsbtId))
1540 then throw("attach NSBT token only")
1641 else if (isStopped)
1742 then throw("smart contract is on lock")
1843 else {
1944 let lockInv = invoke(Address(base58'3P8w8NXZUtYdCA13tHbDY5sW4mC27ZFJgG3'), "stake", nil, [pmt])
2045 if ((lockInv == lockInv))
2146 then {
2247 let snsbtIssue = Reissue(snsbtId, amount, true)
2348 [snsbtIssue, ScriptTransfer(i.caller, amount, snsbtId)]
2449 }
2550 else throw("Strict value is not equal to itself.")
2651 }
2752 }
2853
2954
55+
56+@Callable(i)
57+func initSwap () = if ((tryGetString("swap_author") != ""))
58+ then throw("previous swap needs to be finished first")
59+ else if ((i.payments[0].assetId != usdnId))
60+ then throw("you need to attach usdn payment")
61+ else {
62+ let inv = invoke(Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo'), "swapNeutrinoToWaves", nil, [i.payments[0]])
63+ if ((inv == inv))
64+ then [StringEntry("swap_author", toString(i.caller)), IntegerEntry("swap_usdnSpent", i.payments[0].amount), IntegerEntry("swap_usdnBalance0", assetBalance(this, usdnId)), IntegerEntry("swap_wavesBalance0", wavesBalance(this).available)]
65+ else throw("Strict value is not equal to itself.")
66+ }
67+
68+
69+
70+@Callable(i)
71+func finishSwap () = if ((tryGetString("swap_author") == ""))
72+ then throw("there is no first in progress")
73+ else {
74+ let wavesBalance1 = wavesBalance(this).available
75+ let wavesBalance0 = tryGetInteger("swap_wavesBalance0")
76+ let usdnBalance0 = tryGetInteger("swap_usdnBalance0")
77+ let deltaWaves = ((wavesBalance1 - wavesBalance0) - 10000000)
78+ let inv = invoke(Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG'), "exchange", [0], [AttachedPayment(unit, deltaWaves)])
79+ if ((inv == inv))
80+ then {
81+ let usdnBalance1 = assetBalance(this, usdnId)
82+ if ((usdnBalance1 == usdnBalance1))
83+ then {
84+ let usdnSpent = tryGetInteger("swap_usdnSpent")
85+ let deltaUsdn = (usdnBalance1 - usdnBalance0)
86+ if ((usdnSpent > deltaUsdn))
87+ then throw("operation leads to trader's negative saldo")
88+ else {
89+ let traderProfit = fraction(deltaUsdn, SwapFee, 100)
90+[DeleteEntry("swap_author"), DeleteEntry("swap_usdnSpent"), DeleteEntry("swap_usdnBalance0"), DeleteEntry("swap_wavesBalance0"), ScriptTransfer(addressFromStringValue(tryGetString("swap_author")), (usdnSpent + traderProfit), usdnId), IntegerEntry("stats_swapsProfit", (((tryGetInteger("stats_swapsProfit") + deltaUsdn) - usdnSpent) - traderProfit))]
91+ }
92+ }
93+ else throw("Strict value is not equal to itself.")
94+ }
95+ else throw("Strict value is not equal to itself.")
96+ }
97+
98+
3099 @Verifier(tx)
31100 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
32101

github/deemru/w8io/6500d08 
45.69 ms