tx · 3ty4Z8dBzpnzDbxsdozNQRw3bu6yY3SjnZP4cQLuxKee 3Mp8MKhxBFzzBhS6txZgmaD7xvsbZgLuhjB: -0.01000000 Waves 2024.10.07 20:27 [3316721] smart account 3Mp8MKhxBFzzBhS6txZgmaD7xvsbZgLuhjB > SELF 0.00000000 Waves
{ "type": 13, "id": "3ty4Z8dBzpnzDbxsdozNQRw3bu6yY3SjnZP4cQLuxKee", "fee": 1000000, "feeAssetId": null, "timestamp": 1728322103134, "version": 2, "chainId": 84, "sender": "3Mp8MKhxBFzzBhS6txZgmaD7xvsbZgLuhjB", "senderPublicKey": "3NZ17UvGivxB5ADP36v9oJaxLoxqNCf9eTbqv9RMhug2", "proofs": [ "2kUwjFR3kwPtLPYckfWBacKpBGciqE94sH9iJarAyWfB6WWa7HxfZPYtxRmWXnV1NZZRiczvL2JEx7on684uUN5S" ], "script": "base64:BgITCAISAwoBCBIAEgMKAQgSAwoBARYBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwERc3RhdGljX2VnZ0Fzc2V0SWQAAhFzdGF0aWNfZWdnQXNzZXRJZAEWc3RhdGljX2JhYnlEdWNrQWRkcmVzcwACFnN0YXRpY19iYWJ5RHVja0FkZHJlc3MBFXN0YXRpY19jb3Vwb25zQWRkcmVzcwACFXN0YXRpY19jb3Vwb25zQWRkcmVzcwENZ2V0RWdnQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARFzdGF0aWNfZWdnQXNzZXRJZAABEmdldEJhYnlkdWNrQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY19iYWJ5RHVja0FkZHJlc3MAARFnZXRDb3Vwb25zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY19jb3Vwb25zQWRkcmVzcwABD2dldFRvdGFsQnVybktleQACFUJVUk5fVE9UQUxfQU1PVU5UX05FVwESZ2V0VG90YWxCdXJuS2V5T2xkAAIVQlVSTl9UT1RBTF9BTU9VTlRfT0xEAQ5nZXRMYXN0QnVybktleQACEEJVUk5fTEFTVF9BTU9VTlQBDmdldFVzZXJCdXJuS2V5AQdhZGRyZXNzCQCsAgIJAKwCAgIFQlVSTl8FB2FkZHJlc3MCC19BTU9VTlRfTkVXARFnZXRVc2VyQnVybktleU9sZAEHYWRkcmVzcwkArAICCQCsAgICBUJVUk5fBQdhZGRyZXNzAgtfQU1PVU5UX09MRAENZ2V0QnVybkJ5RGFwcAEHYWRkcmVzcwkArAICCQCsAgICCkJVUk5fREFQUF8FB2FkZHJlc3MCB19BTU9VTlQBFHRvdGFsRHVja2xpbmdzQnVybmVkAAIeQlVSTl9UT1RBTF9BTU9VTlRfRFVDS0xJTkdfTkVXARd0b3RhbER1Y2tsaW5nc0J1cm5lZE9sZAACHkJVUk5fVE9UQUxfQU1PVU5UX0RVQ0tMSU5HX09MRAEWZ2V0VXNlckJ1cm5EdWNrbGluZ0tleQEHYWRkcmVzcwkArAICCQCsAgICBUJVUk5fBQdhZGRyZXNzAhRfQU1PVU5UX0RVQ0tMSU5HX05FVwEZZ2V0VXNlckJ1cm5EdWNrbGluZ0tleU9sZAEHYWRkcmVzcwkArAICCQCsAgICBUJVUk5fBQdhZGRyZXNzAhRfQU1PVU5UX0RVQ0tMSU5HX09MRAEHZ2V0Qm9vbAEDa2V5BAckbWF0Y2gwCQCbCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEJaXNUZXN0RW52AAkBB2dldEJvb2wBAgdURVNURU5WBAFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIUc3RhdGljX29yYWNsZUFkZHJlc3MFBm9yYWNsZQUDbmlsAWkBFGJ1cm5BdHRhY2hlZFBheW1lbnRzAAQIcGF5bWVudHMIBQFpCHBheW1lbnRzAwkBAiE9AgkAkAMBBQhwYXltZW50cwABCQACAQIvQkFQOiBQbGVhc2UgbWFrZSBzdXJlIHRvIGF0dGFjaCBvbmx5IDEgcGF5bWVudCEECnBheW1lbnRFZ2cJAQV2YWx1ZQEJAJEDAgUIcGF5bWVudHMAAAMJAQIhPQIIBQpwYXltZW50RWdnB2Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAAgECHEJBUDogWW91IGNhbiBvbmx5IGJ1cm4gJEVHRyEEBmJ1cm5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBmFtb3VudAgFCnBheW1lbnRFZ2cGYW1vdW50BBF0b3RhbEJ1cm5UaWxsRGF0ZQkBDXRyeUdldEludGVnZXIBCQEPZ2V0VG90YWxCdXJuS2V5AAQXdG90YWxCdXJuVGlsbERhdGVCeVVzZXIJAQ10cnlHZXRJbnRlZ2VyAQkBDmdldFVzZXJCdXJuS2V5AQUGYnVybmVyBApidXJuQnlEYXBwCQENdHJ5R2V0SW50ZWdlcgEJAQ1nZXRCdXJuQnlEYXBwAQkApQgBCAUBaQZjYWxsZXIJAMwIAgkBBEJ1cm4CCQENZ2V0RWdnQXNzZXRJZAAFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmdldFRvdGFsQnVybktleU9sZAAFEXRvdGFsQnVyblRpbGxEYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERZ2V0VXNlckJ1cm5LZXlPbGQBBQZidXJuZXIFF3RvdGFsQnVyblRpbGxEYXRlQnlVc2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPZ2V0VG90YWxCdXJuS2V5AAkAZAIFEXRvdGFsQnVyblRpbGxEYXRlBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5nZXRVc2VyQnVybktleQEFBmJ1cm5lcgkAZAIFF3RvdGFsQnVyblRpbGxEYXRlQnlVc2VyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5nZXRMYXN0QnVybktleQAFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWdldEJ1cm5CeURhcHABCQClCAEIBQFpBmNhbGxlcgkAZAIFCmJ1cm5CeURhcHAFBmFtb3VudAUDbmlsAWkBDGJ1cm5EdWNrbGluZwEEdXNlcgQIcGF5bWVudHMIBQFpCHBheW1lbnRzAwkBAiE9AgkAkAMBBQhwYXltZW50cwABCQACAQIvQkJEOiBQbGVhc2UgbWFrZSBzdXJlIHRvIGF0dGFjaCBvbmx5IDEgcGF5bWVudCEEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAgUIcGF5bWVudHMAAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAABCQACAQIoQkJEOiBQbGVhc2UgbWFrZSBzdXJlIHRvIGF0dGFjaCB0aGUgTkZUIQMJAQIhPQIICQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQGaXNzdWVyCQESZ2V0QmFieWR1Y2tBZGRyZXNzAAkAAgECGUJCRDogVGhpcyBpcyBubyBkdWNrbGluZyEEEXRvdGFsQnVyblRpbGxEYXRlCQENdHJ5R2V0SW50ZWdlcgEJAQ9nZXRUb3RhbEJ1cm5LZXkABBd0b3RhbEJ1cm5UaWxsRGF0ZUJ5VXNlcgkBDXRyeUdldEludGVnZXIBCQEOZ2V0VXNlckJ1cm5LZXkBBQR1c2VyBBN0b3RhbER1Y2tsaW5nQnVybmVkCQENdHJ5R2V0SW50ZWdlcgEJARR0b3RhbER1Y2tsaW5nc0J1cm5lZAAEGXRvdGFsRHVja2xpbmdCdXJuZWRCeVVzZXIJAQ10cnlHZXRJbnRlZ2VyAQkBFmdldFVzZXJCdXJuRHVja2xpbmdLZXkBBQR1c2VyCQDMCAIJAQRCdXJuAgkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAgFB3BheW1lbnQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESZ2V0VG90YWxCdXJuS2V5T2xkAAURdG90YWxCdXJuVGlsbERhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJARFnZXRVc2VyQnVybktleU9sZAEFBHVzZXIFF3RvdGFsQnVyblRpbGxEYXRlQnlVc2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXdG90YWxEdWNrbGluZ3NCdXJuZWRPbGQABRN0b3RhbER1Y2tsaW5nQnVybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZZ2V0VXNlckJ1cm5EdWNrbGluZ0tleU9sZAEFBHVzZXIFGXRvdGFsRHVja2xpbmdCdXJuZWRCeVVzZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARR0b3RhbER1Y2tsaW5nc0J1cm5lZAAFE3RvdGFsRHVja2xpbmdCdXJuZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARZnZXRVc2VyQnVybkR1Y2tsaW5nS2V5AQUEdXNlcgUZdG90YWxEdWNrbGluZ0J1cm5lZEJ5VXNlcgUDbmlsAWkBDGJ1cm5CeUludm9rZQEGYW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQERZ2V0Q291cG9uc0FkZHJlc3MABwkAAgECGEJCSTogQWRtaW4gZmVhdHVyZSBvbmx5IQQGYnVybmVyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQRdG90YWxCdXJuVGlsbERhdGUJAQ10cnlHZXRJbnRlZ2VyAQkBD2dldFRvdGFsQnVybktleQAEF3RvdGFsQnVyblRpbGxEYXRlQnlVc2VyCQENdHJ5R2V0SW50ZWdlcgEJAQ5nZXRVc2VyQnVybktleQEFBmJ1cm5lcgQKYnVybkJ5RGFwcAkBDXRyeUdldEludGVnZXIBCQENZ2V0QnVybkJ5RGFwcAEJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQRCdXJuAgkBDWdldEVnZ0Fzc2V0SWQABQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRUb3RhbEJ1cm5LZXlPbGQABRF0b3RhbEJ1cm5UaWxsRGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWdldFVzZXJCdXJuS2V5T2xkAQUGYnVybmVyBRd0b3RhbEJ1cm5UaWxsRGF0ZUJ5VXNlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2dldFRvdGFsQnVybktleQAJAGQCBRF0b3RhbEJ1cm5UaWxsRGF0ZQUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOZ2V0VXNlckJ1cm5LZXkBBQZidXJuZXIJAGQCBRd0b3RhbEJ1cm5UaWxsRGF0ZUJ5VXNlcgUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOZ2V0TGFzdEJ1cm5LZXkABQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1nZXRCdXJuQnlEYXBwAQkApQgBCAUBaQZjYWxsZXIJAGQCBQpidXJuQnlEYXBwBQZhbW91bnQFA25pbAECdHgBBnZlcmlmeQADCQEJaXNUZXN0RW52AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQQJZmlyc3RVc2VyASBRHOT9Zv8SadLxWhSfO7Li9Dt/wctoJ6I0Xmw411fdbQQKc2Vjb25kVXNlcgEgXHIOS67xIU9m5hlF+mqise2xNilZXxnMzLDhTUGIan0ECXRoaXJkVXNlcgEgoK+R5S15Q2FhMhKtjrn6GFlRnS1TSTbD0KP3qGAZO04ED2ZpcnN0VXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQlmaXJzdFVzZXIAAQAABBBzZWNvbmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUKc2Vjb25kVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUKc2Vjb25kVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUKc2Vjb25kVXNlcgABAAAED3RoaXJkVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQl0aGlyZFVzZXIAAQAABA9zaWduYXR1cmVzQ291bnQJAGQCCQBkAgUPZmlyc3RVc2VyU2lnbmVkBRBzZWNvbmRVc2VyU2lnbmVkBQ90aGlyZFVzZXJTaWduZWQEByRtYXRjaDAFAnR4CQBnAgUPc2lnbmF0dXJlc0NvdW50AAJCZiki", "height": 3316721, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func tryGetString (key) = match getString(this, key) { | |
5 | + | case a: String => | |
6 | + | a | |
7 | + | case _ => | |
8 | + | "" | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func tryGetInteger (key) = match getInteger(this, key) { | |
13 | + | case a: Int => | |
14 | + | a | |
15 | + | case _ => | |
16 | + | 0 | |
17 | + | } | |
18 | + | ||
19 | + | ||
20 | + | func tryGetStringExternal (address,key) = match getString(address, key) { | |
21 | + | case a: String => | |
22 | + | a | |
23 | + | case _ => | |
24 | + | "" | |
25 | + | } | |
26 | + | ||
27 | + | ||
28 | + | func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress"))) | |
29 | + | ||
30 | + | ||
31 | + | func static_eggAssetId () = "static_eggAssetId" | |
32 | + | ||
33 | + | ||
34 | + | func static_babyDuckAddress () = "static_babyDuckAddress" | |
35 | + | ||
36 | + | ||
37 | + | func static_couponsAddress () = "static_couponsAddress" | |
38 | + | ||
39 | + | ||
40 | + | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), static_eggAssetId())) | |
41 | + | ||
42 | + | ||
43 | + | func getBabyduckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), static_babyDuckAddress()))) | |
44 | + | ||
45 | + | ||
46 | + | func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), static_couponsAddress()))) | |
47 | + | ||
48 | + | ||
49 | + | func getTotalBurnKey () = "BURN_TOTAL_AMOUNT_NEW" | |
50 | + | ||
51 | + | ||
52 | + | func getTotalBurnKeyOld () = "BURN_TOTAL_AMOUNT_OLD" | |
53 | + | ||
54 | + | ||
55 | + | func getLastBurnKey () = "BURN_LAST_AMOUNT" | |
56 | + | ||
57 | + | ||
58 | + | func getUserBurnKey (address) = (("BURN_" + address) + "_AMOUNT_NEW") | |
59 | + | ||
60 | + | ||
61 | + | func getUserBurnKeyOld (address) = (("BURN_" + address) + "_AMOUNT_OLD") | |
62 | + | ||
63 | + | ||
64 | + | func getBurnByDapp (address) = (("BURN_DAPP_" + address) + "_AMOUNT") | |
65 | + | ||
66 | + | ||
67 | + | func totalDucklingsBurned () = "BURN_TOTAL_AMOUNT_DUCKLING_NEW" | |
68 | + | ||
69 | + | ||
70 | + | func totalDucklingsBurnedOld () = "BURN_TOTAL_AMOUNT_DUCKLING_OLD" | |
71 | + | ||
72 | + | ||
73 | + | func getUserBurnDucklingKey (address) = (("BURN_" + address) + "_AMOUNT_DUCKLING_NEW") | |
74 | + | ||
75 | + | ||
76 | + | func getUserBurnDucklingKeyOld (address) = (("BURN_" + address) + "_AMOUNT_DUCKLING_OLD") | |
77 | + | ||
78 | + | ||
79 | + | func getBool (key) = match getBoolean(this, key) { | |
80 | + | case b: Boolean => | |
81 | + | b | |
82 | + | case _ => | |
83 | + | false | |
84 | + | } | |
85 | + | ||
86 | + | ||
87 | + | func isTestEnv () = getBool("TESTENV") | |
88 | + | ||
89 | + | ||
90 | + | @Callable(i) | |
91 | + | func configureOracle (oracle) = if ((i.caller != this)) | |
92 | + | then throw("admin only") | |
93 | + | else [StringEntry("static_oracleAddress", oracle)] | |
94 | + | ||
95 | + | ||
96 | + | ||
97 | + | @Callable(i) | |
98 | + | func burnAttachedPayments () = { | |
99 | + | let payments = i.payments | |
100 | + | if ((size(payments) != 1)) | |
101 | + | then throw("BAP: Please make sure to attach only 1 payment!") | |
102 | + | else { | |
103 | + | let paymentEgg = value(payments[0]) | |
104 | + | if ((paymentEgg.assetId != getEggAssetId())) | |
105 | + | then throw("BAP: You can only burn $EGG!") | |
106 | + | else { | |
107 | + | let burner = toString(i.originCaller) | |
108 | + | let amount = paymentEgg.amount | |
109 | + | let totalBurnTillDate = tryGetInteger(getTotalBurnKey()) | |
110 | + | let totalBurnTillDateByUser = tryGetInteger(getUserBurnKey(burner)) | |
111 | + | let burnByDapp = tryGetInteger(getBurnByDapp(toString(i.caller))) | |
112 | + | [Burn(getEggAssetId(), amount), IntegerEntry(getTotalBurnKeyOld(), totalBurnTillDate), IntegerEntry(getUserBurnKeyOld(burner), totalBurnTillDateByUser), IntegerEntry(getTotalBurnKey(), (totalBurnTillDate + amount)), IntegerEntry(getUserBurnKey(burner), (totalBurnTillDateByUser + amount)), IntegerEntry(getLastBurnKey(), amount), IntegerEntry(getBurnByDapp(toString(i.caller)), (burnByDapp + amount))] | |
113 | + | } | |
114 | + | } | |
115 | + | } | |
116 | + | ||
117 | + | ||
118 | + | ||
119 | + | @Callable(i) | |
120 | + | func burnDuckling (user) = { | |
121 | + | let payments = i.payments | |
122 | + | if ((size(payments) != 1)) | |
123 | + | then throw("BBD: Please make sure to attach only 1 payment!") | |
124 | + | else { | |
125 | + | let payment = value(payments[0]) | |
126 | + | if ((payment.amount != 1)) | |
127 | + | then throw("BBD: Please make sure to attach the NFT!") | |
128 | + | else if ((value(assetInfo(value(payment.assetId))).issuer != getBabyduckAddress())) | |
129 | + | then throw("BBD: This is no duckling!") | |
130 | + | else { | |
131 | + | let totalBurnTillDate = tryGetInteger(getTotalBurnKey()) | |
132 | + | let totalBurnTillDateByUser = tryGetInteger(getUserBurnKey(user)) | |
133 | + | let totalDucklingBurned = tryGetInteger(totalDucklingsBurned()) | |
134 | + | let totalDucklingBurnedByUser = tryGetInteger(getUserBurnDucklingKey(user)) | |
135 | + | [Burn(value(payment.assetId), payment.amount), IntegerEntry(getTotalBurnKeyOld(), totalBurnTillDate), IntegerEntry(getUserBurnKeyOld(user), totalBurnTillDateByUser), IntegerEntry(totalDucklingsBurnedOld(), totalDucklingBurned), IntegerEntry(getUserBurnDucklingKeyOld(user), totalDucklingBurnedByUser), IntegerEntry(totalDucklingsBurned(), totalDucklingBurned), IntegerEntry(getUserBurnDucklingKey(user), totalDucklingBurnedByUser)] | |
136 | + | } | |
137 | + | } | |
138 | + | } | |
139 | + | ||
140 | + | ||
141 | + | ||
142 | + | @Callable(i) | |
143 | + | func burnByInvoke (amount) = if (if ((i.caller != this)) | |
144 | + | then (i.caller != getCouponsAddress()) | |
145 | + | else false) | |
146 | + | then throw("BBI: Admin feature only!") | |
147 | + | else { | |
148 | + | let burner = toString(i.originCaller) | |
149 | + | let totalBurnTillDate = tryGetInteger(getTotalBurnKey()) | |
150 | + | let totalBurnTillDateByUser = tryGetInteger(getUserBurnKey(burner)) | |
151 | + | let burnByDapp = tryGetInteger(getBurnByDapp(toString(i.caller))) | |
152 | + | [Burn(getEggAssetId(), amount), IntegerEntry(getTotalBurnKeyOld(), totalBurnTillDate), IntegerEntry(getUserBurnKeyOld(burner), totalBurnTillDateByUser), IntegerEntry(getTotalBurnKey(), (totalBurnTillDate + amount)), IntegerEntry(getUserBurnKey(burner), (totalBurnTillDateByUser + amount)), IntegerEntry(getLastBurnKey(), amount), IntegerEntry(getBurnByDapp(toString(i.caller)), (burnByDapp + amount))] | |
153 | + | } | |
154 | + | ||
155 | + | ||
156 | + | @Verifier(tx) | |
157 | + | func verify () = if (isTestEnv()) | |
158 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
159 | + | else { | |
160 | + | let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4' | |
161 | + | let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8' | |
162 | + | let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3' | |
163 | + | let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser)) | |
164 | + | then 1 | |
165 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser)) | |
166 | + | then 1 | |
167 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser)) | |
168 | + | then 1 | |
169 | + | else 0 | |
170 | + | let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser)) | |
171 | + | then 1 | |
172 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser)) | |
173 | + | then 1 | |
174 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser)) | |
175 | + | then 1 | |
176 | + | else 0 | |
177 | + | let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser)) | |
178 | + | then 1 | |
179 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser)) | |
180 | + | then 1 | |
181 | + | else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser)) | |
182 | + | then 1 | |
183 | + | else 0 | |
184 | + | let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned) | |
185 | + | match tx { | |
186 | + | case _ => | |
187 | + | (signaturesCount >= 2) | |
188 | + | } | |
189 | + | } | |
190 | + |
github/deemru/w8io/026f985 16.57 ms ◑