tx · BxykfUYpQrMHXFD7m7dHEaxvtWEQLMUrTy2Ctdg8Yray

3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c:  -0.01000000 Waves

2023.09.27 13:37 [2773704] smart account 3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c > SELF 0.00000000 Waves

{ "type": 13, "id": "BxykfUYpQrMHXFD7m7dHEaxvtWEQLMUrTy2Ctdg8Yray", "fee": 1000000, "feeAssetId": null, "timestamp": 1695811070130, "version": 2, "chainId": 84, "sender": "3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c", "senderPublicKey": "5FyjUYCR5Q8jvG6ri6Ysz574HerUK6r1LJzzQ7DvSkLk", "proofs": [ "2ZKitZRqKsqvEBLyPbpnviabpZsU62UZ1TNEcQmXhzxBtGJc4SLP5iSiH3rm3daKZUe4pYUAz5V4mEHdJRytorFQ" ], "script": "base64:BgISCAISBgoEAgICARIAEgQKAggCEwAJc2VwYXJhdG9yAgJfXwELbXVzdEFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQEFdGhyb3cAAQhtdXN0VGhpcwEBaQkBC211c3RBZGRyZXNzAgUBaQUEdGhpcwARa1NlcnZpY2VQdWJsaWNLZXkCFCVzX19zZXJ2aWNlUHVibGljS2V5AA1rQm90UHVibGljS2V5AhAlc19fYm90UHVibGljS2V5ABFrRmFjdG9yeVB1YmxpY0tleQIUJXNfX2ZhY3RvcnlQdWJsaWNLZXkAD2tPd25lclB1YmxpY0tleQISJXNfX293bmVyUHVibGljS2V5ABJrQWNjb3VudFNjcmlwdEhhc2gCFSVzX19hY2NvdW50U2NyaXB0SGFzaAERYWNjb3VudFNjcmlwdEhhc2gACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUEdGhpcwUSa0FjY291bnRTY3JpcHRIYXNoAh5hY2NvdW50IHNjcmlwdCBoYXNoIGlzIG5vdCBzZXQACGtDb3VudGVyAgslc19fY291bnRlcgEHY291bnRlcgAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUIa0NvdW50ZXIAAAANa1Jld2FyZEFtb3VudAIQJXNfX3Jld2FyZEFtb3VudAEMcmV3YXJkQW1vdW50AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFDWtSZXdhcmRBbW91bnQCGHJld2FyZCBhbW91bnQgaXMgbm90IHNldAERa1JlcXVlc3RDb21wbGV0ZWQBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUJcmVxdWVzdElkCQDMCAICCWNvbXBsZXRlZAUDbmlsBQlzZXBhcmF0b3IBEHJlcXVlc3RDb21wbGV0ZWQBCXJlcXVlc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCbCAIFBHRoaXMJARFrUmVxdWVzdENvbXBsZXRlZAEFCXJlcXVlc3RJZAIUcmVxdWVzdCBpcyBub3QgZm91bmQBDWtSZXF1ZXN0T3duZXIBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUJcmVxdWVzdElkCQDMCAICBW93bmVyBQNuaWwFCXNlcGFyYXRvcgEMcmVxdWVzdE93bmVyAQlyZXF1ZXN0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQR0aGlzCQERa1JlcXVlc3RDb21wbGV0ZWQBBQlyZXF1ZXN0SWQCFHJlcXVlc3QgaXMgbm90IGZvdW5kAA5zZXJ2aWNlQWRkcmVzcwkApwgBCQERQGV4dHJOYXRpdmUoMTA1MikCBQR0aGlzBRFrU2VydmljZVB1YmxpY0tleQAMYm90UHVibGljS2V5CQERQGV4dHJOYXRpdmUoMTA1MikCBQR0aGlzBQ1rQm90UHVibGljS2V5AwFpAQRpbml0BBBzZXJ2aWNlUHVibGljS2V5DGJvdFB1YmxpY0tleRFhY2NvdW50U2NyaXB0SGFzaAxyZXdhcmRBbW91bnQEC2NoZWNrQ2FsbGVyCQEIbXVzdFRoaXMBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAlAoCCQDMCAIJAQtCaW5hcnlFbnRyeQIFEWtTZXJ2aWNlUHVibGljS2V5BRBzZXJ2aWNlUHVibGljS2V5CQDMCAIJAQtCaW5hcnlFbnRyeQIFDWtCb3RQdWJsaWNLZXkFDGJvdFB1YmxpY0tleQkAzAgCCQELQmluYXJ5RW50cnkCBRJrQWNjb3VudFNjcmlwdEhhc2gFEWFjY291bnRTY3JpcHRIYXNoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rUmV3YXJkQW1vdW50BQxyZXdhcmRBbW91bnQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdyZXF1ZXN0AAQGY2hlY2tzCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkAAgECFTEgcGF5bWVudCBpcyByZXF1aXJlZAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAYJAAIBAg1pbnZhbGlkIGFzc2V0CQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQxyZXdhcmRBbW91bnQABgkAAgECDmludmFsaWQgYW1vdW50BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MECXJlcXVlc3RJZAkA2AQBCQD3AwEJAMsBAggIBQFpBmNhbGxlcgVieXRlcwkAmgMBCQEHY291bnRlcgAJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEWtSZXF1ZXN0Q29tcGxldGVkAQUJcmVxdWVzdElkBwkAzAgCCQELQmluYXJ5RW50cnkCCQENa1JlcXVlc3RPd25lcgEFCXJlcXVlc3RJZAgFAWkPY2FsbGVyUHVibGljS2V5BQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY29tcGxldGUCCXJlcXVlc3RJZBJyZWNpcGllbnRQdWJsaWNLZXkEBmNoZWNrcwkAzAgCAwkBASEBCQEQcmVxdWVzdENvbXBsZXRlZAEFCXJlcXVlc3RJZAYJAAIBAhxyZXF1ZXN0IGlzIGFscmVhZHkgY29tcGxldGVkCQDMCAIDCQAAAgkA8QcBCAUBaQZjYWxsZXIJARFhY2NvdW50U2NyaXB0SGFzaAAGCQACAQIOaW52YWxpZCBzY3JpcHQJAMwIAgMEByRtYXRjaDAJAJwIAggFAWkGY2FsbGVyBRFrRmFjdG9yeVB1YmxpY0tleQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQAAAgkApwgBBQFiBQR0aGlzBwYJAAIBAhppbnZhbGlkIGZhY3RvcnkgcHVibGljIGtleQkAzAgCAwQHJG1hdGNoMAkAnAgCCAUBaQZjYWxsZXIFD2tPd25lclB1YmxpY0tleQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQAAAgUBYgkBDHJlcXVlc3RPd25lcgEFCXJlcXVlc3RJZAcGCQACAQIYaW52YWxpZCBvd25lciBwdWJsaWMga2V5BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEBnJlc3VsdAkA/AcECAUBaQZjYWxsZXICB2FwcHJvdmUFA25pbAUDbmlsCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARFrUmVxdWVzdENvbXBsZXRlZAEFCXJlcXVlc3RJZAYFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAIys6uk=", "height": 2773704, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: BxgXfV6myP6xqbHqYHeDFCKsKgV2PUdcjVdaa8NBAAjp Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let separator = "__"
5+
6+func mustAddress (i,address) = if ((i.caller == address))
7+ then true
8+ else throw()
9+
10+
11+func mustThis (i) = mustAddress(i, this)
12+
13+
14+let kServicePublicKey = "%s__servicePublicKey"
15+
16+let kBotPublicKey = "%s__botPublicKey"
17+
18+let kFactoryPublicKey = "%s__factoryPublicKey"
19+
20+let kOwnerPublicKey = "%s__ownerPublicKey"
21+
22+let kAccountScriptHash = "%s__accountScriptHash"
23+
24+func accountScriptHash () = valueOrErrorMessage(getBinary(this, kAccountScriptHash), "account script hash is not set")
25+
26+
27+let kCounter = "%s__counter"
28+
29+func counter () = valueOrElse(getInteger(this, kCounter), 0)
30+
31+
32+let kRewardAmount = "%s__rewardAmount"
33+
34+func rewardAmount () = valueOrErrorMessage(getInteger(this, kRewardAmount), "reward amount is not set")
35+
36+
37+func kRequestCompleted (requestId) = makeString(["%s%s", requestId, "completed"], separator)
38+
39+
40+func requestCompleted (requestId) = valueOrErrorMessage(getBoolean(this, kRequestCompleted(requestId)), "request is not found")
41+
42+
43+func kRequestOwner (requestId) = makeString(["%s%s", requestId, "owner"], separator)
44+
45+
46+func requestOwner (requestId) = valueOrErrorMessage(getBinary(this, kRequestCompleted(requestId)), "request is not found")
47+
48+
49+let serviceAddress = addressFromPublicKey(getBinaryValue(this, kServicePublicKey))
50+
51+let botPublicKey = getBinaryValue(this, kBotPublicKey)
52+
53+@Callable(i)
54+func init (servicePublicKey,botPublicKey,accountScriptHash,rewardAmount) = {
55+ let checkCaller = mustThis(i)
56+ if ((checkCaller == checkCaller))
57+ then $Tuple2([BinaryEntry(kServicePublicKey, servicePublicKey), BinaryEntry(kBotPublicKey, botPublicKey), BinaryEntry(kAccountScriptHash, accountScriptHash), IntegerEntry(kRewardAmount, rewardAmount)], unit)
58+ else throw("Strict value is not equal to itself.")
59+ }
60+
61+
62+
63+@Callable(i)
64+func request () = {
65+ let checks = [if ((size(i.payments) == 1))
66+ then true
67+ else throw("1 payment is required"), if ((i.payments[0].assetId == unit))
68+ then true
69+ else throw("invalid asset"), if ((i.payments[0].amount == rewardAmount()))
70+ then true
71+ else throw("invalid amount")]
72+ if ((checks == checks))
73+ then {
74+ let requestId = toBase58String(sha256((i.caller.bytes + toBytes(counter()))))
75+ $Tuple2([BooleanEntry(kRequestCompleted(requestId), false), BinaryEntry(kRequestOwner(requestId), i.callerPublicKey)], unit)
76+ }
77+ else throw("Strict value is not equal to itself.")
78+ }
79+
80+
81+
82+@Callable(i)
83+func complete (requestId,recipientPublicKey) = {
84+ let checks = [if (!(requestCompleted(requestId)))
85+ then true
86+ else throw("request is already completed"), if ((scriptHash(i.caller) == accountScriptHash()))
87+ then true
88+ else throw("invalid script"), if ( match getBinary(i.caller, kFactoryPublicKey) {
89+ case b: ByteVector =>
90+ (addressFromPublicKey(b) == this)
91+ case _ =>
92+ false
93+ })
94+ then true
95+ else throw("invalid factory public key"), if ( match getBinary(i.caller, kOwnerPublicKey) {
96+ case b: ByteVector =>
97+ (b == requestOwner(requestId))
98+ case _ =>
99+ false
100+ })
101+ then true
102+ else throw("invalid owner public key")]
103+ if ((checks == checks))
104+ then {
105+ let result = invoke(i.caller, "approve", nil, nil)
106+ $Tuple2([BooleanEntry(kRequestCompleted(requestId), true)], result)
107+ }
108+ else throw("Strict value is not equal to itself.")
109+ }
110+
111+

github/deemru/w8io/169f3d6 
22.21 ms