tx · FrCah9u5QuusBdnC7SkYinj1bRHNMCrHx5g564GJxFmo

3MsicVGfoyHN3w8qzecEYqUneR5E2fRh4EW:  -0.05000000 Waves

2019.08.23 17:38 [643909] smart account 3MsicVGfoyHN3w8qzecEYqUneR5E2fRh4EW > SELF 0.00000000 Waves

{ "type": 13, "id": "FrCah9u5QuusBdnC7SkYinj1bRHNMCrHx5g564GJxFmo", "fee": 5000000, "feeAssetId": null, "timestamp": 1566571066678, "version": 1, "sender": "3MsicVGfoyHN3w8qzecEYqUneR5E2fRh4EW", "senderPublicKey": "8DNJr6uN56k9pNKabCEi9eJCxCEjqKH4qUNJaEYasS7j", "proofs": [ "2yKLehiYziBbNYuu4MdCerFNtMEn9vMCgaPTKGfNYXisNbDpTzj8QWr99munVu2chofHWsNMNAdYHGo6fzpBrVxv" ], "script": "base64:AAIDAAAAAAAAAAAAAAAcAAAAAA1PUkFDTEVBRERSRVNTAgAAACMzTXlnYnBKRjdVZ3BkMU5SbWNkUmZvazhGeVBuUldqUlNrNgAAAAAMT1JBQ0xFUFVCS0VZAgAAACw4RE5KcjZ1TjU2azlwTkthYkNFaTllSkN4Q0VqcUtINHFVTkphRVlhc1M3agAAAAAXZnVuZHJhaXNlVGFyZ2V0V2F2ZXNLZXkCAAAAFGZ1bmRyYWlzZVRhcmdldFdhdmVzAAAAABdmdW5kcmFpc2VFeHBpcnlCbG9ja0tleQIAAAAUZnVuZHJhaXNlRXhwaXJ5QmxvY2sAAAAAEmZ1bmRyYWlzZVN0YXR1c0tleQIAAAAPZnVuZHJhaXNlU3RhdHVzAAAAABBwYXlPdXRBZGRyZXNzS2V5AgAAAA1wYXlPdXRBZGRyZXNzAAAAABZwYXlPdXRBZGRyZXNzUHViS2V5S2V5AgAAABNwYXlPdXRBZGRyZXNzUHViS2V5AAAAABpvd25lclNtYXJ0QWNjb3VudFB1YktleUtleQIAAAAXb3duZXJTbWFydEFjY291bnRQdWJLZXkAAAAAGG9yYWNsZUZ1bmRyYWlzZVN0YXR1c0tleQkAASwAAAACCQAEJQAAAAEFAAAABHRoaXMCAAAAB19zdGF0dXMAAAAABkFDVElWRQIAAAAGYWN0aXZlAAAAAAdGTklTSEVEAgAAAAhmaW5pc2hlZAAAAAAJQ09NUExFVEVEAgAAAAljb21wbGV0ZWQAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAAHQVBST1ZFRAIAAAAIYXBwcm92ZWQAAAAABE5PTkUCAAAABG5vbmUBAAAAC2dldE51bUJ5S2V5AAAAAQAAAANrZXkEAAAAA251bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQAAAAAAAAAAAAUAAAADbnVtAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAANzdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMFAAAABE5PTkUFAAAAA3N0cgEAAAAQZ2V0T3JhY2xlQWRkcmVzcwAAAAAJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAANT1JBQ0xFQUREUkVTUwEAAAAcZ2V0RnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQAAAAAEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAQZ2V0T3JhY2xlQWRkcmVzcwAAAAAFAAAAGG9yYWNsZUZ1bmRyYWlzZVN0YXR1c0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAAAROT05FBQAAAANzdHIBAAAAFGdldEFkZHJlc3NCYWxhbmNlS2V5AAAAAQAAAAdhZGRyZXNzCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACF9iYWxhbmNlAQAAABZnZXRBZGRyZXNzQmFsYW5jZVZhbHVlAAAAAQAAAAdhZGRyZXNzCQEAAAALZ2V0TnVtQnlLZXkAAAABCQEAAAAUZ2V0QWRkcmVzc0JhbGFuY2VLZXkAAAABBQAAAAdhZGRyZXNzAAAAABRmdW5kcmFpc2VUYXJnZXRXYXZlcwkBAAAAC2dldE51bUJ5S2V5AAAAAQUAAAAXZnVuZHJhaXNlVGFyZ2V0V2F2ZXNLZXkAAAAAFGZ1bmRyYWlzZUV4cGlyeUJsb2NrCQEAAAALZ2V0TnVtQnlLZXkAAAABBQAAABdmdW5kcmFpc2VFeHBpcnlCbG9ja0tleQAAAAAPZnVuZHJhaXNlU3RhdHVzCQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAABJmdW5kcmFpc2VTdGF0dXNLZXkAAAAADXBheU91dEFkZHJlc3MJAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAAEHBheU91dEFkZHJlc3NLZXkAAAAAE3BheU91dEFkZHJlc3NQdWJLZXkJAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAAFnBheU91dEFkZHJlc3NQdWJLZXlLZXkAAAAAF293bmVyU21hcnRBY2NvdW50UHViS2V5CQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAABpvd25lclNtYXJ0QWNjb3VudFB1YktleUtleQAAAAAZZnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQkBAAAAHGdldEZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUAAAAAAAAABAAAAANpbnYBAAAAEnNldEZ1bmRyYWlzZVN0YXR1cwAAAAEAAAAGc3RhdHVzBAAAAA1jYWxsZXJBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzAwMJAQAAAAIhPQAAAAIFAAAAGWZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUFAAAAB0FQUk9WRUQJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MJAQAAABBnZXRPcmFjbGVBZGRyZXNzAAAAAAcJAAACAAAAAQIAAABQRnVuZHJhaXNlIGlzIG5vdCBhcHByb3ZlZCBieSBvcmFjbGUuIE5vdyBvbmx5IG9yYWNsZSBjYW4gY2hhbmdlIGZ1bmRyaXNlIHN0YXR1cy4DAwkBAAAAAiE9AAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdGhpcwkBAAAAAiE9AAAAAgUAAAANY2FsbGVyQWRkcmVzcwkBAAAAEGdldE9yYWNsZUFkZHJlc3MAAAAABwkAAAIAAAABAgAAADFPbmx5IE93bmVyIG9yIE9yYWNsZSBjYW4gY2hhbmdlIEZ1bmRyYWlzZSBzdGF0dXMuAwMDCQEAAAACIT0AAAACBQAAAAZzdGF0dXMFAAAABkFDVElWRQYJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAHRk5JU0hFRAYJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAIQ0FOQ0VMRUQJAAACAAAAAQkAASwAAAACAgAAABBJbnZhbGlkIHN0YXR1czogBQAAAAZzdGF0dXMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEmZ1bmRyYWlzZVN0YXR1c0tleQUAAAAGc3RhdHVzBQAAAANuaWwAAAADaW52AQAAABt3aXRoZHJhd0FuZENvbXBsZXRlRnVuZHJpc2UAAAAAAwkBAAAAAiE9AAAAAgUAAAAZZnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQUAAAAHQVBST1ZFRAkAAAIAAAABAgAAACRGdW5kcmFpc2UgaXMgbm90IGFwcHJvdmVkIGJ5IG9yYWNsZS4EAAAAB2JhbGFuY2UJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzBAAAAA1jYWxsZXJBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzAwMJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHRoaXMJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MJAQAAABBnZXRPcmFjbGVBZGRyZXNzAAAAAAcJAAACAAAAAQIAAAAxT25seSBPd25lciBvciBPcmFjbGUgbWF5IGluaXRpYXRlIGZ1bmRzIHdpdGhkcmF3LgMJAQAAAAIhPQAAAAIFAAAAD2Z1bmRyYWlzZVN0YXR1cwUAAAAHRk5JU0hFRAkAAAIAAAABAgAAABlDb21wYWlnbiBpcyBub3QgZmluaXNoZWQuAwkAAGYAAAACBQAAABRmdW5kcmFpc2VFeHBpcnlCbG9jawUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgIAAAA1Q29tcGFpZ24gaXMgbm90IGZpbmlzaGVkLiBQbGVhc2Ugd2FpdCBmb3IgYmxvY2sgTm8uOiAJAAGkAAAAAQUAAAAUZnVuZHJhaXNlRXhwaXJ5QmxvY2sDCQAAZgAAAAIFAAAAB2JhbGFuY2UFAAAAFGZ1bmRyYWlzZVRhcmdldFdhdmVzCQAAAgAAAAECAAAANU5vdCBlbm91Z2ggYmFsYW5jZS4gRnVuZHJhaXNlIHRhcmdldCB3YXMgbm90IHJlYWNoZWQuAwkAAGcAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAE05vdCBlbm91Z2ggYmFsYW5jZS4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9mdW5kcmFpc2VTdGF0dXMFAAAACUNPTVBMRVRFRAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAANcGF5T3V0QWRkcmVzcwUAAAAHYmFsYW5jZQUAAAAEdW5pdAUAAAADbmlsAAAAA2ludgEAAAAGZG9uYXRlAAAAAAMJAQAAAAIhPQAAAAIFAAAAGWZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUFAAAAB0FQUk9WRUQJAAACAAAAAQIAAAA7RnVuZHJhaXNlIGlzIG5vdCBhcHByb3ZlZCBieSBvcmFjbGUuIERvbmF0aW9uIGlzIGltcG9zaWJsZS4DCQEAAAACIT0AAAACBQAAAA9mdW5kcmFpc2VTdGF0dXMFAAAABkFDVElWRQkAAAIAAAABAgAAAC9GdW5kcmFpc2UgaXMgbm90IGFjdGl2ZS4gRG9uYXRpb24gaXMgaW1wb3NpYmxlLgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAABRmdW5kcmFpc2VFeHBpcnlCbG9jawkAAAIAAAABAgAAAFRGdW5kcmFpc2UgY29tcGFpZ24gaXMgZmluaXNoZWQuIEN1cnJlbnQgYmxvY2sgaXMgaGlnaGVyIHRoZW4gZnVuZHJhaXNlIGV4cGlyeSBibG9jay4EAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAArT25seSBkb25hdGlvbnMgaW4gV0FWRVMgY3VycmVudGx5IGF2YWxpYmxlLgMJAABnAAAAAgAAAAAAAAAAAAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAECAAAAJFBsZWFzZSBzZW5kIHBvc2l0aXZlIHBheW1lbnQgYW1vdW50LgQAAAATY2FsbGVyQWRkcmVzc1N0cmluZwkAAlgAAAABCAgFAAAAA2ludgAAAAZjYWxsZXIAAAAFYnl0ZXMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRBZGRyZXNzQmFsYW5jZUtleQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAABkAAAAAgkBAAAAFmdldEFkZHJlc3NCYWxhbmNlVmFsdWUAAAABBQAAABNjYWxsZXJBZGRyZXNzU3RyaW5nCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAA25pbAAAAANpbnYBAAAADnJldHVybkRvbmF0aW9uAAAAAAMJAQAAAAIhPQAAAAIFAAAAD2Z1bmRyYWlzZVN0YXR1cwUAAAAIQ0FOQ0VMRUQJAAACAAAAAQIAAABHUmV0dXJuIGlzIG5vdCBhdmFsaWJsZSB3aGlsZSBmdW5kcmFpc2Ugc3RhdHVzIGlzIG5vdCBzZXQgdG8gImNhbmNlbGVkIi4EAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1jYWxsZXJCYWxhbmNlCQEAAAAWZ2V0QWRkcmVzc0JhbGFuY2VWYWx1ZQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADWNhbGxlckJhbGFuY2UJAAACAAAAAQkAASwAAAACAgAAAD5ObyBwb3NpdGl2ZSBiYWxhbmNlLiBSZXR1cm4gaXMgbm90IHBvc3NpYmxlIGZvciB5b3VyIGFkZHJlc3M6IAUAAAATY2FsbGVyQWRkcmVzc1N0cmluZwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRBZGRyZXNzQmFsYW5jZUtleQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcFAAAADWNhbGxlckJhbGFuY2UFAAAABHVuaXQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAW0FAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABBJc3N1ZVRyYW5zYWN0aW9uBAAAAAFpBQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAASUmVpc3N1ZVRyYW5zYWN0aW9uBAAAAAFyBQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAAFpBQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBAAAAAFkBQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAZsAAAABBQAAAAxPUkFDTEVQVUJLRVkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAAFzBQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAZsAAAABBQAAAAxPUkFDTEVQVUJLRVkJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACQABmwAAAAEFAAAADE9SQUNMRVBVQktFWXZcJS4=", "chainId": 84, "height": 643909, "spentComplexity": 0 } View: original | compacted Prev: 79QW9gsYREjRFFL8jioETBFtakMMtrXTHSLmfkoAp4Fc Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
2-{-# CONTENT_TYPE EXPRESSION #-}
3-match tx {
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let ORACLEADDRESS = "3MygbpJF7Ugpd1NRmcdRfok8FyPnRWjRSk6"
5+
6+let ORACLEPUBKEY = "8DNJr6uN56k9pNKabCEi9eJCxCEjqKH4qUNJaEYasS7j"
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 APROVED = "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(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 != APROVED))
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 true
103+ else (status != FNISHED))
104+ then true
105+ else (status != CANCELED))
106+ then throw(("Invalid status: " + status))
107+ else WriteSet([DataEntry(fundraiseStatusKey, status)])
108+ }
109+
110+
111+
112+@Callable(inv)
113+func withdrawAndCompleteFundrise () = if ((fundraiseStatusFromOracle != APROVED))
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 != APROVED))
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 {
4170 case t: TransferTransaction =>
5171 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], toBytes(ORACLEPUBKEY))
184+ case s: SetScriptTransaction =>
185+ sigVerify(tx.bodyBytes, tx.proofs[0], toBytes(ORACLEPUBKEY))
6186 case _ =>
7- sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
187+ sigVerify(tx.bodyBytes, tx.proofs[0], toBytes(ORACLEPUBKEY))
8188 }
189+

github/deemru/w8io/169f3d6 
290.77 ms