tx · 9iCdPgagLcQrcs7zu8WQvW1oZuVvpvcDMuJrtXfsQKFg

3N9J3wuPH3fe1vTsLwJSticprdzZWXzZtMb:  -0.01000000 Waves

2022.05.09 19:27 [2044380] smart account 3N9J3wuPH3fe1vTsLwJSticprdzZWXzZtMb > SELF 0.00000000 Waves

{ "type": 13, "id": "9iCdPgagLcQrcs7zu8WQvW1oZuVvpvcDMuJrtXfsQKFg", "fee": 1000000, "feeAssetId": null, "timestamp": 1652113657115, "version": 2, "chainId": 84, "sender": "3N9J3wuPH3fe1vTsLwJSticprdzZWXzZtMb", "senderPublicKey": "6YTEFQ5JhfL8TsLSjyXNG4TVYq2Jmu3nkmXvxD1Nj5mn", "proofs": [ "57dio3ErMxTmhpsBXb1TT9NGBRb1pZVosYCPousMg7rEfHLww8yDF18mA4zuoDVLUMBXL4zHsiDacgHSuf7tVx7g" ], "script": "base64:AAIFAAAAAAAAACEIAhIDCgECEgUKAwICAhIICgYCAgECAgISBwoFAgIBAgIAAAAUAAAAABBrZXlMb2NrUmVjaXBpZW50AgAAAANfbHIAAAAADWtleUxvY2tBbW91bnQCAAAAA19sYQAAAAASa2V5TG9ja0Rlc3RpbmF0aW9uAgAAAANfbGQAAAAAEmtleUxvY2tBc3NldFNvdXJjZQIAAAAEX2xhcwAAAAAKa2V5VmVyc2lvbgIAAAACX3YAAAAACWtleUJyaWRnZQIAAAACX2IAAAAACWtleU9yYWNsZQIAAAACX28AAAAACGtleUFkbWluAgAAAAJfYQAAAAAJa2V5VW5sb2NrAgAAAAJfdQAAAAAPZXJyVW5hdXRob3JpemVkAgAAAAx1bmF1dGhvcml6ZWQAAAAAEGVyclVuaW5pdGlhbGl6ZWQCAAAADXVuaW5pdGlhbGl6ZWQAAAAAE2VyckludmFsaWRTaWduYXR1cmUCAAAAEWludmFsaWQgc2lnbmF0dXJlAAAAABFlcnJBbHJlYWR5Q2xhaW1lZAIAAAAHY2xhaW1lZAAAAAAQZXJyQWxyZWFkeUxvY2tlZAIAAAAGbG9ja2VkAAAAAA1lcnJCcmlkZ2VPbmx5AgAAAApub3QgYnJpZGdlAAAAABBlcnJJbnZhbGlkTG9ja0lkAgAAAA5pbnZhbGlkIGxvY2tJZAEAAAANaW52YWxpZENhbGxlcgAAAAIAAAABaQAAAANrZXkEAAAAByRtYXRjaDAJAAQhAAAAAQUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAlhdXRob3JpdHkFAAAAByRtYXRjaDAJAQAAAAIhPQAAAAIFAAAACWF1dGhvcml0eQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwcBAAAAFGFzc2VydENhbGxlcklzQnJpZGdlAAAAAQAAAAFpAwkBAAAADWludmFsaWRDYWxsZXIAAAACBQAAAAFpBQAAAAlrZXlCcmlkZ2UJAAACAAAAAQUAAAANZXJyQnJpZGdlT25seQUAAAAEdW5pdAEAAAARYXNzZXJ0VmFsaWRMb2NrSWQAAAABAAAABmxvY2tJZAQAAAAHdmVyc2lvbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAAC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aWwGCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKY3JlYXRlTG9jawAAAAUAAAAGbG9ja0lkAAAACXJlY2lwaWVudAAAAAZhbW91bnQAAAAPbG9ja0Rlc3RpbmF0aW9uAAAAFXRva2VuU291cmNlQW5kQWRkcmVzcwQAAAAJbG9ja0lkU3RyCQACWgAAAAEFAAAABmxvY2tJZAQAAAAQbG9ja1JlY2lwaWVudEtleQkAASwAAAACBQAAAAlsb2NrSWRTdHIFAAAAEGtleUxvY2tSZWNpcGllbnQEAAAAC2NoZWNrQ2FsbGVyCQEAAAAUYXNzZXJ0Q2FsbGVySXNCcmlkZ2UAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAC2NoZWNrTG9ja0lkCQEAAAARYXNzZXJ0VmFsaWRMb2NrSWQAAAABBQAAAAZsb2NrSWQDCQAAAAAAAAIFAAAAC2NoZWNrTG9ja0lkBQAAAAtjaGVja0xvY2tJZAQAAAAJY2hlY2tMb2NrCQEAAAATYXNzZXJ0TG9ja05vdEV4aXN0cwAAAAEFAAAAEGxvY2tSZWNpcGllbnRLZXkDCQAAAAAAAAIFAAAACWNoZWNrTG9jawUAAAAJY2hlY2tMb2NrCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAABBrZXlMb2NrUmVjaXBpZW50BQAAAAlyZWNpcGllbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAAA1rZXlMb2NrQW1vdW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgkAASwAAAACBQAAAAlsb2NrSWRTdHIFAAAAEmtleUxvY2tEZXN0aW5hdGlvbgUAAAAPbG9ja0Rlc3RpbmF0aW9uCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAABJrZXlMb2NrQXNzZXRTb3VyY2UFAAAAFXRva2VuU291cmNlQW5kQWRkcmVzcwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAHI/5Wk=", "height": 2044380, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: DQnU6HUeVHycVnwQhHCT6nFvBnfDsbymq5jffsRRhmte 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 errBridgeOnly = "not bridge"
33+
34+let errInvalidLockId = "invalid lockId"
35+
36+func invalidCaller (i,key) = match getBinary(key) {
37+ case authority: ByteVector =>
38+ (authority != i.caller.bytes)
39+ case _ =>
40+ false
41+}
42+
43+
44+func assertCallerIsBridge (i) = if (invalidCaller(i, keyBridge))
45+ then throw(errBridgeOnly)
46+ else unit
47+
48+
49+func assertValidLockId (lockId) = {
50+ let version = valueOrErrorMessage(getBinary(keyVersion), errUninitialized)
51+ if (if ((size(lockId) != 16))
52+ then true
53+ else (take(lockId, 1) != version))
54+ then throw(errInvalidLockId)
55+ else unit
56+ }
57+
58+
59+func assertLockNotExists (lockRecipientKey) = match getBinary(lockRecipientKey) {
60+ case t: ByteVector =>
61+ throw(errAlreadyLocked)
62+ case _ =>
63+ unit
64+}
65+
66+
67+@Callable(i)
68+func setAdmin (newAdmin) = if (invalidCaller(i, keyAdmin))
69+ then throw(errUnauthorized)
70+ else [BinaryEntry(keyAdmin, newAdmin)]
71+
72+
73+
74+@Callable(i)
75+func setConfig (version,bridge,oracle) = if (invalidCaller(i, keyAdmin))
76+ then throw(errUnauthorized)
77+ else [BinaryEntry(keyVersion, version), BinaryEntry(keyBridge, bridge), BinaryEntry(keyOracle, oracle)]
78+
79+
80+
81+@Callable(i)
82+func createUnlock (lockId,recipient,amount,lockSource,tokenSourceAndAddress,signature) = {
83+ let checkLockId = assertValidLockId(lockId)
84+ if ((checkLockId == checkLockId))
85+ then {
86+ let checkCaller = assertCallerIsBridge(i)
87+ if ((checkCaller == checkCaller))
88+ then {
89+ let lockIdStr = toBase64String(lockId)
90+ let lockSourceStr = toBase64String(lockSource)
91+ let unlockKey = (((lockSourceStr + "_") + lockIdStr) + keyUnlock)
92+ if (isDefined(getBoolean(unlockKey)))
93+ then throw(errAlreadyClaimed)
94+ else {
95+ let message = makeString([toBase64String(lockId), toBase64String(recipient), toString(amount), toBase64String(lockSource), toBase64String(tokenSourceAndAddress)], "_")
96+ let hash = keccak256(toBytes(message))
97+ let recoveredKey = ecrecover(hash, signature)
98+ if ((recoveredKey != getBinaryValue(keyOracle)))
99+ then throw(errInvalidSignature)
100+ else $Tuple2([BooleanEntry(unlockKey, true)], true)
101+ }
102+ }
103+ else throw("Strict value is not equal to itself.")
104+ }
105+ else throw("Strict value is not equal to itself.")
106+ }
107+
108+
109+
110+@Callable(i)
111+func createLock (lockId,recipient,amount,lockDestination,tokenSourceAndAddress) = {
112+ let lockIdStr = toBase64String(lockId)
113+ let lockRecipientKey = (lockIdStr + keyLockRecipient)
114+ let checkCaller = assertCallerIsBridge(i)
115+ if ((checkCaller == checkCaller))
116+ then {
117+ let checkLockId = assertValidLockId(lockId)
118+ if ((checkLockId == checkLockId))
119+ then {
120+ let checkLock = assertLockNotExists(lockRecipientKey)
121+ if ((checkLock == checkLock))
122+ then [BinaryEntry((lockIdStr + keyLockRecipient), recipient), IntegerEntry((lockIdStr + keyLockAmount), amount), BinaryEntry((lockIdStr + keyLockDestination), lockDestination), BinaryEntry((lockIdStr + keyLockAssetSource), tokenSourceAndAddress)]
123+ else throw("Strict value is not equal to itself.")
124+ }
125+ else throw("Strict value is not equal to itself.")
126+ }
127+ else throw("Strict value is not equal to itself.")
128+ }
129+
130+

github/deemru/w8io/873ac7e 
29.71 ms