tx · 4Z4tDNz7xqFn6L1C7Vb22gUtsBgAzYJogPQ3FN6ySBuy

3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH:  -0.04000000 Waves

2022.04.17 04:41 [2011895] smart account 3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH > SELF 0.00000000 Waves

{ "type": 13, "id": "4Z4tDNz7xqFn6L1C7Vb22gUtsBgAzYJogPQ3FN6ySBuy", "fee": 4000000, "feeAssetId": null, "timestamp": 1650159744241, "version": 2, "chainId": 84, "sender": "3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH", "senderPublicKey": "G2whNsDNG7LDDcHiMuFrtDiNuudzqif5tAopWE1Y7oAQ", "proofs": [ "5sFtSkKNfouKXdceAK5shFSs2sSGB4f7st9CuFk2J8jgCfYzkuwYtmYBvDMngXSof3moCX3jyS4gxTdhFsu8sX1G" ], "script": "base64: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", "height": 2011895, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C7DBKDaZRRZrhZ9vcbdLqfESUuck71WQQzCuukVeZbcE Next: 4mvWvymTqoHxBdcMM68zHzuvSooTstRy46wThVAxqjWk Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let dAppAddressStr = "3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH"
4+let COLS = 1024
55
6-let dAppPublicKey = base58'G2whNsDNG7LDDcHiMuFrtDiNuudzqif5tAopWE1Y7oAQ'
6+let ROWS = 1024
77
8-let dAppAddress = addressFromPublicKey(dAppPublicKey)
8+let nftDomain = "https://nft.gridgang.io/"
99
10-let holdingsAddressStr = "3MpFtcdhaB66NB38tW2APSiaVqaAoWoPvRJ"
10+let addOwnerAndAmountFunc = "addOwnerAndAmount"
1111
12-let holdingsPublicKey = base58'2eixqLDKJ5kjuY8imH4HG2FBJduT6QsjxLLch1iaAadx'
12+let DEBUG = true
1313
14-let holdingsAddress = addressFromPublicKey(holdingsPublicKey)
14+let minForSaleWavlets = 100000000
1515
16-let transferCostPct = 50
16+let minPurchasePrice = 1000000
1717
18-@Callable(i)
19-func addOwnerAndAmount (ownerId,assetId,amount) = [StringEntry((("sale_" + assetId) + "_originalOwner"), ownerId), IntegerEntry((("sale_" + assetId) + "_amount"), amount)]
18+let dapp = "3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH"
2019
20+let dappAddress = Address(fromBase58String(dapp))
21+
22+let holdingsPublicKey = "2eixqLDKJ5kjuY8imH4HG2FBJduT6QsjxLLch1iaAadx"
23+
24+let holdings = "3MpFtcdhaB66NB38tW2APSiaVqaAoWoPvRJ"
25+
26+let holdingsAddress = Address(fromBase58String(holdings))
27+
28+func getAssetName (x,y) = {
29+ let name = ((x + ",") + y)
30+ name
31+ }
32+
33+
34+func getDataKeyPrefix (x,y,gen) = {
35+ let name = getAssetName(x, y)
36+ let prefix = ((name + ",") + gen)
37+ prefix
38+ }
39+
40+
41+func getXYGenFromName (name) = {
42+ let parts = split(name, ",")
43+ let tuple = $Tuple3(parts[0], parts[1], parts[2])
44+ tuple
45+ }
46+
47+
48+func getDataKeyPrefixFromAssetName (name) = {
49+ let $t010011041 = getXYGenFromName(name)
50+ let x = $t010011041._1
51+ let y = $t010011041._2
52+ let gen = $t010011041._3
53+ let prefix = getDataKeyPrefix(x, y, gen)
54+ prefix
55+ }
56+
57+
58+func claimSquare (x,y,gen,ownerId,transactionId) = {
59+ let resolvedXStr = x
60+ let resolvedYStr = y
61+ let resolvedGenStr = gen
62+ let assetName = getAssetName(resolvedXStr, resolvedYStr)
63+ let assetUrl = ((nftDomain + transactionId) + ".png")
64+ let asset = Issue(((assetName + ",") + resolvedGenStr), assetUrl, 1, 0, false)
65+ let assetId = calculateAssetId(asset)
66+ let dataKeyPrefix = getDataKeyPrefix(resolvedXStr, resolvedYStr, gen)
67+ $Tuple4(asset, assetId, assetUrl, dataKeyPrefix)
68+ }
2169
2270
2371 @Callable(i)
24-func revokeForSale (assetId) = {
25- let callerId = toBase58String(i.caller.bytes)
26- let ownerId = match getString(this, (("sale_" + assetId) + "_originalOwner")) {
72+func purchase (x,y,userText) = {
73+ let prefix = getDataKeyPrefix(x, y, "1")
74+ let paymentAmount = valueOrElse(i.payments[0].amount, 0)
75+ let existingAssetId = match getString(this, (prefix + "_assetId")) {
2776 case _: Unit =>
2877 "unset"
29- case x: String =>
30- x
78+ case err: String =>
79+ throw("This square has already been purchased")
3180 case _ =>
3281 throw("Match error")
3382 }
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))]
83+ if ((minPurchasePrice > paymentAmount))
84+ then throw((("You need to send at least " + toString(minPurchasePrice)) + "WAVLETS to purchase a square"))
85+ else {
86+ let ownerId = toBase58String(i.caller.bytes)
87+ let transactionId = toBase58String(i.transactionId)
88+ let $t022332328 = claimSquare(x, y, "1", ownerId, transactionId)
89+ let asset = $t022332328._1
90+ let assetId = $t022332328._2
91+ let assetUrl = $t022332328._3
92+ let dataKeyPrefix = $t022332328._4
93+[asset, StringEntry((dataKeyPrefix + "_assetId"), toBase58String(assetId)), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), ownerId), StringEntry((ownerId + "_handle"), userText), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(i.caller, 1, assetId)]
94+ }
3795 }
3896
3997
4098
4199 @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
100+func autoBuy (x,y) = {
101+ let callerId = toBase58String(i.caller.bytes)
102+ if (if ((callerId != holdings))
103+ then (callerId != dapp)
104+ else false)
105+ then throw("This can only be triggering internally")
106+ else {
107+ let transactionId = toBase58String(i.transactionId)
108+ let $t029553051 = claimSquare(x, y, "1", holdings, transactionId)
109+ let asset = $t029553051._1
110+ let assetId = $t029553051._2
111+ let assetUrl = $t029553051._3
112+ let dataKeyPrefix = $t029553051._4
113+ let assetIdStr = toBase58String(assetId)
114+ let res = invoke(holdingsAddress, addOwnerAndAmountFunc, [holdings, assetIdStr, 3], [AttachedPayment(unit, 0)])
115+ if ((res == res))
116+ then [asset, StringEntry((dataKeyPrefix + "_assetId"), assetIdStr), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), holdings), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(holdingsAddress, 1, assetId)]
117+ else throw("Strict value is not equal to itself.")
118+ }
119+ }
120+
121+
122+
123+@Callable(i)
124+func promotionPurchase (x,y,desinationAddress) = {
125+ let callerId = toBase58String(i.caller.bytes)
126+ if ((callerId != holdings))
127+ then throw("This can only be triggering internally")
128+ else {
129+ let transactionId = toBase58String(i.transactionId)
130+ let $t038073912 = claimSquare(x, y, "1", desinationAddress, transactionId)
131+ let asset = $t038073912._1
132+ let assetId = $t038073912._2
133+ let assetUrl = $t038073912._3
134+ let dataKeyPrefix = $t038073912._4
135+ let assetIdStr = toBase58String(assetId)
136+[asset, StringEntry((dataKeyPrefix + "_assetId"), assetIdStr), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), desinationAddress), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(Address(fromBase58String(desinationAddress)), 1, assetId)]
137+ }
138+ }
139+
140+
141+
142+@Callable(i)
143+func evolve (x,y,gen,ownerId) = {
144+ let callerId = toBase58String(i.caller.bytes)
145+ if ((callerId != holdings))
146+ then throw("This can only be triggering internally")
147+ else {
148+ let transactionId = toBase58String(i.transactionId)
149+ let $t046384733 = claimSquare(x, y, gen, ownerId, transactionId)
150+ let asset = $t046384733._1
151+ let assetId = $t046384733._2
152+ let assetUrl = $t046384733._3
153+ let dataKeyPrefix = $t046384733._4
154+[asset, StringEntry((dataKeyPrefix + "_assetId"), toBase58String(assetId)), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), ownerId), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(Address(fromBase58String(ownerId)), 1, assetId)]
155+ }
156+ }
157+
158+
159+
160+@Callable(i)
161+func putForSale (assetId,amount) = {
162+ let callerId = toBase58String(i.caller.bytes)
163+ let assetData = match assetInfo(fromBase58String(assetId)) {
164+ case ass: Asset =>
165+ ass
48166 case _ =>
49- throw("Match error")
167+ throw("Asset not found")
50168 }
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
169+ let dataPrefix = getDataKeyPrefixFromAssetName(assetData.name)
170+ let ownerId = match getString(this, (dataPrefix + "_owner")) {
171+ case s: String =>
172+ s
57173 case _ =>
58- throw("Match error")
174+ throw("Owner not found in data")
59175 }
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)))
176+ if ((minForSaleWavlets > amount))
177+ then throw("Amount needs to be more than 1 wave")
178+ else if (if ((callerId != ownerId))
179+ then (callerId != holdings)
180+ else false)
181+ then throw("You are not able to put this asset up for sale")
68182 else {
69- let callerId = toBase58String(i.caller.bytes)
70- let res = invoke(dAppAddress, "finalizeSale", [assetId, callerId, userText], [AttachedPayment(unit, 0)])
183+ let res = invoke(holdingsAddress, addOwnerAndAmountFunc, [callerId, assetId, amount], [AttachedPayment(unit, 0)])
71184 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- }
185+ then [ScriptTransfer(holdingsAddress, 1, fromBase58String(assetId))]
83186 else throw("Strict value is not equal to itself.")
84187 }
188+ }
189+
190+
191+
192+@Callable(i)
193+func finalizeSale (assetId,ownerId,userText) = {
194+ let callerId = toBase58String(i.caller.bytes)
195+ if ((callerId != holdings))
196+ then throw("This can only be triggering internally")
197+ else {
198+ let prefix = match assetInfo(fromBase58String(assetId)) {
199+ case asset: Asset =>
200+ asset.name
201+ case _ =>
202+ throw("Can't find asset")
203+ }
204+[StringEntry((prefix + "_owner"), ownerId), StringEntry((ownerId + "_handle"), userText)]
205+ }
85206 }
86207
87208
90211 then true
91212 else (addressFromPublicKey(tx.senderPublicKey) == holdingsAddress))
92213 then true
93- else (addressFromPublicKey(tx.senderPublicKey) == dAppAddress)
214+ else (addressFromPublicKey(tx.senderPublicKey) == dappAddress)
94215
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let dAppAddressStr = "3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH"
4+let COLS = 1024
55
6-let dAppPublicKey = base58'G2whNsDNG7LDDcHiMuFrtDiNuudzqif5tAopWE1Y7oAQ'
6+let ROWS = 1024
77
8-let dAppAddress = addressFromPublicKey(dAppPublicKey)
8+let nftDomain = "https://nft.gridgang.io/"
99
10-let holdingsAddressStr = "3MpFtcdhaB66NB38tW2APSiaVqaAoWoPvRJ"
10+let addOwnerAndAmountFunc = "addOwnerAndAmount"
1111
12-let holdingsPublicKey = base58'2eixqLDKJ5kjuY8imH4HG2FBJduT6QsjxLLch1iaAadx'
12+let DEBUG = true
1313
14-let holdingsAddress = addressFromPublicKey(holdingsPublicKey)
14+let minForSaleWavlets = 100000000
1515
16-let transferCostPct = 50
16+let minPurchasePrice = 1000000
1717
18-@Callable(i)
19-func addOwnerAndAmount (ownerId,assetId,amount) = [StringEntry((("sale_" + assetId) + "_originalOwner"), ownerId), IntegerEntry((("sale_" + assetId) + "_amount"), amount)]
18+let dapp = "3MvUyzQxNGmwExAcKdhojfKem3XwkXdkByH"
2019
20+let dappAddress = Address(fromBase58String(dapp))
21+
22+let holdingsPublicKey = "2eixqLDKJ5kjuY8imH4HG2FBJduT6QsjxLLch1iaAadx"
23+
24+let holdings = "3MpFtcdhaB66NB38tW2APSiaVqaAoWoPvRJ"
25+
26+let holdingsAddress = Address(fromBase58String(holdings))
27+
28+func getAssetName (x,y) = {
29+ let name = ((x + ",") + y)
30+ name
31+ }
32+
33+
34+func getDataKeyPrefix (x,y,gen) = {
35+ let name = getAssetName(x, y)
36+ let prefix = ((name + ",") + gen)
37+ prefix
38+ }
39+
40+
41+func getXYGenFromName (name) = {
42+ let parts = split(name, ",")
43+ let tuple = $Tuple3(parts[0], parts[1], parts[2])
44+ tuple
45+ }
46+
47+
48+func getDataKeyPrefixFromAssetName (name) = {
49+ let $t010011041 = getXYGenFromName(name)
50+ let x = $t010011041._1
51+ let y = $t010011041._2
52+ let gen = $t010011041._3
53+ let prefix = getDataKeyPrefix(x, y, gen)
54+ prefix
55+ }
56+
57+
58+func claimSquare (x,y,gen,ownerId,transactionId) = {
59+ let resolvedXStr = x
60+ let resolvedYStr = y
61+ let resolvedGenStr = gen
62+ let assetName = getAssetName(resolvedXStr, resolvedYStr)
63+ let assetUrl = ((nftDomain + transactionId) + ".png")
64+ let asset = Issue(((assetName + ",") + resolvedGenStr), assetUrl, 1, 0, false)
65+ let assetId = calculateAssetId(asset)
66+ let dataKeyPrefix = getDataKeyPrefix(resolvedXStr, resolvedYStr, gen)
67+ $Tuple4(asset, assetId, assetUrl, dataKeyPrefix)
68+ }
2169
2270
2371 @Callable(i)
24-func revokeForSale (assetId) = {
25- let callerId = toBase58String(i.caller.bytes)
26- let ownerId = match getString(this, (("sale_" + assetId) + "_originalOwner")) {
72+func purchase (x,y,userText) = {
73+ let prefix = getDataKeyPrefix(x, y, "1")
74+ let paymentAmount = valueOrElse(i.payments[0].amount, 0)
75+ let existingAssetId = match getString(this, (prefix + "_assetId")) {
2776 case _: Unit =>
2877 "unset"
29- case x: String =>
30- x
78+ case err: String =>
79+ throw("This square has already been purchased")
3180 case _ =>
3281 throw("Match error")
3382 }
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))]
83+ if ((minPurchasePrice > paymentAmount))
84+ then throw((("You need to send at least " + toString(minPurchasePrice)) + "WAVLETS to purchase a square"))
85+ else {
86+ let ownerId = toBase58String(i.caller.bytes)
87+ let transactionId = toBase58String(i.transactionId)
88+ let $t022332328 = claimSquare(x, y, "1", ownerId, transactionId)
89+ let asset = $t022332328._1
90+ let assetId = $t022332328._2
91+ let assetUrl = $t022332328._3
92+ let dataKeyPrefix = $t022332328._4
93+[asset, StringEntry((dataKeyPrefix + "_assetId"), toBase58String(assetId)), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), ownerId), StringEntry((ownerId + "_handle"), userText), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(i.caller, 1, assetId)]
94+ }
3795 }
3896
3997
4098
4199 @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
100+func autoBuy (x,y) = {
101+ let callerId = toBase58String(i.caller.bytes)
102+ if (if ((callerId != holdings))
103+ then (callerId != dapp)
104+ else false)
105+ then throw("This can only be triggering internally")
106+ else {
107+ let transactionId = toBase58String(i.transactionId)
108+ let $t029553051 = claimSquare(x, y, "1", holdings, transactionId)
109+ let asset = $t029553051._1
110+ let assetId = $t029553051._2
111+ let assetUrl = $t029553051._3
112+ let dataKeyPrefix = $t029553051._4
113+ let assetIdStr = toBase58String(assetId)
114+ let res = invoke(holdingsAddress, addOwnerAndAmountFunc, [holdings, assetIdStr, 3], [AttachedPayment(unit, 0)])
115+ if ((res == res))
116+ then [asset, StringEntry((dataKeyPrefix + "_assetId"), assetIdStr), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), holdings), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(holdingsAddress, 1, assetId)]
117+ else throw("Strict value is not equal to itself.")
118+ }
119+ }
120+
121+
122+
123+@Callable(i)
124+func promotionPurchase (x,y,desinationAddress) = {
125+ let callerId = toBase58String(i.caller.bytes)
126+ if ((callerId != holdings))
127+ then throw("This can only be triggering internally")
128+ else {
129+ let transactionId = toBase58String(i.transactionId)
130+ let $t038073912 = claimSquare(x, y, "1", desinationAddress, transactionId)
131+ let asset = $t038073912._1
132+ let assetId = $t038073912._2
133+ let assetUrl = $t038073912._3
134+ let dataKeyPrefix = $t038073912._4
135+ let assetIdStr = toBase58String(assetId)
136+[asset, StringEntry((dataKeyPrefix + "_assetId"), assetIdStr), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), desinationAddress), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(Address(fromBase58String(desinationAddress)), 1, assetId)]
137+ }
138+ }
139+
140+
141+
142+@Callable(i)
143+func evolve (x,y,gen,ownerId) = {
144+ let callerId = toBase58String(i.caller.bytes)
145+ if ((callerId != holdings))
146+ then throw("This can only be triggering internally")
147+ else {
148+ let transactionId = toBase58String(i.transactionId)
149+ let $t046384733 = claimSquare(x, y, gen, ownerId, transactionId)
150+ let asset = $t046384733._1
151+ let assetId = $t046384733._2
152+ let assetUrl = $t046384733._3
153+ let dataKeyPrefix = $t046384733._4
154+[asset, StringEntry((dataKeyPrefix + "_assetId"), toBase58String(assetId)), StringEntry((dataKeyPrefix + "_asset"), assetUrl), StringEntry((dataKeyPrefix + "_owner"), ownerId), StringEntry(transactionId, dataKeyPrefix), ScriptTransfer(Address(fromBase58String(ownerId)), 1, assetId)]
155+ }
156+ }
157+
158+
159+
160+@Callable(i)
161+func putForSale (assetId,amount) = {
162+ let callerId = toBase58String(i.caller.bytes)
163+ let assetData = match assetInfo(fromBase58String(assetId)) {
164+ case ass: Asset =>
165+ ass
48166 case _ =>
49- throw("Match error")
167+ throw("Asset not found")
50168 }
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
169+ let dataPrefix = getDataKeyPrefixFromAssetName(assetData.name)
170+ let ownerId = match getString(this, (dataPrefix + "_owner")) {
171+ case s: String =>
172+ s
57173 case _ =>
58- throw("Match error")
174+ throw("Owner not found in data")
59175 }
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)))
176+ if ((minForSaleWavlets > amount))
177+ then throw("Amount needs to be more than 1 wave")
178+ else if (if ((callerId != ownerId))
179+ then (callerId != holdings)
180+ else false)
181+ then throw("You are not able to put this asset up for sale")
68182 else {
69- let callerId = toBase58String(i.caller.bytes)
70- let res = invoke(dAppAddress, "finalizeSale", [assetId, callerId, userText], [AttachedPayment(unit, 0)])
183+ let res = invoke(holdingsAddress, addOwnerAndAmountFunc, [callerId, assetId, amount], [AttachedPayment(unit, 0)])
71184 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- }
185+ then [ScriptTransfer(holdingsAddress, 1, fromBase58String(assetId))]
83186 else throw("Strict value is not equal to itself.")
84187 }
188+ }
189+
190+
191+
192+@Callable(i)
193+func finalizeSale (assetId,ownerId,userText) = {
194+ let callerId = toBase58String(i.caller.bytes)
195+ if ((callerId != holdings))
196+ then throw("This can only be triggering internally")
197+ else {
198+ let prefix = match assetInfo(fromBase58String(assetId)) {
199+ case asset: Asset =>
200+ asset.name
201+ case _ =>
202+ throw("Can't find asset")
203+ }
204+[StringEntry((prefix + "_owner"), ownerId), StringEntry((ownerId + "_handle"), userText)]
205+ }
85206 }
86207
87208
88209 @Verifier(tx)
89210 func verify () = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
90211 then true
91212 else (addressFromPublicKey(tx.senderPublicKey) == holdingsAddress))
92213 then true
93- else (addressFromPublicKey(tx.senderPublicKey) == dAppAddress)
214+ else (addressFromPublicKey(tx.senderPublicKey) == dappAddress)
94215

github/deemru/w8io/169f3d6 
55.24 ms