tx · 6JuY6gKAUk5M6fyMiqDX6pQBcEsLGJFXhCfeu4Scohq5

3Mz9Q4iyqt4W9zC21txmAmTzMRg5T382XLZ:  -0.01000000 Waves

2023.04.03 16:27 [2518455] smart account 3Mz9Q4iyqt4W9zC21txmAmTzMRg5T382XLZ > SELF 0.00000000 Waves

{ "type": 13, "id": "6JuY6gKAUk5M6fyMiqDX6pQBcEsLGJFXhCfeu4Scohq5", "fee": 1000000, "feeAssetId": null, "timestamp": 1680528425856, "version": 2, "chainId": 84, "sender": "3Mz9Q4iyqt4W9zC21txmAmTzMRg5T382XLZ", "senderPublicKey": "3WTpTNBgReDs8Te2PqTQe2DSeveDWNRJo1btckd4eFbQ", "proofs": [ "eRKLuYuMxo22UgRYoM247nS1HARtsZ1AdTuf9KJHHYSHDbSyNfHoXmzYxu1aw6Gs1wfZYBWKjEjV41AdWaqveAh" ], "script": "base64:BgIfCAISBAoCCAgSCQoHCAgICAgECBIECgIICBIECgIICA8ACXB1YmxpY0tleQEgJUOKbV1ox8SiCyVzq+T2O6bj+3L6gwH+amvFJBfgfHsBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEIY2hlY2tORlQBBWFzc2V0AwMDCQAAAggIBQVhc3NldAZpc3N1ZXIFYnl0ZXMIBQR0aGlzBWJ5dGVzCQAAAggFBWFzc2V0CGRlY2ltYWxzAAAHCQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwERa2V5Q29sbGVjdGlvbk5hbWUBDGNvbGxlY3Rpb25JZAkArAICCQCsAgICC2NvbGxlY3Rpb25fBQxjb2xsZWN0aW9uSWQCBV9uYW1lAQ5rZXlVUklUZW1wbGF0ZQEMY29sbGVjdGlvbklkCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FDGNvbGxlY3Rpb25JZAIEX1VSSQERa2V5Q29sbGVjdGlvblNpemUBDGNvbGxlY3Rpb25JZAkArAICCQCsAgICC2NvbGxlY3Rpb25fBQxjb2xsZWN0aW9uSWQCBV9zaXplARJrZXlDb2xsZWN0aW9uT3duZXIBDGNvbGxlY3Rpb25JZAkArAICCQCsAgICC2NvbGxlY3Rpb25fBQxjb2xsZWN0aW9uSWQCBl9vd25lcgEUa2V5Q29sbGVjdGlvbkFzc2V0SWQCDGNvbGxlY3Rpb25JZAphc3NldElkU3RyCQCsAgIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUMY29sbGVjdGlvbklkAglfYXNzZXRJZF8FCmFzc2V0SWRTdHIBCmtleU5mdERhdGEBCmFzc2V0SWRTdHIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQELa2V5TmZ0SW1hZ2UBCmFzc2V0SWRTdHIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UBDGtleU5mdElzc3VlcgEKYXNzZXRJZFN0cgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICB19pc3N1ZXIBCmtleU5mdE1ldGEBCmFzc2V0SWRTdHIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfbWV0YQEQa2V5TmZ0SXNFZGl0YWJsZQEKYXNzZXRJZFN0cgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICC19pc0VkaXRhYmxlARBrZXlOZnRDb2xsZWN0aW9uAQphc3NldElkU3RyCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgILX2NvbGxlY3Rpb24EAWkBEGNyZWF0ZUNvbGxlY3Rpb24CBG5hbWULVVJJVGVtcGxhdGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpPbmx5IG93bmVyBAxjb2xsZWN0aW9uSWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5Q29sbGVjdGlvbk5hbWUBBQxjb2xsZWN0aW9uSWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVVSSVRlbXBsYXRlAQUMY29sbGVjdGlvbklkBQtVUklUZW1wbGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleUNvbGxlY3Rpb25TaXplAQUMY29sbGVjdGlvbklkAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUNvbGxlY3Rpb25Pd25lcgEFDGNvbGxlY3Rpb25JZAkA2AQBCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkFA25pbAFpAQljcmVhdGVORlQHBG5hbWUEZGVzYwVpbWFnZQxjb2xsZWN0aW9uSWQEbWV0YQhlZGl0YWJsZQZzZW5kVG8ED2NvbGxlY3Rpb25Pd25lcgkBDHRyeUdldFN0cmluZwEJARJrZXlDb2xsZWN0aW9uT3duZXIBBQxjb2xsZWN0aW9uSWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpPbmx5IG93bmVyBAVhc3NldAkAwwgHBQRuYW1lBQRkZXNjAAEAAAcFBHVuaXQAAAQHYXNzZXRJZAkAuAgBBQVhc3NldAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBBNjb2xsZWN0aW9uSWRDaGVja2VkCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8DCQBmAgkAsQIBBQxjb2xsZWN0aW9uSWQAAAUMY29sbGVjdGlvbklkAgViYXNpYwQGbmZ0TnVtCQBkAgkBDXRyeUdldEludGVnZXIBCQERa2V5Q29sbGVjdGlvblNpemUBBRNjb2xsZWN0aW9uSWRDaGVja2VkAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleU5mdERhdGEBBQphc3NldElkU3RyCQCsAgIJAKwCAgkArAICCQCsAgICEHsnY29sbGVjdGlvbic6ICcFDGNvbGxlY3Rpb25JZAIKJywgJ251bSc6IAkApAMBBQZuZnROdW0CAX0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleU5mdEltYWdlAQUKYXNzZXRJZFN0cgUFaW1hZ2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleU5mdElzc3VlcgEFCmFzc2V0SWRTdHIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCCQEQa2V5TmZ0SXNFZGl0YWJsZQEFCmFzc2V0SWRTdHIFCGVkaXRhYmxlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlOZnRDb2xsZWN0aW9uAQUKYXNzZXRJZFN0cgUMY29sbGVjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlOZnRNZXRhAQUKYXNzZXRJZFN0cgUEbWV0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleUNvbGxlY3Rpb25TaXplAQUMY29sbGVjdGlvbklkBQZuZnROdW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUNvbGxlY3Rpb25Bc3NldElkAgUMY29sbGVjdGlvbklkBQphc3NldElkU3RyBQphc3NldElkU3RyCQDMCAIFBWFzc2V0BQNuaWwBaQELdHJhbnNmZXJORlQCCXJlY2lwaWVudAdhc3NldElEAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKT25seSBvd25lcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlyZWNpcGllbnQAAQkA2QQBBQdhc3NldElEBQNuaWwBaQENdXBkYXRlTkZUTWV0YQIKYXNzZXRJZFN0cgRtZXRhBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIECmlzRWRpdGFibGUEByRtYXRjaDAJAJsIAgUEdGhpcwkBEGtleU5mdElzRWRpdGFibGUBBQphc3NldElkU3RyAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXgFByRtYXRjaDAFAXgHBA9jb2xsZWN0aW9uSWRTdHIJAQx0cnlHZXRTdHJpbmcBCQEQa2V5TmZ0Q29sbGVjdGlvbgEFCmFzc2V0SWRTdHIED2NvbGxlY3Rpb25Pd25lcgkBDHRyeUdldFN0cmluZwEJARJrZXlDb2xsZWN0aW9uT3duZXIBBQ9jb2xsZWN0aW9uSWRTdHIDCQEBIQEFCmlzRWRpdGFibGUJAAIBAhl0aGlzIE5GVCBjYW4ndCBiZSB1cGRhdGVkAwkBAiE9AgkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkFD2NvbGxlY3Rpb25Pd25lcgkAAgECNHRoaXMgTkZUIGNhbiBiZSB1cGRhdGVkIG9ubHkgYnkgdGhlIGNvbGxlY3Rpb24gb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleU5mdE1ldGEBBQphc3NldElkU3RyBQRtZXRhBQNuaWwBAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAMDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24GCQABAgUHJG1hdGNoMAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAWkFByRtYXRjaDAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCXB1YmxpY0tleQcEwnYR", "height": 2518455, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: aJ249eEQgP2kuby7Rc5UCRhiAhhkTmAgZGeV8rKG6EH Next: none Diff:
OldNewDifferences
8484 then collectionId
8585 else "basic"))
8686 let nftNum = (tryGetInteger(keyCollectionSize(collectionIdChecked)) + 1)
87-[StringEntry(keyNftData(assetIdStr), (((("{'collection': '" + collectionId) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry(keyNftImage(assetIdStr), image), StringEntry(keyNftIssuer(assetIdStr), toString(i.caller)), BooleanEntry(keyNftIsEditable(assetIdStr), editable), StringEntry(keyNftCollection(assetIdStr), collectionId), StringEntry(keyNftMeta(assetIdStr), meta), IntegerEntry(keyCollectionSize(collectionId), nftNum), StringEntry(keyCollectionAssetId(collectionId, assetIdStr), assetIdStr)]
87+[StringEntry(keyNftData(assetIdStr), (((("{'collection': '" + collectionId) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry(keyNftImage(assetIdStr), image), StringEntry(keyNftIssuer(assetIdStr), toString(i.caller)), BooleanEntry(keyNftIsEditable(assetIdStr), editable), StringEntry(keyNftCollection(assetIdStr), collectionId), StringEntry(keyNftMeta(assetIdStr), meta), IntegerEntry(keyCollectionSize(collectionId), nftNum), StringEntry(keyCollectionAssetId(collectionId, assetIdStr), assetIdStr), asset]
8888 }
8989 }
9090
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let publicKey = base58'3WTpTNBgReDs8Te2PqTQe2DSeveDWNRJo1btckd4eFbQ'
55
66 func tryGetInteger (key) = match getInteger(this, key) {
77 case b: Int =>
88 b
99 case _ =>
1010 0
1111 }
1212
1313
1414 func tryGetString (key) = match getString(this, key) {
1515 case b: String =>
1616 b
1717 case _ =>
1818 ""
1919 }
2020
2121
2222 func checkNFT (asset) = if (if (if ((asset.issuer.bytes == this.bytes))
2323 then (asset.decimals == 0)
2424 else false)
2525 then (asset.reissuable == false)
2626 else false)
2727 then (asset.quantity == 1)
2828 else false
2929
3030
3131 func keyCollectionName (collectionId) = (("collection_" + collectionId) + "_name")
3232
3333
3434 func keyURITemplate (collectionId) = (("collection_" + collectionId) + "_URI")
3535
3636
3737 func keyCollectionSize (collectionId) = (("collection_" + collectionId) + "_size")
3838
3939
4040 func keyCollectionOwner (collectionId) = (("collection_" + collectionId) + "_owner")
4141
4242
4343 func keyCollectionAssetId (collectionId,assetIdStr) = ((("collection_" + collectionId) + "_assetId_") + assetIdStr)
4444
4545
4646 func keyNftData (assetIdStr) = (("nft_" + assetIdStr) + "_data")
4747
4848
4949 func keyNftImage (assetIdStr) = (("nft_" + assetIdStr) + "_image")
5050
5151
5252 func keyNftIssuer (assetIdStr) = (("nft_" + assetIdStr) + "_issuer")
5353
5454
5555 func keyNftMeta (assetIdStr) = (("nft_" + assetIdStr) + "_meta")
5656
5757
5858 func keyNftIsEditable (assetIdStr) = (("nft_" + assetIdStr) + "_isEditable")
5959
6060
6161 func keyNftCollection (assetIdStr) = (("nft_" + assetIdStr) + "_collection")
6262
6363
6464 @Callable(i)
6565 func createCollection (name,URITemplate) = if ((i.caller != this))
6666 then throw("Only owner")
6767 else {
6868 let collectionId = toBase58String(i.transactionId)
6969 [StringEntry(keyCollectionName(collectionId), name), StringEntry(keyURITemplate(collectionId), URITemplate), IntegerEntry(keyCollectionSize(collectionId), 0), StringEntry(keyCollectionOwner(collectionId), toBase58String(i.originCallerPublicKey))]
7070 }
7171
7272
7373
7474 @Callable(i)
7575 func createNFT (name,desc,image,collectionId,meta,editable,sendTo) = {
7676 let collectionOwner = tryGetString(keyCollectionOwner(collectionId))
7777 if ((i.caller != this))
7878 then throw("Only owner")
7979 else {
8080 let asset = Issue(name, desc, 1, 0, false, unit, 0)
8181 let assetId = calculateAssetId(asset)
8282 let assetIdStr = toBase58String(assetId)
8383 let collectionIdChecked = ((toString(i.caller) + "_") + (if ((size(collectionId) > 0))
8484 then collectionId
8585 else "basic"))
8686 let nftNum = (tryGetInteger(keyCollectionSize(collectionIdChecked)) + 1)
87-[StringEntry(keyNftData(assetIdStr), (((("{'collection': '" + collectionId) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry(keyNftImage(assetIdStr), image), StringEntry(keyNftIssuer(assetIdStr), toString(i.caller)), BooleanEntry(keyNftIsEditable(assetIdStr), editable), StringEntry(keyNftCollection(assetIdStr), collectionId), StringEntry(keyNftMeta(assetIdStr), meta), IntegerEntry(keyCollectionSize(collectionId), nftNum), StringEntry(keyCollectionAssetId(collectionId, assetIdStr), assetIdStr)]
87+[StringEntry(keyNftData(assetIdStr), (((("{'collection': '" + collectionId) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry(keyNftImage(assetIdStr), image), StringEntry(keyNftIssuer(assetIdStr), toString(i.caller)), BooleanEntry(keyNftIsEditable(assetIdStr), editable), StringEntry(keyNftCollection(assetIdStr), collectionId), StringEntry(keyNftMeta(assetIdStr), meta), IntegerEntry(keyCollectionSize(collectionId), nftNum), StringEntry(keyCollectionAssetId(collectionId, assetIdStr), assetIdStr), asset]
8888 }
8989 }
9090
9191
9292
9393 @Callable(i)
9494 func transferNFT (recipient,assetID) = if ((i.caller != this))
9595 then throw("Only owner")
9696 else [ScriptTransfer(addressFromStringValue(recipient), 1, fromBase58String(assetID))]
9797
9898
9999
100100 @Callable(i)
101101 func updateNFTMeta (assetIdStr,meta) = {
102102 let asset = value(assetInfo(fromBase58String(assetIdStr)))
103103 let isEditable = match getBoolean(this, keyNftIsEditable(assetIdStr)) {
104104 case x: Boolean =>
105105 x
106106 case _ =>
107107 false
108108 }
109109 let collectionIdStr = tryGetString(keyNftCollection(assetIdStr))
110110 let collectionOwner = tryGetString(keyCollectionOwner(collectionIdStr))
111111 if (!(isEditable))
112112 then throw("this NFT can't be updated")
113113 else if ((toBase58String(i.callerPublicKey) != collectionOwner))
114114 then throw("this NFT can be updated only by the collection owner")
115115 else [StringEntry(keyNftMeta(assetIdStr), meta)]
116116 }
117117
118118
119119 @Verifier(tx)
120120 func verify () = match tx {
121121 case i: InvokeScriptTransaction|SetScriptTransaction =>
122122 sigVerify(tx.bodyBytes, tx.proofs[0], publicKey)
123123 case _ =>
124124 false
125125 }
126126

github/deemru/w8io/169f3d6 
41.93 ms