tx · EsnbeXF5oKkp6e4raxciQwAVUmkk2CEsioNZLseZxqam 3NA6PrCYKV9YFP9vn3B7SsDWNQK4YeUPnCg: -0.01000000 Waves 2023.10.29 18:17 [2820096] smart account 3NA6PrCYKV9YFP9vn3B7SsDWNQK4YeUPnCg > SELF 0.00000000 Waves
{ "type": 13, "id": "EsnbeXF5oKkp6e4raxciQwAVUmkk2CEsioNZLseZxqam", "fee": 1000000, "feeAssetId": null, "timestamp": 1698592632119, "version": 2, "chainId": 84, "sender": "3NA6PrCYKV9YFP9vn3B7SsDWNQK4YeUPnCg", "senderPublicKey": "4h7maLTqBiadcBrrAxLHowjazW7QkGmUreZa5WAK7dqi", "proofs": [ "53BPrq66VNDapere7LmZX4X1n5FZrHzKA1WXs5suE2tpCeRPR8tBwzbJocSenxxCu3cKKX4wYQkeDYHeeUSoZbZy" ], "script": "base64:BgIRCAISBwoFCAEBAQESBAoCCAgHAANTRVACAl9fAQZuZnRLZXkBBW5mdElkCQC5CQIJAMwIAgIDbmZ0CQDMCAIJANgEAQUFbmZ0SWQFA25pbAUDU0VQARluZnRDYXRlZ29yeURlc2NyaXB0aW9uS2V5AQ1uZnRDYXRlZ29yeUlkCQC5CQIJAMwIAgIMbmZ0X2NhdGVnb3J5CQDMCAIFDW5mdENhdGVnb3J5SWQFA25pbAUDU0VQAQZnZXROZnQBB2FkZHJlc3MEC3NhdmVkU3RyaW5nCQC1CQIEByRtYXRjaDAJAJ0IAgUEdGhpcwkBBm5mdEtleQEIBQdhZGRyZXNzBWJ5dGVzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECDW5mdCBub3QgZm91bmQFA1NFUAkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULc2F2ZWRTdHJpbmcAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NhdmVkU3RyaW5nAAEBBnNldE5mdAMFbmZ0SWQGaGVhbHRoBmRhbWFnZQkBC1N0cmluZ0VudHJ5AgkBBm5mdEtleQEFBW5mdElkCQC5CQIJAMwIAgkApAMBBQZoZWFsdGgJAMwIAgkApAMBBQZkYW1hZ2UFA25pbAUDU0VQARlnZXROZnRDYXRlZ29yeURlc2NyaXB0aW9uAQ1uZnRDYXRlZ29yeUlkBAtzYXZlZFN0cmluZwkAtQkCBAckbWF0Y2gwCQCdCAIFBHRoaXMJARluZnRDYXRlZ29yeURlc2NyaXB0aW9uS2V5AQUNbmZ0Q2F0ZWdvcnlJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhZuZnQgY2F0ZWdvcnkgbm90IGZvdW5kBQNTRVAJAJYKBAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NhdmVkU3RyaW5nAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtzYXZlZFN0cmluZwABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULc2F2ZWRTdHJpbmcAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NhdmVkU3RyaW5nAAMBCnJhbmRvbWl6ZXICA2ludgRzYWx0BARyYW5kCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgUEc2FsdAgFA2ludg10cmFuc2FjdGlvbklkCAUDaW52D2NhbGxlclB1YmxpY0tleQgFCWxhc3RCbG9jaxNnZW5lcmF0aW9uU2lnbmF0dXJlCQCaAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQCaAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAPcDAQUEcmFuZAkAzAgCBQRyYW5kBQNuaWwCAWkBGXNldE5mdENhdGVnb3J5RGVzY3JpcHRpb24FDW5mdENhdGVnb3J5SWQJbWluSGVhbHRoCW1heEhlYWx0aAltaW5EYW1hZ2UJbWF4RGFtYWdlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARluZnRDYXRlZ29yeURlc2NyaXB0aW9uS2V5AQUNbmZ0Q2F0ZWdvcnlJZAkAuQkCCQDMCAIJAKQDAQUJbWluSGVhbHRoCQDMCAIJAKQDAQUJbWF4SGVhbHRoCQDMCAIJAKQDAQUJbWluRGFtYWdlCQDMCAIJAKQDAQUJbWF4RGFtYWdlBQNuaWwFA1NFUAUDbmlsAWkBBG1pbnQCDW5mdENhdGVnb3J5SWQCdG8EE2NhdGVnb3J5RGVzY3JpcHRpb24JARlnZXROZnRDYXRlZ29yeURlc2NyaXB0aW9uAQUNbmZ0Q2F0ZWdvcnlJZAQHaGVhbHRoVAkBCnJhbmRvbWl6ZXICBQFpAQAEB2RhbWFnZVQJAQpyYW5kb21pemVyAgUBaQkAkQMCBQdoZWFsdGhUAAEEBmhlYWx0aAkAZAIIBRNjYXRlZ29yeURlc2NyaXB0aW9uAl8xCQBqAgkAsQkBCQCRAwIFB2hlYWx0aFQAAAkAZQIIBRNjYXRlZ29yeURlc2NyaXB0aW9uAl8yCAUTY2F0ZWdvcnlEZXNjcmlwdGlvbgJfMQQGZGFtYWdlCQBkAggFE2NhdGVnb3J5RGVzY3JpcHRpb24CXzMJAGoCCQCxCQEJAJEDAgUHZGFtYWdlVAAACQBlAggFE2NhdGVnb3J5RGVzY3JpcHRpb24CXzQIBRNjYXRlZ29yeURlc2NyaXB0aW9uAl8zBAtkZXNjcmlwdGlvbgkArAICCQCsAgIJAKwCAgkArAICAhB7ImluaXRIZWFsdGgiOiAiCQCkAwEFBmhlYWx0aAIRIiwgImluaXREYW1hZ2UiOiAJAKQDAQUGZGFtYWdlAgF9BAVhc3NldAkAwggFBQ1uZnRDYXRlZ29yeUlkBQtkZXNjcmlwdGlvbgABAAAHBAdhc3NldElkCQC4CAEFBWFzc2V0CQCUCgIJAMwIAgkBBnNldE5mdAMFB2Fzc2V0SWQFBmhlYWx0aAUGZGFtYWdlCQDMCAIFBWFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQV2YWx1ZQEJAKYIAQUCdG8AAQUHYXNzZXRJZAUDbmlsCQDYBAEFB2Fzc2V0SWQBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V51ultuA==", "height": 2820096, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 9pw3ABQyZxBVdTZrEmMxx1EnA4z8rheCzz12Tzioe5ai Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let SEP = "__" | |
5 | + | ||
6 | + | func nftKey (nftId) = makeString(["nft", toBase58String(nftId)], SEP) | |
7 | + | ||
8 | + | ||
9 | + | func nftCategoryDescriptionKey (nftCategoryId) = makeString(["nft_category", nftCategoryId], SEP) | |
10 | + | ||
11 | + | ||
12 | + | func getNft (address) = { | |
13 | + | let savedString = split( match getString(this, nftKey(address.bytes)) { | |
14 | + | case s: String => | |
15 | + | s | |
16 | + | case _ => | |
17 | + | throw("nft not found") | |
18 | + | }, SEP) | |
19 | + | $Tuple2(parseIntValue(savedString[0]), parseIntValue(savedString[1])) | |
20 | + | } | |
21 | + | ||
22 | + | ||
23 | + | func setNft (nftId,health,damage) = StringEntry(nftKey(nftId), makeString([toString(health), toString(damage)], SEP)) | |
24 | + | ||
25 | + | ||
26 | + | func getNftCategoryDescription (nftCategoryId) = { | |
27 | + | let savedString = split( match getString(this, nftCategoryDescriptionKey(nftCategoryId)) { | |
28 | + | case s: String => | |
29 | + | s | |
30 | + | case _ => | |
31 | + | throw("nft category not found") | |
32 | + | }, SEP) | |
33 | + | $Tuple4(parseIntValue(savedString[0]), parseIntValue(savedString[1]), parseIntValue(savedString[2]), parseIntValue(savedString[3])) | |
34 | + | } | |
35 | + | ||
36 | + | ||
37 | + | func randomizer (inv,salt) = { | |
38 | + | let rand = (((((salt + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height)) | |
39 | + | [sha256(rand), rand] | |
40 | + | } | |
41 | + | ||
42 | + | ||
43 | + | @Callable(i) | |
44 | + | func setNftCategoryDescription (nftCategoryId,minHealth,maxHealth,minDamage,maxDamage) = [StringEntry(nftCategoryDescriptionKey(nftCategoryId), makeString([toString(minHealth), toString(maxHealth), toString(minDamage), toString(maxDamage)], SEP))] | |
45 | + | ||
46 | + | ||
47 | + | ||
48 | + | @Callable(i) | |
49 | + | func mint (nftCategoryId,to) = { | |
50 | + | let categoryDescription = getNftCategoryDescription(nftCategoryId) | |
51 | + | let healthT = randomizer(i, base58'') | |
52 | + | let damageT = randomizer(i, healthT[1]) | |
53 | + | let health = (categoryDescription._1 + (toInt(healthT[0]) % (categoryDescription._2 - categoryDescription._1))) | |
54 | + | let damage = (categoryDescription._3 + (toInt(damageT[0]) % (categoryDescription._4 - categoryDescription._3))) | |
55 | + | let description = (((("{\"initHealth\": \"" + toString(health)) + "\", \"initDamage\": ") + toString(damage)) + "}") | |
56 | + | let asset = Issue(nftCategoryId, description, 1, 0, false) | |
57 | + | let assetId = calculateAssetId(asset) | |
58 | + | $Tuple2([setNft(assetId, health, damage), asset, ScriptTransfer(value(addressFromString(to)), 1, assetId)], toBase58String(assetId)) | |
59 | + | } | |
60 | + | ||
61 | + | ||
62 | + | @Verifier(tx) | |
63 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
64 | + |
github/deemru/w8io/3ef1775 29.91 ms ◑