tx · Gojbh3R1S9JLvMjWDetgpAti42V3AEWqGVsi3khQdhV5

3MsRgbVnswcRJYYosBHW19GCnepfHkP5vDT:  -0.01000000 Waves

2020.06.08 15:21 [1034351] smart account 3MsRgbVnswcRJYYosBHW19GCnepfHkP5vDT > SELF 0.00000000 Waves

{ "type": 13, "id": "Gojbh3R1S9JLvMjWDetgpAti42V3AEWqGVsi3khQdhV5", "fee": 1000000, "feeAssetId": null, "timestamp": 1591618943715, "version": 1, "sender": "3MsRgbVnswcRJYYosBHW19GCnepfHkP5vDT", "senderPublicKey": "Ezz5k8LQiN5agF2ESfDkEDbyY1ajkD1djuCNnrv6wQoe", "proofs": [ "4JE8BLcPEhicZNj52aZxUAoLEm46xqaGBP6mrAb9CJKVApfvW52BmNQ7NraUCBC6vhxFdA3ZYq8wMT2b2Zvv5dZp" ], "script": "base64:AAIDAAAAAAAAAAcIARIDCgEIAAAAFgAAAAALYWRkcmVzc0Jvb2sJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVRWgdR5NBM7vuJoxo7QLI34uXJ2wFdvAd4AAAAAE3doaXRlbGlzdEFkZHJlc3NLZXkCAAAAEHdoaXRlbGlzdEFkZHJlc3MAAAAAF2RBcHBXaGl0ZWxpc3RBZGRyZXNzS2V5AgAAABRkQXBwV2hpdGVsaXN0QWRkcmVzcwAAAAAOY29lZmZpY2llbnRLZXkCAAAAC2NvZWZmaWNpZW50AAAAABBkaXZpZGVuZHNBc3NldElkAQAAACCvOUhH768SCeA6PrRTnXQmq/k9bwVLiF0VD6knNWeEWAAAAAAVZGl2aWRlbmRzQXNzZXRJc1dhdmVzBwAAAAAbc2VjdXJpdHlBc3NldERlY2ltYWxzT2Zmc2V0AAAAAAAAAAAIAAAAAAlzdGFydFRpbWUAAAAAAF73CpAAAAAAB2VuZFRpbWUAAAAAAGDYPhAAAAAAA3ZlcgIAAAAFNS4wLjEAAAAACnZhbGlkU3RhdGUAAAAAAAAAA+gAAAAADmdldEN1cnJlbnRUaW1lCQAAaQAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAAAAPoAQAAAApoYXNTdGFydGVkAAAAAAkAAGcAAAACBQAAAA5nZXRDdXJyZW50VGltZQUAAAAJc3RhcnRUaW1lAQAAAAhoYXNFbmRlZAAAAAAJAABmAAAAAgUAAAAOZ2V0Q3VycmVudFRpbWUFAAAAB2VuZFRpbWUBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAAC2FkZHJlc3NCb29rBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAWEJAAACAAAAAQIAAAAGbm8ga2V5AQAAAAlnZXRBbW91bnQAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAGaXNQYWlkAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAVZ2V0QXNzZXRJZEZvclRyYW5zZmVyAAAAAgAAAAdpc1dhdmVzAAAAB2Fzc2V0SWQDCQAAAAAAAAIFAAAAB2lzV2F2ZXMHBQAAAAdhc3NldElkBQAAAAR1bml0AQAAAB9nZXRJbnZlc3RvckFkZHJlc3NGb3JXaXRoZHJhd2FsAAAAAgAAAAphcmdBZGRyZXNzAAAADWNhbGxlckFkZHJlc3MDCQAAZgAAAAIJAAExAAAAAQUAAAAKYXJnQWRkcmVzcwAAAAAAAAAACgUAAAAKYXJnQWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwAAAAAQd2hpdGVsaXN0QWRkcmVzcwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEFAAAAE3doaXRlbGlzdEFkZHJlc3NLZXkAAAAAFGRBcHBXaGl0ZWxpc3RBZGRyZXNzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQUAAAAXZEFwcFdoaXRlbGlzdEFkZHJlc3NLZXkAAAAAG2RpdmlkZW5kc0Fzc2V0SWRGb3JUcmFuc2ZlcgkBAAAAFWdldEFzc2V0SWRGb3JUcmFuc2ZlcgAAAAIFAAAAFWRpdmlkZW5kc0Fzc2V0SXNXYXZlcwUAAAAQZGl2aWRlbmRzQXNzZXRJZAAAAAEAAAABaQEAAAAKd2l0aGRyYXdhbAAAAAEAAAAHYWRkcmVzcwQAAAAKZEFwcFN0YXR1cwQAAAAHJG1hdGNoMAkABBoAAAACBQAAABRkQXBwV2hpdGVsaXN0QWRkcmVzcwkABCUAAAABBQAAAAR0aGlzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAACmN1cnJlbnRLZXkJAQAAAB9nZXRJbnZlc3RvckFkZHJlc3NGb3JXaXRoZHJhd2FsAAAAAgUAAAAHYWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAEWN1cnJlbnRLZXlBZGRyZXNzCQEAAAAHZXh0cmFjdAAAAAEJAQAAABFhZGRyZXNzRnJvbVN0cmluZwAAAAEFAAAACmN1cnJlbnRLZXkEAAAAEGFkZHJlc3NUb2tlbnNLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAKY3VycmVudEtleQIAAAAHX3Rva2VucwQAAAAOYWRkcmVzc1BhaWRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAKY3VycmVudEtleQIAAAAFX3BhaWQEAAAAFGFkZHJlc3NQYWlkQW1vdW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAACmN1cnJlbnRLZXkCAAAAC19wYWlkQW1vdW50BAAAABVhZGRyZXNzU2VjdXJpdHlUb2tlbnMJAQAAAAlnZXRBbW91bnQAAAABBQAAABBhZGRyZXNzVG9rZW5zS2V5BAAAAAthZGRyZXNzUGFpZAkBAAAABmlzUGFpZAAAAAEFAAAADmFkZHJlc3NQYWlkS2V5AwkBAAAAAiE9AAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAQkAAAIAAAABAgAAABcjMDAxIGRBcHAgaXMgbm90IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAACmhhc1N0YXJ0ZWQAAAAACQAAAgAAAAECAAAAHSMwMDIgZEFwcCBoYXMgbm90IHN0YXJ0ZWQgeWV0AwkBAAAACGhhc0VuZGVkAAAAAAkAAAIAAAABAgAAABsjMDAzIGRBcHAgYWxyZWFkeSBjb21wbGV0ZWQDCQAAAAAAAAIFAAAAFWFkZHJlc3NTZWN1cml0eVRva2VucwAAAAAAAAAAAAkAAAIAAAABAgAAADUjMDA1IFRoaXMgYWNjb3VudCBkb2VzIG5vdCBoYXZlIGRpdmlkZW5kcyB0byByZWNpZXZlLgMJAAAAAAAAAgUAAAALYWRkcmVzc1BhaWQGCQAAAgAAAAECAAAAMSMwMDYgVGhpcyBhY2NvdW50IGhhcyBhbHJlYWR5IHJlY2VpdmVkIGRpdmlkZW5kcy4EAAAAC2NvZWZmaWNpZW50CQEAAAAJZ2V0QW1vdW50AAAAAQUAAAAOY29lZmZpY2llbnRLZXkEAAAABmFtb3VudAkAAGsAAAADBQAAABVhZGRyZXNzU2VjdXJpdHlUb2tlbnMFAAAAC2NvZWZmaWNpZW50BQAAABtzZWN1cml0eUFzc2V0RGVjaW1hbHNPZmZzZXQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5hZGRyZXNzUGFpZEtleQYJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAFGFkZHJlc3NQYWlkQW1vdW50S2V5BQAAAAZhbW91bnQFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAGYW1vdW50BQAAABtkaXZpZGVuZHNBc3NldElkRm9yVHJhbnNmZXIFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAACdHgFAAAAByRtYXRjaDAEAAAABHR4SWQJAAJYAAAAAQgFAAAAAnR4AAAAAmlkBAAAAAlwQWRkcmVzczEJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczEEAAAACXBBZGRyZXNzMgkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzMgQAAAAJcEFkZHJlc3MzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MzBAAAAAlwQWRkcmVzczQJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczQEAAAACXBBZGRyZXNzNQkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzNQQAAAAJcEFkZHJlc3M2CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M2BAAAAAlwQWRkcmVzczcJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczcEAAAACXBBZGRyZXNzOAkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzOAQAAAALcEtleTFTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczEFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXkyU2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3MyBQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5M1NpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzMwUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTRTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczQFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk1U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M1BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5NlNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzNgUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTdTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczcFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk4U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M4BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgUAAAALcEtleTFTaWduZWQFAAAAC3BLZXkyU2lnbmVkBQAAAAtwS2V5M1NpZ25lZAUAAAALcEtleTRTaWduZWQFAAAAC3BLZXk1U2lnbmVkBQAAAAtwS2V5NlNpZ25lZAUAAAALcEtleTdTaWduZWQFAAAAC3BLZXk4U2lnbmVkAAAAAAAAAAADAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQddwskR", "chainId": 84, "height": 1034351, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
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 coefficientKey = "coefficient"
11+
12+let dividendsAssetId = base58'Co11Tbj83TeZCnuXrZQwv6Bs4XG2sm1vGQiQ4FLDjJWs'
13+
14+let dividendsAssetIsWaves = false
15+
16+let securityAssetDecimalsOffset = 8
17+
18+let startTime = 1593248400
19+
20+let endTime = 1624784400
21+
22+let ver = "5.0.1"
23+
24+let validState = 1000
25+
26+let getCurrentTime = (lastBlock.timestamp / 1000)
27+
28+func hasStarted () = (getCurrentTime >= startTime)
29+
30+
31+func hasEnded () = (getCurrentTime > endTime)
32+
33+
34+func getAddressFromBook (key) = match getString(addressBook, key) {
35+ case a: String =>
36+ Address(fromBase58String(a))
37+ case _ =>
38+ throw("no key")
39+}
40+
41+
42+func getAmount (key) = match getInteger(this, key) {
43+ case a: Int =>
44+ a
45+ case _ =>
46+ 0
47+}
48+
49+
50+func isPaid (key) = match getBoolean(this, key) {
51+ case a: Boolean =>
52+ a
53+ case _ =>
54+ false
55+}
56+
57+
58+func getAssetIdForTransfer (isWaves,assetId) = if ((isWaves == false))
59+ then assetId
60+ else unit
61+
62+
63+func getInvestorAddressForWithdrawal (argAddress,callerAddress) = if ((size(argAddress) > 10))
64+ then argAddress
65+ else callerAddress
66+
67+
68+let whitelistAddress = getAddressFromBook(whitelistAddressKey)
69+
70+let dAppWhitelistAddress = getAddressFromBook(dAppWhitelistAddressKey)
71+
72+let dividendsAssetIdForTransfer = getAssetIdForTransfer(dividendsAssetIsWaves, dividendsAssetId)
73+
74+@Callable(i)
75+func withdrawal (address) = {
76+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
77+ case a: Int =>
78+ a
79+ case _ =>
80+ 0
81+ }
82+ let currentKey = getInvestorAddressForWithdrawal(address, toString(i.caller))
83+ let currentKeyAddress = extract(addressFromString(currentKey))
84+ let addressTokensKey = (("address_" + currentKey) + "_tokens")
85+ let addressPaidKey = (("address_" + currentKey) + "_paid")
86+ let addressPaidAmountKey = (("address_" + currentKey) + "_paidAmount")
87+ let addressSecurityTokens = getAmount(addressTokensKey)
88+ let addressPaid = isPaid(addressPaidKey)
89+ if ((dAppStatus != 1))
90+ then throw("#001 dApp is not active")
91+ else if (!(hasStarted()))
92+ then throw("#002 dApp has not started yet")
93+ else if (hasEnded())
94+ then throw("#003 dApp already completed")
95+ else if ((addressSecurityTokens == 0))
96+ then throw("#005 This account does not have dividends to recieve.")
97+ else if ((addressPaid == true))
98+ then throw("#006 This account has already received dividends.")
99+ else {
100+ let coefficient = getAmount(coefficientKey)
101+ let amount = fraction(addressSecurityTokens, coefficient, securityAssetDecimalsOffset)
102+ ScriptResult(WriteSet([DataEntry(addressPaidKey, true), DataEntry(addressPaidAmountKey, amount)]), TransferSet([ScriptTransfer(currentKeyAddress, amount, dividendsAssetIdForTransfer)]))
103+ }
104+ }
105+
106+
107+@Verifier(tx)
108+func verify () = match tx {
109+ case tx: SetScriptTransaction =>
110+ let txId = toBase58String(tx.id)
111+ let pAddress1 = getAddressFromBook("pAddress1")
112+ let pAddress2 = getAddressFromBook("pAddress2")
113+ let pAddress3 = getAddressFromBook("pAddress3")
114+ let pAddress4 = getAddressFromBook("pAddress4")
115+ let pAddress5 = getAddressFromBook("pAddress5")
116+ let pAddress6 = getAddressFromBook("pAddress6")
117+ let pAddress7 = getAddressFromBook("pAddress7")
118+ let pAddress8 = getAddressFromBook("pAddress8")
119+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
120+ then 1
121+ else 0
122+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
123+ then 1
124+ else 0
125+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
126+ then 1
127+ else 0
128+ let pKey4Signed = if (isDefined(getInteger(pAddress4, txId)))
129+ then 1
130+ else 0
131+ let pKey5Signed = if (isDefined(getInteger(pAddress5, txId)))
132+ then 1
133+ else 0
134+ let pKey6Signed = if (isDefined(getInteger(pAddress6, txId)))
135+ then 1
136+ else 0
137+ let pKey7Signed = if (isDefined(getInteger(pAddress7, txId)))
138+ then 1
139+ else 0
140+ let pKey8Signed = if (isDefined(getInteger(pAddress8, txId)))
141+ then 1
142+ else 0
143+ ((((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) + pKey7Signed) + pKey8Signed) >= 3)
144+ case tx: DataTransaction =>
145+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
146+ case _ =>
147+ false
148+}
149+

github/deemru/w8io/169f3d6 
16.81 ms