tx · A93abH4KnwxCCo7Xa8KZfQcUD84QCCL1j2WHXj36txEw

3MuQJ2by8GXusfNAEdX1jYW2WMQbjVzwxzX:  -0.01000000 Waves

2023.09.27 13:48 [2773715] smart account 3MuQJ2by8GXusfNAEdX1jYW2WMQbjVzwxzX > SELF 0.00000000 Waves

{ "type": 13, "id": "A93abH4KnwxCCo7Xa8KZfQcUD84QCCL1j2WHXj36txEw", "fee": 1000000, "feeAssetId": null, "timestamp": 1695811748952, "version": 2, "chainId": 84, "sender": "3MuQJ2by8GXusfNAEdX1jYW2WMQbjVzwxzX", "senderPublicKey": "DCZ3si1pk7A23sVSwzZtghP1jZR2YyYEH2WaMxvELct9", "proofs": [ "5wPx9PTBS3qhJruUw9sV3NFfvM8bwni9GkgR2pZZ83iQH2vVvSAgpCEShRubhTGVbkZ1KEbwVCHXQtdKNr9EspxL" ], "script": "base64:BgIvCAISBAoCCAgSBAoCCAESBQoDAgECEgQKAgIBEgQKAgICEgQKAggCEgASBAoCCBgOABFrRmFjdG9yeVB1YmxpY0tleQIUJXNfX2ZhY3RvcnlQdWJsaWNLZXkAEWtTZXJ2aWNlUHVibGljS2V5AhQlc19fc2VydmljZVB1YmxpY0tleQAPa093bmVyUHVibGljS2V5AhIlc19fb3duZXJQdWJsaWNLZXkADWtCb3RQdWJsaWNLZXkCECVzX19ib3RQdWJsaWNLZXkACWtWZXJpZmllZAIMJXNfX3ZlcmlmaWVkAA5mYWN0b3J5QWRkcmVzcwkApwgBCQERQGV4dHJOYXRpdmUoMTA1MikCBQR0aGlzBRFrRmFjdG9yeVB1YmxpY0tleQAOc2VydmljZUFkZHJlc3MJAKcIAQkBEUBleHRyTmF0aXZlKDEwNTIpAgUOZmFjdG9yeUFkZHJlc3MFEWtTZXJ2aWNlUHVibGljS2V5AAxvd25lckFkZHJlc3MJAKcIAQkBEUBleHRyTmF0aXZlKDEwNTIpAgUEdGhpcwUPa093bmVyUHVibGljS2V5AAdpc1JlYWR5AwMJAQlpc0RlZmluZWQBCQCcCAIFBHRoaXMFEWtGYWN0b3J5UHVibGljS2V5CQEJaXNEZWZpbmVkAQkAnAgCBQR0aGlzBQ9rT3duZXJQdWJsaWNLZXkHCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCWtWZXJpZmllZAcHAQttdXN0QWRkcmVzcwIBaQdhZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUHYWRkcmVzcwYJAQV0aHJvdwABCG11c3RUaGlzAQFpCQELbXVzdEFkZHJlc3MCBQFpBQR0aGlzAQttdXN0U2VydmljZQEBaQkBC211c3RBZGRyZXNzAgUBaQUOc2VydmljZUFkZHJlc3MBCW11c3RPd25lcgEBaQkBC211c3RBZGRyZXNzAgUBaQUMb3duZXJBZGRyZXNzAQttdXN0RmFjdG9yeQEBaQkBC211c3RBZGRyZXNzAgUBaQUOZmFjdG9yeUFkZHJlc3MIAWkBC3N0cmluZ0VudHJ5AgNrZXkDdmFsAwkBC211c3RTZXJ2aWNlAQUBaQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQEMaW50ZWdlckVudHJ5AgNrZXkDdmFsAwkBC211c3RTZXJ2aWNlAQUBaQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFA3ZhbAUDbmlsBQNrZXkJAJQKAgUDbmlsBQR1bml0AWkBDXRyYW5zZmVyQXNzZXQDDnJlY2lwaWVudEJ5dGVzBmFtb3VudAdhc3NldElkAwkBC211c3RTZXJ2aWNlAQUBaQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMFBmFtb3VudAUHYXNzZXRJZAUDbmlsBQZhbW91bnQJAJQKAgUDbmlsBQR1bml0AWkBDXRyYW5zZmVyV2F2ZXMCDnJlY2lwaWVudEJ5dGVzBmFtb3VudAMJAQttdXN0U2VydmljZQEFAWkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFDnJlY2lwaWVudEJ5dGVzBQZhbW91bnQFBHVuaXQFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQRpbml0AhBmYWN0b3J5UHVibGljS2V5Dm93bmVyUHVibGljS2V5BAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAJQKAgkAzAgCCQELQmluYXJ5RW50cnkCBRFrRmFjdG9yeVB1YmxpY0tleQUQZmFjdG9yeVB1YmxpY0tleQkAzAgCCQELQmluYXJ5RW50cnkCBQ9rT3duZXJQdWJsaWNLZXkFDm93bmVyUHVibGljS2V5BQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY29tcGxldGUCCXJlcXVlc3RJZBJyZWNpcGllbnRQdWJsaWNLZXkEC2NoZWNrQ2FsbGVyCQEIbXVzdFRoaXMBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQGcmVzdWx0CQD9BwQFDmZhY3RvcnlBZGRyZXNzAghjb21wbGV0ZQkAzAgCBQlyZXF1ZXN0SWQJAMwIAgUScmVjaXBpZW50UHVibGljS2V5BQNuaWwFA25pbAkAlAoCBQNuaWwFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdhcHByb3ZlAAQLY2hlY2tDYWxsZXIJAQttdXN0RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCWtWZXJpZmllZAYFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRjYWxsAghmdW5jdGlvbgRhcmdzBAtjaGVja0NhbGxlcgkBCW11c3RPd25lcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAZyZXN1bHQJAP0HBAUOc2VydmljZUFkZHJlc3MFCGZ1bmN0aW9uCQDMCAIFBGFyZ3MFA25pbAgFAWkIcGF5bWVudHMJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAd0ZXN0bmV0CQAAAgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQEBVAQMYm90UHVibGljS2V5CQERQGV4dHJOYXRpdmUoMTA1MikCBQ5mYWN0b3J5QWRkcmVzcwUNa0JvdFB1YmxpY0tleQQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIFT3JkZXIJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGJvdFB1YmxpY0tleQMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgMFB2lzUmVhZHkHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwkBASEBBQd0ZXN0bmV0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleSnH0+k=", "height": 2773715, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: fyhFxzHXL9Zx8qT3awm5Dyn3gpYcW5RhbEjRauiLNMq Next: AdfbHKt54m7jJkCh6ENyEiKLWa8SScd7MzWRjYxA5QsR Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let factoryAddress = addressFromPublicKey(getBinaryValue(this, "factoryPublicKey"))
4+let kFactoryPublicKey = "%s__factoryPublicKey"
55
6-let serviceAddress = addressFromPublicKey(getBinaryValue(factoryAddress, "servicePublicKey"))
6+let kServicePublicKey = "%s__servicePublicKey"
77
8-let ownerAddress = addressFromPublicKey(getBinaryValue(this, "ownerPublicKey"))
8+let kOwnerPublicKey = "%s__ownerPublicKey"
99
10-func onlyAddress (i,address) = if ((i.caller == address))
10+let kBotPublicKey = "%s__botPublicKey"
11+
12+let kVerified = "%s__verified"
13+
14+let factoryAddress = addressFromPublicKey(getBinaryValue(this, kFactoryPublicKey))
15+
16+let serviceAddress = addressFromPublicKey(getBinaryValue(factoryAddress, kServicePublicKey))
17+
18+let ownerAddress = addressFromPublicKey(getBinaryValue(this, kOwnerPublicKey))
19+
20+let isReady = if (if (isDefined(getBinary(this, kFactoryPublicKey)))
21+ then isDefined(getBinary(this, kOwnerPublicKey))
22+ else false)
23+ then valueOrElse(getBoolean(this, kVerified), false)
24+ else false
25+
26+func mustAddress (i,address) = if ((i.caller == address))
1127 then true
1228 else throw()
1329
1430
15-func onlyThis (i) = onlyAddress(i, this)
31+func mustThis (i) = mustAddress(i, this)
1632
1733
18-func onlyService (i) = onlyAddress(i, serviceAddress)
34+func mustService (i) = mustAddress(i, serviceAddress)
1935
2036
21-func onlyOwner (i) = onlyAddress(i, ownerAddress)
37+func mustOwner (i) = mustAddress(i, ownerAddress)
38+
39+
40+func mustFactory (i) = mustAddress(i, factoryAddress)
2241
2342
2443 @Callable(i)
25-func stringEntry (key,val) = if (onlyService(i))
44+func stringEntry (key,val) = if (mustService(i))
2645 then $Tuple2([StringEntry(key, val)], key)
2746 else $Tuple2(nil, unit)
2847
2948
3049
3150 @Callable(i)
32-func integerEntry (key,val) = if (onlyService(i))
51+func integerEntry (key,val) = if (mustService(i))
3352 then $Tuple2([IntegerEntry(key, val)], key)
3453 else $Tuple2(nil, unit)
3554
3655
3756
3857 @Callable(i)
39-func transferAsset (recipientBytes,amount,assetId) = if (onlyService(i))
58+func transferAsset (recipientBytes,amount,assetId) = if (mustService(i))
4059 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, assetId)], amount)
4160 else $Tuple2(nil, unit)
4261
4362
4463
4564 @Callable(i)
46-func transferWaves (recipientBytes,amount) = if (onlyService(i))
65+func transferWaves (recipientBytes,amount) = if (mustService(i))
4766 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, unit)], amount)
4867 else $Tuple2(nil, unit)
4968
5069
5170
5271 @Callable(i)
53-func call (function,args) = if (onlyOwner(i))
54- then {
55- let result = reentrantInvoke(serviceAddress, function, [args], i.payments)
56- $Tuple2(nil, result)
57- }
58- else $Tuple2(nil, unit)
72+func init (factoryPublicKey,ownerPublicKey) = {
73+ let checkCaller = mustThis(i)
74+ if ((checkCaller == checkCaller))
75+ then $Tuple2([BinaryEntry(kFactoryPublicKey, factoryPublicKey), BinaryEntry(kOwnerPublicKey, ownerPublicKey)], unit)
76+ else throw("Strict value is not equal to itself.")
77+ }
78+
79+
80+
81+@Callable(i)
82+func complete (requestId,recipientPublicKey) = {
83+ let checkCaller = mustThis(i)
84+ if ((checkCaller == checkCaller))
85+ then {
86+ let result = reentrantInvoke(factoryAddress, "complete", [requestId, recipientPublicKey], nil)
87+ $Tuple2(nil, result)
88+ }
89+ else throw("Strict value is not equal to itself.")
90+ }
91+
92+
93+
94+@Callable(i)
95+func approve () = {
96+ let checkCaller = mustFactory(i)
97+ if ((checkCaller == checkCaller))
98+ then $Tuple2([BooleanEntry(kVerified, true)], unit)
99+ else throw("Strict value is not equal to itself.")
100+ }
101+
102+
103+
104+@Callable(i)
105+func call (function,args) = {
106+ let checkCaller = mustOwner(i)
107+ if ((checkCaller == checkCaller))
108+ then {
109+ let result = reentrantInvoke(serviceAddress, function, [args], i.payments)
110+ $Tuple2(nil, result)
111+ }
112+ else throw("Strict value is not equal to itself.")
113+ }
59114
60115
61116 @Verifier(tx)
62117 func verify () = {
63- let botPublicKey = getBinaryValue(factoryAddress, "botPublicKey")
118+ let testnet = (take(drop(this.bytes, 1), 1) == base58'2T')
119+ let botPublicKey = getBinaryValue(factoryAddress, kBotPublicKey)
64120 match tx {
65121 case _: Order =>
66122 sigVerify(tx.bodyBytes, tx.proofs[0], botPublicKey)
123+ case _: InvokeScriptTransaction =>
124+ if (isReady)
125+ then false
126+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
67127 case _ =>
68- sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
128+ if (!(testnet))
129+ then false
130+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
69131 }
70132 }
71133

github/deemru/w8io/873ac7e 
39.09 ms