tx · BYzFDVroiSiKmbVLvUQvsW4KtpU6RE9trjU42U7JjzNL

3N5EJ51pJ7mVqcfXmWJ6E56madfe86JNWiA:  -0.01500000 Waves

2024.08.21 12:38 [3248433] smart account 3N5EJ51pJ7mVqcfXmWJ6E56madfe86JNWiA > SELF 0.00000000 Waves

{ "type": 13, "id": "BYzFDVroiSiKmbVLvUQvsW4KtpU6RE9trjU42U7JjzNL", "fee": 1500000, "feeAssetId": null, "timestamp": 1724233203490, "version": 2, "chainId": 84, "sender": "3N5EJ51pJ7mVqcfXmWJ6E56madfe86JNWiA", "senderPublicKey": "EUSY1cboEW8qQNqVcSV5Y2UTQmwDGs5rThECuJNo9Ja9", "proofs": [ "5JokzDZVAH823ok2cKz1BaerB3yEUheC8NHyDxMrXeDFhDaYdjcQtjB4uaS694Z3DWngezhQjcbKWSruq1LbGuym" ], "script": "base64:AAIFAAAAAAAAACwIAhIGCgQIAggCEggKBgICAQICAhIHCgUCAgECAhIDCgEIEgMKAQISAwoBCAAAABYAAAAAEGtleUxvY2tSZWNpcGllbnQCAAAAA19scgAAAAANa2V5TG9ja0Ftb3VudAIAAAADX2xhAAAAABJrZXlMb2NrRGVzdGluYXRpb24CAAAAA19sZAAAAAASa2V5TG9ja0Fzc2V0U291cmNlAgAAAARfbGFzAAAAAAprZXlWZXJzaW9uAgAAAAJfdgAAAAAJa2V5QnJpZGdlAgAAAAJfYgAAAAAJa2V5T3JhY2xlAgAAAAJfbwAAAAAIa2V5QWRtaW4CAAAAAl9hAAAAAAlrZXlVbmxvY2sCAAAAAl91AAAAAA9lcnJVbmF1dGhvcml6ZWQCAAAADHVuYXV0aG9yaXplZAAAAAAQZXJyVW5pbml0aWFsaXplZAIAAAANdW5pbml0aWFsaXplZAAAAAATZXJySW52YWxpZFNpZ25hdHVyZQIAAAARaW52YWxpZCBzaWduYXR1cmUAAAAAEWVyckFscmVhZHlDbGFpbWVkAgAAAAdjbGFpbWVkAAAAABBlcnJBbHJlYWR5TG9ja2VkAgAAAAZsb2NrZWQAAAAAEGVyckludmFsaWRMb2NrSWQCAAAADmludmFsaWQgbG9ja0lkAAAAAApjaGFpbldhdmVzAgAAAAhWMEZXUlE9PQEAAAAMYXNzZXJ0Q2FsbGVyAAAAAgAAAAFpAAAAA2tleQQAAAAHJG1hdGNoMAkABCEAAAABBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAACWF1dGhvcml0eQUAAAAHJG1hdGNoMAMJAQAAAAIhPQAAAAIFAAAACWF1dGhvcml0eQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkAAAIAAAABBQAAAA9lcnJVbmF1dGhvcml6ZWQFAAAABHVuaXQJAAACAAAAAQUAAAAQZXJyVW5pbml0aWFsaXplZAEAAAAWYXNzZXJ0Q2FsbGVySXNDb250cmFjdAAAAAEAAAABaQMJAQAAAAIhPQAAAAIIBQAAAAR0aGlzAAAABWJ5dGVzCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzCQAAAgAAAAEFAAAAD2VyclVuYXV0aG9y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bW91bnQJAARMAAAAAgUAAAANbG9ja1NvdXJjZVN0cgkABEwAAAACCQACWgAAAAEFAAAAFXRva2VuU291cmNlQW5kQWRkcmVzcwkABEwAAAACBQAAAApjaGFpbldhdmVzBQAAAANuaWwCAAAAAV8EAAAABGhhc2gJAAH1AAAAAQkAAZsAAAABBQAAAAdtZXNzYWdlBAAAAAxyZWNvdmVyZWRLZXkJAAOEAAAAAgUAAAAEaGFzaAUAAAAJc2lnbmF0dXJlAwkBAAAAAiE9AAAAAgUAAAAMcmVjb3ZlcmVkS2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1NykAAAABBQAAAAlrZXlPcmFjbGUJAAACAAAAAQUAAAATZXJySW52YWxpZFNpZ25hdHVyZQkABRQAAAACCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAl1bmxvY2tLZXkGBQAAAANuaWwGCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKY3JlYXRlTG9jawAAAAUAAAAGbG9ja0lkAAAACXJlY2lwaWVudAAAAAZhbW91bnQAAAAPbG9ja0Rlc3RpbmF0aW9uAAAAFWFzc2V0U291cmNlQW5kQWRkcmVzcwQAAAAJbG9ja0lkU3RyCQACWgAAAAEFAAAABmxvY2tJZAQAAAAQbG9ja1JlY2lwaWVudEtleQkAASwAAAACBQAAAAlsb2NrSWRTdHIFAAAAEGtleUxvY2tSZWNpcGllbnQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAUYXNzZXJ0Q2FsbGVySXNCcmlkZ2UAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAC2NoZWNrTG9ja0lkCQEAAAARYXNzZXJ0VmFsaWRMb2NrSWQAAAABBQAAAAZsb2NrSWQDCQAAAAAAAAIFAAAAC2NoZWNrTG9ja0lkBQAAAAtjaGVja0xvY2tJZAQAAAAJY2hlY2tMb2NrCQEAAAATYXNzZXJ0TG9ja05vdEV4aXN0cwAAAAEFAAAAEGxvY2tSZWNpcGllbnRLZXkDCQAAAAAAAAIFAAAACWNoZWNrTG9jawUAAAAJY2hlY2tMb2NrCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAABBrZXlMb2NrUmVjaXBpZW50BQAAAAlyZWNpcGllbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAAA1rZXlMb2NrQW1vdW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgkAASwAAAACBQAAAAlsb2NrSWRTdHIFAAAAEmtleUxvY2tEZXN0aW5hdGlvbgUAAAAPbG9ja0Rlc3RpbmF0aW9uCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAABJrZXlMb2NrQXNzZXRTb3VyY2UFAAAAFWFzc2V0U291cmNlQW5kQWRkcmVzcwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACHNldEFkbWluAAAAAQAAAAhuZXdBZG1pbgQAAAALY2hlY2tDYWxsZXIJAQAAABNhc3NlcnRDYWxsZXJJc0FkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIFAAAACGtleUFkbWluCAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAIbmV3QWRtaW4AAAAFYnl0ZXMFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAJc2V0T3JhY2xlAAAAAQAAAAluZXdPcmFjbGUEAAAAC2NoZWNrQ2FsbGVyCQEAAAATYXNzZXJ0Q2FsbGVySXNBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACBQAAAAlrZXlPcmFjbGUFAAAACW5ld09yYWNsZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAlzZXRCcmlkZ2UAAAABAAAACW5ld0JyaWRnZQQAAAALY2hlY2tDYWxsZXIJAQAAABNhc3NlcnRDYWxsZXJJc0FkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIFAAAACWtleUJyaWRnZQgJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAACW5ld0JyaWRnZQAAAAVieXRlcwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAACmtqVr", "height": 3248433, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let keyLockRecipient = "_lr"
5+
6+let keyLockAmount = "_la"
7+
8+let keyLockDestination = "_ld"
9+
10+let keyLockAssetSource = "_las"
11+
12+let keyVersion = "_v"
13+
14+let keyBridge = "_b"
15+
16+let keyOracle = "_o"
17+
18+let keyAdmin = "_a"
19+
20+let keyUnlock = "_u"
21+
22+let errUnauthorized = "unauthorized"
23+
24+let errUninitialized = "uninitialized"
25+
26+let errInvalidSignature = "invalid signature"
27+
28+let errAlreadyClaimed = "claimed"
29+
30+let errAlreadyLocked = "locked"
31+
32+let errInvalidLockId = "invalid lockId"
33+
34+let chainWaves = "V0FWRQ=="
35+
36+func assertCaller (i,key) = match getBinary(key) {
37+ case authority: ByteVector =>
38+ if ((authority != i.caller.bytes))
39+ then throw(errUnauthorized)
40+ else unit
41+ case _ =>
42+ throw(errUninitialized)
43+}
44+
45+
46+func assertCallerIsContract (i) = if ((this.bytes != i.caller.bytes))
47+ then throw(errUnauthorized)
48+ else unit
49+
50+
51+func assertCallerIsBridge (i) = assertCaller(i, keyBridge)
52+
53+
54+func assertCallerIsAdmin (i) = assertCaller(i, keyAdmin)
55+
56+
57+func assertValidLockId (lockId) = {
58+ let version = valueOrErrorMessage(getBinary(keyVersion), errUninitialized)
59+ if (if ((size(lockId) != 16))
60+ then true
61+ else (take(lockId, 1) != version))
62+ then throw(errInvalidLockId)
63+ else unit
64+ }
65+
66+
67+func assertLockNotExists (lockRecipientKey) = match getBinary(lockRecipientKey) {
68+ case t: ByteVector =>
69+ throw(errAlreadyLocked)
70+ case _ =>
71+ unit
72+}
73+
74+
75+@Callable(i)
76+func init (admin,version,bridge,oracle) = {
77+ let callerCheck = assertCallerIsContract(i)
78+ if ((callerCheck == callerCheck))
79+ then if (isDefined(getBinary(keyAdmin)))
80+ then throw(errUnauthorized)
81+ else [BinaryEntry(keyVersion, version), BinaryEntry(keyBridge, addressFromStringValue(bridge).bytes), BinaryEntry(keyOracle, oracle), BinaryEntry(keyAdmin, addressFromStringValue(admin).bytes)]
82+ else throw("Strict value is not equal to itself.")
83+ }
84+
85+
86+
87+@Callable(i)
88+func createUnlock (lockId,recipient,amount,lockSource,tokenSourceAndAddress,signature) = {
89+ let checkLockId = assertValidLockId(lockId)
90+ if ((checkLockId == checkLockId))
91+ then {
92+ let checkCaller = assertCallerIsBridge(i)
93+ if ((checkCaller == checkCaller))
94+ then {
95+ let lockIdStr = toBase64String(lockId)
96+ let lockSourceStr = toBase64String(lockSource)
97+ let unlockKey = (((lockSourceStr + "_") + lockIdStr) + keyUnlock)
98+ if (isDefined(getBoolean(unlockKey)))
99+ then throw(errAlreadyClaimed)
100+ else {
101+ let message = makeString([lockIdStr, toBase64String(recipient), toString(amount), lockSourceStr, toBase64String(tokenSourceAndAddress), chainWaves], "_")
102+ let hash = keccak256(toBytes(message))
103+ let recoveredKey = ecrecover(hash, signature)
104+ if ((recoveredKey != getBinaryValue(keyOracle)))
105+ then throw(errInvalidSignature)
106+ else $Tuple2([BooleanEntry(unlockKey, true)], true)
107+ }
108+ }
109+ else throw("Strict value is not equal to itself.")
110+ }
111+ else throw("Strict value is not equal to itself.")
112+ }
113+
114+
115+
116+@Callable(i)
117+func createLock (lockId,recipient,amount,lockDestination,assetSourceAndAddress) = {
118+ let lockIdStr = toBase64String(lockId)
119+ let lockRecipientKey = (lockIdStr + keyLockRecipient)
120+ let checkCaller = assertCallerIsBridge(i)
121+ if ((checkCaller == checkCaller))
122+ then {
123+ let checkLockId = assertValidLockId(lockId)
124+ if ((checkLockId == checkLockId))
125+ then {
126+ let checkLock = assertLockNotExists(lockRecipientKey)
127+ if ((checkLock == checkLock))
128+ then [BinaryEntry((lockIdStr + keyLockRecipient), recipient), IntegerEntry((lockIdStr + keyLockAmount), amount), BinaryEntry((lockIdStr + keyLockDestination), lockDestination), BinaryEntry((lockIdStr + keyLockAssetSource), assetSourceAndAddress)]
129+ else throw("Strict value is not equal to itself.")
130+ }
131+ else throw("Strict value is not equal to itself.")
132+ }
133+ else throw("Strict value is not equal to itself.")
134+ }
135+
136+
137+
138+@Callable(i)
139+func setAdmin (newAdmin) = {
140+ let checkCaller = assertCallerIsAdmin(i)
141+ if ((checkCaller == checkCaller))
142+ then [BinaryEntry(keyAdmin, addressFromStringValue(newAdmin).bytes)]
143+ else throw("Strict value is not equal to itself.")
144+ }
145+
146+
147+
148+@Callable(i)
149+func setOracle (newOracle) = {
150+ let checkCaller = assertCallerIsAdmin(i)
151+ if ((checkCaller == checkCaller))
152+ then [BinaryEntry(keyOracle, newOracle)]
153+ else throw("Strict value is not equal to itself.")
154+ }
155+
156+
157+
158+@Callable(i)
159+func setBridge (newBridge) = {
160+ let checkCaller = assertCallerIsAdmin(i)
161+ if ((checkCaller == checkCaller))
162+ then [BinaryEntry(keyBridge, addressFromStringValue(newBridge).bytes)]
163+ else throw("Strict value is not equal to itself.")
164+ }
165+
166+

github/deemru/w8io/169f3d6 
29.55 ms