tx · F4zvHSVB5MFMyVqkPfJ8RqdyCiQNWyZNyyVws5jszYgH

3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz:  -0.01000000 Waves

2022.10.03 16:31 [2256221] smart account 3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz > SELF 0.00000000 Waves

{ "type": 13, "id": "F4zvHSVB5MFMyVqkPfJ8RqdyCiQNWyZNyyVws5jszYgH", "fee": 1000000, "feeAssetId": null, "timestamp": 1664803891467, "version": 2, "chainId": 84, "sender": "3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz", "senderPublicKey": "2mHW72YTfnxJ1M8WsdUQjgpp3a2SUbt9mbAiePGiuJok", "proofs": [ "3qXx8e7qBVxZwSyY9tf5UxkX3mzd3gDesY33mYPWjPfydaGkYog1cqr8MxLUS9LG6LzDuLQDcs13qPJoGk357G26" ], "script": "base64:AAIFAAAAAAAAABIIAhIECgIIARIDCgEIEgMKAQgAAAAVAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQAAAAxtYXliZUFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAAxtYXliZUFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABpDYW4ndCBwYXJzZSBhZGRyZXNzIGZyb20gJwUAAAAMbWF5YmVBZGRyZXNzAgAAAAEnAQAAAAprZXlfZW50aXR5AAAAAwAAAARuYW1lAAAAAnBrAAAACHByb3BlcnR5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABG5hbWUCAAAAAV8FAAAAAnBrAgAAAAFfBQAAAAhwcm9wZXJ0eQEAAAAOa2V5X1Rva2VuX25hbWUAAAABAAAAB3Rva2VuSWQJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAFVG9rZW4FAAAAB3Rva2VuSWQCAAAABG5hbWUBAAAADmtleV9OYW1lX3Rva2VuAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABXRva2VuAQAAAA5rZXlfTmFtZV9vd25lcgAAAAEAAAAEbmFtZQkBAAAACmtleV9lbnRpdHkAAAADAgAAAAROYW1lBQAAAARuYW1lAgAAAAVvd25lcgEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAACWV4cGlyZXNBdAEAAAASa2V5X05hbWVfY3JlYXRlZEF0AAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAACWNyZWF0ZWRBdAEAAAAOa2V5X093bmVyX25hbWUAAAABAAAAB2FkZHJlc3MJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAFT3duZXIFAAAAB2FkZHJlc3MCAAAABG5hbWUAAAAAEmtleV9hdWN0aW9uQWRkcmVzcwIAAAAOYXVjdGlvbkFkZHJlc3MAAAAAGmtleV9uYW1lRXhwaXJhdGlvbkludGVydmFsAgAAABZuYW1lRXhwaXJhdGlvbkludGVydmFsAAAAABRrZXlfbWF4QXV0aG9yaXplZEZlZQIAAAAQbWF4QXV0aG9yaXplZEZlZQAAAAARYXVjdGlvbkFkZHJlc3NTdHIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwUAAAASa2V5X2F1Y3Rpb25BZGRyZXNzAAAAAA5hdWN0aW9uQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAABFhdWN0aW9uQWRkcmVzc1N0cgAAAAAWbmFtZUV4cGlyYXRpb25JbnRlcnZhbAkBAAAAEWdldEludGVnZXJPclRocm93AAAAAgUAAAAEdGhpcwUAAAAaa2V5X25hbWVFeHBpcmF0aW9uSW50ZXJ2YWwAAAAAEG1heEF1dGhvcml6ZWRGZWUJAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAFGtleV9tYXhBdXRob3JpemVkRmVlAQAAAAV3aG9JcwAAAAEAAAAEbmFtZQQAAAAJZXhwaXJlc0F0CQEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACBQAAAAR0aGlzCQEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQUAAAAEbmFtZQQAAAAFdG9rZW4JAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQUAAAAEbmFtZQQAAAAFb3duZXIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbmFtZQkABRUAAAADBQAAAAVvd25lcgUAAAAJZXhwaXJlc0F0BQAAAAV0b2tlbgEAAAARaXNSZWdpc3RlcmVkVG9rZW4AAAABAAAAB3Rva2VuSWQJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAA5rZXlfVG9rZW5fbmFtZQAAAAEFAAAAB3Rva2VuSWQBAAAAEGlzUmVnaXN0ZXJlZE5hbWUAAAABAAAABG5hbWUJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAA5rZXlfTmFtZV90b2tlbgAAAAEFAAAABG5hbWUBAAAADWlzRXhwaXJlZE5hbWUAAAABAAAABG5hbWUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEmtleV9OYW1lX2V4cGlyZXNBdAAAAAEFAAAABG5hbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAJZXhwaXJlc0F0BQAAAAckbWF0Y2gwCQAAZgAAAAIFAAAACWV4cGlyZXNBdAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAHAAAAAwAAAANpbnYBAAAABGluaXQAAAACAAAADmF1Y3Rpb25BZGRyZXNzAAAAFm5hbWVFeHBpcmF0aW9uSW50ZXJ2YWwDCQEAAAACIT0AAAACCAUAAAADaW52AAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABJrZXlfYXVjdGlvbkFkZHJlc3MFAAAADmF1Y3Rpb25BZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABprZXlfbmFtZUV4cGlyYXRpb25JbnRlcnZhbAUAAAAWbmFtZUV4cGlyYXRpb25JbnRlcnZhbAUAAAADbmlsAAAAA2lu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", "height": 2256221, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8pX3zFNXz9Hc7ZrtY5vp9s9JNkCaaSefPsKiPgEH5KVg Next: HXRBWk7aqRpaoZZ6jwwbLoR8RT9CB4v3qcbzcJoJeBER Diff:
OldNewDifferences
3131 func key_Owner_name (address) = key_entity("Owner", address, "name")
3232
3333
34-let key_authorizedPublicKey = "authorizedPublicKey"
35-
3634 let key_auctionAddress = "auctionAddress"
3735
3836 let key_nameExpirationInterval = "nameExpirationInterval"
3937
4038 let key_maxAuthorizedFee = "maxAuthorizedFee"
41-
42-let authorizedPublicKey = fromBase58String(getStringOrThrow(this, key_authorizedPublicKey))
43-
44-let authorizedAddress = addressFromPublicKey(authorizedPublicKey)
45-
46-let authorizedAddressStr = toString(authorizedAddress)
4739
4840 let auctionAddressStr = getStringOrThrow(this, key_auctionAddress)
4941
7567 }
7668
7769
78-func isAuthorizedProof (proofs) = if ((size(proofs) == 2))
79- then (proofs[0] == base58'')
80- else false
81-
82-
83-func isAuthorizedInvoke (tx) = {
84- let dApp = addressFromRecipient(tx.dApp)
85- let function = tx.function
86- if (if (if ((dApp == this))
87- then (function == "registerNameToken")
88- else false)
89- then (maxAuthorizedFee >= tx.fee)
90- else false)
91- then !(isDefined(tx.feeAssetId))
92- else false
93- }
94-
95-
96-func isAuthorizedIssue (tx) = if (if (if ((tx.decimals == 0))
97- then (tx.quantity == 1)
98- else false)
99- then !(tx.reissuable)
100- else false)
101- then (maxAuthorizedFee >= tx.fee)
102- else false
103-
104-
10570 @Callable(inv)
106-func init (authorizedPublicKey,auctionAddress,nameExpirationInterval,maxAuthorizedFee) = if ((inv.caller != this))
71+func init (auctionAddress,nameExpirationInterval) = if ((inv.caller != this))
10772 then throw("Permission denied")
108- else [StringEntry(key_authorizedPublicKey, authorizedPublicKey), StringEntry(key_auctionAddress, auctionAddress), IntegerEntry(key_nameExpirationInterval, nameExpirationInterval), IntegerEntry(key_maxAuthorizedFee, maxAuthorizedFee)]
109-
110-
111-
112-@Callable(inv)
113-func registerNameToken (tokenId) = if ((inv.caller != this))
114- then throw("Permission denied")
115- else {
116- let token = match assetInfo(fromBase58String(tokenId)) {
117- case asset: Asset =>
118- asset
119- case _ =>
120- throw("Can't find asset")
121- }
122- let firstChars = if ((lastIndexOf(token.name, "~") == 15))
123- then 15
124- else 16
125- if ((token.issuer != this))
126- then throw("Name token is not issued by the Registrar")
127- else if ((take(token.name, firstChars) != take(token.description, firstChars)))
128- then throw("Trimmed and full names do not match")
129- else if (isRegisteredToken(tokenId))
130- then throw("Token already in use")
131- else if (if (isRegisteredName(token.description))
132- then !(isExpiredName(token.description))
133- else false)
134- then throw("Name already in use")
135- else [StringEntry(key_Name_token(token.description), tokenId), StringEntry(key_Token_name(tokenId), token.description), IntegerEntry(key_Name_createdAt(token.description), lastBlock.timestamp), IntegerEntry(key_Name_expiresAt(token.description), (lastBlock.timestamp + nameExpirationInterval))]
136- }
73+ else [StringEntry(key_auctionAddress, auctionAddress), IntegerEntry(key_nameExpirationInterval, nameExpirationInterval)]
13774
13875
13976
14178 func registerOwnership (name) = {
14279 let caller = inv.caller
14380 let callerStr = toString(caller)
144- let $t053395594 = match invoke(auctionAddress, "getWinnerInfo", [name], nil) {
81+ let $t027863041 = match invoke(auctionAddress, "getWinnerInfo", [name], nil) {
14582 case winnerInfo: (Int, String, String) =>
14683 winnerInfo
14784 case _ =>
14885 throw("Unexpected getWinnerInfo result")
14986 }
150- let winnerAuctionId = $t053395594._1
151- let winnerAddress = $t053395594._2
152- let winnerHash = $t053395594._3
87+ let winnerAuctionId = $t027863041._1
88+ let winnerAddress = $t027863041._2
89+ let winnerHash = $t027863041._3
15390 if ((callerStr != winnerAddress))
15491 then throw(((("Winner address " + winnerAddress) + "doesn't match with caller address") + callerStr))
15592 else if (if (isRegisteredName(name))
196133 }
197134
198135
199-@Verifier(tx)
200-func verify () = match tx {
201- case invokeScript: InvokeScriptTransaction =>
202- let $t078358086 = if (if (isAuthorizedProof(tx.proofs))
203- then isAuthorizedInvoke(invokeScript)
204- else false)
205- then $Tuple2(tx.proofs[1], authorizedPublicKey)
206- else $Tuple2(tx.proofs[0], tx.senderPublicKey)
207- let proof = $t078358086._1
208- let senderPublicKey = $t078358086._2
209- sigVerify_8Kb(tx.bodyBytes, proof, senderPublicKey)
210- case issue: IssueTransaction =>
211- let $t082168459 = if (if (isAuthorizedProof(tx.proofs))
212- then isAuthorizedIssue(issue)
213- else false)
214- then $Tuple2(tx.proofs[1], authorizedPublicKey)
215- else $Tuple2(tx.proofs[0], tx.senderPublicKey)
216- let proof = $t082168459._1
217- let senderPublicKey = $t082168459._2
218- sigVerify_8Kb(tx.bodyBytes, proof, senderPublicKey)
219- case other =>
220- sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
221-}
222-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
88
99
1010 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1111
1212
1313 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
1414
1515
1616 func key_Token_name (tokenId) = key_entity("Token", tokenId, "name")
1717
1818
1919 func key_Name_token (name) = key_entity("Name", name, "token")
2020
2121
2222 func key_Name_owner (name) = key_entity("Name", name, "owner")
2323
2424
2525 func key_Name_expiresAt (name) = key_entity("Name", name, "expiresAt")
2626
2727
2828 func key_Name_createdAt (name) = key_entity("Name", name, "createdAt")
2929
3030
3131 func key_Owner_name (address) = key_entity("Owner", address, "name")
3232
3333
34-let key_authorizedPublicKey = "authorizedPublicKey"
35-
3634 let key_auctionAddress = "auctionAddress"
3735
3836 let key_nameExpirationInterval = "nameExpirationInterval"
3937
4038 let key_maxAuthorizedFee = "maxAuthorizedFee"
41-
42-let authorizedPublicKey = fromBase58String(getStringOrThrow(this, key_authorizedPublicKey))
43-
44-let authorizedAddress = addressFromPublicKey(authorizedPublicKey)
45-
46-let authorizedAddressStr = toString(authorizedAddress)
4739
4840 let auctionAddressStr = getStringOrThrow(this, key_auctionAddress)
4941
5042 let auctionAddress = parseAddressOrThrow(auctionAddressStr)
5143
5244 let nameExpirationInterval = getIntegerOrThrow(this, key_nameExpirationInterval)
5345
5446 let maxAuthorizedFee = getIntegerOrThrow(this, key_maxAuthorizedFee)
5547
5648 func whoIs (name) = {
5749 let expiresAt = getIntegerOrThrow(this, key_Name_expiresAt(name))
5850 let token = getStringOrThrow(this, key_Name_token(name))
5951 let owner = getStringOrThrow(this, key_Name_owner(name))
6052 $Tuple3(owner, expiresAt, token)
6153 }
6254
6355
6456 func isRegisteredToken (tokenId) = isDefined(getString(this, key_Token_name(tokenId)))
6557
6658
6759 func isRegisteredName (name) = isDefined(getString(this, key_Name_token(name)))
6860
6961
7062 func isExpiredName (name) = match getInteger(this, key_Name_expiresAt(name)) {
7163 case expiresAt: Int =>
7264 (expiresAt > lastBlock.timestamp)
7365 case _ =>
7466 false
7567 }
7668
7769
78-func isAuthorizedProof (proofs) = if ((size(proofs) == 2))
79- then (proofs[0] == base58'')
80- else false
81-
82-
83-func isAuthorizedInvoke (tx) = {
84- let dApp = addressFromRecipient(tx.dApp)
85- let function = tx.function
86- if (if (if ((dApp == this))
87- then (function == "registerNameToken")
88- else false)
89- then (maxAuthorizedFee >= tx.fee)
90- else false)
91- then !(isDefined(tx.feeAssetId))
92- else false
93- }
94-
95-
96-func isAuthorizedIssue (tx) = if (if (if ((tx.decimals == 0))
97- then (tx.quantity == 1)
98- else false)
99- then !(tx.reissuable)
100- else false)
101- then (maxAuthorizedFee >= tx.fee)
102- else false
103-
104-
10570 @Callable(inv)
106-func init (authorizedPublicKey,auctionAddress,nameExpirationInterval,maxAuthorizedFee) = if ((inv.caller != this))
71+func init (auctionAddress,nameExpirationInterval) = if ((inv.caller != this))
10772 then throw("Permission denied")
108- else [StringEntry(key_authorizedPublicKey, authorizedPublicKey), StringEntry(key_auctionAddress, auctionAddress), IntegerEntry(key_nameExpirationInterval, nameExpirationInterval), IntegerEntry(key_maxAuthorizedFee, maxAuthorizedFee)]
109-
110-
111-
112-@Callable(inv)
113-func registerNameToken (tokenId) = if ((inv.caller != this))
114- then throw("Permission denied")
115- else {
116- let token = match assetInfo(fromBase58String(tokenId)) {
117- case asset: Asset =>
118- asset
119- case _ =>
120- throw("Can't find asset")
121- }
122- let firstChars = if ((lastIndexOf(token.name, "~") == 15))
123- then 15
124- else 16
125- if ((token.issuer != this))
126- then throw("Name token is not issued by the Registrar")
127- else if ((take(token.name, firstChars) != take(token.description, firstChars)))
128- then throw("Trimmed and full names do not match")
129- else if (isRegisteredToken(tokenId))
130- then throw("Token already in use")
131- else if (if (isRegisteredName(token.description))
132- then !(isExpiredName(token.description))
133- else false)
134- then throw("Name already in use")
135- else [StringEntry(key_Name_token(token.description), tokenId), StringEntry(key_Token_name(tokenId), token.description), IntegerEntry(key_Name_createdAt(token.description), lastBlock.timestamp), IntegerEntry(key_Name_expiresAt(token.description), (lastBlock.timestamp + nameExpirationInterval))]
136- }
73+ else [StringEntry(key_auctionAddress, auctionAddress), IntegerEntry(key_nameExpirationInterval, nameExpirationInterval)]
13774
13875
13976
14077 @Callable(inv)
14178 func registerOwnership (name) = {
14279 let caller = inv.caller
14380 let callerStr = toString(caller)
144- let $t053395594 = match invoke(auctionAddress, "getWinnerInfo", [name], nil) {
81+ let $t027863041 = match invoke(auctionAddress, "getWinnerInfo", [name], nil) {
14582 case winnerInfo: (Int, String, String) =>
14683 winnerInfo
14784 case _ =>
14885 throw("Unexpected getWinnerInfo result")
14986 }
150- let winnerAuctionId = $t053395594._1
151- let winnerAddress = $t053395594._2
152- let winnerHash = $t053395594._3
87+ let winnerAuctionId = $t027863041._1
88+ let winnerAddress = $t027863041._2
89+ let winnerHash = $t027863041._3
15390 if ((callerStr != winnerAddress))
15491 then throw(((("Winner address " + winnerAddress) + "doesn't match with caller address") + callerStr))
15592 else if (if (isRegisteredName(name))
15693 then !(isExpiredName(name))
15794 else false)
15895 then throw("Name already in use")
15996 else {
16097 let resFinalize = invoke(auctionAddress, "finalizeOrigin", [name], nil)
16198 let issueNameToken = Issue(if ((size(name) > 16))
16299 then (take(name, 15) + "~")
163100 else take(name, 16), name, 1, 0, false)
164101 let tokenId = calculateAssetId(issueNameToken)
165102 let tokenStr = toUtf8String(tokenId)
166103 let issueAndRegister = [issueNameToken, StringEntry(key_Name_token(name), tokenStr), StringEntry(key_Token_name(tokenStr), name), IntegerEntry(key_Name_createdAt(name), lastBlock.timestamp), IntegerEntry(key_Name_expiresAt(name), (lastBlock.timestamp + nameExpirationInterval))]
167104 let setOwnershipAndTransfer = [StringEntry(key_Name_owner(name), callerStr), ScriptTransfer(caller, 1, tokenId)]
168105 (issueAndRegister ++ setOwnershipAndTransfer)
169106 }
170107 }
171108
172109
173110
174111 @Callable(inv)
175112 func approveOwnership (name) = {
176113 let caller = inv.caller
177114 let callerStr = toString(caller)
178115 let owner = valueOrErrorMessage(getString(this, key_Name_owner(name)), "Owner is not defined")
179116 let tokenStr = valueOrErrorMessage(getString(this, key_Name_token(name)), "No token is issued for this name")
180117 let tokenId = fromBase58String(tokenStr)
181118 let token = match assetInfo(tokenId) {
182119 case a: Asset =>
183120 a
184121 case _ =>
185122 throw("Can't find asset")
186123 }
187124 if ((callerStr == owner))
188125 then throw("You already own this name")
189126 else if (!(isRegisteredName(name)))
190127 then throw("Name is not registered")
191128 else if (isExpiredName(name))
192129 then throw("The period of ownership has expired")
193130 else if ((assetBalance(caller, tokenId) == 0))
194131 then throw("You don't have a named token")
195132 else [StringEntry(key_Name_owner(name), callerStr)]
196133 }
197134
198135
199-@Verifier(tx)
200-func verify () = match tx {
201- case invokeScript: InvokeScriptTransaction =>
202- let $t078358086 = if (if (isAuthorizedProof(tx.proofs))
203- then isAuthorizedInvoke(invokeScript)
204- else false)
205- then $Tuple2(tx.proofs[1], authorizedPublicKey)
206- else $Tuple2(tx.proofs[0], tx.senderPublicKey)
207- let proof = $t078358086._1
208- let senderPublicKey = $t078358086._2
209- sigVerify_8Kb(tx.bodyBytes, proof, senderPublicKey)
210- case issue: IssueTransaction =>
211- let $t082168459 = if (if (isAuthorizedProof(tx.proofs))
212- then isAuthorizedIssue(issue)
213- else false)
214- then $Tuple2(tx.proofs[1], authorizedPublicKey)
215- else $Tuple2(tx.proofs[0], tx.senderPublicKey)
216- let proof = $t082168459._1
217- let senderPublicKey = $t082168459._2
218- sigVerify_8Kb(tx.bodyBytes, proof, senderPublicKey)
219- case other =>
220- sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
221-}
222-

github/deemru/w8io/3ef1775 
67.77 ms