tx · 3ZBXayPTm9ZUz9K3hjNoT4ztiF7DyjT82ZRuTPfFi7RA 3N1QJTUhZ6VWAFh4uQvEjtG9AFce38REuyX: -0.01400000 Waves 2021.03.18 18:59 [1443387] smart account 3N1QJTUhZ6VWAFh4uQvEjtG9AFce38REuyX > SELF 0.00000000 Waves
{ "type": 13, "id": "3ZBXayPTm9ZUz9K3hjNoT4ztiF7DyjT82ZRuTPfFi7RA", "fee": 1400000, "feeAssetId": null, "timestamp": 1616083198180, "version": 2, "chainId": 84, "sender": "3N1QJTUhZ6VWAFh4uQvEjtG9AFce38REuyX", "senderPublicKey": "Dhv6VmiXeYBexgvExZwJaGUDv5PJQNU8QoLwPhVZXHfE", "proofs": [ "3a5z25t49qifjLqBFgPdixpx4MASf8oMnSc2eitP4auJUc8bubNroQhxzLECWgrRu7soCKJ5eD4csX7SBPMecD19" ], "script": "base64:AAIEAAAAAAAAAAQIAhIAAAAAAAAAAAEAAAABaQEAAAAEY2FsbAAAAAAEAAAABWFzc2V0CQAEQwAAAAcCAAAABUFzc2V0AgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAGBQAAAAR1bml0AAAAAAAAAAAABAAAAAdhc3NldElkCQAEOAAAAAEFAAAABWFzc2V0CQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAICAAAAA2JpbgEAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACAgAAAARib29sBgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAADaW50AAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAA3N0cgIAAAAACQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAECAAAAA3N0cgkABEwAAAACBQAAAAVhc3NldAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAB2Fzc2V0SWQAAAAAAAAAAAEHCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAHYXNzZXRJZAAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5KOU8bg==", "height": 1443387, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6HvqjYAMt2LqQy4vHKNBrxUrcfBGGqykrcmE9f63YhuS Next: 6mabcnjvqRJNMjUAnXZtnqQjYVTTi67tsFahS5mCosNs Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let separator = "___" | |
5 | - | ||
6 | - | let hardcoredMaximumDepositFee = 100 | |
7 | - | ||
8 | - | let hardcoredDappName = "FOKOFF" | |
9 | - | ||
10 | - | let hardcoredAssetIdForWaves = "WAVES" | |
11 | - | ||
12 | - | let keyAssetToStake = (hardcoredDappName + "_AssetToStake_") | |
13 | - | ||
14 | - | let keyAssetsToStakeList = (hardcoredDappName + "_AssetsToStakeList") | |
15 | - | ||
16 | - | let keyDefaultDepositFee = (hardcoredDappName + "_DefaultDepositFee") | |
17 | - | ||
18 | - | let keySuffixIsEnabled = "_isEnabled" | |
19 | - | ||
20 | - | let keySuffixMinAmount = "_minimumAmount" | |
21 | - | ||
22 | - | let keySuffixAfterHeight = "_allowStakingAfterBlockHeight" | |
23 | - | ||
24 | - | let keySuffixBlockDelay = "_BlocksDelayAfterDepositToStake" | |
25 | - | ||
26 | - | let keySuffixEnableSpecFee = "_enableSpecificDepositFee" | |
27 | - | ||
28 | - | let keySuffixSpecFee = "_specificDepositFee" | |
29 | - | ||
30 | - | func isAdmin (caller) = (this == caller) | |
31 | - | ||
32 | - | ||
33 | - | func addEntryToStringList (stringList,entry) = if ((1 > size(stringList))) | |
34 | - | then entry | |
35 | - | else ((stringList + separator) + entry) | |
36 | - | ||
37 | - | ||
38 | - | func isListedAssetToStake (assetIdStr) = contains(getStringValue(this, keyAssetsToStakeList), assetIdStr) | |
39 | - | ||
40 | - | ||
41 | - | func isNFT (nftAsset) = if (if ((nftAsset.decimals == 0)) | |
42 | - | then (nftAsset.quantity == 1) | |
43 | - | else false) | |
44 | - | then (nftAsset.reissuable == false) | |
45 | - | else false | |
46 | - | ||
47 | - | ||
48 | - | func isValidAsset (assetIdStr) = if ((assetIdStr == hardcoredAssetIdForWaves)) | |
49 | - | then true | |
50 | - | else match assetInfo(fromBase58String(assetIdStr)) { | |
51 | - | case isAsset: Asset => | |
52 | - | if ((isNFT(isAsset) != true)) | |
53 | - | then true | |
54 | - | else false | |
55 | - | case _ => | |
56 | - | false | |
57 | - | } | |
58 | - | ||
59 | - | ||
60 | - | func getStringOrEmpty (keyName) = match getString(this, keyName) { | |
61 | - | case isStr: String => | |
62 | - | isStr | |
63 | - | case _ => | |
64 | - | "" | |
65 | - | } | |
66 | 4 | ||
67 | 5 | ||
68 | 6 | @Callable(i) | |
69 | - | func updateDefaultFee (newDefaultFee) = if ((isAdmin(i.caller) != true)) | |
70 | - | then throw("Acces denied") | |
71 | - | else if (if ((0 > newDefaultFee)) | |
72 | - | then true | |
73 | - | else (newDefaultFee > hardcoredMaximumDepositFee)) | |
74 | - | then throw("New default fee range is not correct") | |
75 | - | else [IntegerEntry(keyDefaultDepositFee, newDefaultFee)] | |
76 | - | ||
77 | - | ||
78 | - | ||
79 | - | @Callable(i) | |
80 | - | func createAssetToStake (assetIdStr,optIsEnabled,optMinAmount,optBlockHeightStaking,optBlockStakeDelay,optEnableSpecificFee,optSpecificFee) = if ((isAdmin(i.caller) != true)) | |
81 | - | then throw("Access denied") | |
82 | - | else if ((isValidAsset(assetIdStr) != true)) | |
83 | - | then throw("Not an valid asset") | |
84 | - | else if ((isListedAssetToStake(assetIdStr) != false)) | |
85 | - | then throw("Asset is already listed") | |
86 | - | else { | |
87 | - | let updatedATSList = addEntryToStringList(getStringOrEmpty(keyAssetsToStakeList), assetIdStr) | |
88 | - | let keyOrigin = (keyAssetToStake + assetIdStr) | |
89 | - | let keyOptionIsEnabled = (keyOrigin + keySuffixIsEnabled) | |
90 | - | let keyOptionMinimumAmount = (keyOrigin + keySuffixMinAmount) | |
91 | - | let keyOptionAllowStakingAfterBlockHeight = (keyOrigin + keySuffixAfterHeight) | |
92 | - | let keyOptionDelayInBlockAfterDepositToStake = (keyOrigin + keySuffixBlockDelay) | |
93 | - | let keyOptionEnableSpecificDepositFee = (keyOrigin + keySuffixEnableSpecFee) | |
94 | - | let keyOptionSpecificDepositFee = (keyOrigin + keySuffixSpecFee) | |
95 | - | [StringEntry(keyAssetsToStakeList, updatedATSList), BooleanEntry(keyOptionIsEnabled, optIsEnabled), IntegerEntry(keyOptionMinimumAmount, optMinAmount), IntegerEntry(keyOptionAllowStakingAfterBlockHeight, optBlockHeightStaking), IntegerEntry(keyOptionDelayInBlockAfterDepositToStake, optBlockStakeDelay), BooleanEntry(keyOptionEnableSpecificDepositFee, optEnableSpecificFee), IntegerEntry(keyOptionSpecificDepositFee, optSpecificFee)] | |
96 | - | } | |
97 | - | ||
98 | - | ||
99 | - | ||
100 | - | @Callable(i) | |
101 | - | func updateAssetToStakeOption (assetIdStr,optionName,optionNewValue) = if ((isAdmin(i.caller) != true)) | |
102 | - | then throw("Access denied") | |
103 | - | else { | |
104 | - | let fullKey = ((keyAssetToStake + assetIdStr) + optionName) | |
105 | - | let currentOpt = getIntegerValue(this, fullKey) | |
106 | - | if ((currentOpt == optionNewValue)) | |
107 | - | then throw("Value to update == current value") | |
108 | - | else [IntegerEntry(fullKey, optionNewValue)] | |
109 | - | } | |
110 | - | ||
111 | - | ||
112 | - | ||
113 | - | @Callable(i) | |
114 | - | func enableAssetToStakeOption (assetIdStr,optionName,optionNewValue) = if ((isAdmin(i.caller) != true)) | |
115 | - | then throw("Access denied") | |
116 | - | else { | |
117 | - | let fullKey = ((keyAssetToStake + assetIdStr) + optionName) | |
118 | - | let currentOpt = getBooleanValue(this, fullKey) | |
119 | - | if ((currentOpt == optionNewValue)) | |
120 | - | then throw("Value to update == current value") | |
121 | - | else [BooleanEntry(fullKey, optionNewValue)] | |
122 | - | } | |
7 | + | func call () = { | |
8 | + | let asset = Issue("Asset", "", 1, 0, true, unit, 0) | |
9 | + | let assetId = calculateAssetId(asset) | |
10 | + | [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)] | |
11 | + | } | |
123 | 12 | ||
124 | 13 | ||
125 | 14 | @Verifier(tx) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let separator = "___" | |
5 | - | ||
6 | - | let hardcoredMaximumDepositFee = 100 | |
7 | - | ||
8 | - | let hardcoredDappName = "FOKOFF" | |
9 | - | ||
10 | - | let hardcoredAssetIdForWaves = "WAVES" | |
11 | - | ||
12 | - | let keyAssetToStake = (hardcoredDappName + "_AssetToStake_") | |
13 | - | ||
14 | - | let keyAssetsToStakeList = (hardcoredDappName + "_AssetsToStakeList") | |
15 | - | ||
16 | - | let keyDefaultDepositFee = (hardcoredDappName + "_DefaultDepositFee") | |
17 | - | ||
18 | - | let keySuffixIsEnabled = "_isEnabled" | |
19 | - | ||
20 | - | let keySuffixMinAmount = "_minimumAmount" | |
21 | - | ||
22 | - | let keySuffixAfterHeight = "_allowStakingAfterBlockHeight" | |
23 | - | ||
24 | - | let keySuffixBlockDelay = "_BlocksDelayAfterDepositToStake" | |
25 | - | ||
26 | - | let keySuffixEnableSpecFee = "_enableSpecificDepositFee" | |
27 | - | ||
28 | - | let keySuffixSpecFee = "_specificDepositFee" | |
29 | - | ||
30 | - | func isAdmin (caller) = (this == caller) | |
31 | - | ||
32 | - | ||
33 | - | func addEntryToStringList (stringList,entry) = if ((1 > size(stringList))) | |
34 | - | then entry | |
35 | - | else ((stringList + separator) + entry) | |
36 | - | ||
37 | - | ||
38 | - | func isListedAssetToStake (assetIdStr) = contains(getStringValue(this, keyAssetsToStakeList), assetIdStr) | |
39 | - | ||
40 | - | ||
41 | - | func isNFT (nftAsset) = if (if ((nftAsset.decimals == 0)) | |
42 | - | then (nftAsset.quantity == 1) | |
43 | - | else false) | |
44 | - | then (nftAsset.reissuable == false) | |
45 | - | else false | |
46 | - | ||
47 | - | ||
48 | - | func isValidAsset (assetIdStr) = if ((assetIdStr == hardcoredAssetIdForWaves)) | |
49 | - | then true | |
50 | - | else match assetInfo(fromBase58String(assetIdStr)) { | |
51 | - | case isAsset: Asset => | |
52 | - | if ((isNFT(isAsset) != true)) | |
53 | - | then true | |
54 | - | else false | |
55 | - | case _ => | |
56 | - | false | |
57 | - | } | |
58 | - | ||
59 | - | ||
60 | - | func getStringOrEmpty (keyName) = match getString(this, keyName) { | |
61 | - | case isStr: String => | |
62 | - | isStr | |
63 | - | case _ => | |
64 | - | "" | |
65 | - | } | |
66 | 4 | ||
67 | 5 | ||
68 | 6 | @Callable(i) | |
69 | - | func updateDefaultFee (newDefaultFee) = if ((isAdmin(i.caller) != true)) | |
70 | - | then throw("Acces denied") | |
71 | - | else if (if ((0 > newDefaultFee)) | |
72 | - | then true | |
73 | - | else (newDefaultFee > hardcoredMaximumDepositFee)) | |
74 | - | then throw("New default fee range is not correct") | |
75 | - | else [IntegerEntry(keyDefaultDepositFee, newDefaultFee)] | |
76 | - | ||
77 | - | ||
78 | - | ||
79 | - | @Callable(i) | |
80 | - | func createAssetToStake (assetIdStr,optIsEnabled,optMinAmount,optBlockHeightStaking,optBlockStakeDelay,optEnableSpecificFee,optSpecificFee) = if ((isAdmin(i.caller) != true)) | |
81 | - | then throw("Access denied") | |
82 | - | else if ((isValidAsset(assetIdStr) != true)) | |
83 | - | then throw("Not an valid asset") | |
84 | - | else if ((isListedAssetToStake(assetIdStr) != false)) | |
85 | - | then throw("Asset is already listed") | |
86 | - | else { | |
87 | - | let updatedATSList = addEntryToStringList(getStringOrEmpty(keyAssetsToStakeList), assetIdStr) | |
88 | - | let keyOrigin = (keyAssetToStake + assetIdStr) | |
89 | - | let keyOptionIsEnabled = (keyOrigin + keySuffixIsEnabled) | |
90 | - | let keyOptionMinimumAmount = (keyOrigin + keySuffixMinAmount) | |
91 | - | let keyOptionAllowStakingAfterBlockHeight = (keyOrigin + keySuffixAfterHeight) | |
92 | - | let keyOptionDelayInBlockAfterDepositToStake = (keyOrigin + keySuffixBlockDelay) | |
93 | - | let keyOptionEnableSpecificDepositFee = (keyOrigin + keySuffixEnableSpecFee) | |
94 | - | let keyOptionSpecificDepositFee = (keyOrigin + keySuffixSpecFee) | |
95 | - | [StringEntry(keyAssetsToStakeList, updatedATSList), BooleanEntry(keyOptionIsEnabled, optIsEnabled), IntegerEntry(keyOptionMinimumAmount, optMinAmount), IntegerEntry(keyOptionAllowStakingAfterBlockHeight, optBlockHeightStaking), IntegerEntry(keyOptionDelayInBlockAfterDepositToStake, optBlockStakeDelay), BooleanEntry(keyOptionEnableSpecificDepositFee, optEnableSpecificFee), IntegerEntry(keyOptionSpecificDepositFee, optSpecificFee)] | |
96 | - | } | |
97 | - | ||
98 | - | ||
99 | - | ||
100 | - | @Callable(i) | |
101 | - | func updateAssetToStakeOption (assetIdStr,optionName,optionNewValue) = if ((isAdmin(i.caller) != true)) | |
102 | - | then throw("Access denied") | |
103 | - | else { | |
104 | - | let fullKey = ((keyAssetToStake + assetIdStr) + optionName) | |
105 | - | let currentOpt = getIntegerValue(this, fullKey) | |
106 | - | if ((currentOpt == optionNewValue)) | |
107 | - | then throw("Value to update == current value") | |
108 | - | else [IntegerEntry(fullKey, optionNewValue)] | |
109 | - | } | |
110 | - | ||
111 | - | ||
112 | - | ||
113 | - | @Callable(i) | |
114 | - | func enableAssetToStakeOption (assetIdStr,optionName,optionNewValue) = if ((isAdmin(i.caller) != true)) | |
115 | - | then throw("Access denied") | |
116 | - | else { | |
117 | - | let fullKey = ((keyAssetToStake + assetIdStr) + optionName) | |
118 | - | let currentOpt = getBooleanValue(this, fullKey) | |
119 | - | if ((currentOpt == optionNewValue)) | |
120 | - | then throw("Value to update == current value") | |
121 | - | else [BooleanEntry(fullKey, optionNewValue)] | |
122 | - | } | |
7 | + | func call () = { | |
8 | + | let asset = Issue("Asset", "", 1, 0, true, unit, 0) | |
9 | + | let assetId = calculateAssetId(asset) | |
10 | + | [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)] | |
11 | + | } | |
123 | 12 | ||
124 | 13 | ||
125 | 14 | @Verifier(tx) | |
126 | 15 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
127 | 16 |
github/deemru/w8io/169f3d6 32.08 ms ◑![]()