tx · 3eRNAPJNKvXAQoGW36ntY9hA5BoiHxeDWZRAuBnqfMti

3PLNtYARHKSspK7q6Ed4KnrMU2x9sD4bzwz:  -0.01400000 Waves

2020.03.26 21:00 [1989872] smart account 3PLNtYARHKSspK7q6Ed4KnrMU2x9sD4bzwz > SELF 0.00000000 Waves

{ "type": 13, "id": "3eRNAPJNKvXAQoGW36ntY9hA5BoiHxeDWZRAuBnqfMti", "fee": 1400000, "feeAssetId": null, "timestamp": 1585245679944, "version": 1, "sender": "3PLNtYARHKSspK7q6Ed4KnrMU2x9sD4bzwz", "senderPublicKey": "7g8GCJLkqiyC5U5AMxC7txBN6YRhmNh1BBWVpDqsGddw", "proofs": [ "2A9TNpZVvHM3AVBrajhRm8jYcLjwiqgQvD2CWVu7FRUBbHwnowJ58mbcgNrbNpwcSucBsX4MMh1e97oapqLe2FCv" ], "script": "base64:AAIDAAAAAAAAABYIARIAEgMKAQgSBQoDCAgBEgQKAggBAAAAGQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAAAAAAROT05FAAAAAAAAAAAAAAAAAANORVcAAAAAAAAAAAEAAAAACFJFSkVDVEVEAAAAAAAAAAACAAAAAAdTVUNDRVNTAAAAAAAAAAADAAAAAARMT0NLAAAAAAAAAAAAAAAAAAZVTkxPQ0sAAAAAAAAAAAEAAAAACkFzc2V0SWRLZXkCAAAACGFzc2V0X2lkAAAAAAlBZG1pbnNLZXkCAAAABmFkbWlucwAAAAARQmZ0Q29lZmZpY2llbnRLZXkCAAAADmJmdENvZWZmaWNpZW50AQAAAA5nZXRScVN0YXR1c0tleQAAAAEAAAAJcmVxdWVzdElkCQABLAAAAAICAAAAB3N0YXR1c18FAAAACXJlcXVlc3RJZAEAAAAOZ2V0UnFIZWlnaHRLZXkAAAABAAAACXJlcXVlc3RJZAkAASwAAAACAgAAAAdoZWlnaHRfBQAAAAlyZXF1ZXN0SWQBAAAADGdldFJxVHlwZUtleQAAAAEAAAAJcmVxdWVzdElkCQABLAAAAAICAAAABXR5cGVfBQAAAAlyZXF1ZXN0SWQBAAAADWdldFJxT3duZXJLZXkAAAABAAAACXJlcXVlc3RJZAkAASwAAAACAgAAAAZvd25lcl8FAAAACXJlcXVlc3RJZAEAAAAOZ2V0UnFUYXJnZXRLZXkAAAABAAAACXJlcXVlc3RJZAkAASwAAAACAgAAAAd0YXJnZXRfBQAAAAlyZXF1ZXN0SWQBAAAADmdldFJxQW1vdW50S2V5AAAAAQAAAAlyZXF1ZXN0SWQJAAEsAAAAAgIAAAAHYW1vdW50XwUAAAAJcmVxdWVzdElkAAAAAAZhZG1pbnMJAAS1AAAAAgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAJQWRtaW5zS2V5AgAAAAEsAAAAAAdhc3NldElkCQACWQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACkFzc2V0SWRLZXkAAAAADmJmdENvZWZmaWNpZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABFCZnRDb2VmZmljaWVudEtleQEAAAALZ2V0UnFTdGF0dXMAAAABAAAACXJlcXVlc3RJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAADmdldFJxU3RhdHVzS2V5AAAAAQUAAAAJcmVxdWVzdElkAQAAAAlnZXRScVR5cGUAAAABAAAACXJlcXVlc3RJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAADGdldFJxVHlwZUtleQAAAAEFAAAACXJlcXVlc3RJZAEAAAAKZ2V0UnFPd25lcgAAAAEAAAAJcmVxdWVzdElkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAANZ2V0UnFPd25lcktleQAAAAEFAAAACXJlcXVlc3RJZAEAAAALZ2V0UnFUYXJnZXQAAAABAAAACXJlcXVlc3RJZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADmdldFJxVGFyZ2V0S2V5AAAAAQUAAAAJcmVxdWVzdElkAQAAAAtnZXRScUFtb3VudAAAAAEAAAAJcmVxdWVzdElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAOZ2V0UnFBbW91bnRLZXkAAAABBQAAAAlyZXF1ZXN0SWQAAAAEAAAAAWkBAAAACnRlc3RGYXVjZXQAAAAACQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgAAAAAAAJiWgAUAAAAHYXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAEWNyZWF0ZUxvY2tSZXF1ZXN0AAAAAQAAAAlyZWNpcGllbnQEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAlyZXF1ZXN0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", "chainId": 87, "height": 1989872, "spentComplexity": 0 } View: original | compacted Prev: none Next: BAo2ttRpR3i2K8BkxgY6UsT7Lwk2YuksXGUacGt6TVYs Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func getNumberByKey (key) = match getInteger(this, key) {
5+ case a: Int =>
6+ a
7+ case _ =>
8+ 0
9+}
10+
11+
12+func getStringByKey (key) = match getString(this, key) {
13+ case a: String =>
14+ a
15+ case _ =>
16+ ""
17+}
18+
19+
20+let NONE = 0
21+
22+let NEW = 1
23+
24+let REJECTED = 2
25+
26+let SUCCESS = 3
27+
28+let LOCK = 0
29+
30+let UNLOCK = 1
31+
32+let AssetIdKey = "asset_id"
33+
34+let AdminsKey = "admins"
35+
36+let BftCoefficientKey = "bftCoefficient"
37+
38+func getRqStatusKey (requestId) = ("status_" + requestId)
39+
40+
41+func getRqHeightKey (requestId) = ("height_" + requestId)
42+
43+
44+func getRqTypeKey (requestId) = ("type_" + requestId)
45+
46+
47+func getRqOwnerKey (requestId) = ("owner_" + requestId)
48+
49+
50+func getRqTargetKey (requestId) = ("target_" + requestId)
51+
52+
53+func getRqAmountKey (requestId) = ("amount_" + requestId)
54+
55+
56+let admins = split(getStringByKey(AdminsKey), ",")
57+
58+let assetId = fromBase58String(getStringByKey(AssetIdKey))
59+
60+let bftCoefficient = getNumberByKey(BftCoefficientKey)
61+
62+func getRqStatus (requestId) = getNumberByKey(getRqStatusKey(requestId))
63+
64+
65+func getRqType (requestId) = getNumberByKey(getRqTypeKey(requestId))
66+
67+
68+func getRqOwner (requestId) = getStringByKey(getRqOwnerKey(requestId))
69+
70+
71+func getRqTarget (requestId) = getStringByKey(getRqTargetKey(requestId))
72+
73+
74+func getRqAmount (requestId) = getNumberByKey(getRqAmountKey(requestId))
75+
76+
77+@Callable(i)
78+func testFaucet () = TransferSet([ScriptTransfer(i.caller, 10000000, assetId)])
79+
80+
81+
82+@Callable(i)
83+func createLockRequest (recipient) = {
84+ let pmt = extract(i.payment)
85+ let requestId = toBase58String(keccak256((((fromBase58String(toString(this)) + i.caller.bytes) + i.transactionId) + toBytes(recipient))))
86+ if ((pmt.assetId != assetId))
87+ then throw("can use waves only")
88+ else if ((getRqOwner(requestId) != ""))
89+ then throw("request exists")
90+ else WriteSet([DataEntry(getRqStatusKey(requestId), NEW), DataEntry(getRqTypeKey(requestId), LOCK), DataEntry(getRqOwnerKey(requestId), toString(i.caller)), DataEntry(getRqHeightKey(requestId), height), DataEntry(getRqTargetKey(requestId), recipient), DataEntry(getRqAmountKey(requestId), pmt.amount)])
91+ }
92+
93+
94+
95+@Callable(i)
96+func changeStatus (requestHash,signsString,status) = {
97+ let signs = split(signsString, ",")
98+ let msg = ((requestHash + "_") + toString(status))
99+ let count = (((((if (sigVerify(toBytes(msg), fromBase58String(signs[0]), fromBase58String(admins[0])))
100+ then 1
101+ else 0) + (if (sigVerify(toBytes(msg), fromBase58String(signs[1]), fromBase58String(admins[1])))
102+ then 1
103+ else 0)) + (if (sigVerify(toBytes(msg), fromBase58String(signs[2]), fromBase58String(admins[2])))
104+ then 1
105+ else 0)) + (if (sigVerify(toBytes(msg), fromBase58String(signs[3]), fromBase58String(admins[3])))
106+ then 1
107+ else 0)) + (if (sigVerify(toBytes(msg), fromBase58String(signs[4]), fromBase58String(admins[4])))
108+ then 1
109+ else 0))
110+ if ((bftCoefficient > count))
111+ then throw("count is less 3")
112+ else if ((getRqOwner(requestHash) == ""))
113+ then throw("request is not exists")
114+ else if ((getRqStatus(requestHash) != NEW))
115+ then throw("request is not exists")
116+ else if (if ((status != SUCCESS))
117+ then (status != REJECTED)
118+ else false)
119+ then throw("invalid status")
120+ else {
121+ let owner = addressFromStringValue(getRqOwner(requestHash))
122+ let type = getRqType(requestHash)
123+ let amount = getRqAmount(requestHash)
124+ ScriptResult(WriteSet([DataEntry(getRqStatusKey(requestHash), status)]), TransferSet([ScriptTransfer(owner, if (if (if ((status == REJECTED))
125+ then (type == LOCK)
126+ else false)
127+ then true
128+ else if ((status == SUCCESS))
129+ then (type == UNLOCK)
130+ else false)
131+ then amount
132+ else 0, assetId)]))
133+ }
134+ }
135+
136+
137+
138+@Callable(i)
139+func createUnlockRequest (sender,amount) = {
140+ let requestId = toBase58String(keccak256(((((fromBase58String(toString(this)) + i.caller.bytes) + i.transactionId) + toBytes(sender)) + toBytes(amount))))
141+ if ((getRqOwner(requestId) != ""))
142+ then throw("request exists")
143+ else WriteSet([DataEntry(getRqStatusKey(requestId), NEW), DataEntry(getRqTypeKey(requestId), UNLOCK), DataEntry(getRqOwnerKey(requestId), toString(i.caller)), DataEntry(getRqHeightKey(requestId), height), DataEntry(getRqTargetKey(requestId), sender), DataEntry(getRqAmountKey(requestId), amount)])
144+ }
145+
146+

github/deemru/w8io/3ef1775 
23.40 ms