tx · 8UQikxBWKz8GC4DavBN49HvBQUsnEifdetfn3fdpY25J

3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq:  -0.01000000 Waves

2022.11.15 15:33 [2318243] smart account 3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq > SELF 0.00000000 Waves

{ "type": 13, "id": "8UQikxBWKz8GC4DavBN49HvBQUsnEifdetfn3fdpY25J", "fee": 1000000, "feeAssetId": null, "timestamp": 1668515692052, "version": 2, "chainId": 84, "sender": "3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq", "senderPublicKey": "H6UqxUDcJamDRg1uykVcWMn4zhAMTV7i1nfPq1moLWmJ", "proofs": [ "itNCA1fmTt85sKdPLEYZgxSFmM8qy5yU8hku3NTKtcDESeqVjubajY7GJYQg4QVMBx9RvbYeAuCX6yaqvTR7S1M" ], "script": "base64:BgIZCAISCwoJCAgICAgBCAgIEgMKAQgSAwoBAQUACXNlcGFyYXRvcgIBXwAEa0J1eQIDYnV5AAVrU2VsbAIEc2VsbAAGa1ByaWNlAgVwcmljZQEFaXNOZnQBB2Fzc2V0SWQEByRtYXRjaDAJAOwHAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFdG9rZW4FByRtYXRjaDADAwkAAAIIBQV0b2tlbghkZWNpbWFscwAACQAAAggFBXRva2VuCHF1YW50aXR5AAEHCQAAAggFBXRva2VuCnJlaXNzdWFibGUHBwcDAWkBCGlzc3VlTmZ0CQhuZnRfbmFtZQluZnRfb3duZXIPbmZ0X2RBcHBBZGRyZXNzCG5mdF90eXBlCG5mdF90YWdzEW5mdF9zZWxsaW5nX3ByaWNlD25mdF9kZXNjcmlwdGlvbgpuZnRfb25TZWxsCG5mdF9kYXRhBAhuZXdUb2tlbgkAwggFBQhuZnRfbmFtZQUPbmZ0X2Rlc2NyaXB0aW9uAAEAAAcEB2lzc3VlSWQJALgIAQUIbmV3VG9rZW4JAMwIAgUIbmV3VG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2lzc3VlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgluZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X3R5cGUFCG5mdF90eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X3RhZ3MFCG5mdF90YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIPbmZ0X2RBcHBBZGRyZXNzBQ9uZnRfZEFwcEFkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIRbmZ0X3NlbGxpbmdfcHJpY2UFEW5mdF9zZWxsaW5nX3ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIKbmZ0X29uU2VsbAUKbmZ0X29uU2VsbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF9kYXRhBQhuZnRfZGF0YQUDbmlsAWkBBmJ1eU5GVAEFbmZ0SUQEB2Fzc2V0SWQJANkEAQUFbmZ0SUQEBmFtb3VudAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEBXByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yBQVuZnRJRAIeVGhlcmUgaXMgbm8gcHJpY2UgZm9yIHRoaXMgTkZUBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgIFT3duZXICCE5vIG93bmVyAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0CQACAQIMUGF5IGluIHdhdmVzAwkAZgIJAQ1wYXJzZUludFZhbHVlAQUFcHJpY2UFBmFtb3VudAkAAgECD0ludmFsaWQgcGF5bWVudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEFdmFsdWUBCQCmCAEFBW93bmVyCQENcGFyc2VJbnRWYWx1ZQEFBXByaWNlBQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQFA25pbAFpAQdzZWxsTkZUAQVwcmljZQQLJHQwMjA3MDIxNTUJAJQKAgkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQGdG9rZW4wCAULJHQwMjA3MDIxNTUCXzEEB2Ftb3VudDAIBQskdDAyMDcwMjE1NQJfMgMJAQEhAQkBBWlzTmZ0AQUGdG9rZW4wCQACAQIQVG9rZW4gaXMgbm90IE5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCkAwEFBXByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQVrU2VsbAkArAICCQCsAgIJANgEAQUGdG9rZW4wBQlzZXBhcmF0b3IJAKQDAQUHYW1vdW50MAUDbmlsAO7dazU=", "height": 2318243, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6Ts1NGqJnzToAF6zLuV6Esmgo2mTvoGNdiSawgPQLwaS Next: HBMCz84HCY82EyoT5m627htcFosM1tb3cERkzq2aMm1d Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "_"
2222
2323
2424 @Callable(i)
25-func call () = {
26- let asset = Issue("Asset", "", 1, 0, true, unit, 0)
27- let assetId = calculateAssetId(asset)
28-[BinaryEntry("bin", base58''), BooleanEntry("bool", true), IntegerEntry("int", 1), StringEntry("str", ""), DeleteEntry("str"), asset, Reissue(assetId, 1, false), Burn(assetId, 1), ScriptTransfer(i.caller, 1, assetId)]
25+func issueNft (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
26+ let newToken = Issue(nft_name, nft_description, 1, 0, false)
27+ let issueId = calculateAssetId(newToken)
28+[newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "nft_owner"), toString(i.caller)), StringEntry(((toBase58String(issueId) + separator) + "nft_type"), nft_type), StringEntry(((toBase58String(issueId) + separator) + "nft_tags"), nft_tags), StringEntry(((toBase58String(issueId) + separator) + "nft_dAppAddress"), nft_dAppAddress), IntegerEntry(((toBase58String(issueId) + separator) + "nft_selling_price"), nft_selling_price), StringEntry(((toBase58String(issueId) + separator) + "nft_onSell"), nft_onSell), StringEntry(((toBase58String(issueId) + separator) + "nft_data"), nft_data)]
2929 }
3030
3131
3232
3333 @Callable(i)
34-func transferAmount (recipient) = {
35- let recipientAddr = addressFromStringValue(recipient)
36- let amountTransfer = i.payments[0].amount
37- let assettype = i.payments[0].assetId
38-[ScriptTransfer(recipientAddr, amountTransfer, assettype)]
34+func buyNFT (nftID) = {
35+ let assetId = fromBase58String(nftID)
36+ let amount = value(i.payments[0].amount)
37+ let price = valueOrErrorMessage(getString(((kPrice + separator) + nftID)), "There is no price for this NFT")
38+ let owner = valueOrErrorMessage(getStringValue(((nftID + separator) + "Owner")), "No owner")
39+ if ((i.payments[0].assetId != unit))
40+ then throw("Pay in waves")
41+ else if ((parseIntValue(price) > amount))
42+ then throw("Invalid payment")
43+ else [ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(value(addressFromString(owner)), parseIntValue(price), unit), StringEntry(((toString(i.caller) + separator) + kBuy), ((nftID + separator) + toString(amount)))]
3944 }
4045
4146
4247
4348 @Callable(i)
44-func createNFT (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
45- let asset = Issue(nft_name, nft_description, 1, 0, false, unit, 0)
46- let assetId = calculateAssetId(asset)
47- let caller = toString(i.caller)
48-[StringEntry(("nftName_" + caller), nft_name), StringEntry(("nftOwner_" + caller), nft_owner), StringEntry(("nftDappAddress_" + caller), nft_dAppAddress), StringEntry(("nftType_" + caller), nft_type), StringEntry(("nftTags_" + caller), nft_tags), IntegerEntry(("nftSellingPrice_" + caller), nft_selling_price), StringEntry(("nftDescription_" + caller), nft_description), StringEntry(("nftOnSell_" + caller), "false"), StringEntry(("nftImageData_" + caller), nft_data), asset, ScriptTransfer(i.caller, 1, assetId)]
49+func sellNFT (price) = {
50+ let $t020702155 = $Tuple2(value(i.payments[0].assetId), value(i.payments[0].amount))
51+ let token0 = $t020702155._1
52+ let amount0 = $t020702155._2
53+ if (!(isNft(token0)))
54+ then throw("Token is not NFT")
55+ else [StringEntry(((kPrice + separator) + toBase58String(value(i.payments[0].assetId))), toString(price)), StringEntry(((toString(i.caller) + separator) + kSell), ((toBase58String(token0) + separator) + toString(amount0)))]
4956 }
5057
51-
52-@Verifier(tx)
53-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
5458
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "_"
55
66 let kBuy = "buy"
77
88 let kSell = "sell"
99
1010 let kPrice = "price"
1111
1212 func isNft (assetId) = match assetInfo(assetId) {
1313 case token: Asset =>
1414 if (if ((token.decimals == 0))
1515 then (token.quantity == 1)
1616 else false)
1717 then (token.reissuable == false)
1818 else false
1919 case _ =>
2020 false
2121 }
2222
2323
2424 @Callable(i)
25-func call () = {
26- let asset = Issue("Asset", "", 1, 0, true, unit, 0)
27- let assetId = calculateAssetId(asset)
28-[BinaryEntry("bin", base58''), BooleanEntry("bool", true), IntegerEntry("int", 1), StringEntry("str", ""), DeleteEntry("str"), asset, Reissue(assetId, 1, false), Burn(assetId, 1), ScriptTransfer(i.caller, 1, assetId)]
25+func issueNft (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
26+ let newToken = Issue(nft_name, nft_description, 1, 0, false)
27+ let issueId = calculateAssetId(newToken)
28+[newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "nft_owner"), toString(i.caller)), StringEntry(((toBase58String(issueId) + separator) + "nft_type"), nft_type), StringEntry(((toBase58String(issueId) + separator) + "nft_tags"), nft_tags), StringEntry(((toBase58String(issueId) + separator) + "nft_dAppAddress"), nft_dAppAddress), IntegerEntry(((toBase58String(issueId) + separator) + "nft_selling_price"), nft_selling_price), StringEntry(((toBase58String(issueId) + separator) + "nft_onSell"), nft_onSell), StringEntry(((toBase58String(issueId) + separator) + "nft_data"), nft_data)]
2929 }
3030
3131
3232
3333 @Callable(i)
34-func transferAmount (recipient) = {
35- let recipientAddr = addressFromStringValue(recipient)
36- let amountTransfer = i.payments[0].amount
37- let assettype = i.payments[0].assetId
38-[ScriptTransfer(recipientAddr, amountTransfer, assettype)]
34+func buyNFT (nftID) = {
35+ let assetId = fromBase58String(nftID)
36+ let amount = value(i.payments[0].amount)
37+ let price = valueOrErrorMessage(getString(((kPrice + separator) + nftID)), "There is no price for this NFT")
38+ let owner = valueOrErrorMessage(getStringValue(((nftID + separator) + "Owner")), "No owner")
39+ if ((i.payments[0].assetId != unit))
40+ then throw("Pay in waves")
41+ else if ((parseIntValue(price) > amount))
42+ then throw("Invalid payment")
43+ else [ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(value(addressFromString(owner)), parseIntValue(price), unit), StringEntry(((toString(i.caller) + separator) + kBuy), ((nftID + separator) + toString(amount)))]
3944 }
4045
4146
4247
4348 @Callable(i)
44-func createNFT (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
45- let asset = Issue(nft_name, nft_description, 1, 0, false, unit, 0)
46- let assetId = calculateAssetId(asset)
47- let caller = toString(i.caller)
48-[StringEntry(("nftName_" + caller), nft_name), StringEntry(("nftOwner_" + caller), nft_owner), StringEntry(("nftDappAddress_" + caller), nft_dAppAddress), StringEntry(("nftType_" + caller), nft_type), StringEntry(("nftTags_" + caller), nft_tags), IntegerEntry(("nftSellingPrice_" + caller), nft_selling_price), StringEntry(("nftDescription_" + caller), nft_description), StringEntry(("nftOnSell_" + caller), "false"), StringEntry(("nftImageData_" + caller), nft_data), asset, ScriptTransfer(i.caller, 1, assetId)]
49+func sellNFT (price) = {
50+ let $t020702155 = $Tuple2(value(i.payments[0].assetId), value(i.payments[0].amount))
51+ let token0 = $t020702155._1
52+ let amount0 = $t020702155._2
53+ if (!(isNft(token0)))
54+ then throw("Token is not NFT")
55+ else [StringEntry(((kPrice + separator) + toBase58String(value(i.payments[0].assetId))), toString(price)), StringEntry(((toString(i.caller) + separator) + kSell), ((toBase58String(token0) + separator) + toString(amount0)))]
4956 }
5057
51-
52-@Verifier(tx)
53-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
5458

github/deemru/w8io/169f3d6 
38.61 ms