tx · HB3Kz2ZVbThZFpUKuUoiiRXLdFyLobYeW34o9XCVWYB6 3MuLW72Rskgct4uXSeVEQAYoPhreiLjVGia: -0.01400000 Waves 2019.12.19 09:09 [815408] smart account 3MuLW72Rskgct4uXSeVEQAYoPhreiLjVGia > SELF 0.00000000 Waves
{ "type": 13, "id": "HB3Kz2ZVbThZFpUKuUoiiRXLdFyLobYeW34o9XCVWYB6", "fee": 1400000, "feeAssetId": null, "timestamp": 1576735763312, "version": 1, "sender": "3MuLW72Rskgct4uXSeVEQAYoPhreiLjVGia", "senderPublicKey": "BMbwthKYkuvSJNf8PjgCARQhGreCu6P7JdYpUU3pEcfz", "proofs": [], "script": "base64:AAIDAAAAAAAAAAYIARIAEgAAAAAoAAAAAA1pc3N1ZXJBc3NldElkAQAAACAE0o0lnLWauKznExGoG0uqS2tMXOK8Yshm9+5Jecmv/QAAAAARaW52ZXN0bWVudEFzc2V0SWQBAAAABBOr2TMAAAAAGGludmVzdG1lbnRBc3NldElkSXNXYXZlcwYAAAAADm93bmVyUHVibGljS2V5AQAAACAKrOLytyg436L/itVAvfWO1TswqoWR2gLBb4oFPYsiYQAAAAAMb3duZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA5vd25lclB1YmxpY0tleQAAAAASb3duZXJBZGRyZXNzU3RyaW5nAgAAACMzTjRYRm9ISFFNQVRKOUZnWlViNkxUdmRjRDIzcU5VaVY0TQAAAAATYXNzZXREZWNpbWFsc09mZnNldAAAAAAAAAAAAQAAAAAQc3VtQWNjb3VudEFzc2V0cwAAAAAAAAAAlgAAAAAMaXNzdWVyQXNzZXRzAAAAAAAAAAAyAAAAAAlzdGFydFRpbWUAAAAAAF33R5AAAAAAEWluY3JlYXNlUHJpY2VUaW1lAAAAAABeB0PAAAAAAAdlbmRUaW1lAAAAAABeB0PAAAAAAAVwcmljZQAAAAAAAJiWgAAAAAALcHJpY2VTZWNvbmQAAAAAAACYloAAAAAADXNvZnRDYXBBbW91bnQAAAAAADuaygAAAAAADWhhcmRDYXBBbW91bnQAAAAAAFloLwAAAAAACm1pblBheW1lbnQAAAAAAACYloAAAAAAEmtleVN1bUFtb3VudFByZWZpeAIAAAAKc3VtQW1vdW50IAAAAAAWa2V5U3VtUGFpZEFtb3VudFByZWZpeAIAAAALcGFpZEFtb3VudCAAAAAAEmtleVN1bUFzc2V0c1ByZWZpeAIAAAAKc3VtQXNzZXRzIAAAAAAVa2V5QWxsb3dBY2NvdW50UHJlZml4AgAAAAZhbGxvdyAAAAAADWtleURpc3RBc3NldHMCAAAABmFzc2V0cwAAAAASa2V5Q29sbGVjdGVkQW1vdW50AgAAAAZhbW91bnQAAAAACWtleUlzc3VlcgIAAAAGaXNzdWVyAAAAABB3aGl0ZWxpc3RBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUsuKbPrsJRAk2hWi4lia9MhdtRoVBFCA1AAAAABRkQXBwV2hpdGVsaXN0QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBVH5lAl9bJ8Vtb//sWNjcLPfPPCj/xOavFgAAAAAJcEFkZHJlc3MxCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzTkNWRGFUMUFTYlJkNDJoQlN3NEVHNm9qR1ZSR3R2TWl6MQAAAAAJcEFkZHJlc3MyCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzTXMya1RBeGRyY1hEeHdlZGZiTmpTaTZld0dDVXF0M2hlWgAAAAAJcEFkZHJlc3MzCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzTjZvZ25tN3huUVNGaW93blMxRGYxTGFjSlVRWHZmREZMZQAAAAAJcEFkZHJlc3M0CQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzTXRWQ21OOU1aYldmOXF4aU1Gb0VQQnJkYzJmTHAzU3Z1QwAAAAAJcEFkZHJlc3M1CQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzTXVXRzhnc1RLNFJRQnNtOTdzTUN1VVhXOTlKdlJ4d1lTZwAAAAADdmVyAgAAAA0zLjAuMS10ZXN0bmV0AAAAAAp2YWxpZFN0YXRlAAAAAAAAAAPoAQAAAA5nZXRDdXJyZW50VGltZQAAAAAEAAAACWJsb2NrSW5mbwkBAAAABXZhbHVlAAAAAQkAA+0AAAABBQAAAAZoZWlnaHQJAABpAAAAAggFAAAACWJsb2NrSW5mbwAAAAl0aW1lc3RhbXAAAAAAAAAAA+gBAAAAH2dldEludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIAAAACAAAAB2lzV2F2ZXMAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAHaXNXYXZlcwcFAAAAB2Fzc2V0SWQFAAAABHVuaXQBAAAAD2dldEN1cnJlbnRQcmljZQAAAAADCQAAZgAAAAIFAAAAEWluY3JlYXNlUHJpY2VUaW1lCQEAAAAOZ2V0Q3VycmVudFRpbWUAAAAABQAAAAVwcmljZQUAAAALcHJpY2VTZWNvbmQBAAAACWdldEFtb3VudAAAAAEAAAADa2V5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CQAAaQAAAAIJAABoAAAAAgUAAAAHcGF5bWVudAUAAAATYXNzZXREZWNpbWFsc09mZnNldAUAAAAMY3VycmVudFByaWNlBAAAABJtaW5QYXltZW50SW5Bc3NldHMJAABpAAAAAgkAAGgAAAACBQAAAAptaW5QYXltZW50BQAAABNhc3NldERlY2ltYWxzT2Zmc2V0BQAAAAxjdXJyZW50UHJpY2UDAwMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACBQAAAA1hY2NvdW50QXNzZXRzBQAAAAp0b2tlbnNDYWxjBgkAAGYAAAACBQAAABJtaW5QYXltZW50SW5Bc3NldHMFAAAACnRva2Vuc0NhbGMGAwkBAAAAAiE9AAAAAgUAAAAKdG9rZW5zQ2FsYwUAAAANYWNjb3VudEFzc2V0cwkAAGYAAAACBQAAAAp0b2tlbnNDYWxjCQAAZQAAAAIFAAAADWFjY291bnRBc3NldHMFAAAAEm1pblBheW1lbnRJbkFzc2V0cwcJAAACAAAAAQIAAAAZSW5jb3JyZWN0IHBheW1lbnQgYW1vdW50LgQAAAARbmV3SW52ZXN0b3JBbW91bnQJAABkAAAAAgkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5BQAAAAdwYXltZW50BAAAABFuZXdJbnZlc3RvckFzc2V0cwkAAGQAAAACCQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABJrZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAACnRva2Vuc0NhbGMEAAAAEG5ld0FjY291bnRBc3NldHMJAABlAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAAKdG9rZW5zQ2FsYwQAAAAQbmV3QWNjb3VudEFtb3VudAkAAGQAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAAdwYXltZW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQUAAAARbmV3SW52ZXN0b3JBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5BQAAABFuZXdJbnZlc3RvckFzc2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAANa2V5RGlzdEFzc2V0cwUAAAAQbmV3QWNjb3VudEFzc2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASa2V5Q29sbGVjdGVkQW1vdW50BQAAABBuZXdBY2NvdW50QW1vdW50BQAAAANuaWwAAAABaQEAAAAKd2l0aGRyYXdhbAAAAAAEAAAACmRBcHBTdGF0dXMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MJAAQlAAAAAQUAAAAEdGhpcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAwkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAAACQAAAgAAAAECAAAAQldpdGhkcmF3YWxzIGFyZSBub3QgYXZhaWxhYmxlIHVudGlsIHRoZSBpc3N1ZXIgcGFzc2VzIHZlcmlmaWNhdGlvbgQAAAAKY3VycmVudEtleQkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQQAAAAVY3VycmVudEludmVzdG9yQW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAADWFjY291bnRBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABBQAAABJrZXlDb2xsZWN0ZWRBbW91bnQEAAAADWFjY291bnRBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABBQAAAA1rZXlEaXN0QXNzZXRzBAAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyCQEAAAAfZ2V0SW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgAAAAIFAAAAGGludmVzdG1lbnRBc3NldElkSXNXYXZlcwUAAAARaW52ZXN0bWVudEFzc2V0SWQDCQEAAAABIQAAAAEJAQAAAAhoYXNFbmRlZAAAAAEFAAAADWFjY291bnRBbW91bnQJAAACAAAAAQkAASwAAAACAgAAABNUaGUgVG9rZW5zYWxlIGVuZHMgCQABpAAAAAEFAAAAB2VuZFRpbWUDAwMJAAAAAAAAAgUAAAAKY3VycmVudEtleQUAAAASb3duZXJBZGRyZXNzU3RyaW5nCQAAZwAAAAIFAAAADWFjY291bnRBbW91bnQFAAAADXNvZnRDYXBBbW91bnQHCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMAAAAAAAAAAAEHBAAAABdjdXJyZW50SXNzdWVyUGFpZEFzc2V0cwkBAAAACWdldEFtb3VudAAAAAEFAAAACWtleUlzc3VlcgMJAAAAAAAAAgUAAAAXY3VycmVudElzc3VlclBhaWRBc3NldHMAAAAAAAAAAAAJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAlrZXlJc3N1ZXIJAABkAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAAMaXNzdWVyQXNzZXRzBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzCQAAZAAAAAIFAAAADWFjY291bnRBc3NldHMFAAAADGlzc3VlckFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADWFjY291bnRBbW91bnQFAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIFAAAAA25pbAkAAAIAAAABAgAAACdUaGUgaXNzdWVyIGhhcyBhbHJlYWR5IHRha2VuIGl0cyBzaGFyZSEDCQAAAAAAAAIFAAAAFWN1cnJlbnRJbnZlc3RvckFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAABBEb24ndCBoYXZl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", "chainId": 84, "height": 815408, "spentComplexity": 0 } View: original | compacted Prev: 6oudP59rn4cFwKixB2Eehff4eqBKxixFknKFVNhoXmaC Next: 655ACrgjKXUfWh8RfeLYK1dsAFa1kdHvXRr9kts6QxTr Diff:
Old | New | Differences | |
---|---|---|---|
63 | 63 | ||
64 | 64 | let pAddress5 = addressFromString("3MuWG8gsTK4RQBsm97sMCuUXW99JvRxwYSg") | |
65 | 65 | ||
66 | - | let ver = "3.0. | |
66 | + | let ver = "3.0.1-testnet" | |
67 | 67 | ||
68 | 68 | let validState = 1000 | |
69 | 69 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let issuerAssetId = base58'KpqvTUB4jxdaecGwEHybYJaZjzFBHS4b8GfZVLZYtEg' | |
5 | 5 | ||
6 | 6 | let investmentAssetId = base58'WAVES' | |
7 | 7 | ||
8 | 8 | let investmentAssetIdIsWaves = true | |
9 | 9 | ||
10 | 10 | let ownerPublicKey = base58'ifymJwDoo2rGp68UjFsLK8LvW5X4frvuQCYxzd7UAB2' | |
11 | 11 | ||
12 | 12 | let ownerAddress = addressFromPublicKey(ownerPublicKey) | |
13 | 13 | ||
14 | 14 | let ownerAddressString = "3N4XFoHHQMATJ9FgZUb6LTvdcD23qNUiV4M" | |
15 | 15 | ||
16 | 16 | let assetDecimalsOffset = 1 | |
17 | 17 | ||
18 | 18 | let sumAccountAssets = 150 | |
19 | 19 | ||
20 | 20 | let issuerAssets = 50 | |
21 | 21 | ||
22 | 22 | let startTime = 1576486800 | |
23 | 23 | ||
24 | 24 | let increasePriceTime = 1577534400 | |
25 | 25 | ||
26 | 26 | let endTime = 1577534400 | |
27 | 27 | ||
28 | 28 | let price = 10000000 | |
29 | 29 | ||
30 | 30 | let priceSecond = 10000000 | |
31 | 31 | ||
32 | 32 | let softCapAmount = 1000000000 | |
33 | 33 | ||
34 | 34 | let hardCapAmount = 1500000000 | |
35 | 35 | ||
36 | 36 | let minPayment = 10000000 | |
37 | 37 | ||
38 | 38 | let keySumAmountPrefix = "sumAmount " | |
39 | 39 | ||
40 | 40 | let keySumPaidAmountPrefix = "paidAmount " | |
41 | 41 | ||
42 | 42 | let keySumAssetsPrefix = "sumAssets " | |
43 | 43 | ||
44 | 44 | let keyAllowAccountPrefix = "allow " | |
45 | 45 | ||
46 | 46 | let keyDistAssets = "assets" | |
47 | 47 | ||
48 | 48 | let keyCollectedAmount = "amount" | |
49 | 49 | ||
50 | 50 | let keyIssuer = "issuer" | |
51 | 51 | ||
52 | 52 | let whitelistAddress = Address(base58'3N6DwWxT82nGJUwBwd7L514r2u71gr7WhwJ') | |
53 | 53 | ||
54 | 54 | let dAppWhitelistAddress = Address(base58'3N1SPvLZgv6FMfe5WNUtnPzt3okYxcJhYnR') | |
55 | 55 | ||
56 | 56 | let pAddress1 = addressFromString("3NCVDaT1ASbRd42hBSw4EG6ojGVRGtvMiz1") | |
57 | 57 | ||
58 | 58 | let pAddress2 = addressFromString("3Ms2kTAxdrcXDxwedfbNjSi6ewGCUqt3heZ") | |
59 | 59 | ||
60 | 60 | let pAddress3 = addressFromString("3N6ognm7xnQSFiownS1Df1LacJUQXvfDFLe") | |
61 | 61 | ||
62 | 62 | let pAddress4 = addressFromString("3MtVCmN9MZbWf9qxiMFoEPBrdc2fLp3SvuC") | |
63 | 63 | ||
64 | 64 | let pAddress5 = addressFromString("3MuWG8gsTK4RQBsm97sMCuUXW99JvRxwYSg") | |
65 | 65 | ||
66 | - | let ver = "3.0. | |
66 | + | let ver = "3.0.1-testnet" | |
67 | 67 | ||
68 | 68 | let validState = 1000 | |
69 | 69 | ||
70 | 70 | func getCurrentTime () = { | |
71 | 71 | let blockInfo = value(blockInfoByHeight(height)) | |
72 | 72 | (blockInfo.timestamp / 1000) | |
73 | 73 | } | |
74 | 74 | ||
75 | 75 | ||
76 | 76 | func getInvestmentAssetIdForTransfer (isWaves,assetId) = if ((isWaves == false)) | |
77 | 77 | then assetId | |
78 | 78 | else unit | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func getCurrentPrice () = if ((increasePriceTime > getCurrentTime())) | |
82 | 82 | then price | |
83 | 83 | else priceSecond | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func getAmount (key) = match getInteger(this, key) { | |
87 | 87 | case a: Int => | |
88 | 88 | a | |
89 | 89 | case _ => | |
90 | 90 | 0 | |
91 | 91 | } | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func hasStarted () = (startTime > getCurrentTime()) | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func hasEnded (sumAmount) = if ((getCurrentTime() > endTime)) | |
98 | 98 | then true | |
99 | 99 | else (sumAmount >= hardCapAmount) | |
100 | 100 | ||
101 | 101 | ||
102 | 102 | func getPayment (i) = match i.payment { | |
103 | 103 | case p: AttachedPayment => | |
104 | 104 | let isPaymentOk = match p.assetId { | |
105 | 105 | case assetId: ByteVector => | |
106 | 106 | if (!(investmentAssetIdIsWaves)) | |
107 | 107 | then (assetId == investmentAssetId) | |
108 | 108 | else false | |
109 | 109 | case _ => | |
110 | 110 | (investmentAssetIdIsWaves == true) | |
111 | 111 | } | |
112 | 112 | if (isPaymentOk) | |
113 | 113 | then if ((assetDecimalsOffset == 1)) | |
114 | 114 | then if (((p.amount % price) == 0)) | |
115 | 115 | then p.amount | |
116 | 116 | else throw("payment amount must be a multiple of token price") | |
117 | 117 | else p.amount | |
118 | 118 | else throw("Invalid asset ID of investment") | |
119 | 119 | case _ => | |
120 | 120 | throw("Payment must be attached") | |
121 | 121 | } | |
122 | 122 | ||
123 | 123 | ||
124 | 124 | @Callable(i) | |
125 | 125 | func deposit () = { | |
126 | 126 | let currentPrice = getCurrentPrice() | |
127 | 127 | let accountAmount = getAmount(keyCollectedAmount) | |
128 | 128 | if (hasStarted()) | |
129 | 129 | then throw(((("The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime))) | |
130 | 130 | else if (hasEnded(accountAmount)) | |
131 | 131 | then throw("The required amount has already been accumulated. If you are an investor, you can withdraw your funds.") | |
132 | 132 | else { | |
133 | 133 | let payment = getPayment(i) | |
134 | 134 | let currentKey = toBase58String(i.caller.bytes) | |
135 | 135 | let isAccountAllow = match getInteger(whitelistAddress, currentKey) { | |
136 | 136 | case a: Int => | |
137 | 137 | a | |
138 | 138 | case _ => | |
139 | 139 | -255 | |
140 | 140 | } | |
141 | 141 | if ((validState > isAccountAllow)) | |
142 | 142 | then throw("Your account has no right to send funds.") | |
143 | 143 | else { | |
144 | 144 | let accountAssets = match getInteger(this, keyDistAssets) { | |
145 | 145 | case a: Int => | |
146 | 146 | a | |
147 | 147 | case _ => | |
148 | 148 | sumAccountAssets | |
149 | 149 | } | |
150 | 150 | let tokensCalc = ((payment * assetDecimalsOffset) / currentPrice) | |
151 | 151 | let minPaymentInAssets = ((minPayment * assetDecimalsOffset) / currentPrice) | |
152 | 152 | if (if (if ((0 > (accountAssets - tokensCalc))) | |
153 | 153 | then true | |
154 | 154 | else (minPaymentInAssets > tokensCalc)) | |
155 | 155 | then true | |
156 | 156 | else if ((tokensCalc != accountAssets)) | |
157 | 157 | then (tokensCalc > (accountAssets - minPaymentInAssets)) | |
158 | 158 | else false) | |
159 | 159 | then throw("Incorrect payment amount.") | |
160 | 160 | else { | |
161 | 161 | let newInvestorAmount = (getAmount((keySumAmountPrefix + currentKey)) + payment) | |
162 | 162 | let newInvestorAssets = (getAmount((keySumAssetsPrefix + currentKey)) + tokensCalc) | |
163 | 163 | let newAccountAssets = (accountAssets - tokensCalc) | |
164 | 164 | let newAccountAmount = (accountAmount + payment) | |
165 | 165 | WriteSet([DataEntry((keySumAmountPrefix + currentKey), newInvestorAmount), DataEntry((keySumAssetsPrefix + currentKey), newInvestorAssets), DataEntry(keyDistAssets, newAccountAssets), DataEntry(keyCollectedAmount, newAccountAmount)]) | |
166 | 166 | } | |
167 | 167 | } | |
168 | 168 | } | |
169 | 169 | } | |
170 | 170 | ||
171 | 171 | ||
172 | 172 | ||
173 | 173 | @Callable(i) | |
174 | 174 | func withdrawal () = { | |
175 | 175 | let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) { | |
176 | 176 | case a: Int => | |
177 | 177 | a | |
178 | 178 | case _ => | |
179 | 179 | 0 | |
180 | 180 | } | |
181 | 181 | if ((dAppStatus == 0)) | |
182 | 182 | then throw("Withdrawals are not available until the issuer passes verification") | |
183 | 183 | else { | |
184 | 184 | let currentKey = toBase58String(i.caller.bytes) | |
185 | 185 | let currentInvestorAssets = getAmount((keySumAssetsPrefix + currentKey)) | |
186 | 186 | let currentInvestorAmount = getAmount((keySumAmountPrefix + currentKey)) | |
187 | 187 | let accountAmount = getAmount(keyCollectedAmount) | |
188 | 188 | let accountAssets = getAmount(keyDistAssets) | |
189 | 189 | let investmentAssetIdForTransfer = getInvestmentAssetIdForTransfer(investmentAssetIdIsWaves, investmentAssetId) | |
190 | 190 | if (!(hasEnded(accountAmount))) | |
191 | 191 | then throw(("The Tokensale ends " + toString(endTime))) | |
192 | 192 | else if (if (if ((currentKey == ownerAddressString)) | |
193 | 193 | then (accountAmount >= softCapAmount) | |
194 | 194 | else false) | |
195 | 195 | then (dAppStatus == 1) | |
196 | 196 | else false) | |
197 | 197 | then { | |
198 | 198 | let currentIssuerPaidAssets = getAmount(keyIssuer) | |
199 | 199 | if ((currentIssuerPaidAssets == 0)) | |
200 | 200 | then ScriptResult(WriteSet([DataEntry(keyIssuer, (accountAssets + issuerAssets))]), TransferSet([ScriptTransfer(ownerAddress, (accountAssets + issuerAssets), issuerAssetId), ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer)])) | |
201 | 201 | else throw("The issuer has already taken its share!") | |
202 | 202 | } | |
203 | 203 | else if ((currentInvestorAmount == 0)) | |
204 | 204 | then throw("Don't have money") | |
205 | 205 | else if (if ((accountAmount >= softCapAmount)) | |
206 | 206 | then (dAppStatus == 1) | |
207 | 207 | else false) | |
208 | 208 | then ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(i.caller, currentInvestorAssets, issuerAssetId)])) | |
209 | 209 | else ScriptResult(WriteSet([DataEntry((keySumAmountPrefix + currentKey), 0), DataEntry((keySumAssetsPrefix + currentKey), 0)]), TransferSet([ScriptTransfer(i.caller, currentInvestorAmount, investmentAssetIdForTransfer)])) | |
210 | 210 | } | |
211 | 211 | } | |
212 | 212 | ||
213 | 213 | ||
214 | 214 | @Verifier(tx) | |
215 | 215 | func verify () = match tx { | |
216 | 216 | case tx: SetAssetScriptTransaction|SetScriptTransaction => | |
217 | 217 | let pKey1Signed = if (isDefined(getInteger(extract(pAddress1), toBase58String(tx.id)))) | |
218 | 218 | then 1 | |
219 | 219 | else 0 | |
220 | 220 | let pKey2Signed = if (isDefined(getInteger(extract(pAddress2), toBase58String(tx.id)))) | |
221 | 221 | then 1 | |
222 | 222 | else 0 | |
223 | 223 | let pKey3Signed = if (isDefined(getInteger(extract(pAddress3), toBase58String(tx.id)))) | |
224 | 224 | then 1 | |
225 | 225 | else 0 | |
226 | 226 | let pKey4Signed = if (isDefined(getInteger(extract(pAddress4), toBase58String(tx.id)))) | |
227 | 227 | then 1 | |
228 | 228 | else 0 | |
229 | 229 | let pKey5Signed = if (isDefined(getInteger(extract(pAddress5), toBase58String(tx.id)))) | |
230 | 230 | then 1 | |
231 | 231 | else 0 | |
232 | 232 | (((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) >= 3) | |
233 | 233 | case _ => | |
234 | 234 | false | |
235 | 235 | } | |
236 | 236 |
github/deemru/w8io/026f985 49.08 ms ◑