tx · 5rhEHDfuXzqGiad6YZvHQ9Pr8w3ErK4gKxgu5HQ2y7K9

3N3usbvf887o2qW6aLumP1orBQGWacnYB1a:  -0.01000000 Waves

2019.09.15 00:36 [676427] smart account 3N3usbvf887o2qW6aLumP1orBQGWacnYB1a > SELF 0.00000000 Waves

{ "type": 13, "id": "5rhEHDfuXzqGiad6YZvHQ9Pr8w3ErK4gKxgu5HQ2y7K9", "fee": 1000000, "feeAssetId": null, "timestamp": 1568497025290, "version": 1, "sender": "3N3usbvf887o2qW6aLumP1orBQGWacnYB1a", "senderPublicKey": "H87QezUT9qagPDtNo4rQwwjCu4QFM1sn6uwV6KtJ7sn7", "proofs": [ "4sSVxrZFePtka3DgioGkJD6mFZMntj5GRQQBV4Lfxe5U4wzVhmVyZQUXv5FVJzb3Be7GiCJumP3juXptY6GtwuXh" ], "script": "base64:AAIDAAAAAAAAAAAAAAAcAAAAAA1PUkFDTEVBRERSRVNTAQAAABoBVMrkrZpiYGt1DmCqagINax2cgJgTQSMG/QAAAAAMT1JBQ0xFUFVCS0VZAQAAACA76NO+nOR+OR5TEPbtmxfWMXDRNoUEZjTbuldYPBiHXwAAAAAXZnVuZHJhaXNlVGFyZ2V0V2F2ZXNLZXkCAAAAFGZ1bmRyYWlzZVRhcmdldFdhdmVzAAAAABdmdW5kcmFpc2VFeHBpcnlCbG9ja0tleQIAAAAUZnVuZHJhaXNlRXhwaXJ5QmxvY2sAAAAAEmZ1bmRyYWlzZVN0YXR1c0tleQIAAAAPZnVuZHJhaXNlU3RhdHVzAAAAABBwYXlPdXRBZGRyZXNzS2V5AgAAAA1wYXlPdXRBZGRyZXNzAAAAABZwYXlPdXRBZGRyZXNzUHViS2V5S2V5AgAAABNwYXlPdXRBZGRyZXNzUHViS2V5AAAAABpvd25lclNtYXJ0QWNjb3VudFB1YktleUtleQIAAAAXb3duZXJTbWFydEFjY291bnRQdWJLZXkAAAAAGG9yYWNsZUZ1bmRyYWlzZVN0YXR1c0tleQkAASwAAAACCQAEJQAAAAEFAAAABHRoaXMCAAAAB19zdGF0dXMAAAAABkFDVElWRQIAAAAGYWN0aXZlAAAAAAdGTklTSEVEAgAAAAhmaW5pc2hlZAAAAAAJQ09NUExFVEVEAgAAAAljb21wbGV0ZWQAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAAIQVBQUk9WRUQCAAAACGFwcHJvdmVkAAAAAAROT05FAgAAAARub25lAQAAAAtnZXROdW1CeUtleQAAAAEAAAADa2V5BAAAAANudW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWkFAAAAByRtYXRjaDAFAAAAAWkAAAAAAAAAAAAFAAAAA251bQEAAAALZ2V0U3RyQnlLZXkAAAABAAAAA2tleQQAAAADc3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAAAROT05FBQAAAANzdHIBAAAAEGdldE9yYWNsZUFkZHJlc3MAAAAACQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAJYAAAAAQUAAAANT1JBQ0xFQUREUkVTUwEAAAAcZ2V0RnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQAAAAAEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAQZ2V0T3JhY2xlQWRkcmVzcwAAAAAFAAAAGG9yYWNsZUZ1bmRyYWlzZVN0YXR1c0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAAAROT05FBQAAAANzdHIBAAAAFGdldEFkZHJlc3NCYWxhbmNlS2V5AAAAAQAAAAdhZGRyZXNzCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACF9iYWxhbmNlAQAAABZnZXRBZGRyZXNzQmFsYW5jZVZhbHVlAAAAAQAAAAdhZGRyZXNzCQEAAAALZ2V0TnVtQnlLZXkAAAABCQEAAAAUZ2V0QWRkcmVzc0JhbGFuY2VLZXkAAAABBQAAAAdhZGRyZXNzAAAAABRmdW5kcmFpc2VUYXJnZXRXYXZlcwkBAAAAC2dldE51bUJ5S2V5AAAAAQUAAAAXZnVuZHJhaXNlVGFyZ2V0V2F2ZXNLZXkAAAAAFGZ1bmRyYWlzZUV4cGlyeUJsb2NrCQEAAAALZ2V0TnVtQnlLZXkAAAABBQAAABdmdW5kcmFpc2VFeHBpcnlCbG9ja0tleQAAAAAPZnVuZHJhaXNlU3RhdHVzCQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAABJmdW5kcmFpc2VTdGF0dXNLZXkAAAAADXBheU91dEFkZHJlc3MJAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAAEHBheU91dEFkZHJlc3NLZXkAAAAAE3BheU91dEFkZHJlc3NQdWJLZXkJAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAAFnBheU91dEFkZHJlc3NQdWJLZXlLZXkAAAAAF293bmVyU21hcnRBY2NvdW50UHViS2V5CQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAABpvd25lclNtYXJ0QWNjb3VudFB1YktleUtleQAAAAAZZnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQkBAAAAHGdldEZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUAAAAAAAAABAAAAANpbnYBAAAAEnNldEZ1bmRyYWlzZVN0YXR1cwAAAAEAAAAGc3RhdHVzBAAAAA1jYWxsZXJBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzAwMJAQAAAAIhPQAAAAIFAAAAGWZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUFAAAACEFQUFJPVkVECQEAAAACIT0AAAACBQAAAA1jYWxsZXJBZGRyZXNzCQEAAAAQZ2V0T3JhY2xlQWRkcmVzcwAAAAAHCQAAAgAAAAECAAAAUEZ1bmRyYWlzZSBpcyBub3QgYXBwcm92ZWQgYnkgb3JhY2xlLiBOb3cgb25seSBvcmFjbGUgY2FuIGNoYW5nZSBmdW5kcmlzZSBzdGF0dXMuAwMJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHRoaXMJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MJAQAAABBnZXRPcmFjbGVBZGRyZXNzAAAAAAcJAAACAAAAAQIAAAAxT25seSBPd25lciBvciBPcmFjbGUgY2FuIGNoYW5nZSBGdW5kcmFpc2Ugc3RhdHVzLgMDAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZBQ1RJVkUJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAHRk5JU0hFRAcJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAIQ0FOQ0VMRUQHCQAAAgAAAAEJAAEsAAAAAgIAAAAQSW52YWxpZCBzdGF0dXM6IAUAAAAGc3RhdHVzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJmdW5kcmFpc2VTdGF0dXNLZXkFAAAABnN0YXR1cwUAAAADbmlsAAAAA2ludgEAAAAbd2l0aGRyYXdBbmRDb21wbGV0ZUZ1bmRyaXNlAAAAAAMJAQAAAAIhPQAAAAIFAAAAGWZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUFAAAACEFQUFJPVkVECQAAAgAAAAECAAAAJEZ1bmRyYWlzZSBpcyBub3QgYXBwcm92ZWQgYnkgb3JhY2xlLgQAAAAHYmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMEAAAADWNhbGxlckFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkAAlgAAAABCAgFAAAAA2ludgAAAAZjYWxsZXIAAAAFYnl0ZXMDAwkBAAAAAiE9AAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdGhpcwkBAAAAAiE9AAAAAgUAAAANY2FsbGVyQWRkcmVzcwkBAAAAEGdldE9yYWNsZUFkZHJlc3MAAAAABwkAAAIAAAABAgAAADFPbmx5IE93bmVyIG9yIE9yYWNsZSBtYXkgaW5pdGlhdGUgZnVuZHMgd2l0aGRyYXcuAwkBAAAAAiE9AAAAAgUAAAAPZnVuZHJhaXNlU3RhdHVzBQAAAAdGTklTSEVECQAAAgAAAAECAAAAGUNvbXBhaWduIGlzIG5vdCBmaW5pc2hlZC4DCQAAZgAAAAIFAAAAFGZ1bmRyYWlzZUV4cGlyeUJsb2NrBQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACAgAAADVDb21wYWlnbiBpcyBub3QgZmluaXNoZWQuIFBsZWFzZSB3YWl0IGZvciBibG9jayBOby46IAkAAaQAAAABBQAAABRmdW5kcmFpc2VFeHBpcnlCbG9jawMJAABmAAAAAgUAAAAHYmFsYW5jZQUAAAAUZnVuZHJhaXNlVGFyZ2V0V2F2ZXMJAAACAAAAAQIAAAA1Tm90IGVub3VnaCBiYWxhbmNlLiBGdW5kcmFpc2UgdGFyZ2V0IHdhcyBub3QgcmVhY2hlZC4DCQAAZwAAAAIAAAAAAAAAAAAFAAAAB2JhbGFuY2UJAAACAAAAAQIAAAATTm90IGVub3VnaCBiYWxhbmNlLgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD2Z1bmRyYWlzZVN0YXR1cwUAAAAJQ09NUExFVEVEBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA1wYXlPdXRBZGRyZXNzBQAAAAdiYWxhbmNlBQAAAAR1bml0BQAAAANuaWwAAAADaW52AQAAAAZkb25hdGUAAAAAAwkBAAAAAiE9AAAAAgUAAAAZZnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQUAAAAIQVBQUk9WRUQJAAACAAAAAQIAAAA7RnVuZHJhaXNlIGlzIG5vdCBhcHByb3ZlZCBieSBvcmFjbGUuIERvbmF0aW9uIGlzIGltcG9zaWJsZS4DCQEAAAACIT0AAAACBQAAAA9mdW5kcmFpc2VTdGF0dXMFAAAABkFDVElWRQkAAAIAAAABAgAAAC9GdW5kcmFpc2UgaXMgbm90IGFjdGl2ZS4gRG9uYXRpb24gaXMgaW1wb3NpYmxlLgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAABRmdW5kcmFpc2VFeHBpcnlCbG9jawkAAAIAAAABAgAAAFRGdW5kcmFpc2UgY29tcGFpZ24gaXMgZmluaXNoZWQuIEN1cnJlbnQgYmxvY2sgaXMgaGlnaGVyIHRoZW4gZnVuZHJhaXNlIGV4cGlyeSBibG9jay4EAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAArT25seSBkb25hdGlvbnMgaW4gV0FWRVMgY3VycmVudGx5IGF2YWxpYmxlLgMJAABnAAAAAgAAAAAAAAAAAAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAECAAAAJFBsZWFzZSBzZW5kIHBvc2l0aXZlIHBheW1lbnQgYW1vdW50LgQAAAATY2FsbGVyQWRkcmVzc1N0cmluZwkAAlgAAAABCAgFAAAAA2ludgAAAAZjYWxsZXIAAAAFYnl0ZXMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRBZGRyZXNzQmFsYW5jZUtleQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAABkAAAAAgkBAAAAFmdldEFkZHJlc3NCYWxhbmNlVmFsdWUAAAABBQAAABNjYWxsZXJBZGRyZXNzU3RyaW5nCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAA25pbAAAAANpbnYBAAAADnJldHVybkRvbmF0aW9uAAAAAAMJAQAAAAIhPQAAAAIFAAAAD2Z1bmRyYWlzZVN0YXR1cwUAAAAIQ0FOQ0VMRUQJAAACAAAAAQIAAABHUmV0dXJuIGlzIG5vdCBhdmFsaWJsZSB3aGlsZSBmdW5kcmFpc2Ugc3RhdHVzIGlzIG5vdCBzZXQgdG8gImNhbmNlbGVkIi4EAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1jYWxsZXJCYWxhbmNlCQEAAAAWZ2V0QWRkcmVzc0JhbGFuY2VWYWx1ZQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADWNhbGxlckJhbGFuY2UJAAACAAAAAQkAASwAAAACAgAAAD5ObyBwb3NpdGl2ZSBiYWxhbmNlLiBSZXR1cm4gaXMgbm90IHBvc3NpYmxlIGZvciB5b3VyIGFkZHJlc3M6IAUAAAATY2FsbGVyQWRkcmVzc1N0cmluZwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRBZGRyZXNzQmFsYW5jZUtleQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcFAAAADWNhbGxlckJhbGFuY2UFAAAABHVuaXQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAW0FAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABBJc3N1ZVRyYW5zYWN0aW9uBAAAAAFpBQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAASUmVpc3N1ZVRyYW5zYWN0aW9uBAAAAAFyBQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAAFpBQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBAAAAAFkBQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMT1JBQ0xFUFVCS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADE9SQUNMRVBVQktFWQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADE9SQUNMRVBVQktFWdrcg6M=", "chainId": 84, "height": 676427, "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 ORACLEADDRESS = base58'3N8QtDWHjwjE6uuwEXyKf3kRVkC8sjvV8EY'
5+
6+let ORACLEPUBKEY = base58'52ry8CzZRMViqkqG4b491TTqBpcQ3pJ2ryTV63Wze4GN'
7+
8+let fundraiseTargetWavesKey = "fundraiseTargetWaves"
9+
10+let fundraiseExpiryBlockKey = "fundraiseExpiryBlock"
11+
12+let fundraiseStatusKey = "fundraiseStatus"
13+
14+let payOutAddressKey = "payOutAddress"
15+
16+let payOutAddressPubKeyKey = "payOutAddressPubKey"
17+
18+let ownerSmartAccountPubKeyKey = "ownerSmartAccountPubKey"
19+
20+let oracleFundraiseStatusKey = (toString(this) + "_status")
21+
22+let ACTIVE = "active"
23+
24+let FNISHED = "finished"
25+
26+let COMPLETED = "completed"
27+
28+let CANCELED = "canceled"
29+
30+let APPROVED = "approved"
31+
32+let NONE = "none"
33+
34+func getNumByKey (key) = {
35+ let num = match getInteger(this, key) {
36+ case i: Int =>
37+ i
38+ case _ =>
39+ 0
40+ }
41+ num
42+ }
43+
44+
45+func getStrByKey (key) = {
46+ let str = match getString(this, key) {
47+ case s: String =>
48+ s
49+ case _ =>
50+ NONE
51+ }
52+ str
53+ }
54+
55+
56+func getOracleAddress () = addressFromStringValue(toBase58String(ORACLEADDRESS))
57+
58+
59+func getFundraiseStatusFromOracle () = {
60+ let str = match getString(getOracleAddress(), oracleFundraiseStatusKey) {
61+ case s: String =>
62+ s
63+ case _ =>
64+ NONE
65+ }
66+ str
67+ }
68+
69+
70+func getAddressBalanceKey (address) = (address + "_balance")
71+
72+
73+func getAddressBalanceValue (address) = getNumByKey(getAddressBalanceKey(address))
74+
75+
76+let fundraiseTargetWaves = getNumByKey(fundraiseTargetWavesKey)
77+
78+let fundraiseExpiryBlock = getNumByKey(fundraiseExpiryBlockKey)
79+
80+let fundraiseStatus = getStrByKey(fundraiseStatusKey)
81+
82+let payOutAddress = getStrByKey(payOutAddressKey)
83+
84+let payOutAddressPubKey = getStrByKey(payOutAddressPubKeyKey)
85+
86+let ownerSmartAccountPubKey = getStrByKey(ownerSmartAccountPubKeyKey)
87+
88+let fundraiseStatusFromOracle = getFundraiseStatusFromOracle()
89+
90+@Callable(inv)
91+func setFundraiseStatus (status) = {
92+ let callerAddress = addressFromStringValue(toBase58String(inv.caller.bytes))
93+ if (if ((fundraiseStatusFromOracle != APPROVED))
94+ then (callerAddress != getOracleAddress())
95+ else false)
96+ then throw("Fundraise is not approved by oracle. Now only oracle can change fundrise status.")
97+ else if (if ((callerAddress != this))
98+ then (callerAddress != getOracleAddress())
99+ else false)
100+ then throw("Only Owner or Oracle can change Fundraise status.")
101+ else if (if (if ((status != ACTIVE))
102+ then (status != FNISHED)
103+ else false)
104+ then (status != CANCELED)
105+ else false)
106+ then throw(("Invalid status: " + status))
107+ else WriteSet([DataEntry(fundraiseStatusKey, status)])
108+ }
109+
110+
111+
112+@Callable(inv)
113+func withdrawAndCompleteFundrise () = if ((fundraiseStatusFromOracle != APPROVED))
114+ then throw("Fundraise is not approved by oracle.")
115+ else {
116+ let balance = wavesBalance(this)
117+ let callerAddress = addressFromStringValue(toBase58String(inv.caller.bytes))
118+ if (if ((callerAddress != this))
119+ then (callerAddress != getOracleAddress())
120+ else false)
121+ then throw("Only Owner or Oracle may initiate funds withdraw.")
122+ else if ((fundraiseStatus != FNISHED))
123+ then throw("Compaign is not finished.")
124+ else if ((fundraiseExpiryBlock > height))
125+ then throw(("Compaign is not finished. Please wait for block No.: " + toString(fundraiseExpiryBlock)))
126+ else if ((balance > fundraiseTargetWaves))
127+ then throw("Not enough balance. Fundraise target was not reached.")
128+ else if ((0 >= balance))
129+ then throw("Not enough balance.")
130+ else ScriptResult(WriteSet([DataEntry(fundraiseStatus, COMPLETED)]), TransferSet([ScriptTransfer(addressFromStringValue(payOutAddress), balance, unit)]))
131+ }
132+
133+
134+
135+@Callable(inv)
136+func donate () = if ((fundraiseStatusFromOracle != APPROVED))
137+ then throw("Fundraise is not approved by oracle. Donation is imposible.")
138+ else if ((fundraiseStatus != ACTIVE))
139+ then throw("Fundraise is not active. Donation is imposible.")
140+ else if ((height >= fundraiseExpiryBlock))
141+ then throw("Fundraise compaign is finished. Current block is higher then fundraise expiry block.")
142+ else {
143+ let payment = extract(inv.payment)
144+ if (isDefined(payment.assetId))
145+ then throw("Only donations in WAVES currently avalible.")
146+ else if ((0 >= payment.amount))
147+ then throw("Please send positive payment amount.")
148+ else {
149+ let callerAddressString = toBase58String(inv.caller.bytes)
150+ WriteSet([DataEntry(getAddressBalanceKey(callerAddressString), (getAddressBalanceValue(callerAddressString) + payment.amount))])
151+ }
152+ }
153+
154+
155+
156+@Callable(inv)
157+func returnDonation () = if ((fundraiseStatus != CANCELED))
158+ then throw("Return is not avalible while fundraise status is not set to \"canceled\".")
159+ else {
160+ let callerAddressString = toBase58String(inv.caller.bytes)
161+ let callerBalance = getAddressBalanceValue(callerAddressString)
162+ if ((0 >= callerBalance))
163+ then throw(("No positive balance. Return is not possible for your address: " + callerAddressString))
164+ else ScriptResult(WriteSet([DataEntry(getAddressBalanceKey(callerAddressString), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddressString), callerBalance, unit)]))
165+ }
166+
167+
168+@Verifier(tx)
169+func verify () = match tx {
170+ case t: TransferTransaction =>
171+ false
172+ case m: MassTransferTransaction =>
173+ false
174+ case i: IssueTransaction =>
175+ false
176+ case r: ReissueTransaction =>
177+ false
178+ case s: SetAssetScriptTransaction =>
179+ false
180+ case i: InvokeScriptTransaction =>
181+ true
182+ case d: DataTransaction =>
183+ sigVerify(tx.bodyBytes, tx.proofs[0], ORACLEPUBKEY)
184+ case s: SetScriptTransaction =>
185+ sigVerify(tx.bodyBytes, tx.proofs[0], ORACLEPUBKEY)
186+ case _ =>
187+ sigVerify(tx.bodyBytes, tx.proofs[0], ORACLEPUBKEY)
188+}
189+

github/deemru/w8io/873ac7e 
32.81 ms