tx · EZBpyuHdTm1pXtjKG3bDQackTXxyvbMidErheajNfa2k 3MpYQrrBwEgNYg5fRq1jusbBMkn8qQXcX94: -0.01000000 Waves 2020.09.23 16:00 [1189983] smart account 3MpYQrrBwEgNYg5fRq1jusbBMkn8qQXcX94 > SELF 0.00000000 Waves
{ "type": 13, "id": "EZBpyuHdTm1pXtjKG3bDQackTXxyvbMidErheajNfa2k", "fee": 1000000, "feeAssetId": null, "timestamp": 1600866049312, "version": 1, "sender": "3MpYQrrBwEgNYg5fRq1jusbBMkn8qQXcX94", "senderPublicKey": "HDaEMRirbtoCDpipPUEDJusoQyzdebT6piEp7gtmYJSa", "proofs": [ "4xrQczqh26iMecjktoKZ5MaFGQiRuov2eE6666KaosXPG5FTfeTAAdgVWypmPntLfNGLE6eV7ZqyBB6j5kQgS3N1" ], "script": "base64:AAIEAAAAAAAAAAgIAhIECgIBCAAAAAkAAAAAC2FkZHJlc3NCb29rCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUVoHUeTQTO77iaMaO0CyN+LlydsBXbwHeAAAAABN3aGl0ZWxpc3RBZGRyZXNzS2V5AgAAABB3aGl0ZWxpc3RBZGRyZXNzAAAAABdkQXBwV2hpdGVsaXN0QWRkcmVzc0tleQIAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MAAAAAB2Fzc2V0SWQBAAAAICG0NAEcHIp9wUNbC4DGYcTBsWNbBFo+CkP2CUSPvsIqAAAAABJvd25lckFkZHJlc3NTdHJpbmcCAAAAIzNNcFlRcnJCd0VnTllnNWZScTFqdXNiQk1rbjhxUVhjWDk0AAAAAAN2ZXICAAAABTYuMC4wAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAthZGRyZXNzQm9vawUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAFhCQAAAgAAAAECAAAABm5vIGtleQAAAAAQd2hpdGVsaXN0QWRkcmVzcwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEFAAAAE3doaXRlbGlzdEFkZHJlc3NLZXkAAAAAFGRBcHBXaGl0ZWxpc3RBZGRyZXNzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQUAAAAXZEFwcFdoaXRlbGlzdEFkZHJlc3NLZXkAAAABAAAAAWkBAAAAGXJlaXNzdWVTZWN1cml0eUZvckFkZHJlc3MAAAACAAAACHF1YW50aXR5AAAAB2FkZHJlc3MEAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMDCQEAAAACIT0AAAACBQAAABNjYWxsZXJBZGRyZXNzU3RyaW5nBQAAABJvd25lckFkZHJlc3NTdHJpbmcJAQAAAAIhPQAAAAIFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAAQlAAAAAQUAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MHCQAAAgAAAAECAAAALCMwMDEgY2FsbGVyIGhhcyBubyByaWdodHMgZm9yIHRoaXMgb3BlcmF0aW9uBAAAAA5pc0FjY291bnRBbGxvdwQAAAAHJG1hdGNoMAkABBoAAAACBQAAABB3aGl0ZWxpc3RBZGRyZXNzBQAAAAdhZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEA/////////wEEAAAACmRBcHBTdGF0dXMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MFAAAAB2FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQD////////8GAMDCQEAAAACIT0AAAACBQAAAApkQXBwU3RhdHVzAP////////wYBgkBAAAAAiE9AAAAAgUAAAAOaXNBY2NvdW50QWxsb3cA/////////wEEAAAAEWN1cnJlbnRLZXlBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAHYWRkcmVzcwQAAAANYmFsYW5jZUFtb3VudAkAA/AAAAACBQAAAAR0aGlzBQAAAAdhc3NldElkAwkAAGcAAAACBQAAAA1iYWxhbmNlQW1vdW50BQAAAAhxdWFudGl0eQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAIcXVhbnRpdHkFAAAAB2Fzc2V0SWQFAAAAA25pbAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAB2Fzc2V0SWQJAABlAAAAAgUAAAAIcXVhbnRpdHkFAAAADWJhbGFuY2VBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAAAhxdWFudGl0eQUAAAAHYXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAFiMwMDIgaW52YWxpZCByZWNpcGllbnQAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAGVNldEFzc2V0U2NyaXB0VHJhbnNhY3Rpb24GCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAQAAAAEdHhJZAkAAlgAAAABCAUAAAACdHgAAAACaWQEAAAACXBBZGRyZXNzMQkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzMQQAAAAJcEFkZHJlc3MyCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MyBAAAAAlwQWRkcmVzczMJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczMEAAAACXBBZGRyZXNzNAkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzNAQAAAAJcEFkZHJlc3M1CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M1BAAAAAlwQWRkcmVzczYJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczYEAAAACXBBZGRyZXNzNwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzNwQAAAAJcEFkZHJlc3M4CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M4BAAAAAtwS2V5MVNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzMQUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTJTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczIFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXkzU2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3MzBQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5NFNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzNAUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTVTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczUFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk2U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M2BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5N1NpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzNwUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleThTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczgFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAJAABnAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACBQAAAAtwS2V5MVNpZ25lZAUAAAALcEtleTJTaWduZWQFAAAAC3BLZXkzU2lnbmVkBQAAAAtwS2V5NFNpZ25lZAUAAAALcEtleTVTaWduZWQFAAAAC3BLZXk2U2lnbmVkBQAAAAtwS2V5N1NpZ25lZAUAAAALcEtleThTaWduZWQAAAAAAAAAAAMHeps6Iw==", "chainId": 84, "height": 1189983, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 4 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let addressBook = Address(base58'3MwoVRAPfC2NKuuYJKHVAVtUFhq8MyTEfQh') | |
5 | + | ||
6 | + | let whitelistAddressKey = "whitelistAddress" | |
7 | + | ||
8 | + | let dAppWhitelistAddressKey = "dAppWhitelistAddress" | |
9 | + | ||
10 | + | let assetId = base58'3GZpwgG72NxTmuaZrvk2hCEBDJUixieGeWrsth91SvQR' | |
11 | + | ||
12 | + | let ownerAddressString = "3MpYQrrBwEgNYg5fRq1jusbBMkn8qQXcX94" | |
13 | + | ||
14 | + | let ver = "6.0.0" | |
15 | + | ||
16 | + | func getAddressFromBook (key) = match getString(addressBook, key) { | |
17 | + | case a: String => | |
18 | + | Address(fromBase58String(a)) | |
19 | + | case _ => | |
20 | + | throw("no key") | |
21 | + | } | |
22 | + | ||
23 | + | ||
24 | + | let whitelistAddress = getAddressFromBook(whitelistAddressKey) | |
25 | + | ||
26 | + | let dAppWhitelistAddress = getAddressFromBook(dAppWhitelistAddressKey) | |
27 | + | ||
28 | + | @Callable(i) | |
29 | + | func reissueSecurityForAddress (quantity,address) = { | |
30 | + | let callerAddressString = toBase58String(i.caller.bytes) | |
31 | + | if (if ((callerAddressString != ownerAddressString)) | |
32 | + | then (callerAddressString != toString(dAppWhitelistAddress)) | |
33 | + | else false) | |
34 | + | then throw("#001 caller has no rights for this operation") | |
35 | + | else { | |
36 | + | let isAccountAllow = match getInteger(whitelistAddress, address) { | |
37 | + | case a: Int => | |
38 | + | a | |
39 | + | case _ => | |
40 | + | -255 | |
41 | + | } | |
42 | + | let dAppStatus = match getInteger(dAppWhitelistAddress, address) { | |
43 | + | case a: Int => | |
44 | + | a | |
45 | + | case _ => | |
46 | + | -1000 | |
47 | + | } | |
48 | + | if (if ((dAppStatus != -1000)) | |
49 | + | then true | |
50 | + | else (isAccountAllow != -255)) | |
51 | + | then { | |
52 | + | let currentKeyAddress = Address(fromBase58String(address)) | |
53 | + | let balanceAmount = assetBalance(this, assetId) | |
54 | + | if ((balanceAmount >= quantity)) | |
55 | + | then [ScriptTransfer(currentKeyAddress, quantity, assetId)] | |
56 | + | else [Reissue(assetId, (quantity - balanceAmount), true), ScriptTransfer(currentKeyAddress, quantity, assetId)] | |
57 | + | } | |
58 | + | else throw("#002 invalid recipient") | |
59 | + | } | |
60 | + | } | |
61 | + | ||
62 | + | ||
63 | + | @Verifier(tx) | |
64 | + | func verify () = match tx { | |
65 | + | case tx: SetAssetScriptTransaction|SetScriptTransaction => | |
66 | + | let txId = toBase58String(tx.id) | |
67 | + | let pAddress1 = getAddressFromBook("pAddress1") | |
68 | + | let pAddress2 = getAddressFromBook("pAddress2") | |
69 | + | let pAddress3 = getAddressFromBook("pAddress3") | |
70 | + | let pAddress4 = getAddressFromBook("pAddress4") | |
71 | + | let pAddress5 = getAddressFromBook("pAddress5") | |
72 | + | let pAddress6 = getAddressFromBook("pAddress6") | |
73 | + | let pAddress7 = getAddressFromBook("pAddress7") | |
74 | + | let pAddress8 = getAddressFromBook("pAddress8") | |
75 | + | let pKey1Signed = if (isDefined(getInteger(pAddress1, txId))) | |
76 | + | then 1 | |
77 | + | else 0 | |
78 | + | let pKey2Signed = if (isDefined(getInteger(pAddress2, txId))) | |
79 | + | then 1 | |
80 | + | else 0 | |
81 | + | let pKey3Signed = if (isDefined(getInteger(pAddress3, txId))) | |
82 | + | then 1 | |
83 | + | else 0 | |
84 | + | let pKey4Signed = if (isDefined(getInteger(pAddress4, txId))) | |
85 | + | then 1 | |
86 | + | else 0 | |
87 | + | let pKey5Signed = if (isDefined(getInteger(pAddress5, txId))) | |
88 | + | then 1 | |
89 | + | else 0 | |
90 | + | let pKey6Signed = if (isDefined(getInteger(pAddress6, txId))) | |
91 | + | then 1 | |
92 | + | else 0 | |
93 | + | let pKey7Signed = if (isDefined(getInteger(pAddress7, txId))) | |
94 | + | then 1 | |
95 | + | else 0 | |
96 | + | let pKey8Signed = if (isDefined(getInteger(pAddress8, txId))) | |
97 | + | then 1 | |
98 | + | else 0 | |
99 | + | ((((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) + pKey7Signed) + pKey8Signed) >= 3) | |
100 | + | case _ => | |
101 | + | false | |
102 | + | } | |
103 | + |
github/deemru/w8io/026f985 25.35 ms ◑