tx · CaTH2KLxnsnSEcHNRfFAjhm1B8QW1m1NgV75nRAu2FAB

3N9J3wuPH3fe1vTsLwJSticprdzZWXzZtMb:  -0.01000000 Waves

2022.05.21 18:46 [2061635] smart account 3N9J3wuPH3fe1vTsLwJSticprdzZWXzZtMb > SELF 0.00000000 Waves

{ "type": 13, "id": "CaTH2KLxnsnSEcHNRfFAjhm1B8QW1m1NgV75nRAu2FAB", "fee": 1000000, "feeAssetId": null, "timestamp": 1653148095451, "version": 2, "chainId": 84, "sender": "3N9J3wuPH3fe1vTsLwJSticprdzZWXzZtMb", "senderPublicKey": "6YTEFQ5JhfL8TsLSjyXNG4TVYq2Jmu3nkmXvxD1Nj5mn", "proofs": [ "4z3isXRBAj7MLSiezMKYNcKX4LAVMWd7kvVxaMxS6TLbQbDyqxPYw7H1tnhcX4iM1vUG2L6EsMJHUBPdsvAaDm9q" ], "script": "base64:AAIFAAAAAAAAACwIAhIGCgQCAgICEggKBgICAQICAhIHCgUCAgECAhIDCgECEgMKAQISAwoBAgAAABUAAAAAEGtleUxvY2tSZWNpcGllbnQCAAAAA19scgAAAAANa2V5TG9ja0Ftb3VudAIAAAADX2xhAAAAABJrZXlMb2NrRGVzdGluYXRpb24CAAAAA19sZAAAAAASa2V5TG9ja0Fzc2V0U291cmNlAgAAAARfbGFzAAAAAAprZXlWZXJzaW9uAgAAAAJfdgAAAAAJa2V5QnJpZGdlAgAAAAJfYgAAAAAJa2V5T3JhY2xlAgAAAAJfbwAAAAAIa2V5QWRtaW4CAAAAAl9hAAAAAAlrZXlVbmxvY2sCAAAAAl91AAAAAA9lcnJVbmF1dGhvcml6ZWQCAAAADHVuYXV0aG9yaXplZAAAAAAQZXJyVW5pbml0aWFsaXplZAIAAAANdW5pbml0aWFsaXplZAAAAAATZXJySW52YWxpZFNpZ25hdHVyZQIAAAARaW52YWxpZCBzaWduYXR1cmUAAAAAEWVyckFscmVhZHlDbGFpbWVkAgAAAAdjbGFpbWVkAAAAABBlcnJBbHJlYWR5TG9ja2VkAgAAAAZsb2NrZWQAAAAAEGVyckludmFsaWRMb2NrSWQCAAAADmludmFsaWQgbG9ja0lkAAAAAApjaGFpbldhdmVzAgAAAAhWMEZXUlE9PQEAAAAMYXNzZXJ0Q2FsbGVyAAAAAgAAAAFpAAAAA2tleQQAAAAHJG1hdGNoMAkABCEAAAABBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAACWF1dGhvcml0eQUAAAAHJG1hdGNoMAMJAQAAAAIhPQAAAAIFAAAACWF1dGhvcml0eQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkAAAIAAAABBQAAAA9lcnJVbmF1dGhvcml6ZWQFAAAABHVuaXQJAAACAAAAAQUAAAAQZXJyVW5pbml0aWFsaXplZAEAAAAUYXNzZXJ0Q2FsbGVySXNCcmlkZ2UAAAABAAAAAWkJAQAAAAxhc3NlcnRDYWxsZXIAAAACBQAAAAFpBQAAAAlrZXlCcmlkZ2UBAAAAE2Fzc2VydENhbGxlcklzQWRtaW4AAAABAAAAAWkJAQAAAAxhc3Nl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BgUAAAADbmlsBgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACmNyZWF0ZUxvY2sAAAAFAAAABmxvY2tJZAAAAAlyZWNpcGllbnQAAAAGYW1vdW50AAAAD2xvY2tEZXN0aW5hdGlvbgAAABVhc3NldFNvdXJjZUFuZEFkZHJlc3MEAAAACWxvY2tJZFN0cgkAAloAAAABBQAAAAZsb2NrSWQEAAAAEGxvY2tSZWNpcGllbnRLZXkJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAABBrZXlMb2NrUmVjaXBpZW50BAAAAAtjaGVja0NhbGxlcgkBAAAAFGFzc2VydENhbGxlcklzQnJpZGdlAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAAtjaGVja0xvY2tJZAkBAAAAEWFzc2VydFZhbGlkTG9ja0lkAAAAAQUAAAAGbG9ja0lkAwkAAAAAAAACBQAAAAtjaGVja0xvY2tJZAUAAAALY2hlY2tMb2NrSWQEAAAACWNoZWNrTG9jawkBAAAAE2Fzc2VydExvY2tOb3RFeGlzdHMAAAABBQAAABBsb2NrUmVjaXBpZW50S2V5AwkAAAAAAAACBQAAAAljaGVja0xvY2sFAAAACWNoZWNrTG9jawkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACCQABLAAAAAIFAAAACWxvY2tJZFN0cgUAAAAQa2V5TG9ja1JlY2lwaWVudAUAAAAJcmVjaXBpZW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACWxvY2tJZFN0cgUAAAANa2V5TG9ja0Ftb3VudAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIJAAEsAAAAAgUAAAAJbG9ja0lkU3RyBQAAABJrZXlMb2NrRGVzdGluYXRpb24FAAAAD2xvY2tEZXN0aW5hdGlvbgkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACCQABLAAAAAIFAAAACWxvY2tJZFN0cgUAAAASa2V5TG9ja0Fzc2V0U291cmNlBQAAABVhc3NldFNvdXJjZUFuZEFkZHJlc3MFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAhzZXRBZG1pbgAAAAEAAAAIbmV3QWRtaW4EAAAAC2NoZWNrQ2FsbGVyCQEAAAATYXNzZXJ0Q2FsbGVySXNBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACBQAAAAhrZXlBZG1pbgUAAAAIbmV3QWRtaW4FAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAJc2V0T3JhY2xlAAAAAQAAAAluZXdPcmFjbGUEAAAAC2NoZWNrQ2FsbGVyCQEAAAATYXNzZXJ0Q2FsbGVySXNBZG1pbgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALQmluYXJ5RW50cnkAAAACBQAAAAlrZXlPcmFjbGUFAAAACW5ld09yYWNsZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAlzZXRCcmlkZ2UAAAABAAAACW5ld0JyaWRnZQQAAAALY2hlY2tDYWxsZXIJAQAAABNhc3NlcnRDYWxsZXJJc0FkbWluAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAIFAAAACWtleUJyaWRnZQUAAAAJbmV3QnJpZGdlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAJlbLbE=", "height": 2061635, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9PRY8NtqmKyvqp7prE1fzSwiumYzyLExDVKHx2kqEhsa Next: 4xUQjh14G5Ac6zsRHHjCZ8V5bSFGxpNf66RSSk8AqAdH Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyLockRecipient = "_lr"
55
66 let keyLockAmount = "_la"
77
88 let keyLockDestination = "_ld"
99
1010 let keyLockAssetSource = "_las"
1111
1212 let keyVersion = "_v"
1313
1414 let keyBridge = "_b"
1515
1616 let keyOracle = "_o"
1717
1818 let keyAdmin = "_a"
1919
2020 let keyUnlock = "_u"
2121
2222 let errUnauthorized = "unauthorized"
2323
2424 let errUninitialized = "uninitialized"
2525
2626 let errInvalidSignature = "invalid signature"
2727
2828 let errAlreadyClaimed = "claimed"
2929
3030 let errAlreadyLocked = "locked"
3131
3232 let errInvalidLockId = "invalid lockId"
3333
3434 let chainWaves = "V0FWRQ=="
3535
3636 func assertCaller (i,key) = match getBinary(key) {
3737 case authority: ByteVector =>
3838 if ((authority != i.caller.bytes))
3939 then throw(errUnauthorized)
4040 else unit
4141 case _ =>
4242 throw(errUninitialized)
4343 }
4444
4545
4646 func assertCallerIsBridge (i) = assertCaller(i, keyBridge)
4747
4848
4949 func assertCallerIsAdmin (i) = assertCaller(i, keyAdmin)
5050
5151
5252 func assertValidLockId (lockId) = {
5353 let version = valueOrErrorMessage(getBinary(keyVersion), errUninitialized)
5454 if (if ((size(lockId) != 16))
5555 then true
5656 else (take(lockId, 1) != version))
5757 then throw(errInvalidLockId)
5858 else unit
5959 }
6060
6161
6262 func assertLockNotExists (lockRecipientKey) = match getBinary(lockRecipientKey) {
6363 case t: ByteVector =>
6464 throw(errAlreadyLocked)
6565 case _ =>
6666 unit
6767 }
6868
6969
7070 @Callable(i)
7171 func init (admin,version,bridge,oracle) = if (isDefined(getBinary(keyAdmin)))
7272 then throw(errUnauthorized)
7373 else [BinaryEntry(keyVersion, version), BinaryEntry(keyBridge, bridge), BinaryEntry(keyOracle, oracle), BinaryEntry(keyAdmin, admin)]
7474
7575
7676
7777 @Callable(i)
7878 func createUnlock (lockId,recipient,amount,lockSource,tokenSourceAndAddress,signature) = {
7979 let checkLockId = assertValidLockId(lockId)
8080 if ((checkLockId == checkLockId))
8181 then {
8282 let checkCaller = assertCallerIsBridge(i)
8383 if ((checkCaller == checkCaller))
8484 then {
8585 let lockIdStr = toBase64String(lockId)
8686 let lockSourceStr = toBase64String(lockSource)
8787 let unlockKey = (((lockSourceStr + "_") + lockIdStr) + keyUnlock)
8888 if (isDefined(getBoolean(unlockKey)))
8989 then throw(errAlreadyClaimed)
9090 else {
9191 let message = makeString([lockIdStr, toBase64String(recipient), toString(amount), lockSourceStr, toBase64String(tokenSourceAndAddress), chainWaves], "_")
9292 let hash = keccak256(toBytes(message))
9393 let recoveredKey = ecrecover(hash, signature)
9494 if ((recoveredKey != getBinaryValue(keyOracle)))
9595 then throw(errInvalidSignature)
9696 else $Tuple2([BooleanEntry(unlockKey, true)], true)
9797 }
9898 }
9999 else throw("Strict value is not equal to itself.")
100100 }
101101 else throw("Strict value is not equal to itself.")
102102 }
103103
104104
105105
106106 @Callable(i)
107107 func createLock (lockId,recipient,amount,lockDestination,assetSourceAndAddress) = {
108108 let lockIdStr = toBase64String(lockId)
109109 let lockRecipientKey = (lockIdStr + keyLockRecipient)
110110 let checkCaller = assertCallerIsBridge(i)
111111 if ((checkCaller == checkCaller))
112112 then {
113113 let checkLockId = assertValidLockId(lockId)
114114 if ((checkLockId == checkLockId))
115115 then {
116116 let checkLock = assertLockNotExists(lockRecipientKey)
117117 if ((checkLock == checkLock))
118118 then [BinaryEntry((lockIdStr + keyLockRecipient), recipient), IntegerEntry((lockIdStr + keyLockAmount), amount), BinaryEntry((lockIdStr + keyLockDestination), lockDestination), BinaryEntry((lockIdStr + keyLockAssetSource), assetSourceAndAddress)]
119119 else throw("Strict value is not equal to itself.")
120120 }
121121 else throw("Strict value is not equal to itself.")
122122 }
123123 else throw("Strict value is not equal to itself.")
124124 }
125125
126126
127127
128128 @Callable(i)
129129 func setAdmin (newAdmin) = {
130130 let checkCaller = assertCallerIsAdmin(i)
131131 if ((checkCaller == checkCaller))
132132 then [BinaryEntry(keyAdmin, newAdmin)]
133133 else throw("Strict value is not equal to itself.")
134134 }
135135
136136
137137
138138 @Callable(i)
139139 func setOracle (newOracle) = {
140140 let checkCaller = assertCallerIsAdmin(i)
141141 if ((checkCaller == checkCaller))
142142 then [BinaryEntry(keyOracle, newOracle)]
143143 else throw("Strict value is not equal to itself.")
144144 }
145145
146146
147147
148148 @Callable(i)
149149 func setBridge (newBridge) = {
150150 let checkCaller = assertCallerIsAdmin(i)
151151 if ((checkCaller == checkCaller))
152152 then [BinaryEntry(keyBridge, newBridge)]
153153 else throw("Strict value is not equal to itself.")
154154 }
155155
156156

github/deemru/w8io/873ac7e 
41.39 ms