tx · BDkMF8YL9aCgQW2nKnhiVqMJK5KsJei2P35xPFFGA4n7

3N9R7u449Z1b76QpJp9u3gzPjMYQYnp3V7r:  -0.04000000 Waves

2022.03.29 20:29 [1985515] smart account 3N9R7u449Z1b76QpJp9u3gzPjMYQYnp3V7r > SELF 0.00000000 Waves

{ "type": 13, "id": "BDkMF8YL9aCgQW2nKnhiVqMJK5KsJei2P35xPFFGA4n7", "fee": 4000000, "feeAssetId": null, "timestamp": 1648574994615, "version": 2, "chainId": 84, "sender": "3N9R7u449Z1b76QpJp9u3gzPjMYQYnp3V7r", "senderPublicKey": "GUHw1jkstNWTs9SX1KM3pMtq9HXjupvxiTd1urNhNoyY", "proofs": [ "2XwvH58qyup35xSx7rcm6WDhBP68fgxbDzhr7RPShasWqkusELkL9YFpTnkzy7gVY7eFPNwtTQgWzB2GTNvBPEhx" ], "script": "base64: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AAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVzYWxlXwUAAAAHYXNzZXRJZAIAAAAHX2Ftb3VudAAAAAAAAAAAAAUAAAADbmlsAwkBAAAAAiE9AAAAAgUAAAAHb3duZXJJZAUAAAASaG9sZGluZ3NBZGRyZXNzU3RyBAAAABhhbW91bnRUb1JlbWFpbkluSG9sZGluZ3MJAABpAAAAAgUAAAANcGF5bWVudEFtb3VudAUAAAAPdHJhbnNmZXJDb3N0UGN0BAAAABdhbW91bnRUb1RyYW5zZmVyVG9Pd25lcgkAAGUAAAACBQAAAA1wYXltZW50QW1vdW50BQAAABhhbW91bnRUb1JlbWFpbkluSG9sZGluZ3MEAAAADG93bmVyQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAB293bmVySWQJAAROAAAAAgUAAAAIdHJhbnNmZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAABdhbW91bnRUb1RyYW5zZmVyVG9Pd25lcgUAAAAEdW5pdAUAAAADbmlsBQAAAAh0cmFuc2ZlcgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5BgkAAAAAAAACCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5BQAAAA9ob2xkaW5nc0FkZHJlc3MGCQAAAAAAAAIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkFAAAAC2RBcHBBZGRyZXNzDVAuqw==", "height": 1985515, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EEjSXYunekwFJjcXwoL6ukoaJSJjLv3vCdi5cZYenKDf Next: EauHYAnjvbPtrTwbGfq1r2jbjsMFZUEMEkNiSFXihXzD Diff:
OldNewDifferences
7171 else (amount > paymentAmount))
7272 then throw(((("Payment and amount do not match. This assets costs " + toString(amount)) + "but you sent ") + toString(paymentAmount)))
7373 else {
74- let res = invoke(dAppAddress, "finalizeSale", [assetId, ownerId], [AttachedPayment(unit, 0)])
74+ let callerId = toBase58String(i.caller.bytes)
75+ let res = invoke(dAppAddress, "finalizeSale", [assetId, callerId], [AttachedPayment(unit, 0)])
7576 if ((res == res))
7677 then {
7778 let transfer = [ScriptTransfer(i.caller, 1, fromBase58String(assetId)), StringEntry((("sale_" + assetId) + "_originalOwner"), ""), IntegerEntry((("sale_" + assetId) + "_amount"), 0)]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let dAppAddressStr = "3N4vqUXWw8tf23LDWDbSEpJZH6dent3ETFu"
55
66 let dAppPublicKey = base58'D4v2S9mjah7eEEmuQVBNd4WipC3scs8V4PjuDBweWatE'
77
88 let dAppAddress = addressFromPublicKey(dAppPublicKey)
99
1010 let holdingsAddressStr = "3N9R7u449Z1b76QpJp9u3gzPjMYQYnp3V7r"
1111
1212 let holdingsPublicKey = base58'GUHw1jkstNWTs9SX1KM3pMtq9HXjupvxiTd1urNhNoyY'
1313
1414 let holdingsAddress = addressFromPublicKey(holdingsPublicKey)
1515
1616 let transferCostPct = 50
1717
1818 @Callable(i)
1919 func addOwnerAndAmount (ownerId,assetId,amount) = [StringEntry((("sale_" + assetId) + "_originalOwner"), ownerId), IntegerEntry((("sale_" + assetId) + "_amount"), amount)]
2020
2121
2222
2323 @Callable(i)
2424 func revokeForSale (assetId) = {
2525 let callerId = toBase58String(i.caller.bytes)
2626 let ownerId = match getString(this, (("sale_" + assetId) + "_originalOwner")) {
2727 case _: Unit =>
2828 "unset"
2929 case x: String =>
3030 x
3131 case _ =>
3232 throw("Match error")
3333 }
3434 if ((callerId != ownerId))
3535 then throw("Owners do not match")
3636 else {
3737 let res = invoke(dAppAddress, "addOwnerAndAmount", ["", assetId, 0], [AttachedPayment(unit, 0)])
3838 if ((res == res))
3939 then [ScriptTransfer(i.caller, 1, fromBase58String(assetId))]
4040 else throw("Strict value is not equal to itself.")
4141 }
4242 }
4343
4444
4545
4646 @Callable(i)
4747 func buyFromHoldings (assetId) = {
4848 let ownerId = match getString(this, (("sale_" + assetId) + "_originalOwner")) {
4949 case _: Unit =>
5050 "unset"
5151 case x: String =>
5252 x
5353 case _ =>
5454 throw("Match error")
5555 }
5656 let paymentAmount = valueOrElse(i.payments[0].amount, 0)
5757 let amount = match getInteger(this, (("sale_" + assetId) + "_amount")) {
5858 case _: Unit =>
5959 0
6060 case x: Int =>
6161 x
6262 case _ =>
6363 throw("Match error")
6464 }
6565 if (if ((ownerId == "unset"))
6666 then true
6767 else (ownerId == ""))
6868 then throw("Original owner not found ")
6969 else if (if ((amount == 0))
7070 then true
7171 else (amount > paymentAmount))
7272 then throw(((("Payment and amount do not match. This assets costs " + toString(amount)) + "but you sent ") + toString(paymentAmount)))
7373 else {
74- let res = invoke(dAppAddress, "finalizeSale", [assetId, ownerId], [AttachedPayment(unit, 0)])
74+ let callerId = toBase58String(i.caller.bytes)
75+ let res = invoke(dAppAddress, "finalizeSale", [assetId, callerId], [AttachedPayment(unit, 0)])
7576 if ((res == res))
7677 then {
7778 let transfer = [ScriptTransfer(i.caller, 1, fromBase58String(assetId)), StringEntry((("sale_" + assetId) + "_originalOwner"), ""), IntegerEntry((("sale_" + assetId) + "_amount"), 0)]
7879 if ((ownerId != holdingsAddressStr))
7980 then {
8081 let amountToRemainInHoldings = (paymentAmount / transferCostPct)
8182 let amountToTransferToOwner = (paymentAmount - amountToRemainInHoldings)
8283 let ownerAddress = Address(fromBase58String(ownerId))
8384 (transfer ++ [ScriptTransfer(ownerAddress, amountToTransferToOwner, unit)])
8485 }
8586 else transfer
8687 }
8788 else throw("Strict value is not equal to itself.")
8889 }
8990 }
9091
9192
9293 @Verifier(tx)
9394 func verify () = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
9495 then true
9596 else (addressFromPublicKey(tx.senderPublicKey) == holdingsAddress))
9697 then true
9798 else (addressFromPublicKey(tx.senderPublicKey) == dAppAddress)
9899

github/deemru/w8io/169f3d6 
50.85 ms