tx · FVzZgwHLVW79Tz8ymrpPrZEWTi3PNoEiLXGj43m5aiGD

3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c:  -0.01000000 Waves

2023.09.27 14:41 [2773766] smart account 3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c > SELF 0.00000000 Waves

{ "type": 13, "id": "FVzZgwHLVW79Tz8ymrpPrZEWTi3PNoEiLXGj43m5aiGD", "fee": 1000000, "feeAssetId": null, "timestamp": 1695814951951, "version": 2, "chainId": 84, "sender": "3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c", "senderPublicKey": "5FyjUYCR5Q8jvG6ri6Ysz574HerUK6r1LJzzQ7DvSkLk", "proofs": [ "2ao693y8R6ZRQDVyaUvw6XNLPN6GQimm1d9hwCCygZQb7BuGqxywdvMNoAAvHd1Zj12yhvze7PwxhnRs8W4WAXEB" ], "script": "base64:BgISCAISBgoEAgICARIAEgQKAggCFAAJc2VwYXJhdG9yAgJfXwELbXVzdEFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQEFdGhyb3cAAQhtdXN0VGhpcwEBaQkBC211c3RBZGRyZXNzAgUBaQUEdGhpcwARa1NlcnZpY2VQdWJsaWNLZXkCFCVzX19zZXJ2aWNlUHVibGljS2V5AA1rQm90UHVibGljS2V5AhAlc19fYm90UHVibGljS2V5ABFrRmFjdG9yeVB1YmxpY0tleQIUJXNfX2ZhY3RvcnlQdWJsaWNLZXkAD2tPd25lclB1YmxpY0tleQISJXNfX293bmVyUHVibGljS2V5ABFrQ3JlYXRvclB1YmxpY0tleQIUJXNfX2NyZWF0b3JQdWJsaWNLZXkAEmtBY2NvdW50U2NyaXB0SGFzaAIVJXNfX2FjY291bnRTY3JpcHRIYXNoARFhY2NvdW50U2NyaXB0SGFzaAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQR0aGlzBRJrQWNjb3VudFNjcmlwdEhhc2gCHmFjY291bnQgc2NyaXB0IGhhc2ggaXMgbm90IHNldAAIa0NvdW50ZXICCyVzX19jb3VudGVyAQdjb3VudGVyAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQhrQ291bnRlcgAAAA1rUmV3YXJkQW1vdW50AhAlc19fcmV3YXJkQW1vdW50AQxyZXdhcmRBbW91bnQACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUNa1Jld2FyZEFtb3VudAIYcmV3YXJkIGFtb3VudCBpcyBub3Qgc2V0ARFrUmVxdWVzdENvbXBsZXRlZAEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCBQlyZXF1ZXN0SWQJAMwIAgIJY29tcGxldGVkBQNuaWwFCXNlcGFyYXRvcgEQcmVxdWVzdENvbXBsZXRlZAEJcmVxdWVzdElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJsIAgUEdGhpcwkBEWtSZXF1ZXN0Q29tcGxldGVkAQUJcmVxdWVzdElkAhRyZXF1ZXN0IGlzIG5vdCBmb3VuZAENa1JlcXVlc3RPd25lcgEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCBQlyZXF1ZXN0SWQJAMwIAgIFb3duZXIFA25pbAUJc2VwYXJhdG9yAQxyZXF1ZXN0T3duZXIBCXJlcXVlc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFBHRoaXMJAQ1rUmVxdWVzdE93bmVyAQUJcmVxdWVzdElkAhRyZXF1ZXN0IGlzIG5vdCBmb3VuZAAOc2VydmljZUFkZHJlc3MJAKcIAQkBEUBleHRyTmF0aXZlKDEwNTIpAgUEdGhpcwURa1NlcnZpY2VQdWJsaWNLZXkADGJvdFB1YmxpY0tleQkBEUBleHRyTmF0aXZlKDEwNTIpAgUEdGhpcwUNa0JvdFB1YmxpY0tleQMBaQEEaW5pdAQQc2VydmljZVB1YmxpY0tleQxib3RQdWJsaWNLZXkRYWNjb3VudFNjcmlwdEhhc2gMcmV3YXJkQW1vdW50BAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAJQKAgkAzAgCCQELQmluYXJ5RW50cnkCBRFrU2VydmljZVB1YmxpY0tleQUQc2VydmljZVB1YmxpY0tleQkAzAgCCQELQmluYXJ5RW50cnkCBQ1rQm90UHVibGljS2V5BQxib3RQdWJsaWNLZXkJAMwIAgkBC0JpbmFyeUVudHJ5AgUSa0FjY291bnRTY3JpcHRIYXNoBRFhY2NvdW50U2NyaXB0SGFzaAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa1Jld2FyZEFtb3VudAUMcmV3YXJkQW1vdW50BQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHcmVxdWVzdAAEBmNoZWNrcwkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAIBAhUxIHBheW1lbnQgaXMgcmVxdWlyZWQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQGCQACAQINaW52YWxpZCBhc3NldAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQEMcmV3YXJkQW1vdW50AAYJAAIBAg5pbnZhbGlkIGFtb3VudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAlyZXF1ZXN0SWQJANgEAQkA9wMBCQDLAQIICAUBaQZjYWxsZXIFYnl0ZXMJAJoDAQkBB2NvdW50ZXIACQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARFrUmVxdWVzdENvbXBsZXRlZAEFCXJlcXVlc3RJZAcJAMwIAgkBC0JpbmFyeUVudHJ5AgkBDWtSZXF1ZXN0T3duZXIBBQlyZXF1ZXN0SWQIBQFpD2NhbGxlclB1YmxpY0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUIa0NvdW50ZXIJAGQCCQEHY291bnRlcgAAAQUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGNvbXBsZXRlAglyZXF1ZXN0SWQQYWNjb3VudFB1YmxpY0tleQQGY2hlY2tzCQDMCAIDCQEBIQEJARByZXF1ZXN0Q29tcGxldGVkAQUJcmVxdWVzdElkBgkAAgECHHJlcXVlc3QgaXMgYWxyZWFkeSBjb21wbGV0ZWQJAMwIAgMJAAACCQDxBwEIBQFpBmNhbGxlcgkBEWFjY291bnRTY3JpcHRIYXNoAAYJAAIBAg5pbnZhbGlkIHNjcmlwdAkAzAgCAwQHJG1hdGNoMAkAnAgCCAUBaQZjYWxsZXIFEWtGYWN0b3J5UHVibGljS2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJAAACCQCnCAEFAWIFBHRoaXMHBgkAAgECGmludmFsaWQgZmFjdG9yeSBwdWJsaWMga2V5CQDMCAIDBAckbWF0Y2gwCQCcCAIIBQFpBmNhbGxlcgUPa093bmVyUHVibGljS2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJAAACBQFiCQEMcmVxdWVzdE93bmVyAQUJcmVxdWVzdElkBwYJAAIBAhhpbnZhbGlkIG93bmVyIHB1YmxpYyBrZXkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQOYWNjb3VudEFkZHJlc3MJAKcIAQUQYWNjb3VudFB1YmxpY0tleQQQY3JlYXRvclB1YmxpY0tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmFjY291bnRBZGRyZXNzBRFrQ3JlYXRvclB1YmxpY0tleQIdY3JlYXRvciBwdWJsaWMga2V5IGlzIG5vdCBzZXQEDmNyZWF0b3JBZGRyZXNzCQCnCAEFEGNyZWF0b3JQdWJsaWNLZXkEBnJlc3VsdAkA/AcEBQ5hY2NvdW50QWRkcmVzcwIHYXBwcm92ZQUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEWtSZXF1ZXN0Q29tcGxldGVkAQUJcmVxdWVzdElkBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5jcmVhdG9yQWRkcmVzcwkBDHJld2FyZEFtb3VudAAFBHVuaXQFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuABY5TBs=", "height": 2773766, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CBmUfgwJ6H3VyFs6q2MJ4F6Z2qmiJ2E6NtJVDTCz2sVJ Next: 52UDy65RNS29aikC2CuuPbHQjnq13HFAUit4vngCNody Diff:
OldNewDifferences
1818 let kFactoryPublicKey = "%s__factoryPublicKey"
1919
2020 let kOwnerPublicKey = "%s__ownerPublicKey"
21+
22+let kCreatorPublicKey = "%s__creatorPublicKey"
2123
2224 let kAccountScriptHash = "%s__accountScriptHash"
2325
8082
8183
8284 @Callable(i)
83-func complete (requestId,recipientPublicKey) = {
85+func complete (requestId,accountPublicKey) = {
8486 let checks = [if (!(requestCompleted(requestId)))
8587 then true
8688 else throw("request is already completed"), if ((scriptHash(i.caller) == accountScriptHash()))
102104 else throw("invalid owner public key")]
103105 if ((checks == checks))
104106 then {
105- let result = reentrantInvoke(i.caller, "approve", nil, nil)
106- $Tuple2([BooleanEntry(kRequestCompleted(requestId), true)], result)
107+ let accountAddress = addressFromPublicKey(accountPublicKey)
108+ let creatorPublicKey = valueOrErrorMessage(getBinary(accountAddress, kCreatorPublicKey), "creator public key is not set")
109+ let creatorAddress = addressFromPublicKey(creatorPublicKey)
110+ let result = invoke(accountAddress, "approve", nil, nil)
111+ $Tuple2([BooleanEntry(kRequestCompleted(requestId), true), ScriptTransfer(creatorAddress, rewardAmount(), unit)], result)
107112 }
108113 else throw("Strict value is not equal to itself.")
109114 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 func mustAddress (i,address) = if ((i.caller == address))
77 then true
88 else throw()
99
1010
1111 func mustThis (i) = mustAddress(i, this)
1212
1313
1414 let kServicePublicKey = "%s__servicePublicKey"
1515
1616 let kBotPublicKey = "%s__botPublicKey"
1717
1818 let kFactoryPublicKey = "%s__factoryPublicKey"
1919
2020 let kOwnerPublicKey = "%s__ownerPublicKey"
21+
22+let kCreatorPublicKey = "%s__creatorPublicKey"
2123
2224 let kAccountScriptHash = "%s__accountScriptHash"
2325
2426 func accountScriptHash () = valueOrErrorMessage(getBinary(this, kAccountScriptHash), "account script hash is not set")
2527
2628
2729 let kCounter = "%s__counter"
2830
2931 func counter () = valueOrElse(getInteger(this, kCounter), 0)
3032
3133
3234 let kRewardAmount = "%s__rewardAmount"
3335
3436 func rewardAmount () = valueOrErrorMessage(getInteger(this, kRewardAmount), "reward amount is not set")
3537
3638
3739 func kRequestCompleted (requestId) = makeString(["%s%s", requestId, "completed"], separator)
3840
3941
4042 func requestCompleted (requestId) = valueOrErrorMessage(getBoolean(this, kRequestCompleted(requestId)), "request is not found")
4143
4244
4345 func kRequestOwner (requestId) = makeString(["%s%s", requestId, "owner"], separator)
4446
4547
4648 func requestOwner (requestId) = valueOrErrorMessage(getBinary(this, kRequestOwner(requestId)), "request is not found")
4749
4850
4951 let serviceAddress = addressFromPublicKey(getBinaryValue(this, kServicePublicKey))
5052
5153 let botPublicKey = getBinaryValue(this, kBotPublicKey)
5254
5355 @Callable(i)
5456 func init (servicePublicKey,botPublicKey,accountScriptHash,rewardAmount) = {
5557 let checkCaller = mustThis(i)
5658 if ((checkCaller == checkCaller))
5759 then $Tuple2([BinaryEntry(kServicePublicKey, servicePublicKey), BinaryEntry(kBotPublicKey, botPublicKey), BinaryEntry(kAccountScriptHash, accountScriptHash), IntegerEntry(kRewardAmount, rewardAmount)], unit)
5860 else throw("Strict value is not equal to itself.")
5961 }
6062
6163
6264
6365 @Callable(i)
6466 func request () = {
6567 let checks = [if ((size(i.payments) == 1))
6668 then true
6769 else throw("1 payment is required"), if ((i.payments[0].assetId == unit))
6870 then true
6971 else throw("invalid asset"), if ((i.payments[0].amount == rewardAmount()))
7072 then true
7173 else throw("invalid amount")]
7274 if ((checks == checks))
7375 then {
7476 let requestId = toBase58String(sha256((i.caller.bytes + toBytes(counter()))))
7577 $Tuple2([BooleanEntry(kRequestCompleted(requestId), false), BinaryEntry(kRequestOwner(requestId), i.callerPublicKey), IntegerEntry(kCounter, (counter() + 1))], unit)
7678 }
7779 else throw("Strict value is not equal to itself.")
7880 }
7981
8082
8183
8284 @Callable(i)
83-func complete (requestId,recipientPublicKey) = {
85+func complete (requestId,accountPublicKey) = {
8486 let checks = [if (!(requestCompleted(requestId)))
8587 then true
8688 else throw("request is already completed"), if ((scriptHash(i.caller) == accountScriptHash()))
8789 then true
8890 else throw("invalid script"), if ( match getBinary(i.caller, kFactoryPublicKey) {
8991 case b: ByteVector =>
9092 (addressFromPublicKey(b) == this)
9193 case _ =>
9294 false
9395 })
9496 then true
9597 else throw("invalid factory public key"), if ( match getBinary(i.caller, kOwnerPublicKey) {
9698 case b: ByteVector =>
9799 (b == requestOwner(requestId))
98100 case _ =>
99101 false
100102 })
101103 then true
102104 else throw("invalid owner public key")]
103105 if ((checks == checks))
104106 then {
105- let result = reentrantInvoke(i.caller, "approve", nil, nil)
106- $Tuple2([BooleanEntry(kRequestCompleted(requestId), true)], result)
107+ let accountAddress = addressFromPublicKey(accountPublicKey)
108+ let creatorPublicKey = valueOrErrorMessage(getBinary(accountAddress, kCreatorPublicKey), "creator public key is not set")
109+ let creatorAddress = addressFromPublicKey(creatorPublicKey)
110+ let result = invoke(accountAddress, "approve", nil, nil)
111+ $Tuple2([BooleanEntry(kRequestCompleted(requestId), true), ScriptTransfer(creatorAddress, rewardAmount(), unit)], result)
107112 }
108113 else throw("Strict value is not equal to itself.")
109114 }
110115
111116

github/deemru/w8io/873ac7e 
41.68 ms