tx · E7FFNucr7dt7pCVXzKjLDjAfiSyubYb4ptjVYGA1MzcU

3P3x6Hmt7346Q6WkXUVfVKRkxkrVQwZLtYD:  -0.04000000 Waves

2022.04.22 14:03 [3084977] smart account 3P3x6Hmt7346Q6WkXUVfVKRkxkrVQwZLtYD > SELF 0.00000000 Waves

{ "type": 13, "id": "E7FFNucr7dt7pCVXzKjLDjAfiSyubYb4ptjVYGA1MzcU", "fee": 4000000, "feeAssetId": null, "timestamp": 1650625439969, "version": 2, "chainId": 87, "sender": "3P3x6Hmt7346Q6WkXUVfVKRkxkrVQwZLtYD", "senderPublicKey": "7QjPWoBTUbHLrDB4hPBGW25p9ZuDAgNjcDJ2G16M8vkG", "proofs": [ "4DKJNbGK35dsV8kSh5KRc1edrPWcFhdNuC3pYRzmhASDnkEuQJMfv8cyXXmwFAAJR8Wjcn4massE6Tk1jZynXzv5" ], "script": "base64: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LAAAAAICAAAABXNhbGVfBQAAAAdhc3NldElkAgAAAAdfYW1vdW50AAAAAAAAAAAABQAAAANuaWwDCQEAAAACIT0AAAACBQAAAAdvd25lcklkBQAAABJob2xkaW5nc0FkZHJlc3NTdHIEAAAAGGFtb3VudFRvUmVtYWluSW5Ib2xkaW5ncwkAAGkAAAACBQAAAA1wYXltZW50QW1vdW50BQAAAA90cmFuc2ZlckNvc3RQY3QEAAAAF2Ftb3VudFRvVHJhbnNmZXJUb093bmVyCQAAZQAAAAIFAAAADXBheW1lbnRBbW91bnQFAAAAGGFtb3VudFRvUmVtYWluSW5Ib2xkaW5ncwQAAAAMb3duZXJBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAHb3duZXJJZAkABE4AAAACBQAAAAh0cmFuc2ZlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAAF2Ftb3VudFRvVHJhbnNmZXJUb093bmVyBQAAAAR1bml0BQAAAANuaWwFAAAACHRyYW5zZmVyCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkGCQAAAAAAAAIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkFAAAAD2hvbGRpbmdzQWRkcmVzcwYJAAAAAAAAAgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQUAAAALZEFwcEFkZHJlc3OTbQtI", "height": 3084977, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 57LiQGx94HECT1yWufebzJBX6L3QYKjTTxH1Aj9fy4jT Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let dAppAddressStr = "3PJqssiDT7b1A2ft1vBsHFdRrHRKD9x6bGE"
5+
6+let dAppPublicKey = base58'EVpUgn4s26JRYsPd4L8ab264qkHbH7Z8DFbsb4cPz31X'
7+
8+let dAppAddress = addressFromPublicKey(dAppPublicKey)
9+
10+let holdingsAddressStr = "3P3x6Hmt7346Q6WkXUVfVKRkxkrVQwZLtYD"
11+
12+let holdingsPublicKey = base58'7QjPWoBTUbHLrDB4hPBGW25p9ZuDAgNjcDJ2G16M8vkG'
13+
14+let holdingsAddress = addressFromPublicKey(holdingsPublicKey)
15+
16+let transferCostPct = 50
17+
18+@Callable(i)
19+func addOwnerAndAmount (ownerId,assetId,amount) = [StringEntry((("sale_" + assetId) + "_originalOwner"), ownerId), IntegerEntry((("sale_" + assetId) + "_amount"), amount)]
20+
21+
22+
23+@Callable(i)
24+func revokeForSale (assetId) = {
25+ let callerId = toBase58String(i.caller.bytes)
26+ let ownerId = match getString(this, (("sale_" + assetId) + "_originalOwner")) {
27+ case _: Unit =>
28+ "unset"
29+ case x: String =>
30+ x
31+ case _ =>
32+ throw("Match error")
33+ }
34+ if ((callerId != ownerId))
35+ then throw("Owners do not match")
36+ else [StringEntry((("sale_" + assetId) + "_originalOwner"), ""), IntegerEntry((("sale_" + assetId) + "_amount"), 0), ScriptTransfer(i.caller, 1, fromBase58String(assetId))]
37+ }
38+
39+
40+
41+@Callable(i)
42+func buyFromHoldings (assetId,userText) = {
43+ let ownerId = match getString(this, (("sale_" + assetId) + "_originalOwner")) {
44+ case _: Unit =>
45+ "unset"
46+ case x: String =>
47+ x
48+ case _ =>
49+ throw("Match error")
50+ }
51+ let paymentAmount = valueOrElse(i.payments[0].amount, 0)
52+ let amount = match getInteger(this, (("sale_" + assetId) + "_amount")) {
53+ case _: Unit =>
54+ 0
55+ case x: Int =>
56+ x
57+ case _ =>
58+ throw("Match error")
59+ }
60+ if (if ((ownerId == "unset"))
61+ then true
62+ else (ownerId == ""))
63+ then throw("Original owner not found ")
64+ else if (if ((amount == 0))
65+ then true
66+ else (amount > paymentAmount))
67+ then throw(((("Payment and amount do not match. This assets costs " + toString(amount)) + "but you sent ") + toString(paymentAmount)))
68+ else {
69+ let callerId = toBase58String(i.caller.bytes)
70+ let res = invoke(dAppAddress, "finalizeSale", [assetId, callerId, userText], [AttachedPayment(unit, 0)])
71+ if ((res == res))
72+ then {
73+ let transfer = [ScriptTransfer(i.caller, 1, fromBase58String(assetId)), StringEntry((("sale_" + assetId) + "_originalOwner"), ""), IntegerEntry((("sale_" + assetId) + "_amount"), 0)]
74+ if ((ownerId != holdingsAddressStr))
75+ then {
76+ let amountToRemainInHoldings = (paymentAmount / transferCostPct)
77+ let amountToTransferToOwner = (paymentAmount - amountToRemainInHoldings)
78+ let ownerAddress = Address(fromBase58String(ownerId))
79+ (transfer ++ [ScriptTransfer(ownerAddress, amountToTransferToOwner, unit)])
80+ }
81+ else transfer
82+ }
83+ else throw("Strict value is not equal to itself.")
84+ }
85+ }
86+
87+
88+@Verifier(tx)
89+func verify () = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
90+ then true
91+ else (addressFromPublicKey(tx.senderPublicKey) == holdingsAddress))
92+ then true
93+ else (addressFromPublicKey(tx.senderPublicKey) == dAppAddress)
94+

github/deemru/w8io/3ef1775 
26.16 ms