2023.01.03 20:29 [3454567] smart account 3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh > SELF 0.00000000 Waves

{ "type": 13, "id": "2H3udUk5MGF54Cf5E7E1LRxD8tsFmoCmji6LFBp3i1T4", "fee": 1000000, "feeAssetId": null, "timestamp": 1672767048224, "version": 2, "chainId": 87, "sender": "3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh", "senderPublicKey": "6Dx2LuCqezyDYjt3zMEL6WRrs5oaor6aK3L6QouPMP1b", "proofs": [ "rmbxidwHw9NNrBWwsnSR4rrLGRyeYvtLAYxRcqWwS3KtjXb7jqkmZvG3fQb8NtjVajxfNTuUzHqB23mPcXmjecU" ], "script": "base64:BgITCAISABIDCgEIEgMKAQgSAwoBCAYAD2NyZWF0aW9uQWRkcmVzcwkBB0FkZHJlc3MBARoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAAOdG90YWxTdGFrZWRLZXkCDHRvdGFsX3N0YWtlZAANdG90YWxQb3dlcktleQILdG90YWxfcG93ZXIBCGNoZWNrTkZUAQVhc3NldAMDAwMJAAACCQERQGV4dHJOYXRpdmUoMTA1MykCBQ9jcmVhdGlvbkFkZHJlc3MJAKwCAgkArAICAgRuZnRfCQDYBAEIBQVhc3NldAJpZAIHX2lzc3VlcgkApQgBBQR0aGlzCQAAAggFBWFzc2V0Bmlzc3VlcgUPY3JlYXRpb25BZGRyZXNzBwkAAAIIBQVhc3NldAhkZWNpbWFscwAABwkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBC2dldFBvd2VyTkZUAQVhc3NldAQGcGFyYW1zCQERQGV4dHJOYXRpdmUoMTA1MykCBQ9jcmVhdGlvbkFkZHJlc3MJAKwCAgkArAICAgRuZnRfCQDYBAEIBQVhc3NldAJpZAIHX3BhcmFtcwMJAAACBQZwYXJhbXMCBGdvbGQAMgAKARNnZXRDb2xsZWN0aW9uSXNzdWVyAQxjb2xsZWN0aW9uSWQEB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY3JlYXRpb25BZGRyZXNzCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FDGNvbGxlY3Rpb25JZAIIX2Fzc2V0SWQCAAQMZ3JvdXBBc3NldElkCQELdmFsdWVPckVsc2UCCQCdCAIFD2NyZWF0aW9uQWRkcmVzcwkArAICCQCsAgICBmdyb3VwXwUMY29sbGVjdGlvbklkAghfYXNzZXRJZAIACQELdmFsdWVPckVsc2UCCQCdCAIFD2NyZWF0aW9uQWRkcmVzcwkArAICCQCsAgICBG5mdF8JAKwCAgUHYXNzZXRJZAUMZ3JvdXBBc3NldElkAgdfaXNzdWVyAgAEAWkBBXN0YWtlAAQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEAXAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAkQMCCAUBaQhwYXltZW50cwAAAgtObyBwYXltZW50cwQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQFwB2Fzc2V0SWQCD0ludmFsaWQgcGF5bWVudAIQSW52YWxpZCBhc3NldCBJZAMDCQBmAggFAXAGYW1vdW50AAAJAQhjaGVja05GVAEFBWFzc2V0BwQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOdG90YWxTdGFrZWRLZXkAAAQKdG90YWxQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ10b3RhbFBvd2VyS2V5AAAEDGFkZHJlc3NQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgAABAhuZnRQb3dlcgkBC2dldFBvd2VyTkZUAQUFYXNzZXQECG5mdElkU3RyCQDYBAEIBQVhc3NldAJpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOdG90YWxTdGFrZWRLZXkJAGQCBQt0b3RhbFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ10b3RhbFBvd2VyS2V5CQBkAgUKdG90YWxQb3dlcgUIbmZ0UG93ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCG5mdElkU3RyAgZfb3duZXIFCmFkZHJlc3NTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgRuZnRfBQhuZnRJZFN0cgIGX3Bvd2VyBQhuZnRQb3dlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgZfcG93ZXIJAGQCBQxhZGRyZXNzUG93ZXIFCG5mdFBvd2VyBQNuaWwJAAIBAgtObyBwYXltZW50cwFpAQd1bnN0YWtlAQhuZnRJZFN0cgQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQhuZnRJZFN0cgIOSW52YWxpZCBuZnQgSWQEDG93bmVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgkArAICAgRuZnRfBQhuZnRJZFN0cgIGX293bmVyAhJPd25lciBkYXRhIGludmFsaWQDCQECIT0CBQxvd25lckFkZHJlc3MFCmFkZHJlc3NTdHIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIDCQEIY2hlY2tORlQBBQVhc3NldAQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOdG90YWxTdGFrZWRLZXkAAAQKdG90YWxQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ10b3RhbFBvd2VyS2V5AAAEDGFkZHJlc3NQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgAABA1uZnRBc3NldElkU3RyCQDYBAEIBQVhc3NldAJpZAQIbmZ0UG93ZXIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAKwCAgkArAICAgRuZnRfBQ1uZnRBc3NldElkU3RyAgZfcG93ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQVhc3NldAJpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOdG90YWxTdGFrZWRLZXkJAGUCBQt0b3RhbFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ10b3RhbFBvd2VyS2V5CQBlAgUKdG90YWxQb3dlcgUIbmZ0UG93ZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FDW5mdEFzc2V0SWRTdHICBl9vd25lcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUNbmZ0QXNzZXRJZFN0cgIGX3Bvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgkAZQIFDGFkZHJlc3NQb3dlcgUIbmZ0UG93ZXIFA25pbAkAAgECDkludmFsaWQgbmZ0IElkAWkBCnNlbmRUb1ZvdGUBDGNvbGxlY3Rpb25JZAQGaXNzdWVyCQETZ2V0Q29sbGVjdGlvbklzc3VlcgEFDGNvbGxlY3Rpb25JZAMJAAACCQCxAgEFBmlzc3VlcgAACQACAQIbQ29sbGVjdGlvbiBpc3N1ZXIgbm90IGZvdW5kAwkBAiE9AgUGaXNzdWVyCQClCAEIBQFpBmNhbGxlcgkAAgECJk9ubHkgdGhlIGlzc3VlciBjYW4gc3VibWl0IHRvIHRoZSB2b3RlBAZ2b3RlSWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIFdm90ZV8FDGNvbGxlY3Rpb25JZAIDX2lkBQZ2b3RlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCDV9jb2xsZWN0aW9uSWQFDGNvbGxlY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIGX293bmVyCQClCAEIBQFpBmNhbGxlcgUDbmlsAWkBDnJlbW92ZUZyb21Wb3RlAQZ2b3RlSWQEDGNvbGxlY3Rpb25JZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAg1fY29sbGVjdGlvbklkAhdDb2xsZWN0aW9uIElkIG5vdCBmb3VuZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIGX293bmVyAg9Pd25lciBub3QgZm91bmQDCQECIT0CBQVvd25lcgkApQgBCAUBaQZjYWxsZXIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBXZvdGVfBQxjb2xsZWN0aW9uSWQCA19pZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAINX2NvbGxlY3Rpb25JZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIGX293bmVyBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5qS8SZQ==", "height": 3454567, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5A5FoLET1Tu7RjjjiSXgZQVfWzPPTvVrZwgPmneMmTSm Next: Eznm6twvWN4jQm3dY1ficXDjwm3fvhPAyjtGVBAmAQuT Diff:
OldNewDifferences
2323 if ((params == "gold"))
2424 then 50
2525 else 10
26+ }
27+
28+
29+func getCollectionIssuer (collectionId) = {
30+ let assetId = valueOrElse(getString(creationAddress, (("collection_" + collectionId) + "_assetId")), "")
31+ let groupAssetId = valueOrElse(getString(creationAddress, (("group_" + collectionId) + "_assetId")), "")
32+ valueOrElse(getString(creationAddress, (("nft_" + (assetId + groupAssetId)) + "_issuer")), "")
2633 }
2734
2835
6774 }
6875
6976
77+
78+@Callable(i)
79+func sendToVote (collectionId) = {
80+ let issuer = getCollectionIssuer(collectionId)
81+ if ((size(issuer) == 0))
82+ then throw("Collection issuer not found")
83+ else if ((issuer != toString(i.caller)))
84+ then throw("Only the issuer can submit to the vote")
85+ else {
86+ let voteId = toBase58String(i.transactionId)
87+[StringEntry((("vote_" + collectionId) + "_id"), voteId), StringEntry((("vote_" + voteId) + "_collectionId"), collectionId), StringEntry((("vote_" + voteId) + "_owner"), toString(i.caller))]
88+ }
89+ }
90+
91+
92+
93+@Callable(i)
94+func removeFromVote (voteId) = {
95+ let collectionId = valueOrErrorMessage(getString((("vote_" + voteId) + "_collectionId")), "Collection Id not found")
96+ let owner = valueOrErrorMessage(getString((("vote_" + voteId) + "_owner")), "Owner not found")
97+ if ((owner != toString(i.caller)))
98+ then throw("You are not the owner")
99+ else [DeleteEntry((("vote_" + collectionId) + "_id")), DeleteEntry((("vote_" + voteId) + "_collectionId")), DeleteEntry((("vote_" + voteId) + "_owner"))]
100+ }
101+
102+
70103 @Verifier(tx)
71104 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
72105
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let creationAddress = Address(base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By')
55
66 let totalStakedKey = "total_staked"
77
88 let totalPowerKey = "total_power"
99
1010 func checkNFT (asset) = if (if (if (if ((getStringValue(creationAddress, (("nft_" + toBase58String(asset.id)) + "_issuer")) == toString(this)))
1111 then (asset.issuer == creationAddress)
1212 else false)
1313 then (asset.decimals == 0)
1414 else false)
1515 then (asset.reissuable == false)
1616 else false)
1717 then (asset.quantity == 1)
1818 else false
1919
2020
2121 func getPowerNFT (asset) = {
2222 let params = getStringValue(creationAddress, (("nft_" + toBase58String(asset.id)) + "_params"))
2323 if ((params == "gold"))
2424 then 50
2525 else 10
26+ }
27+
28+
29+func getCollectionIssuer (collectionId) = {
30+ let assetId = valueOrElse(getString(creationAddress, (("collection_" + collectionId) + "_assetId")), "")
31+ let groupAssetId = valueOrElse(getString(creationAddress, (("group_" + collectionId) + "_assetId")), "")
32+ valueOrElse(getString(creationAddress, (("nft_" + (assetId + groupAssetId)) + "_issuer")), "")
2633 }
2734
2835
2936 @Callable(i)
3037 func stake () = {
3138 let addressStr = toString(i.caller)
3239 let p = valueOrErrorMessage(i.payments[0], "No payments")
3340 let asset = valueOrErrorMessage(assetInfo(valueOrErrorMessage(p.assetId, "Invalid payment")), "Invalid asset Id")
3441 if (if ((p.amount > 0))
3542 then checkNFT(asset)
3643 else false)
3744 then {
3845 let totalStaked = valueOrElse(getInteger(totalStakedKey), 0)
3946 let totalPower = valueOrElse(getInteger(totalPowerKey), 0)
4047 let addressPower = valueOrElse(getInteger((("address_" + addressStr) + "_power")), 0)
4148 let nftPower = getPowerNFT(asset)
4249 let nftIdStr = toBase58String(asset.id)
4350 [IntegerEntry(totalStakedKey, (totalStaked + 1)), IntegerEntry(totalPowerKey, (totalPower + nftPower)), StringEntry((("nft_" + nftIdStr) + "_owner"), addressStr), IntegerEntry((("nft_" + nftIdStr) + "_power"), nftPower), IntegerEntry((("address_" + addressStr) + "_power"), (addressPower + nftPower))]
4451 }
4552 else throw("No payments")
4653 }
4754
4855
4956
5057 @Callable(i)
5158 func unstake (nftIdStr) = {
5259 let addressStr = toString(i.caller)
5360 let asset = valueOrErrorMessage(assetInfo(fromBase58String(nftIdStr)), "Invalid nft Id")
5461 let ownerAddress = valueOrErrorMessage(getString((("nft_" + nftIdStr) + "_owner")), "Owner data invalid")
5562 if ((ownerAddress != addressStr))
5663 then throw("You are not the owner")
5764 else if (checkNFT(asset))
5865 then {
5966 let totalStaked = valueOrElse(getInteger(totalStakedKey), 0)
6067 let totalPower = valueOrElse(getInteger(totalPowerKey), 0)
6168 let addressPower = valueOrElse(getInteger((("address_" + addressStr) + "_power")), 0)
6269 let nftAssetIdStr = toBase58String(asset.id)
6370 let nftPower = getIntegerValue((("nft_" + nftAssetIdStr) + "_power"))
6471 [ScriptTransfer(i.caller, 1, asset.id), IntegerEntry(totalStakedKey, (totalStaked - 1)), IntegerEntry(totalPowerKey, (totalPower - nftPower)), DeleteEntry((("nft_" + nftAssetIdStr) + "_owner")), DeleteEntry((("nft_" + nftAssetIdStr) + "_power")), IntegerEntry((("address_" + addressStr) + "_power"), (addressPower - nftPower))]
6572 }
6673 else throw("Invalid nft Id")
6774 }
6875
6976
77+
78+@Callable(i)
79+func sendToVote (collectionId) = {
80+ let issuer = getCollectionIssuer(collectionId)
81+ if ((size(issuer) == 0))
82+ then throw("Collection issuer not found")
83+ else if ((issuer != toString(i.caller)))
84+ then throw("Only the issuer can submit to the vote")
85+ else {
86+ let voteId = toBase58String(i.transactionId)
87+[StringEntry((("vote_" + collectionId) + "_id"), voteId), StringEntry((("vote_" + voteId) + "_collectionId"), collectionId), StringEntry((("vote_" + voteId) + "_owner"), toString(i.caller))]
88+ }
89+ }
90+
91+
92+
93+@Callable(i)
94+func removeFromVote (voteId) = {
95+ let collectionId = valueOrErrorMessage(getString((("vote_" + voteId) + "_collectionId")), "Collection Id not found")
96+ let owner = valueOrErrorMessage(getString((("vote_" + voteId) + "_owner")), "Owner not found")
97+ if ((owner != toString(i.caller)))
98+ then throw("You are not the owner")
99+ else [DeleteEntry((("vote_" + collectionId) + "_id")), DeleteEntry((("vote_" + voteId) + "_collectionId")), DeleteEntry((("vote_" + voteId) + "_owner"))]
100+ }
101+
102+
70103 @Verifier(tx)
71104 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
72105

github/deemru/w8io/786bc32 
29.45 ms