tx · AwjZf5AK1jnN2mrAsH7RG8vmTLLkUyx4U443RqM9Mf2T 3MsHpTc9RhavTTXWrYrjJ4EGjSsko9MKLvf: -0.01000000 Waves 2019.09.15 12:50 [677179] smart account 3MsHpTc9RhavTTXWrYrjJ4EGjSsko9MKLvf > SELF 0.00000000 Waves
{ "type": 13, "id": "AwjZf5AK1jnN2mrAsH7RG8vmTLLkUyx4U443RqM9Mf2T", "fee": 1000000, "feeAssetId": null, "timestamp": 1568541043558, "version": 1, "sender": "3MsHpTc9RhavTTXWrYrjJ4EGjSsko9MKLvf", "senderPublicKey": "6DbA85bY3CiSwGvwL95PHA9iywnQVNvt2CM1DT6ZAPhz", "proofs": [ "57DwNS3YpWA2pCTp1SFGEhficEjj5k1ncSAKPZqMWPJ2SA74FUrjCnHj7xCuMJh9iZ5mmC25LtABkTNpeUuV4jp7" ], "script": "base64:AAIDAAAAAAAAAAAAAAAcAAAAAA1PUkFDTEVBRERSRVNTAQAAABoBVMrkrZpiYGt1DmCqagINax2cgJgTQSMG/QAAAAAMT1JBQ0xFUFVCS0VZAQAAACA76NO+nOR+OR5TEPbtmxfWMXDRNoUEZjTbuldYPBiHXwAAAAAXZnVuZHJhaXNlVGFyZ2V0V2F2ZXNLZXkCAAAAFGZ1bmRyYWlzZVRhcmdldFdhdmVzAAAAABdmdW5kcmFpc2VFeHBpcnlCbG9ja0tleQIAAAAUZnVuZHJhaXNlRXhwaXJ5QmxvY2sAAAAAEmZ1bmRyYWlzZVN0YXR1c0tleQIAAAAPZnVuZHJhaXNlU3RhdHVzAAAAABBwYXlPdXRBZGRyZXNzS2V5AgAAAA1wYXlPdXRBZGRyZXNzAAAAABZwYXlPdXRBZGRyZXNzUHViS2V5S2V5AgAAABNwYXlPdXRBZGRyZXNzUHViS2V5AAAAABpvd25lclNtYXJ0QWNjb3VudFB1YktleUtleQIAAAAXb3duZXJTbWFydEFjY291bnRQdWJLZXkAAAAAGG9yYWNsZUZ1bmRyYWlzZVN0YXR1c0tleQkAASwAAAACCQAEJQAAAAEFAAAABHRoaXMCAAAAB19zdGF0dXMAAAAABkFDVElWRQIAAAAGYWN0aXZlAAAAAAdGTklTSEVEAgAAAAhmaW5pc2hlZAAAAAAJQ09NUExFVEVEAgAAAAljb21wbGV0ZWQAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAAIQVBQUk9WRUQCAAAACGFwcHJvdmVkAAAAAAROT05FAgAAAARub25lAQAAAAtnZXROdW1CeUtleQAAAAEAAAADa2V5BAAAAANudW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWkFAAAAByRtYXRjaDAFAAAAAWkAAAAAAAAAAAAFAAAAA251bQEAAAALZ2V0U3RyQnlLZXkAAAABAAAAA2tleQQAAAADc3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAAAROT05FBQAAAANzdHIBAAAAEGdldE9yYWNsZUFkZHJlc3MAAAAACQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAJYAAAAAQUAAAANT1JBQ0xFQUREUkVTUwEAAAAcZ2V0RnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQAAAAAEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAQZ2V0T3JhY2xlQWRkcmVzcwAAAAAFAAAAGG9yYWNsZUZ1bmRyYWlzZVN0YXR1c0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAAAROT05FBQAAAANzdHIBAAAAFGdldEFkZHJlc3NCYWxhbmNlS2V5AAAAAQAAAAdhZGRyZXNzCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACF9iYWxhbmNlAQAAABZnZXRBZGRyZXNzQmFsYW5jZVZhbHVlAAAAAQAAAAdhZGRyZXNzCQEAAAALZ2V0TnVtQnlLZXkAAAABCQEAAAAUZ2V0QWRkcmVzc0JhbGFuY2VLZXkAAAABBQAAAAdhZGRyZXNzAAAAABRmdW5kcmFpc2VUYXJnZXRXYXZlcwkBAAAAC2dldE51bUJ5S2V5AAAAAQUAAAAXZnVuZHJhaXNlVGFyZ2V0V2F2ZXNLZXkAAAAAFGZ1bmRyYWlzZUV4cGlyeUJsb2NrCQEAAAALZ2V0TnVtQnlLZXkAAAABBQAAABdmdW5kcmFpc2VFeHBpcnlCbG9ja0tleQAAAAAPZnVuZHJhaXNlU3RhdHVzCQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAABJmdW5kcmFpc2VTdGF0dXNLZXkAAAAADXBheU91dEFkZHJlc3MJAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAAEHBheU91dEFkZHJlc3NLZXkAAAAAE3BheU91dEFkZHJlc3NQdWJLZXkJAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAAFnBheU91dEFkZHJlc3NQdWJLZXlLZXkAAAAAF293bmVyU21hcnRBY2NvdW50UHViS2V5CQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAABpvd25lclNtYXJ0QWNjb3VudFB1YktleUtleQAAAAAZZnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQkBAAAAHGdldEZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUAAAAAAAAABAAAAANpbnYBAAAAEnNldEZ1bmRyYWlzZVN0YXR1cwAAAAEAAAAGc3RhdHVzBAAAAA1jYWxsZXJBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzAwMJAQAAAAIhPQAAAAIFAAAAGWZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUFAAAACEFQUFJPVkVECQEAAAACIT0AAAACBQAAAA1jYWxsZXJBZGRyZXNzCQEAAAAQZ2V0T3JhY2xlQWRkcmVzcwAAAAAHCQAAAgAAAAECAAAAUEZ1bmRyYWlzZSBpcyBub3QgYXBwcm92ZWQgYnkgb3JhY2xlLiBOb3cgb25seSBvcmFjbGUgY2FuIGNoYW5nZSBmdW5kcmlzZSBzdGF0dXMuAwMJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHRoaXMJAQAAAAIhPQAAAAIFAAAADWNhbGxlckFkZHJlc3MJAQAAABBnZXRPcmFjbGVBZGRyZXNzAAAAAAcJAAACAAAAAQIAAAAxT25seSBPd25lciBvciBPcmFjbGUgY2FuIGNoYW5nZSBGdW5kcmFpc2Ugc3RhdHVzLgMDAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZBQ1RJVkUJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAHRk5JU0hFRAcJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAIQ0FOQ0VMRUQHCQAAAgAAAAEJAAEsAAAAAgIAAAAQSW52YWxpZCBzdGF0dXM6IAUAAAAGc3RhdHVzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJmdW5kcmFpc2VTdGF0dXNLZXkFAAAABnN0YXR1cwUAAAADbmlsAAAAA2ludgEAAAAbd2l0aGRyYXdBbmRDb21wbGV0ZUZ1bmRyaXNlAAAAAAMJAQAAAAIhPQAAAAIFAAAAGWZ1bmRyYWlzZVN0YXR1c0Zyb21PcmFjbGUFAAAACEFQUFJPVkVECQAAAgAAAAECAAAAJEZ1bmRyYWlzZSBpcyBub3QgYXBwcm92ZWQgYnkgb3JhY2xlLgQAAAAHYmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMEAAAADWNhbGxlckFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkAAlgAAAABCAgFAAAAA2ludgAAAAZjYWxsZXIAAAAFYnl0ZXMDAwkBAAAAAiE9AAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdGhpcwkBAAAAAiE9AAAAAgUAAAANY2FsbGVyQWRkcmVzcwkBAAAAEGdldE9yYWNsZUFkZHJlc3MAAAAABwkAAAIAAAABAgAAADFPbmx5IE93bmVyIG9yIE9yYWNsZSBtYXkgaW5pdGlhdGUgZnVuZHMgd2l0aGRyYXcuAwkBAAAAAiE9AAAAAgUAAAAPZnVuZHJhaXNlU3RhdHVzBQAAAAdGTklTSEVECQAAAgAAAAECAAAAGUNvbXBhaWduIGlzIG5vdCBmaW5pc2hlZC4DCQAAZgAAAAIFAAAAFGZ1bmRyYWlzZUV4cGlyeUJsb2NrBQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACAgAAADVDb21wYWlnbiBpcyBub3QgZmluaXNoZWQuIFBsZWFzZSB3YWl0IGZvciBibG9jayBOby46IAkAAaQAAAABBQAAABRmdW5kcmFpc2VFeHBpcnlCbG9jawMJAABmAAAAAgUAAAAHYmFsYW5jZQUAAAAUZnVuZHJhaXNlVGFyZ2V0V2F2ZXMJAAACAAAAAQIAAAA1Tm90IGVub3VnaCBiYWxhbmNlLiBGdW5kcmFpc2UgdGFyZ2V0IHdhcyBub3QgcmVhY2hlZC4DCQAAZwAAAAIAAAAAAAAAAAAFAAAAB2JhbGFuY2UJAAACAAAAAQIAAAATTm90IGVub3VnaCBiYWxhbmNlLgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD2Z1bmRyYWlzZVN0YXR1cwUAAAAJQ09NUExFVEVEBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA1wYXlPdXRBZGRyZXNzBQAAAAdiYWxhbmNlBQAAAAR1bml0BQAAAANuaWwAAAADaW52AQAAAAZkb25hdGUAAAAAAwkBAAAAAiE9AAAAAgUAAAAZZnVuZHJhaXNlU3RhdHVzRnJvbU9yYWNsZQUAAAAIQVBQUk9WRUQJAAACAAAAAQIAAAA7RnVuZHJhaXNlIGlzIG5vdCBhcHByb3ZlZCBieSBvcmFjbGUuIERvbmF0aW9uIGlzIGltcG9zaWJsZS4DCQEAAAACIT0AAAACBQAAAA9mdW5kcmFpc2VTdGF0dXMFAAAABkFDVElWRQkAAAIAAAABAgAAAC9GdW5kcmFpc2UgaXMgbm90IGFjdGl2ZS4gRG9uYXRpb24gaXMgaW1wb3NpYmxlLgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAABRmdW5kcmFpc2VFeHBpcnlCbG9jawkAAAIAAAABAgAAAFRGdW5kcmFpc2UgY29tcGFpZ24gaXMgZmluaXNoZWQuIEN1cnJlbnQgYmxvY2sgaXMgaGlnaGVyIHRoZW4gZnVuZHJhaXNlIGV4cGlyeSBibG9jay4EAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAArT25seSBkb25hdGlvbnMgaW4gV0FWRVMgY3VycmVudGx5IGF2YWxpYmxlLgMJAABnAAAAAgAAAAAAAAAAAAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAECAAAAJFBsZWFzZSBzZW5kIHBvc2l0aXZlIHBheW1lbnQgYW1vdW50LgQAAAATY2FsbGVyQWRkcmVzc1N0cmluZwkAAlgAAAABCAgFAAAAA2ludgAAAAZjYWxsZXIAAAAFYnl0ZXMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRBZGRyZXNzQmFsYW5jZUtleQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAABkAAAAAgkBAAAAFmdldEFkZHJlc3NCYWxhbmNlVmFsdWUAAAABBQAAABNjYWxsZXJBZGRyZXNzU3RyaW5nCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAA25pbAAAAANpbnYBAAAADnJldHVybkRvbmF0aW9uAAAAAAMJAQAAAAIhPQAAAAIFAAAAD2Z1bmRyYWlzZVN0YXR1cwUAAAAIQ0FOQ0VMRUQJAAACAAAAAQIAAABHUmV0dXJuIGlzIG5vdCBhdmFsaWJsZSB3aGlsZSBmdW5kcmFpc2Ugc3RhdHVzIGlzIG5vdCBzZXQgdG8gImNhbmNlbGVkIi4EAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcJAAJYAAAAAQgIBQAAAANpbnYAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1jYWxsZXJCYWxhbmNlCQEAAAAWZ2V0QWRkcmVzc0JhbGFuY2VWYWx1ZQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADWNhbGxlckJhbGFuY2UJAAACAAAAAQkAASwAAAACAgAAAD5ObyBwb3NpdGl2ZSBiYWxhbmNlLiBSZXR1cm4gaXMgbm90IHBvc3NpYmxlIGZvciB5b3VyIGFkZHJlc3M6IAUAAAATY2FsbGVyQWRkcmVzc1N0cmluZwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRBZGRyZXNzQmFsYW5jZUtleQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcAAAAAAAAAAAAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcFAAAADWNhbGxlckJhbGFuY2UFAAAABHVuaXQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAAW0FAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABBJc3N1ZVRyYW5zYWN0aW9uBAAAAAFpBQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAASUmVpc3N1ZVRyYW5zYWN0aW9uBAAAAAFyBQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAAFpBQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBAAAAAFkBQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMT1JBQ0xFUFVCS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADE9SQUNMRVBVQktFWQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADE9SQUNMRVBVQktFWdrcg6M=", "chainId": 84, "height": 677179, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
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/169f3d6 63.46 ms ◑![]()