tx · J5vmTZvbfzpu67Bq8UrBS7zxJtcvVPwVVWnoPvDCbJRv

3P2wMCDjtxeLdfQrpR8WUe5zNeScM4UaL3o:  -0.01400000 Waves

2022.04.02 20:17 [3056479] smart account 3P2wMCDjtxeLdfQrpR8WUe5zNeScM4UaL3o > SELF 0.00000000 Waves

{ "type": 13, "id": "J5vmTZvbfzpu67Bq8UrBS7zxJtcvVPwVVWnoPvDCbJRv", "fee": 1400000, "feeAssetId": null, "timestamp": 1648919860409, "version": 2, "chainId": 87, "sender": "3P2wMCDjtxeLdfQrpR8WUe5zNeScM4UaL3o", "senderPublicKey": "G9TnM1YBf8ykxFzDykNPwRqSAtWirJiLb8xD6Ebs8rE8", "proofs": [ "AvCF1zvVZZE7RDi5MU7BfLyiiMFwMV7VjiQQFsX6qFY7gh758UnvA31jBhTmCFUstKHDbpbQtmTwbyLPMkjRcfz" ], "script": "base64:AAIFAAAAAAAAAAkIAhIAEgMKAQgAAAAPAAAAAA1wdXp6bGVBc3NldElkAQAAACDxGv4l/vaZOPRpKsTf4RLWR7LGyg66Nwmvd20fjqLlYwAAAAARdGVzdFB1enpsZUFzc2V0SWQBAAAAIIgT6TbKw5gY3U20QCaFhoYbSA923FNm/xbCPZg3XwCbAAAAAAt1c2RuQXNzZXRJZAEAAAAgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEAAAAAEXB1enpsZVBvb2xBZGRyZXNzAQAAABoBV5HG6inqeWcP2YTvMnaUs8B1QuQ1g8HTWAAAAAASbmZ0Q3JlYXRpb25BZGRyZXNzAQAAABoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAAAAAASZWFnbGVIb2xkZXJBZGRyZXNzAQAAABoBV8CKrXOUITO9sBhWDyi1uT5Bd86/b/L+1wAAAAAJYXJ0ZWZhY3RzCQAETAAAAAIJAARMAAAAAgIAAAALUHV6emxlIFN1cmYJAARMAAAAAgIAAABZUHV6emxlIFN1cmYgYXJ0ZWZhY3QgY2FuIGJlIHVzZWQgdG8gbGF1bmNoIGEgY3VzdG9tIHBvb2wgb24gUHV6emxlIFN3YXAgKFB1enpsZVN3YXAub3JnKS4JAARMAAAAAgIAAABDaHR0cHM6Ly9pcGZzLmlvL2lwZnMvUW1VYXdRaFBWaFBpdEJTUnRnZDZaS3Vyc2VZSjNRV1lVaFltVjIzUFMycUw0WQUAAAADbmlsCQAETAAAAAIJAARMAAAAAgIAAAANUHV6emxlIERlc2VydAkABEwAAAACAgAAAFtQdXp6bGUgRGVzZXJ0IGFydGVmYWN0IGNhbiBiZSB1c2VkIHRvIGxhdW5jaCBhIGN1c3RvbSBwb29sIG9uIFB1enpsZSBTd2FwIChQdXp6bGVTd2FwLm9yZykuCQAETAAAAAICAAAAQ2h0dHBzOi8vaXBmcy5pby9pcGZzL1FtYTdCZWg5cFBrUmhnSzZXTk1RS0xIYWhRREtlS1JwNW15anYybXgxenYxem0FAAAAA25pbAkABEwAAAACCQAETAAAAAICAAAAD1B1enpsZSBBaXJwbGFuZQkABEwAAAACAgAAAF1QdXp6bGUgQWlycGxhbmUgYXJ0ZWZhY3QgY2FuIGJlIHVzZWQgdG8gbGF1bmNoIGEgY3VzdG9tIHBvb2wgb24gUHV6emxlIFN3YXAgKFB1enpsZVN3YXAub3JnKS4JAARMAAAAAgIAAABDaHR0cHM6Ly9pcGZzLmlvL2lwZnMvUW1OVHp6ZHZCeDY1OGhpQ1Z2SE5HUzRGc1JrOFpoQWdZd2V6SDZROVFFS3k3SwUAAAADbmlsCQAETAAAAAIJAARMAAAAAgIAAAAMUHV6emxlIFdoZWVsCQAETAAAAAICAAAAWlB1enpsZSBXaGVlbCBhcnRlZmFjdCBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBjdXN0b20gcG9vbCBvbiBQdXp6bGUgU3dhcCAoUHV6emxlU3dhcC5vcmcpLgkABEwAAAACAgAAAENodHRwczovL2lwZnMuaW8vaXBmcy9RbVR2TjVzQUMya2E0cXRMalNkMnZXUTROcVlKRDhRbzhjSmlDaGQ4UWpZTkM1BQAAAANuaWwJAARMAAAAAgkABEwAAAACAgAAAA5QdXp6bGUgS2hhbGlmYQkABEwAAAACAgAAAFxQdXp6bGUgS2hhbGlmYSBhcnRlZmFjdCBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBjdXN0b20gcG9vbCBvbiBQdXp6bGUgU3dhcCAoUHV6emxlU3dhcC5vcmcpLgkABEwAAAACAgAAAENodHRwczovL2lwZnMuaW8vaXBmcy9RbWNrRE1zY251WXA4c2hyM054cWJlREo4MlY2YzFVdldQMWVjUEFmTWtTdjJEBQAAAANuaWwFAAAAA25pbAAAAAASdG90YWxDb3VudF9EYXRhS2V5AgAAAA50b3RhbF9zb2xkX25mdAEAAAAPZ2V0UmFuZG9tTnVtYmVyAAAABAAAAAh2YXJpYW50cwAAAAR0eElkAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0AAAABm9mZnNldAQAAAAPcmFuZG9tU2VlZEJsb2NrCQEAAAAFdmFsdWUAAAABCQAD7QAAAAEJAABlAAAAAgUAAAAUaGF0Y2hpbmdGaW5pc2hIZWlnaHQAAAAAAAAAAAEEAAAACnJhbmRvbUhhc2gJAAH3AAAAAQkAAMsAAAACBQAAAAR0eElkCQEAAAAFdmFsdWUAAAABCAUAAAAPcmFuZG9tU2VlZEJsb2NrAAAAA3ZyZgkAAGoAAAAC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", "height": 3056479, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 24m4TxkN5yQM8UKi1GTP6L9C7UeTvEd1AXHmQYhX5mVn Next: 5hHkEWeQhtAHdaAWb6ycsSn8ffSaYwnCgP7bAPGihZJd Diff:
OldNewDifferences
3232 }
3333
3434
35-func isValidNFT (asset) = if (if ((asset.issuer == this))
36- then (asset.decimals == 0)
37- else false)
38- then (asset.quantity == 1)
39- else false
35+func isValidNFT (asset) = {
36+ let assetIdStr = toBase58String(asset.id)
37+ let issuer = getStringValue(Address(nftCreationAddress), (("nft_" + assetIdStr) + "_issuer"))
38+ if (if (if ((issuer == toString(this)))
39+ then (Address(nftCreationAddress) == asset.issuer)
40+ else false)
41+ then (asset.decimals == 0)
42+ else false)
43+ then (asset.quantity == 1)
44+ else false
45+ }
4046
4147
4248 func isEagleHolder (address) = match getInteger(Address(eagleHolderAddress), (address + "_staked")) {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let puzzleAssetId = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS'
55
66 let testPuzzleAssetId = base58'AAC4GKXW6F49NrohKwcpTd9EtV6PoN7QW5RvXKhq2Qti'
77
88 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
99
1010 let puzzlePoolAddress = base58'3PFDgzu1UtswAkCMxqqQjbTeHaX4cMab8Kh'
1111
1212 let nftCreationAddress = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By'
1313
1414 let eagleHolderAddress = base58'3PKUxbZaSYfsR7wu2HaAgiirHYwAMupDrYW'
1515
1616 let artefacts = [["Puzzle Surf", "Puzzle Surf artefact can be used to launch a custom pool on Puzzle Swap (PuzzleSwap.org).", "https://ipfs.io/ipfs/QmUawQhPVhPitBSRtgd6ZKurseYJ3QWYUhYmV23PS2qL4Y"], ["Puzzle Desert", "Puzzle Desert artefact can be used to launch a custom pool on Puzzle Swap (PuzzleSwap.org).", "https://ipfs.io/ipfs/Qma7Beh9pPkRhgK6WNMQKLHahQDKeKRp5myjv2mx1zv1zm"], ["Puzzle Airplane", "Puzzle Airplane artefact can be used to launch a custom pool on Puzzle Swap (PuzzleSwap.org).", "https://ipfs.io/ipfs/QmNTzzdvBx658hiCVvHNGS4FsRk8ZhAgYwezH6Q9QEKy7K"], ["Puzzle Wheel", "Puzzle Wheel artefact can be used to launch a custom pool on Puzzle Swap (PuzzleSwap.org).", "https://ipfs.io/ipfs/QmTvN5sAC2ka4qtLjSd2vWQ4NqYJD8Qo8cJiChd8QjYNC5"], ["Puzzle Khalifa", "Puzzle Khalifa artefact can be used to launch a custom pool on Puzzle Swap (PuzzleSwap.org).", "https://ipfs.io/ipfs/QmckDMscnuYp8shr3NxqbeDJ82V6c1UvWP1ecPAfMkSv2D"]]
1717
1818 let totalCount_DataKey = "total_sold_nft"
1919
2020 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
2121 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
2222 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
2323 (toInt(randomHash, (offset * 8)) % variants)
2424 }
2525
2626
2727 func getIntegerData (key) = match getInteger(this, key) {
2828 case t: Int =>
2929 t
3030 case _ =>
3131 0
3232 }
3333
3434
35-func isValidNFT (asset) = if (if ((asset.issuer == this))
36- then (asset.decimals == 0)
37- else false)
38- then (asset.quantity == 1)
39- else false
35+func isValidNFT (asset) = {
36+ let assetIdStr = toBase58String(asset.id)
37+ let issuer = getStringValue(Address(nftCreationAddress), (("nft_" + assetIdStr) + "_issuer"))
38+ if (if (if ((issuer == toString(this)))
39+ then (Address(nftCreationAddress) == asset.issuer)
40+ else false)
41+ then (asset.decimals == 0)
42+ else false)
43+ then (asset.quantity == 1)
44+ else false
45+ }
4046
4147
4248 func isEagleHolder (address) = match getInteger(Address(eagleHolderAddress), (address + "_staked")) {
4349 case t: Int =>
4450 (t > 0)
4551 case _ =>
4652 false
4753 }
4854
4955
5056 func getPuzzlePrice () = {
5157 let usdnBalance = getIntegerValue(Address(puzzlePoolAddress), (("global_" + toBase58String(usdnAssetId)) + "_balance"))
5258 let puzzleBalance = getIntegerValue(Address(puzzlePoolAddress), (("global_" + toBase58String(puzzleAssetId)) + "_balance"))
5359 let puzzlePart = fraction(puzzleBalance, 1, 8)
5460 fraction(usdnBalance, 1000000, fraction(puzzlePart, 1, 100))
5561 }
5662
5763
5864 func getArtefactUsdnPrice () = (400000000 + (getIntegerData(totalCount_DataKey) * 1000000))
5965
6066
6167 func deltaUsdnSum (puzzleAmount,puzzlePriceUsdn,isEagleHolder) = {
6268 let usdnSum = if (isEagleHolder)
6369 then {
6470 let sum = fraction(puzzlePriceUsdn, puzzleAmount, 100000000)
6571 (sum - fraction(sum, 20, 100))
6672 }
6773 else fraction(puzzlePriceUsdn, puzzleAmount, 100000000)
6874 (usdnSum - getArtefactUsdnPrice())
6975 }
7076
7177
7278 @Callable(i)
7379 func generateArtefact () = if (if (if ((size(i.payments) == 1))
7480 then (i.payments[0].assetId == testPuzzleAssetId)
7581 else false)
7682 then (i.payments[0].amount > 0)
7783 else false)
7884 then {
7985 let puzzlePriceUsdn = getPuzzlePrice()
8086 let paymentUsdnDelta = deltaUsdnSum(i.payments[0].amount, puzzlePriceUsdn, isEagleHolder(toString(i.caller)))
8187 if ((paymentUsdnDelta >= 0))
8288 then {
8389 let randIndex = getRandomNumber(5, i.transactionId, height, 0)
8490 if (if ((randIndex > 0))
8591 then (5 > randIndex)
8692 else false)
8793 then {
8894 let artefact = artefacts[randIndex]
8995 let createdNFTStr = match invoke(Address(nftCreationAddress), "createNFT", [artefact[0], artefact[1], artefact[2], "Puzzle Pool Artefact"], nil) {
9096 case x: String =>
9197 x
9298 case _ =>
9399 throw("something went wrong during creation of NFT")
94100 }
95101 if ((createdNFTStr == createdNFTStr))
96102 then {
97103 let extraTransactionList = if ((paymentUsdnDelta > 0))
98104 then {
99105 let returnPuzzleAmount = fraction(paymentUsdnDelta, 100000000, puzzlePriceUsdn)
100106 [ScriptTransfer(i.caller, returnPuzzleAmount, testPuzzleAssetId), Burn(testPuzzleAssetId, (i.payments[0].amount - returnPuzzleAmount))]
101107 }
102108 else [Burn(testPuzzleAssetId, i.payments[0].amount)]
103109 $Tuple2(([ScriptTransfer(i.caller, 1, fromBase58String(createdNFTStr)), IntegerEntry(totalCount_DataKey, (getIntegerData(totalCount_DataKey) + 1))] ++ extraTransactionList), createdNFTStr)
104110 }
105111 else throw("Strict value is not equal to itself.")
106112 }
107113 else throw("Inalid random index.")
108114 }
109115 else throw("Not enough payment amount.")
110116 }
111117 else throw("Invalid payment. You can use only Puzzle for payment.")
112118
113119
114120
115121 @Callable(i)
116122 func spendArtefact (poolDomain) = if (if ((size(i.payments) == 1))
117123 then (i.payments[0].amount == 1)
118124 else false)
119125 then {
120126 let nftAsset = value(assetInfo(value(i.payments[0].assetId)))
121127 if (isValidNFT(nftAsset))
122128 then {
123129 let soldCountKey = (toString(i.caller) + "_sold_count")
124130 let addressSoldKey = (toString(i.caller) + "_address_spend")
125131 let createNFTStr = invoke(Address(nftCreationAddress), "burnNFT", nil, i.payments)
126132 if ((createNFTStr == createNFTStr))
127133 then [IntegerEntry((("domain_" + poolDomain) + "_purchased"), 1), StringEntry(addressSoldKey, toBase58String(nftAsset.id)), IntegerEntry(soldCountKey, (getIntegerData(soldCountKey) + 1))]
128134 else throw("Strict value is not equal to itself.")
129135 }
130136 else throw("Invalid NFT.")
131137 }
132138 else throw("Invalid payment. You should use NFT for payment.")
133139
134140
135141 @Verifier(tx)
136142 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
137143

github/deemru/w8io/3ef1775 
39.04 ms