tx · EfuQpcbfFVtHihDajF44cspjSSdrpkjw5S6RcmgFkPMX

3MtoBpCc3s2T4CxasJ5MXrZZsU339D28mvD:  -0.01400000 Waves

2021.05.25 17:46 [1541319] smart account 3MtoBpCc3s2T4CxasJ5MXrZZsU339D28mvD > SELF 0.00000000 Waves

{ "type": 13, "id": "EfuQpcbfFVtHihDajF44cspjSSdrpkjw5S6RcmgFkPMX", "fee": 1400000, "feeAssetId": null, "timestamp": 1621953990515, "version": 2, "chainId": 84, "sender": "3MtoBpCc3s2T4CxasJ5MXrZZsU339D28mvD", "senderPublicKey": "8SRjg8K8B7rhV2pih6qRgku886VQE4phwNCDjWZu1fUe", "proofs": [ "5Q2jY13ptzCsaJn7P6uYmpFLmLHDcHjVRMSLY5Pf14Friiuza6vUZYrv9npewwABR1fDyQeXrDvKMXcMcqg2Zjn4" ], "script": "base64:AAIEAAAAAAAAACYIAhIDCgEIEgMKAQESAwoBARIECgIIARIHCgUICAEBCBIECgIIAQAAABEBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAABm51bWJlcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAAGbnVtYmVyAAAAAAROT05FAgAAAARub25lAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAZzdHJpbmcEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAABE5PTkUFAAAABnN0cmluZwEAAAAPZ2V0S2V5VXNlckVtYWlsAAAAAQAAAAR1c2VyCQABLAAAAAIJAAEsAAAAAgIAAAAFdXNlcl8FAAAABHVzZXICAAAABl9lbWFpbAEAAAARZ2V0VmFsdWVVc2VyRW1haWwAAAABAAAABHVzZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA9nZXRLZXlVc2VyRW1haWwAAAABBQAAAAR1c2VyAQAAABFnZXRLZXlVc2VyQmFsYW5jZQAAAAEAAAAEdXNlcgkAASwAAAACCQABLAAAAAICAAAABXVzZXJfBQAAAAR1c2VyAgAAAAhfYmFsYW5jZQEAAAATZ2V0VmFsdWVVc2VyQmFsYW5jZQAAAAEAAAAEdXNlcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEWdldEtleVVzZXJCYWxhbmNlAAAAAQUAAAAEdXNlcgEAAAARZ2V0S2V5REFwcEFzc2V0SWQAAAAAAgAAAAxkQXBwX2Fzc2V0SWQBAAAAE2dldFZhbHVlREFwcEFzc2V0SWQAAAAACQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAARZ2V0S2V5REFwcEFzc2V0SWQAAAAAAQAAABFnZXRLZXlEQXBwQmFsYW5jZQAAAAACAAAADGRBcHBfYmFsYW5jZQEAAAATZ2V0VmFsdWVEQXBwQmFsYW5jZQAAAAAJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABFnZXRLZXlEQXBwQmFsYW5jZQAAAAABAAAAEGdldEtleUFzc2V0VGl0bGUAAAABAAAABWFzc2V0CQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAVhc3NldAIAAAAGX3RpdGxlAQAAABJnZXRWYWx1ZUFzc2V0VGl0bGUAAAABAAAABWFzc2V0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0S2V5QXNzZXRUaXRsZQAAAAEFAAAABWFzc2V0AQAAABBnZXRLZXlBc3NldFByaWNlAAAAAQAAAAVhc3NldAkAASwAAAACCQABLAAAAAICAAAABmFzc2V0XwUAAAAFYXNzZXQCAAAABl9wcmljZQEAAAASZ2V0VmFsdWVBc3NldFByaWNlAAAAAQAAAAVhc3NldAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEGdldEtleUFzc2V0UHJpY2UAAAABBQAAAAVhc3NldAEAAAAPZ2V0S2V5QXNzZXREYXRhAAAAAQAAAAVhc3NldAkAASwAAAACCQABLAAAAAICAAAABmFzc2V0XwUAAAAFYXNzZXQCAAAABV9kYXRhAQAAABFnZXRWYWx1ZUFzc2V0RGF0YQAAAAEAAAAFYXNzZXQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBnZXRLZXlBc3NldFByaWNlAAAAAQUAAAAFYXNzZXQAAAAGAAAAAWkBAAAABnNpZ25VcAAAAAEAAAAFZW1haWwEAAAAEmN1cnJlbnRVc2VyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABBjdXJyZW50VXNlckVtYWlsCQEAAAARZ2V0VmFsdWVVc2VyRW1haWwAAAABBQAAABJjdXJyZW50VXNlckFkZHJlc3MDCQEAAAACIT0AAAACBQAAABBjdXJyZW50VXNlckVtYWlsBQAAAAROT05FCQAAAgAAAAECAAAAGnVzZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXRLZXlVc2VyRW1haWwAAAABBQAAABJjdXJyZW50VXNlckFkZHJlc3MFAAAABWVtYWlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0S2V5VXNlckJhbGFuY2UAAAABBQAAABJjdXJyZW50VXNlckFkZHJlc3MAAAAAAAAAAAAFAAAAA25pbAAAAAFpAQAAAAppc3N1ZVRva2VuAAAAAQAAAAhxdWFudGl0eQQAAAALZEFwcEFzc2V0SWQJAQAAABNnZXRWYWx1ZURBcHBBc3NldElkAAAAAAMJAQAAAAIhPQAAAAIFAAAAC2RBcHBBc3NldElkBQAAAAROT05FCQAAAgAAAAECAAAAHXRva2VuIGhhcyBhbHJlYWR5IGJlZW4gaXNzdWVkBAAAAAVhc3NldAkABEIAAAAFAgAAAAdOWUFOLTI1AgAAAA1OWUFOLTI1IHRva2VuBQAAAAhxdWFudGl0eQAAAAAAAAAAAAYEAAAAB2Fzc2V0SWQJAAQ4AAAAAQUAAAAFYXNzZXQJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldEtleURBcHBBc3NldElkAAAAAAkAAlgAAAABBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0S2V5REFwcEJhbGFuY2UAAAAABQAAAAhxdWFudGl0eQUAAAADbmlsAAAAAWkBAAAADHJlaXNzdWVUb2tlbgAAAAEAAAAIcXVhbnRpdHkEAAAAC2RBcHBBc3NldElkCQEAAAATZ2V0VmFsdWVEQXBwQXNzZXRJZAAAAAADCQAAAAAAAAIFAAAAC2RBcHBBc3NldElkBQAAAAROT05FCQAAAgAAAAECAAAAGXRva2VuIGhhcyBub3QgYmVlbiBpc3N1ZWQEAAAAEmN1cnJlbnREQXBwQmFsYW5jZQkBAAAAE2dldFZhbHVlREFwcEJhbGFuY2UAAAAABAAAAApuZXdCYWxhbmNlCQAAZAAAAAIFAAAAEmN1cnJlbnREQXBwQmFsYW5jZQUAAAAIcXVhbnRpdHkJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADCQACWQAAAAEFAAAAC2RBcHBBc3NldElkBQAAAAhxdWFudGl0eQYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRLZXlEQXBwQmFsYW5jZQAAAAAFAAAACm5ld0JhbGFuY2UFAAAAA25pbAAAAAFpAQAAAA10cmFuc2ZlclRva2VuAAAAAgAAAAlyZWNpcGllbnQAAAAGYW1vdW50BAAAABJjdXJyZW50REFwcEJhbGFuY2UJAQAAABNnZXRWYWx1ZURBcHBCYWxhbmNlAAAAAAQAAAAObmV3REFwcEJhbGFuY2UJAABlAAAAAgUAAAASY3VycmVudERBcHBCYWxhbmNlBQAAAAZhbW91bnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAADm5ld0RBcHBCYWxhbmNlCQAAAgAAAAECAAAAEm5vdCBlbm91bmcgYmFsYW5jZQQAAAASY3VycmVudFVzZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAEmN1cnJlbnRVc2VyQmFsYW5jZQkBAAAAE2dldFZhbHVlVXNlckJhbGFuY2UAAAABBQAAABJjdXJyZW50VXNlckFkZHJlc3MEAAAADm5ld1VzZXJCYWxhbmNlCQAAZAAAAAIFAAAAEmN1cnJlbnRVc2VyQmFsYW5jZQUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0S2V5REFwcEJhbGFuY2UAAAAABQAAAA5uZXdEQXBwQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldEtleVVzZXJCYWxhbmNlAAAAAQUAAAAJcmVjaXBpZW50BQAAAA5uZXdVc2VyQmFsYW5jZQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAJcmVjaXBpZW50BQAAAAZhbW91bnQJAAJZAAAAAQkBAAAAE2dldFZhbHVlREFwcEFzc2V0SWQAAAAABQAAAANuaWwAAAABaQEAAAAPaXNzdWVBc3NldFRva2VuAAAABQAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAACHF1YW50aXR5AAAABXByaWNlAAAABGRhdGEEAAAABWFzc2V0CQAEQgAAAAUFAAAABG5hbWUFAAAAC2Rlc2NyaXB0aW9uBQAAAAhxdWFudGl0eQAAAAAAAAAAAAYEAAAAB2Fzc2V0SWQJAAQ4AAAAAQUAAAAFYXNzZXQJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEtleUFzc2V0VGl0bGUAAAABCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAABG5hbWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBnZXRLZXlBc3NldFByaWNlAAAAAQkAAlgAAAABBQAAAAdhc3NldElkBQAAAAVwcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0S2V5QXNzZXREYXRhAAAAAQkAAlgAAAABBQAAAAdhc3NldElkBQAAAARkYXRhBQAAAANuaWwAAAABaQEAAAASZXhjaGFuZ2VBc3NldFRva2VuAAAAAgAAAAdhc3NldElkAAAABmFtb3VudAQAAAASY3VycmVudFVzZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAEmN1cnJlbnRVc2VyQmFsYW5jZQkAA/AAAAACCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAASY3VycmVudFVzZXJBZGRyZXNzCQACWQAAAAEJAQAAABNnZXRWYWx1ZURBcHBBc3NldElkAAAAAAQAAAAKYXNzZXRQcmljZQkBAAAAEmdldFZhbHVlQXNzZXRQcmljZQAAAAEFAAAAB2Fzc2V0SWQEAAAAA3N1bQkAAGgAAAACBQAAAAphc3NldFByaWNlBQAAAAZhbW91bnQEAAAADm5ld1VzZXJCYWxhbmNlCQAAZQAAAAIFAAAAEmN1cnJlbnRVc2VyQmFsYW5jZQUAAAADc3VtAwkAAGYAAAACAAAAAAAAAAAABQAAAA5uZXdVc2VyQmFsYW5jZQkAAAIAAAABAgAAABJub3QgZW5vdW5nIGJhbGFuY2UJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAEmN1cnJlbnRVc2VyQWRkcmVzcwUAAAAGYW1vdW50CQACWQAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAABEJ1cm4AAAACCQACWQAAAAEJAQAAABNnZXRWYWx1ZURBcHBBc3NldElkAAAAAAUAAAADc3VtBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tledx9G5w=", "height": 1541319, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 694TW1NM2jaP8bZyiDyPmYTWfRk6UsAiPwBmoUDTmog9 Next: 8Mfx3ETERxpzSbEvjscH9bqkWbPokQfcDG9eAuhAwdbg Diff:
OldNewDifferences
130130 }
131131
132132
133+
134+@Callable(i)
135+func exchangeAssetToken (assetId,amount) = {
136+ let currentUserAddress = toBase58String(i.caller.bytes)
137+ let currentUserBalance = assetBalance(Address(fromBase58String(currentUserAddress)), fromBase58String(getValueDAppAssetId()))
138+ let assetPrice = getValueAssetPrice(assetId)
139+ let sum = (assetPrice * amount)
140+ let newUserBalance = (currentUserBalance - sum)
141+ if ((0 > newUserBalance))
142+ then throw("not enoung balance")
143+ else [ScriptTransfer(Address(fromBase58String(currentUserAddress)), amount, fromBase58String(assetId)), Burn(fromBase58String(getValueDAppAssetId()), sum)]
144+ }
145+
146+
133147 @Verifier(tx)
134148 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
135149
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = {
55 let number = match getInteger(this, key) {
66 case a: Int =>
77 a
88 case _ =>
99 0
1010 }
1111 number
1212 }
1313
1414
1515 let NONE = "none"
1616
1717 func getStringByKey (key) = {
1818 let string = match getString(this, key) {
1919 case a: String =>
2020 a
2121 case _ =>
2222 NONE
2323 }
2424 string
2525 }
2626
2727
2828 func getKeyUserEmail (user) = (("user_" + user) + "_email")
2929
3030
3131 func getValueUserEmail (user) = getStringByKey(getKeyUserEmail(user))
3232
3333
3434 func getKeyUserBalance (user) = (("user_" + user) + "_balance")
3535
3636
3737 func getValueUserBalance (user) = getNumberByKey(getKeyUserBalance(user))
3838
3939
4040 func getKeyDAppAssetId () = "dApp_assetId"
4141
4242
4343 func getValueDAppAssetId () = getStringByKey(getKeyDAppAssetId())
4444
4545
4646 func getKeyDAppBalance () = "dApp_balance"
4747
4848
4949 func getValueDAppBalance () = getNumberByKey(getKeyDAppBalance())
5050
5151
5252 func getKeyAssetTitle (asset) = (("asset_" + asset) + "_title")
5353
5454
5555 func getValueAssetTitle (asset) = getStringByKey(getKeyAssetTitle(asset))
5656
5757
5858 func getKeyAssetPrice (asset) = (("asset_" + asset) + "_price")
5959
6060
6161 func getValueAssetPrice (asset) = getNumberByKey(getKeyAssetPrice(asset))
6262
6363
6464 func getKeyAssetData (asset) = (("asset_" + asset) + "_data")
6565
6666
6767 func getValueAssetData (asset) = getStringByKey(getKeyAssetPrice(asset))
6868
6969
7070 @Callable(i)
7171 func signUp (email) = {
7272 let currentUserAddress = toBase58String(i.caller.bytes)
7373 let currentUserEmail = getValueUserEmail(currentUserAddress)
7474 if ((currentUserEmail != NONE))
7575 then throw("user is already registered")
7676 else [StringEntry(getKeyUserEmail(currentUserAddress), email), IntegerEntry(getKeyUserBalance(currentUserAddress), 0)]
7777 }
7878
7979
8080
8181 @Callable(i)
8282 func issueToken (quantity) = {
8383 let dAppAssetId = getValueDAppAssetId()
8484 if ((dAppAssetId != NONE))
8585 then throw("token has already been issued")
8686 else {
8787 let asset = Issue("NYAN-25", "NYAN-25 token", quantity, 0, true)
8888 let assetId = calculateAssetId(asset)
8989 [asset, StringEntry(getKeyDAppAssetId(), toBase58String(assetId)), IntegerEntry(getKeyDAppBalance(), quantity)]
9090 }
9191 }
9292
9393
9494
9595 @Callable(i)
9696 func reissueToken (quantity) = {
9797 let dAppAssetId = getValueDAppAssetId()
9898 if ((dAppAssetId == NONE))
9999 then throw("token has not been issued")
100100 else {
101101 let currentDAppBalance = getValueDAppBalance()
102102 let newBalance = (currentDAppBalance + quantity)
103103 [Reissue(fromBase58String(dAppAssetId), quantity, true), IntegerEntry(getKeyDAppBalance(), newBalance)]
104104 }
105105 }
106106
107107
108108
109109 @Callable(i)
110110 func transferToken (recipient,amount) = {
111111 let currentDAppBalance = getValueDAppBalance()
112112 let newDAppBalance = (currentDAppBalance - amount)
113113 if ((0 > newDAppBalance))
114114 then throw("not enoung balance")
115115 else {
116116 let currentUserAddress = toBase58String(i.caller.bytes)
117117 let currentUserBalance = getValueUserBalance(currentUserAddress)
118118 let newUserBalance = (currentUserBalance + amount)
119119 [IntegerEntry(getKeyDAppBalance(), newDAppBalance), IntegerEntry(getKeyUserBalance(recipient), newUserBalance), ScriptTransfer(Address(fromBase58String(recipient)), amount, fromBase58String(getValueDAppAssetId()))]
120120 }
121121 }
122122
123123
124124
125125 @Callable(i)
126126 func issueAssetToken (name,description,quantity,price,data) = {
127127 let asset = Issue(name, description, quantity, 0, true)
128128 let assetId = calculateAssetId(asset)
129129 [asset, StringEntry(getKeyAssetTitle(toBase58String(assetId)), name), IntegerEntry(getKeyAssetPrice(toBase58String(assetId)), price), StringEntry(getKeyAssetData(toBase58String(assetId)), data)]
130130 }
131131
132132
133+
134+@Callable(i)
135+func exchangeAssetToken (assetId,amount) = {
136+ let currentUserAddress = toBase58String(i.caller.bytes)
137+ let currentUserBalance = assetBalance(Address(fromBase58String(currentUserAddress)), fromBase58String(getValueDAppAssetId()))
138+ let assetPrice = getValueAssetPrice(assetId)
139+ let sum = (assetPrice * amount)
140+ let newUserBalance = (currentUserBalance - sum)
141+ if ((0 > newUserBalance))
142+ then throw("not enoung balance")
143+ else [ScriptTransfer(Address(fromBase58String(currentUserAddress)), amount, fromBase58String(assetId)), Burn(fromBase58String(getValueDAppAssetId()), sum)]
144+ }
145+
146+
133147 @Verifier(tx)
134148 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
135149

github/deemru/w8io/873ac7e 
23.72 ms