tx · 4pkbkwaK68pN1EwBJjpYjS7ViRTxeuEcR8FYqKLZngBQ

3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE:  -0.00700000 Waves

2022.08.02 23:40 [3232872] smart account 3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE > SELF 0.00000000 Waves

{ "type": 13, "id": "4pkbkwaK68pN1EwBJjpYjS7ViRTxeuEcR8FYqKLZngBQ", "fee": 700000, "feeAssetId": null, "timestamp": 1659472841514, "version": 2, "chainId": 87, "sender": "3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE", "senderPublicKey": "GokNVLddb43BhUkdo2fpeMvk9yczRjnasz6pFVha7u1n", "proofs": [ "2vbEZHnpZu7SGMQae2DnZuHxWNKwuUBChnTUTU6GJZch2J9SLSUfiGtcmiKD9Kz4krpeBS4Ni9muUFXL6tvH8Dq3" ], "script": "base64:BgIGCAISABIABwAQY3JlYXRlTkZUQWRkcmVzcwkBB0FkZHJlc3MBARoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAATem9tYmllSXNzdWVyQWRkcmVzcwkBB0FkZHJlc3MBARoBVzwia2+DPLzn0NsAUzuxeI+PJBHmuBOukwAScHVua3NJc3N1ZXJBZGRyZXNzCQEHQWRkcmVzcwEBGgFXS+xPjera0gSnSXFRUVq2krtB1F+FwuxoAQ9pc1ZhbGlkTmZ0QXNzZXQBBWFzc2V0AwMJAAACCAUFYXNzZXQIZGVjaW1hbHMAAAkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBEmlzV2F2ZXNQdW5rc0lzc3VlcgEFYXNzZXQEByRtYXRjaDAJAM8IAgkAzAgCBRN6b21iaWVJc3N1ZXJBZGRyZXNzCQDMCAIFEnB1bmtzSXNzdWVyQWRkcmVzcwUDbmlsCAUFYXNzZXQGaXNzdWVyAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAYHAQp2YWx1ZUJ5S2V5AgRkYXRhA2tleQoBBGZpbmQCBWFjY3VtBG5leHQDCQEIY29udGFpbnMCBQRuZXh0CQCsAgIFA2tleQICOiAJALMCAgkAsAICCQCRAwIJALUJAgUEbmV4dAICOiAAAQABAAEFBWFjY3VtCgACJGwFBGRhdGEKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZpbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAQ9nZXRJc3N1ZXJQYXJhbXMBBWFzc2V0BApwYXJzZWREYXRhCQC1CQIJALMCAgkAsAICCAUFYXNzZXQLZGVzY3JpcHRpb24AAQABAgIsIAMJAAACCAUFYXNzZXQGaXNzdWVyBRJwdW5rc0lzc3VlckFkZHJlc3MJAMwIAggFBWFzc2V0BG5hbWUJAMwIAgJIV0FWRVMgUFVOS1MgaXMgdGhlIGZpcnN0IGNvbGxlY3Rpb24gb2YgZGlnaXRhbCBwdW5rcyBvbiBXYXZlcyBibG9ja2NoYWluCQDMCAIJAQp2YWx1ZUJ5S2V5AgUKcGFyc2VkRGF0YQIDdXJsCQDMCAICCldhdmVzUHVua3MFA25pbAMJAAACCAUFYXNzZXQGaXNzdWVyBRN6b21iaWVJc3N1ZXJBZGRyZXNzCQDMCAIIBQVhc3NldARuYW1lCQDMCAICPlNlY29uZCBDaGFwdGVyIG9mIHRoZSBmaXJzdC1ldmVyIE5GVC1wdW5rcyBvbiBXQVZFUyBibG9ja2NoYWluCQDMCAIJAQp2YWx1ZUJ5S2V5AgUKcGFyc2VkRGF0YQIDdXJsCQDMCAICEVdhdmVzUHVua3MgWm9tYmllBQNuaWwJAAIBAhlXcm9uZyBORlQgYXNzZXQgZm9yIGlzc3VlAgFpAQRsb2NrAAQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEB2Fzc2V0SWQJAQV2YWx1ZQEICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQJYXNzZXREZXNjCAUFYXNzZXQLZGVzY3JpcHRpb24DAwMJAAACCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABCQEPaXNWYWxpZE5mdEFzc2V0AQUFYXNzZXQHCQESaXNXYXZlc1B1bmtzSXNzdWVyAQUFYXNzZXQHBAtpc3N1ZVBhcmFtcwkBD2dldElzc3VlclBhcmFtcwEFBWFzc2V0BA5mYWtlSXNzdWVJZFN0cgQHJG1hdGNoMAkA/AcEBRBjcmVhdGVORlRBZGRyZXNzAgljcmVhdGVORlQFC2lzc3VlUGFyYW1zBQNuaWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIrU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGNyZWF0aW9uIG9mIE5GVAMJAAACBQ5mYWtlSXNzdWVJZFN0cgUOZmFrZUlzc3VlSWRTdHIJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQ5mYWtlSXNzdWVJZFN0cgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUOZmFrZUlzc3VlSWRTdHICCF9hc3NldElkCQDYBAEIBQVhc3NldAJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUOZmFrZUlzc3VlSWRTdHICB19jYWxsZXIFCmFkZHJlc3NTdHIFA25pbAUOZmFrZUlzc3VlSWRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhNJdmFsaWQgTkZUIGF0dGFjaGVkAWkBBnVubG9jawAECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAdhc3NldElkCQEFdmFsdWUBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEDWNhbGxlckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICAgRuZnRfCQDYBAEFB2Fzc2V0SWQCB19jYWxsZXIEFW9yaWdpbmFsTmZ0QXNzZXRJZFN0cgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCsAgICBG5mdF8JANgEAQUHYXNzZXRJZAIIX2Fzc2V0SWQECG5mdEFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwMJAAACCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABCQEPaXNWYWxpZE5mdEFzc2V0AQUIbmZ0QXNzZXQHCQAAAgUKYWRkcmVzc1N0cgUNY2FsbGVyQWRkcmVzcwcEB2ludkJ1cm4JAPwHBAUQY3JlYXRlTkZUQWRkcmVzcwIHYnVybk5GVAUDbmlsCQDMCAIJAJEDAggFAWkIcGF5bWVudHMAAAUDbmlsAwkAAAIFB2ludkJ1cm4FB2ludkJ1cm4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBRVvcmlnaW5hbE5mdEFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8JANgEAQUHYXNzZXRJZAIIX2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8JANgEAQUHYXNzZXRJZAIHX2NhbGxlcgUDbmlsBRVvcmlnaW5hbE5mdEFzc2V0SWRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhNJdmFsaWQgTkZUIGF0dGFjaGVkAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleSx3LqA=", "height": 3232872, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HkPtCtUYcUgZgtKwX1LVXL4MbBErqrM6ozemr7cY8ABo Next: 67s2RM7FFY16iZuj5j9N2qDG9VCMyge6FjNP2pvZDKdF Diff:
OldNewDifferences
4646 let parsedData = split(dropRight(drop(asset.description, 1), 1), ", ")
4747 if ((asset.issuer == punksIssuerAddress))
4848 then [asset.name, "WAVES PUNKS is the first collection of digital punks on Waves blockchain", valueByKey(parsedData, "url"), "WavesPunks"]
49- else if ((asset.issuer == punksIssuerAddress))
49+ else if ((asset.issuer == zombieIssuerAddress))
5050 then [asset.name, "Second Chapter of the first-ever NFT-punks on WAVES blockchain", valueByKey(parsedData, "url"), "WavesPunks Zombie"]
5151 else throw("Wrong NFT asset for issue")
5252 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let createNFTAddress = Address(base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By')
55
66 let zombieIssuerAddress = Address(base58'3P7QrWH1ETLfKAJcFHYPJmQusNbDuW98Hop')
77
88 let punksIssuerAddress = Address(base58'3P8rLVnwrTf4k5AB3emuduhZZb1yKcitTHy')
99
1010 func isValidNftAsset (asset) = if (if ((asset.decimals == 0))
1111 then (asset.reissuable == false)
1212 else false)
1313 then (asset.quantity == 1)
1414 else false
1515
1616
1717 func isWavesPunksIssuer (asset) = match indexOf([zombieIssuerAddress, punksIssuerAddress], asset.issuer) {
1818 case x: Int =>
1919 true
2020 case _ =>
2121 false
2222 }
2323
2424
2525 func valueByKey (data,key) = {
2626 func find (accum,next) = if (contains(next, (key + ": ")))
2727 then dropRight(drop(split(next, ": ")[1], 1), 1)
2828 else accum
2929
3030 let $l = data
3131 let $s = size($l)
3232 let $acc0 = ""
3333 func $f0_1 ($a,$i) = if (($i >= $s))
3434 then $a
3535 else find($a, $l[$i])
3636
3737 func $f0_2 ($a,$i) = if (($i >= $s))
3838 then $a
3939 else throw("List size exceeds 5")
4040
4141 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
4242 }
4343
4444
4545 func getIssuerParams (asset) = {
4646 let parsedData = split(dropRight(drop(asset.description, 1), 1), ", ")
4747 if ((asset.issuer == punksIssuerAddress))
4848 then [asset.name, "WAVES PUNKS is the first collection of digital punks on Waves blockchain", valueByKey(parsedData, "url"), "WavesPunks"]
49- else if ((asset.issuer == punksIssuerAddress))
49+ else if ((asset.issuer == zombieIssuerAddress))
5050 then [asset.name, "Second Chapter of the first-ever NFT-punks on WAVES blockchain", valueByKey(parsedData, "url"), "WavesPunks Zombie"]
5151 else throw("Wrong NFT asset for issue")
5252 }
5353
5454
5555 @Callable(i)
5656 func lock () = {
5757 let addressStr = toString(i.caller)
5858 let assetId = value(value(i.payments[0]).assetId)
5959 let asset = value(assetInfo(assetId))
6060 let assetDesc = asset.description
6161 if (if (if ((value(i.payments[0]).amount == 1))
6262 then isValidNftAsset(asset)
6363 else false)
6464 then isWavesPunksIssuer(asset)
6565 else false)
6666 then {
6767 let issueParams = getIssuerParams(asset)
6868 let fakeIssueIdStr = match invoke(createNFTAddress, "createNFT", issueParams, nil) {
6969 case s: String =>
7070 s
7171 case _ =>
7272 throw("Something went wrong during creation of NFT")
7373 }
7474 if ((fakeIssueIdStr == fakeIssueIdStr))
7575 then $Tuple2([ScriptTransfer(i.caller, 1, fromBase58String(fakeIssueIdStr)), StringEntry((("nft_" + fakeIssueIdStr) + "_assetId"), toBase58String(asset.id)), StringEntry((("nft_" + fakeIssueIdStr) + "_caller"), addressStr)], fakeIssueIdStr)
7676 else throw("Strict value is not equal to itself.")
7777 }
7878 else throw("Ivalid NFT attached")
7979 }
8080
8181
8282
8383 @Callable(i)
8484 func unlock () = {
8585 let addressStr = toString(i.caller)
8686 let assetId = value(value(i.payments[0]).assetId)
8787 let callerAddress = getStringValue(this, (("nft_" + toBase58String(assetId)) + "_caller"))
8888 let originalNftAssetIdStr = getStringValue(this, (("nft_" + toBase58String(assetId)) + "_assetId"))
8989 let nftAsset = value(assetInfo(assetId))
9090 if (if (if ((value(i.payments[0]).amount == 1))
9191 then isValidNftAsset(nftAsset)
9292 else false)
9393 then (addressStr == callerAddress)
9494 else false)
9595 then {
9696 let invBurn = invoke(createNFTAddress, "burnNFT", nil, [i.payments[0]])
9797 if ((invBurn == invBurn))
9898 then $Tuple2([ScriptTransfer(i.caller, 1, fromBase58String(originalNftAssetIdStr)), DeleteEntry((("nft_" + toBase58String(assetId)) + "_assetId")), DeleteEntry((("nft_" + toBase58String(assetId)) + "_caller"))], originalNftAssetIdStr)
9999 else throw("Strict value is not equal to itself.")
100100 }
101101 else throw("Ivalid NFT attached")
102102 }
103103
104104
105105 @Verifier(tx)
106106 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
107107

github/deemru/w8io/0e76f2f 
47.14 ms