secure-transac-contracts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/build/contracts/AccessControl.json +4579 -0
  2. package/build/contracts/Context.json +356 -0
  3. package/build/contracts/CreditSystem.json +6037 -0
  4. package/build/contracts/ECDSA.json +4734 -0
  5. package/build/contracts/EIP712.json +3021 -0
  6. package/build/contracts/ERC165.json +352 -0
  7. package/build/contracts/ERC20.json +6816 -0
  8. package/build/contracts/ERC20Permit.json +2658 -0
  9. package/build/contracts/ERC721.json +12779 -0
  10. package/build/contracts/ERC721Utils.json +1058 -0
  11. package/build/contracts/Groth16Verifier.json +6298 -0
  12. package/build/contracts/Guardian.json +1116 -0
  13. package/build/contracts/IERC1155Errors.json +1687 -0
  14. package/build/contracts/IERC165.json +197 -0
  15. package/build/contracts/IERC20.json +1162 -0
  16. package/build/contracts/IERC20Errors.json +1662 -0
  17. package/build/contracts/IERC20Metadata.json +574 -0
  18. package/build/contracts/IERC20Permit.json +546 -0
  19. package/build/contracts/IERC5267.json +392 -0
  20. package/build/contracts/IERC721.json +1729 -0
  21. package/build/contracts/IERC721Errors.json +1694 -0
  22. package/build/contracts/IERC721Metadata.json +728 -0
  23. package/build/contracts/IERC721Receiver.json +296 -0
  24. package/build/contracts/IGuardian.json +215 -0
  25. package/build/contracts/ITrustRegistry.json +6767 -0
  26. package/build/contracts/IdentityVault.json +11584 -0
  27. package/build/contracts/Math.json +23115 -0
  28. package/build/contracts/MessageHashUtils.json +1668 -0
  29. package/build/contracts/Nonces.json +865 -0
  30. package/build/contracts/Ownable.json +1859 -0
  31. package/build/contracts/Panic.json +798 -0
  32. package/build/contracts/ReportingSystem.json +2787 -0
  33. package/build/contracts/SafeCast.json +21592 -0
  34. package/build/contracts/ScoringSystem.json +11245 -0
  35. package/build/contracts/SecureTransacSBT.json +18823 -0
  36. package/build/contracts/SecureTransacToken.json +19225 -0
  37. package/build/contracts/SecureVault.json +12890 -0
  38. package/build/contracts/ShortStrings.json +2852 -0
  39. package/build/contracts/SignedMath.json +1915 -0
  40. package/build/contracts/StorageSlot.json +1773 -0
  41. package/build/contracts/Strings.json +19001 -0
  42. package/build/contracts/TransactionLogger.json +5325 -0
  43. package/build/contracts/TrustDAO.json +23850 -0
  44. package/build/contracts/TrustRegistry.json +10948 -0
  45. package/build/contracts/VerificationRegistry.json +12811 -0
  46. package/build/contracts/ZKIdentityVerifier.json +13979 -0
  47. package/contracts/AccessControl.sol +34 -0
  48. package/contracts/CreditSystem.sol +48 -0
  49. package/contracts/Guardian.sol +33 -0
  50. package/contracts/IGuardian.sol +7 -0
  51. package/contracts/IdentityVault.sol +57 -0
  52. package/contracts/ReportingSystem.sol +14 -0
  53. package/contracts/ScoringSystem.sol +71 -0
  54. package/contracts/SecureTransacSBT.sol +72 -0
  55. package/contracts/SecureTransacToken.sol +20 -0
  56. package/contracts/SecureVault.sol +24 -0
  57. package/contracts/TransactionLogger.sol +12 -0
  58. package/contracts/TrustDAO.sol +158 -0
  59. package/contracts/TrustRegistry.sol +23 -0
  60. package/contracts/VerificationRegistry.sol +51 -0
  61. package/contracts/ZKIdentityVerifier.sol +38 -0
  62. package/contracts/ZKScoreVerifier.sol +175 -0
  63. package/package.json +32 -0
@@ -0,0 +1,4734 @@
1
+ {
2
+ "contractName": "ECDSA",
3
+ "abi": [
4
+ {
5
+ "inputs": [],
6
+ "name": "ECDSAInvalidSignature",
7
+ "type": "error"
8
+ },
9
+ {
10
+ "inputs": [
11
+ {
12
+ "internalType": "uint256",
13
+ "name": "length",
14
+ "type": "uint256"
15
+ }
16
+ ],
17
+ "name": "ECDSAInvalidSignatureLength",
18
+ "type": "error"
19
+ },
20
+ {
21
+ "inputs": [
22
+ {
23
+ "internalType": "bytes32",
24
+ "name": "s",
25
+ "type": "bytes32"
26
+ }
27
+ ],
28
+ "name": "ECDSAInvalidSignatureS",
29
+ "type": "error"
30
+ }
31
+ ],
32
+ "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]}},\"version\":1}",
33
+ "bytecode": "0x6055604b600b8282823980515f1a607314603f577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220ebc079bacf0de745fd5dc42a1b00e69b1788acc6f2e7704ad6d9850ddaba721964736f6c63430008150033",
34
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220ebc079bacf0de745fd5dc42a1b00e69b1788acc6f2e7704ad6d9850ddaba721964736f6c63430008150033",
35
+ "immutableReferences": {},
36
+ "generatedSources": [],
37
+ "deployedGeneratedSources": [],
38
+ "sourceMap": "344:7470:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
39
+ "deployedSourceMap": "344:7470:19:-:0;;;;;;;;",
40
+ "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(\n bytes32 hash,\n bytes memory signature\n ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n assembly (\"memory-safe\") {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n",
41
+ "sourcePath": "@openzeppelin\\contracts\\utils\\cryptography\\ECDSA.sol",
42
+ "ast": {
43
+ "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
44
+ "exportedSymbols": {
45
+ "ECDSA": [
46
+ 4556
47
+ ]
48
+ },
49
+ "id": 4557,
50
+ "license": "MIT",
51
+ "nodeType": "SourceUnit",
52
+ "nodes": [
53
+ {
54
+ "id": 4210,
55
+ "literals": [
56
+ "solidity",
57
+ "^",
58
+ "0.8",
59
+ ".20"
60
+ ],
61
+ "nodeType": "PragmaDirective",
62
+ "src": "112:24:19"
63
+ },
64
+ {
65
+ "abstract": false,
66
+ "baseContracts": [],
67
+ "canonicalName": "ECDSA",
68
+ "contractDependencies": [],
69
+ "contractKind": "library",
70
+ "documentation": {
71
+ "id": 4211,
72
+ "nodeType": "StructuredDocumentation",
73
+ "src": "138:205:19",
74
+ "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."
75
+ },
76
+ "fullyImplemented": true,
77
+ "id": 4556,
78
+ "linearizedBaseContracts": [
79
+ 4556
80
+ ],
81
+ "name": "ECDSA",
82
+ "nameLocation": "352:5:19",
83
+ "nodeType": "ContractDefinition",
84
+ "nodes": [
85
+ {
86
+ "canonicalName": "ECDSA.RecoverError",
87
+ "id": 4216,
88
+ "members": [
89
+ {
90
+ "id": 4212,
91
+ "name": "NoError",
92
+ "nameLocation": "392:7:19",
93
+ "nodeType": "EnumValue",
94
+ "src": "392:7:19"
95
+ },
96
+ {
97
+ "id": 4213,
98
+ "name": "InvalidSignature",
99
+ "nameLocation": "409:16:19",
100
+ "nodeType": "EnumValue",
101
+ "src": "409:16:19"
102
+ },
103
+ {
104
+ "id": 4214,
105
+ "name": "InvalidSignatureLength",
106
+ "nameLocation": "435:22:19",
107
+ "nodeType": "EnumValue",
108
+ "src": "435:22:19"
109
+ },
110
+ {
111
+ "id": 4215,
112
+ "name": "InvalidSignatureS",
113
+ "nameLocation": "467:17:19",
114
+ "nodeType": "EnumValue",
115
+ "src": "467:17:19"
116
+ }
117
+ ],
118
+ "name": "RecoverError",
119
+ "nameLocation": "369:12:19",
120
+ "nodeType": "EnumDefinition",
121
+ "src": "364:126:19"
122
+ },
123
+ {
124
+ "documentation": {
125
+ "id": 4217,
126
+ "nodeType": "StructuredDocumentation",
127
+ "src": "496:63:19",
128
+ "text": " @dev The signature derives the `address(0)`."
129
+ },
130
+ "errorSelector": "f645eedf",
131
+ "id": 4219,
132
+ "name": "ECDSAInvalidSignature",
133
+ "nameLocation": "570:21:19",
134
+ "nodeType": "ErrorDefinition",
135
+ "parameters": {
136
+ "id": 4218,
137
+ "nodeType": "ParameterList",
138
+ "parameters": [],
139
+ "src": "591:2:19"
140
+ },
141
+ "src": "564:30:19"
142
+ },
143
+ {
144
+ "documentation": {
145
+ "id": 4220,
146
+ "nodeType": "StructuredDocumentation",
147
+ "src": "600:60:19",
148
+ "text": " @dev The signature has an invalid length."
149
+ },
150
+ "errorSelector": "fce698f7",
151
+ "id": 4224,
152
+ "name": "ECDSAInvalidSignatureLength",
153
+ "nameLocation": "671:27:19",
154
+ "nodeType": "ErrorDefinition",
155
+ "parameters": {
156
+ "id": 4223,
157
+ "nodeType": "ParameterList",
158
+ "parameters": [
159
+ {
160
+ "constant": false,
161
+ "id": 4222,
162
+ "mutability": "mutable",
163
+ "name": "length",
164
+ "nameLocation": "707:6:19",
165
+ "nodeType": "VariableDeclaration",
166
+ "scope": 4224,
167
+ "src": "699:14:19",
168
+ "stateVariable": false,
169
+ "storageLocation": "default",
170
+ "typeDescriptions": {
171
+ "typeIdentifier": "t_uint256",
172
+ "typeString": "uint256"
173
+ },
174
+ "typeName": {
175
+ "id": 4221,
176
+ "name": "uint256",
177
+ "nodeType": "ElementaryTypeName",
178
+ "src": "699:7:19",
179
+ "typeDescriptions": {
180
+ "typeIdentifier": "t_uint256",
181
+ "typeString": "uint256"
182
+ }
183
+ },
184
+ "visibility": "internal"
185
+ }
186
+ ],
187
+ "src": "698:16:19"
188
+ },
189
+ "src": "665:50:19"
190
+ },
191
+ {
192
+ "documentation": {
193
+ "id": 4225,
194
+ "nodeType": "StructuredDocumentation",
195
+ "src": "721:85:19",
196
+ "text": " @dev The signature has an S value that is in the upper half order."
197
+ },
198
+ "errorSelector": "d78bce0c",
199
+ "id": 4229,
200
+ "name": "ECDSAInvalidSignatureS",
201
+ "nameLocation": "817:22:19",
202
+ "nodeType": "ErrorDefinition",
203
+ "parameters": {
204
+ "id": 4228,
205
+ "nodeType": "ParameterList",
206
+ "parameters": [
207
+ {
208
+ "constant": false,
209
+ "id": 4227,
210
+ "mutability": "mutable",
211
+ "name": "s",
212
+ "nameLocation": "848:1:19",
213
+ "nodeType": "VariableDeclaration",
214
+ "scope": 4229,
215
+ "src": "840:9:19",
216
+ "stateVariable": false,
217
+ "storageLocation": "default",
218
+ "typeDescriptions": {
219
+ "typeIdentifier": "t_bytes32",
220
+ "typeString": "bytes32"
221
+ },
222
+ "typeName": {
223
+ "id": 4226,
224
+ "name": "bytes32",
225
+ "nodeType": "ElementaryTypeName",
226
+ "src": "840:7:19",
227
+ "typeDescriptions": {
228
+ "typeIdentifier": "t_bytes32",
229
+ "typeString": "bytes32"
230
+ }
231
+ },
232
+ "visibility": "internal"
233
+ }
234
+ ],
235
+ "src": "839:11:19"
236
+ },
237
+ "src": "811:40:19"
238
+ },
239
+ {
240
+ "body": {
241
+ "id": 4281,
242
+ "nodeType": "Block",
243
+ "src": "2285:622:19",
244
+ "statements": [
245
+ {
246
+ "condition": {
247
+ "commonType": {
248
+ "typeIdentifier": "t_uint256",
249
+ "typeString": "uint256"
250
+ },
251
+ "id": 4247,
252
+ "isConstant": false,
253
+ "isLValue": false,
254
+ "isPure": false,
255
+ "lValueRequested": false,
256
+ "leftExpression": {
257
+ "expression": {
258
+ "id": 4244,
259
+ "name": "signature",
260
+ "nodeType": "Identifier",
261
+ "overloadedDeclarations": [],
262
+ "referencedDeclaration": 4234,
263
+ "src": "2299:9:19",
264
+ "typeDescriptions": {
265
+ "typeIdentifier": "t_bytes_memory_ptr",
266
+ "typeString": "bytes memory"
267
+ }
268
+ },
269
+ "id": 4245,
270
+ "isConstant": false,
271
+ "isLValue": false,
272
+ "isPure": false,
273
+ "lValueRequested": false,
274
+ "memberLocation": "2309:6:19",
275
+ "memberName": "length",
276
+ "nodeType": "MemberAccess",
277
+ "src": "2299:16:19",
278
+ "typeDescriptions": {
279
+ "typeIdentifier": "t_uint256",
280
+ "typeString": "uint256"
281
+ }
282
+ },
283
+ "nodeType": "BinaryOperation",
284
+ "operator": "==",
285
+ "rightExpression": {
286
+ "hexValue": "3635",
287
+ "id": 4246,
288
+ "isConstant": false,
289
+ "isLValue": false,
290
+ "isPure": true,
291
+ "kind": "number",
292
+ "lValueRequested": false,
293
+ "nodeType": "Literal",
294
+ "src": "2319:2:19",
295
+ "typeDescriptions": {
296
+ "typeIdentifier": "t_rational_65_by_1",
297
+ "typeString": "int_const 65"
298
+ },
299
+ "value": "65"
300
+ },
301
+ "src": "2299:22:19",
302
+ "typeDescriptions": {
303
+ "typeIdentifier": "t_bool",
304
+ "typeString": "bool"
305
+ }
306
+ },
307
+ "falseBody": {
308
+ "id": 4279,
309
+ "nodeType": "Block",
310
+ "src": "2793:108:19",
311
+ "statements": [
312
+ {
313
+ "expression": {
314
+ "components": [
315
+ {
316
+ "arguments": [
317
+ {
318
+ "hexValue": "30",
319
+ "id": 4268,
320
+ "isConstant": false,
321
+ "isLValue": false,
322
+ "isPure": true,
323
+ "kind": "number",
324
+ "lValueRequested": false,
325
+ "nodeType": "Literal",
326
+ "src": "2823:1:19",
327
+ "typeDescriptions": {
328
+ "typeIdentifier": "t_rational_0_by_1",
329
+ "typeString": "int_const 0"
330
+ },
331
+ "value": "0"
332
+ }
333
+ ],
334
+ "expression": {
335
+ "argumentTypes": [
336
+ {
337
+ "typeIdentifier": "t_rational_0_by_1",
338
+ "typeString": "int_const 0"
339
+ }
340
+ ],
341
+ "id": 4267,
342
+ "isConstant": false,
343
+ "isLValue": false,
344
+ "isPure": true,
345
+ "lValueRequested": false,
346
+ "nodeType": "ElementaryTypeNameExpression",
347
+ "src": "2815:7:19",
348
+ "typeDescriptions": {
349
+ "typeIdentifier": "t_type$_t_address_$",
350
+ "typeString": "type(address)"
351
+ },
352
+ "typeName": {
353
+ "id": 4266,
354
+ "name": "address",
355
+ "nodeType": "ElementaryTypeName",
356
+ "src": "2815:7:19",
357
+ "typeDescriptions": {}
358
+ }
359
+ },
360
+ "id": 4269,
361
+ "isConstant": false,
362
+ "isLValue": false,
363
+ "isPure": true,
364
+ "kind": "typeConversion",
365
+ "lValueRequested": false,
366
+ "nameLocations": [],
367
+ "names": [],
368
+ "nodeType": "FunctionCall",
369
+ "src": "2815:10:19",
370
+ "tryCall": false,
371
+ "typeDescriptions": {
372
+ "typeIdentifier": "t_address",
373
+ "typeString": "address"
374
+ }
375
+ },
376
+ {
377
+ "expression": {
378
+ "id": 4270,
379
+ "name": "RecoverError",
380
+ "nodeType": "Identifier",
381
+ "overloadedDeclarations": [],
382
+ "referencedDeclaration": 4216,
383
+ "src": "2827:12:19",
384
+ "typeDescriptions": {
385
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
386
+ "typeString": "type(enum ECDSA.RecoverError)"
387
+ }
388
+ },
389
+ "id": 4271,
390
+ "isConstant": false,
391
+ "isLValue": false,
392
+ "isPure": true,
393
+ "lValueRequested": false,
394
+ "memberLocation": "2840:22:19",
395
+ "memberName": "InvalidSignatureLength",
396
+ "nodeType": "MemberAccess",
397
+ "referencedDeclaration": 4214,
398
+ "src": "2827:35:19",
399
+ "typeDescriptions": {
400
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
401
+ "typeString": "enum ECDSA.RecoverError"
402
+ }
403
+ },
404
+ {
405
+ "arguments": [
406
+ {
407
+ "expression": {
408
+ "id": 4274,
409
+ "name": "signature",
410
+ "nodeType": "Identifier",
411
+ "overloadedDeclarations": [],
412
+ "referencedDeclaration": 4234,
413
+ "src": "2872:9:19",
414
+ "typeDescriptions": {
415
+ "typeIdentifier": "t_bytes_memory_ptr",
416
+ "typeString": "bytes memory"
417
+ }
418
+ },
419
+ "id": 4275,
420
+ "isConstant": false,
421
+ "isLValue": false,
422
+ "isPure": false,
423
+ "lValueRequested": false,
424
+ "memberLocation": "2882:6:19",
425
+ "memberName": "length",
426
+ "nodeType": "MemberAccess",
427
+ "src": "2872:16:19",
428
+ "typeDescriptions": {
429
+ "typeIdentifier": "t_uint256",
430
+ "typeString": "uint256"
431
+ }
432
+ }
433
+ ],
434
+ "expression": {
435
+ "argumentTypes": [
436
+ {
437
+ "typeIdentifier": "t_uint256",
438
+ "typeString": "uint256"
439
+ }
440
+ ],
441
+ "id": 4273,
442
+ "isConstant": false,
443
+ "isLValue": false,
444
+ "isPure": true,
445
+ "lValueRequested": false,
446
+ "nodeType": "ElementaryTypeNameExpression",
447
+ "src": "2864:7:19",
448
+ "typeDescriptions": {
449
+ "typeIdentifier": "t_type$_t_bytes32_$",
450
+ "typeString": "type(bytes32)"
451
+ },
452
+ "typeName": {
453
+ "id": 4272,
454
+ "name": "bytes32",
455
+ "nodeType": "ElementaryTypeName",
456
+ "src": "2864:7:19",
457
+ "typeDescriptions": {}
458
+ }
459
+ },
460
+ "id": 4276,
461
+ "isConstant": false,
462
+ "isLValue": false,
463
+ "isPure": false,
464
+ "kind": "typeConversion",
465
+ "lValueRequested": false,
466
+ "nameLocations": [],
467
+ "names": [],
468
+ "nodeType": "FunctionCall",
469
+ "src": "2864:25:19",
470
+ "tryCall": false,
471
+ "typeDescriptions": {
472
+ "typeIdentifier": "t_bytes32",
473
+ "typeString": "bytes32"
474
+ }
475
+ }
476
+ ],
477
+ "id": 4277,
478
+ "isConstant": false,
479
+ "isInlineArray": false,
480
+ "isLValue": false,
481
+ "isPure": false,
482
+ "lValueRequested": false,
483
+ "nodeType": "TupleExpression",
484
+ "src": "2814:76:19",
485
+ "typeDescriptions": {
486
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
487
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
488
+ }
489
+ },
490
+ "functionReturnParameters": 4243,
491
+ "id": 4278,
492
+ "nodeType": "Return",
493
+ "src": "2807:83:19"
494
+ }
495
+ ]
496
+ },
497
+ "id": 4280,
498
+ "nodeType": "IfStatement",
499
+ "src": "2295:606:19",
500
+ "trueBody": {
501
+ "id": 4265,
502
+ "nodeType": "Block",
503
+ "src": "2323:464:19",
504
+ "statements": [
505
+ {
506
+ "assignments": [
507
+ 4249
508
+ ],
509
+ "declarations": [
510
+ {
511
+ "constant": false,
512
+ "id": 4249,
513
+ "mutability": "mutable",
514
+ "name": "r",
515
+ "nameLocation": "2345:1:19",
516
+ "nodeType": "VariableDeclaration",
517
+ "scope": 4265,
518
+ "src": "2337:9:19",
519
+ "stateVariable": false,
520
+ "storageLocation": "default",
521
+ "typeDescriptions": {
522
+ "typeIdentifier": "t_bytes32",
523
+ "typeString": "bytes32"
524
+ },
525
+ "typeName": {
526
+ "id": 4248,
527
+ "name": "bytes32",
528
+ "nodeType": "ElementaryTypeName",
529
+ "src": "2337:7:19",
530
+ "typeDescriptions": {
531
+ "typeIdentifier": "t_bytes32",
532
+ "typeString": "bytes32"
533
+ }
534
+ },
535
+ "visibility": "internal"
536
+ }
537
+ ],
538
+ "id": 4250,
539
+ "nodeType": "VariableDeclarationStatement",
540
+ "src": "2337:9:19"
541
+ },
542
+ {
543
+ "assignments": [
544
+ 4252
545
+ ],
546
+ "declarations": [
547
+ {
548
+ "constant": false,
549
+ "id": 4252,
550
+ "mutability": "mutable",
551
+ "name": "s",
552
+ "nameLocation": "2368:1:19",
553
+ "nodeType": "VariableDeclaration",
554
+ "scope": 4265,
555
+ "src": "2360:9:19",
556
+ "stateVariable": false,
557
+ "storageLocation": "default",
558
+ "typeDescriptions": {
559
+ "typeIdentifier": "t_bytes32",
560
+ "typeString": "bytes32"
561
+ },
562
+ "typeName": {
563
+ "id": 4251,
564
+ "name": "bytes32",
565
+ "nodeType": "ElementaryTypeName",
566
+ "src": "2360:7:19",
567
+ "typeDescriptions": {
568
+ "typeIdentifier": "t_bytes32",
569
+ "typeString": "bytes32"
570
+ }
571
+ },
572
+ "visibility": "internal"
573
+ }
574
+ ],
575
+ "id": 4253,
576
+ "nodeType": "VariableDeclarationStatement",
577
+ "src": "2360:9:19"
578
+ },
579
+ {
580
+ "assignments": [
581
+ 4255
582
+ ],
583
+ "declarations": [
584
+ {
585
+ "constant": false,
586
+ "id": 4255,
587
+ "mutability": "mutable",
588
+ "name": "v",
589
+ "nameLocation": "2389:1:19",
590
+ "nodeType": "VariableDeclaration",
591
+ "scope": 4265,
592
+ "src": "2383:7:19",
593
+ "stateVariable": false,
594
+ "storageLocation": "default",
595
+ "typeDescriptions": {
596
+ "typeIdentifier": "t_uint8",
597
+ "typeString": "uint8"
598
+ },
599
+ "typeName": {
600
+ "id": 4254,
601
+ "name": "uint8",
602
+ "nodeType": "ElementaryTypeName",
603
+ "src": "2383:5:19",
604
+ "typeDescriptions": {
605
+ "typeIdentifier": "t_uint8",
606
+ "typeString": "uint8"
607
+ }
608
+ },
609
+ "visibility": "internal"
610
+ }
611
+ ],
612
+ "id": 4256,
613
+ "nodeType": "VariableDeclarationStatement",
614
+ "src": "2383:7:19"
615
+ },
616
+ {
617
+ "AST": {
618
+ "nativeSrc": "2560:171:19",
619
+ "nodeType": "YulBlock",
620
+ "src": "2560:171:19",
621
+ "statements": [
622
+ {
623
+ "nativeSrc": "2578:32:19",
624
+ "nodeType": "YulAssignment",
625
+ "src": "2578:32:19",
626
+ "value": {
627
+ "arguments": [
628
+ {
629
+ "arguments": [
630
+ {
631
+ "name": "signature",
632
+ "nativeSrc": "2593:9:19",
633
+ "nodeType": "YulIdentifier",
634
+ "src": "2593:9:19"
635
+ },
636
+ {
637
+ "kind": "number",
638
+ "nativeSrc": "2604:4:19",
639
+ "nodeType": "YulLiteral",
640
+ "src": "2604:4:19",
641
+ "type": "",
642
+ "value": "0x20"
643
+ }
644
+ ],
645
+ "functionName": {
646
+ "name": "add",
647
+ "nativeSrc": "2589:3:19",
648
+ "nodeType": "YulIdentifier",
649
+ "src": "2589:3:19"
650
+ },
651
+ "nativeSrc": "2589:20:19",
652
+ "nodeType": "YulFunctionCall",
653
+ "src": "2589:20:19"
654
+ }
655
+ ],
656
+ "functionName": {
657
+ "name": "mload",
658
+ "nativeSrc": "2583:5:19",
659
+ "nodeType": "YulIdentifier",
660
+ "src": "2583:5:19"
661
+ },
662
+ "nativeSrc": "2583:27:19",
663
+ "nodeType": "YulFunctionCall",
664
+ "src": "2583:27:19"
665
+ },
666
+ "variableNames": [
667
+ {
668
+ "name": "r",
669
+ "nativeSrc": "2578:1:19",
670
+ "nodeType": "YulIdentifier",
671
+ "src": "2578:1:19"
672
+ }
673
+ ]
674
+ },
675
+ {
676
+ "nativeSrc": "2627:32:19",
677
+ "nodeType": "YulAssignment",
678
+ "src": "2627:32:19",
679
+ "value": {
680
+ "arguments": [
681
+ {
682
+ "arguments": [
683
+ {
684
+ "name": "signature",
685
+ "nativeSrc": "2642:9:19",
686
+ "nodeType": "YulIdentifier",
687
+ "src": "2642:9:19"
688
+ },
689
+ {
690
+ "kind": "number",
691
+ "nativeSrc": "2653:4:19",
692
+ "nodeType": "YulLiteral",
693
+ "src": "2653:4:19",
694
+ "type": "",
695
+ "value": "0x40"
696
+ }
697
+ ],
698
+ "functionName": {
699
+ "name": "add",
700
+ "nativeSrc": "2638:3:19",
701
+ "nodeType": "YulIdentifier",
702
+ "src": "2638:3:19"
703
+ },
704
+ "nativeSrc": "2638:20:19",
705
+ "nodeType": "YulFunctionCall",
706
+ "src": "2638:20:19"
707
+ }
708
+ ],
709
+ "functionName": {
710
+ "name": "mload",
711
+ "nativeSrc": "2632:5:19",
712
+ "nodeType": "YulIdentifier",
713
+ "src": "2632:5:19"
714
+ },
715
+ "nativeSrc": "2632:27:19",
716
+ "nodeType": "YulFunctionCall",
717
+ "src": "2632:27:19"
718
+ },
719
+ "variableNames": [
720
+ {
721
+ "name": "s",
722
+ "nativeSrc": "2627:1:19",
723
+ "nodeType": "YulIdentifier",
724
+ "src": "2627:1:19"
725
+ }
726
+ ]
727
+ },
728
+ {
729
+ "nativeSrc": "2676:41:19",
730
+ "nodeType": "YulAssignment",
731
+ "src": "2676:41:19",
732
+ "value": {
733
+ "arguments": [
734
+ {
735
+ "kind": "number",
736
+ "nativeSrc": "2686:1:19",
737
+ "nodeType": "YulLiteral",
738
+ "src": "2686:1:19",
739
+ "type": "",
740
+ "value": "0"
741
+ },
742
+ {
743
+ "arguments": [
744
+ {
745
+ "arguments": [
746
+ {
747
+ "name": "signature",
748
+ "nativeSrc": "2699:9:19",
749
+ "nodeType": "YulIdentifier",
750
+ "src": "2699:9:19"
751
+ },
752
+ {
753
+ "kind": "number",
754
+ "nativeSrc": "2710:4:19",
755
+ "nodeType": "YulLiteral",
756
+ "src": "2710:4:19",
757
+ "type": "",
758
+ "value": "0x60"
759
+ }
760
+ ],
761
+ "functionName": {
762
+ "name": "add",
763
+ "nativeSrc": "2695:3:19",
764
+ "nodeType": "YulIdentifier",
765
+ "src": "2695:3:19"
766
+ },
767
+ "nativeSrc": "2695:20:19",
768
+ "nodeType": "YulFunctionCall",
769
+ "src": "2695:20:19"
770
+ }
771
+ ],
772
+ "functionName": {
773
+ "name": "mload",
774
+ "nativeSrc": "2689:5:19",
775
+ "nodeType": "YulIdentifier",
776
+ "src": "2689:5:19"
777
+ },
778
+ "nativeSrc": "2689:27:19",
779
+ "nodeType": "YulFunctionCall",
780
+ "src": "2689:27:19"
781
+ }
782
+ ],
783
+ "functionName": {
784
+ "name": "byte",
785
+ "nativeSrc": "2681:4:19",
786
+ "nodeType": "YulIdentifier",
787
+ "src": "2681:4:19"
788
+ },
789
+ "nativeSrc": "2681:36:19",
790
+ "nodeType": "YulFunctionCall",
791
+ "src": "2681:36:19"
792
+ },
793
+ "variableNames": [
794
+ {
795
+ "name": "v",
796
+ "nativeSrc": "2676:1:19",
797
+ "nodeType": "YulIdentifier",
798
+ "src": "2676:1:19"
799
+ }
800
+ ]
801
+ }
802
+ ]
803
+ },
804
+ "evmVersion": "shanghai",
805
+ "externalReferences": [
806
+ {
807
+ "declaration": 4249,
808
+ "isOffset": false,
809
+ "isSlot": false,
810
+ "src": "2578:1:19",
811
+ "valueSize": 1
812
+ },
813
+ {
814
+ "declaration": 4252,
815
+ "isOffset": false,
816
+ "isSlot": false,
817
+ "src": "2627:1:19",
818
+ "valueSize": 1
819
+ },
820
+ {
821
+ "declaration": 4234,
822
+ "isOffset": false,
823
+ "isSlot": false,
824
+ "src": "2593:9:19",
825
+ "valueSize": 1
826
+ },
827
+ {
828
+ "declaration": 4234,
829
+ "isOffset": false,
830
+ "isSlot": false,
831
+ "src": "2642:9:19",
832
+ "valueSize": 1
833
+ },
834
+ {
835
+ "declaration": 4234,
836
+ "isOffset": false,
837
+ "isSlot": false,
838
+ "src": "2699:9:19",
839
+ "valueSize": 1
840
+ },
841
+ {
842
+ "declaration": 4255,
843
+ "isOffset": false,
844
+ "isSlot": false,
845
+ "src": "2676:1:19",
846
+ "valueSize": 1
847
+ }
848
+ ],
849
+ "flags": [
850
+ "memory-safe"
851
+ ],
852
+ "id": 4257,
853
+ "nodeType": "InlineAssembly",
854
+ "src": "2535:196:19"
855
+ },
856
+ {
857
+ "expression": {
858
+ "arguments": [
859
+ {
860
+ "id": 4259,
861
+ "name": "hash",
862
+ "nodeType": "Identifier",
863
+ "overloadedDeclarations": [],
864
+ "referencedDeclaration": 4232,
865
+ "src": "2762:4:19",
866
+ "typeDescriptions": {
867
+ "typeIdentifier": "t_bytes32",
868
+ "typeString": "bytes32"
869
+ }
870
+ },
871
+ {
872
+ "id": 4260,
873
+ "name": "v",
874
+ "nodeType": "Identifier",
875
+ "overloadedDeclarations": [],
876
+ "referencedDeclaration": 4255,
877
+ "src": "2768:1:19",
878
+ "typeDescriptions": {
879
+ "typeIdentifier": "t_uint8",
880
+ "typeString": "uint8"
881
+ }
882
+ },
883
+ {
884
+ "id": 4261,
885
+ "name": "r",
886
+ "nodeType": "Identifier",
887
+ "overloadedDeclarations": [],
888
+ "referencedDeclaration": 4249,
889
+ "src": "2771:1:19",
890
+ "typeDescriptions": {
891
+ "typeIdentifier": "t_bytes32",
892
+ "typeString": "bytes32"
893
+ }
894
+ },
895
+ {
896
+ "id": 4262,
897
+ "name": "s",
898
+ "nodeType": "Identifier",
899
+ "overloadedDeclarations": [],
900
+ "referencedDeclaration": 4252,
901
+ "src": "2774:1:19",
902
+ "typeDescriptions": {
903
+ "typeIdentifier": "t_bytes32",
904
+ "typeString": "bytes32"
905
+ }
906
+ }
907
+ ],
908
+ "expression": {
909
+ "argumentTypes": [
910
+ {
911
+ "typeIdentifier": "t_bytes32",
912
+ "typeString": "bytes32"
913
+ },
914
+ {
915
+ "typeIdentifier": "t_uint8",
916
+ "typeString": "uint8"
917
+ },
918
+ {
919
+ "typeIdentifier": "t_bytes32",
920
+ "typeString": "bytes32"
921
+ },
922
+ {
923
+ "typeIdentifier": "t_bytes32",
924
+ "typeString": "bytes32"
925
+ }
926
+ ],
927
+ "id": 4258,
928
+ "name": "tryRecover",
929
+ "nodeType": "Identifier",
930
+ "overloadedDeclarations": [
931
+ 4282,
932
+ 4362,
933
+ 4470
934
+ ],
935
+ "referencedDeclaration": 4470,
936
+ "src": "2751:10:19",
937
+ "typeDescriptions": {
938
+ "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
939
+ "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"
940
+ }
941
+ },
942
+ "id": 4263,
943
+ "isConstant": false,
944
+ "isLValue": false,
945
+ "isPure": false,
946
+ "kind": "functionCall",
947
+ "lValueRequested": false,
948
+ "nameLocations": [],
949
+ "names": [],
950
+ "nodeType": "FunctionCall",
951
+ "src": "2751:25:19",
952
+ "tryCall": false,
953
+ "typeDescriptions": {
954
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
955
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
956
+ }
957
+ },
958
+ "functionReturnParameters": 4243,
959
+ "id": 4264,
960
+ "nodeType": "Return",
961
+ "src": "2744:32:19"
962
+ }
963
+ ]
964
+ }
965
+ }
966
+ ]
967
+ },
968
+ "documentation": {
969
+ "id": 4230,
970
+ "nodeType": "StructuredDocumentation",
971
+ "src": "857:1267:19",
972
+ "text": " @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n return address(0) without also returning an error description. Errors are documented using an enum (error type)\n and a bytes32 providing additional information about the error.\n If no error is returned, then the address can be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]"
973
+ },
974
+ "id": 4282,
975
+ "implemented": true,
976
+ "kind": "function",
977
+ "modifiers": [],
978
+ "name": "tryRecover",
979
+ "nameLocation": "2138:10:19",
980
+ "nodeType": "FunctionDefinition",
981
+ "parameters": {
982
+ "id": 4235,
983
+ "nodeType": "ParameterList",
984
+ "parameters": [
985
+ {
986
+ "constant": false,
987
+ "id": 4232,
988
+ "mutability": "mutable",
989
+ "name": "hash",
990
+ "nameLocation": "2166:4:19",
991
+ "nodeType": "VariableDeclaration",
992
+ "scope": 4282,
993
+ "src": "2158:12:19",
994
+ "stateVariable": false,
995
+ "storageLocation": "default",
996
+ "typeDescriptions": {
997
+ "typeIdentifier": "t_bytes32",
998
+ "typeString": "bytes32"
999
+ },
1000
+ "typeName": {
1001
+ "id": 4231,
1002
+ "name": "bytes32",
1003
+ "nodeType": "ElementaryTypeName",
1004
+ "src": "2158:7:19",
1005
+ "typeDescriptions": {
1006
+ "typeIdentifier": "t_bytes32",
1007
+ "typeString": "bytes32"
1008
+ }
1009
+ },
1010
+ "visibility": "internal"
1011
+ },
1012
+ {
1013
+ "constant": false,
1014
+ "id": 4234,
1015
+ "mutability": "mutable",
1016
+ "name": "signature",
1017
+ "nameLocation": "2193:9:19",
1018
+ "nodeType": "VariableDeclaration",
1019
+ "scope": 4282,
1020
+ "src": "2180:22:19",
1021
+ "stateVariable": false,
1022
+ "storageLocation": "memory",
1023
+ "typeDescriptions": {
1024
+ "typeIdentifier": "t_bytes_memory_ptr",
1025
+ "typeString": "bytes"
1026
+ },
1027
+ "typeName": {
1028
+ "id": 4233,
1029
+ "name": "bytes",
1030
+ "nodeType": "ElementaryTypeName",
1031
+ "src": "2180:5:19",
1032
+ "typeDescriptions": {
1033
+ "typeIdentifier": "t_bytes_storage_ptr",
1034
+ "typeString": "bytes"
1035
+ }
1036
+ },
1037
+ "visibility": "internal"
1038
+ }
1039
+ ],
1040
+ "src": "2148:60:19"
1041
+ },
1042
+ "returnParameters": {
1043
+ "id": 4243,
1044
+ "nodeType": "ParameterList",
1045
+ "parameters": [
1046
+ {
1047
+ "constant": false,
1048
+ "id": 4237,
1049
+ "mutability": "mutable",
1050
+ "name": "recovered",
1051
+ "nameLocation": "2240:9:19",
1052
+ "nodeType": "VariableDeclaration",
1053
+ "scope": 4282,
1054
+ "src": "2232:17:19",
1055
+ "stateVariable": false,
1056
+ "storageLocation": "default",
1057
+ "typeDescriptions": {
1058
+ "typeIdentifier": "t_address",
1059
+ "typeString": "address"
1060
+ },
1061
+ "typeName": {
1062
+ "id": 4236,
1063
+ "name": "address",
1064
+ "nodeType": "ElementaryTypeName",
1065
+ "src": "2232:7:19",
1066
+ "stateMutability": "nonpayable",
1067
+ "typeDescriptions": {
1068
+ "typeIdentifier": "t_address",
1069
+ "typeString": "address"
1070
+ }
1071
+ },
1072
+ "visibility": "internal"
1073
+ },
1074
+ {
1075
+ "constant": false,
1076
+ "id": 4240,
1077
+ "mutability": "mutable",
1078
+ "name": "err",
1079
+ "nameLocation": "2264:3:19",
1080
+ "nodeType": "VariableDeclaration",
1081
+ "scope": 4282,
1082
+ "src": "2251:16:19",
1083
+ "stateVariable": false,
1084
+ "storageLocation": "default",
1085
+ "typeDescriptions": {
1086
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
1087
+ "typeString": "enum ECDSA.RecoverError"
1088
+ },
1089
+ "typeName": {
1090
+ "id": 4239,
1091
+ "nodeType": "UserDefinedTypeName",
1092
+ "pathNode": {
1093
+ "id": 4238,
1094
+ "name": "RecoverError",
1095
+ "nameLocations": [
1096
+ "2251:12:19"
1097
+ ],
1098
+ "nodeType": "IdentifierPath",
1099
+ "referencedDeclaration": 4216,
1100
+ "src": "2251:12:19"
1101
+ },
1102
+ "referencedDeclaration": 4216,
1103
+ "src": "2251:12:19",
1104
+ "typeDescriptions": {
1105
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
1106
+ "typeString": "enum ECDSA.RecoverError"
1107
+ }
1108
+ },
1109
+ "visibility": "internal"
1110
+ },
1111
+ {
1112
+ "constant": false,
1113
+ "id": 4242,
1114
+ "mutability": "mutable",
1115
+ "name": "errArg",
1116
+ "nameLocation": "2277:6:19",
1117
+ "nodeType": "VariableDeclaration",
1118
+ "scope": 4282,
1119
+ "src": "2269:14:19",
1120
+ "stateVariable": false,
1121
+ "storageLocation": "default",
1122
+ "typeDescriptions": {
1123
+ "typeIdentifier": "t_bytes32",
1124
+ "typeString": "bytes32"
1125
+ },
1126
+ "typeName": {
1127
+ "id": 4241,
1128
+ "name": "bytes32",
1129
+ "nodeType": "ElementaryTypeName",
1130
+ "src": "2269:7:19",
1131
+ "typeDescriptions": {
1132
+ "typeIdentifier": "t_bytes32",
1133
+ "typeString": "bytes32"
1134
+ }
1135
+ },
1136
+ "visibility": "internal"
1137
+ }
1138
+ ],
1139
+ "src": "2231:53:19"
1140
+ },
1141
+ "scope": 4556,
1142
+ "src": "2129:778:19",
1143
+ "stateMutability": "pure",
1144
+ "virtual": false,
1145
+ "visibility": "internal"
1146
+ },
1147
+ {
1148
+ "body": {
1149
+ "id": 4311,
1150
+ "nodeType": "Block",
1151
+ "src": "3801:168:19",
1152
+ "statements": [
1153
+ {
1154
+ "assignments": [
1155
+ 4293,
1156
+ 4296,
1157
+ 4298
1158
+ ],
1159
+ "declarations": [
1160
+ {
1161
+ "constant": false,
1162
+ "id": 4293,
1163
+ "mutability": "mutable",
1164
+ "name": "recovered",
1165
+ "nameLocation": "3820:9:19",
1166
+ "nodeType": "VariableDeclaration",
1167
+ "scope": 4311,
1168
+ "src": "3812:17:19",
1169
+ "stateVariable": false,
1170
+ "storageLocation": "default",
1171
+ "typeDescriptions": {
1172
+ "typeIdentifier": "t_address",
1173
+ "typeString": "address"
1174
+ },
1175
+ "typeName": {
1176
+ "id": 4292,
1177
+ "name": "address",
1178
+ "nodeType": "ElementaryTypeName",
1179
+ "src": "3812:7:19",
1180
+ "stateMutability": "nonpayable",
1181
+ "typeDescriptions": {
1182
+ "typeIdentifier": "t_address",
1183
+ "typeString": "address"
1184
+ }
1185
+ },
1186
+ "visibility": "internal"
1187
+ },
1188
+ {
1189
+ "constant": false,
1190
+ "id": 4296,
1191
+ "mutability": "mutable",
1192
+ "name": "error",
1193
+ "nameLocation": "3844:5:19",
1194
+ "nodeType": "VariableDeclaration",
1195
+ "scope": 4311,
1196
+ "src": "3831:18:19",
1197
+ "stateVariable": false,
1198
+ "storageLocation": "default",
1199
+ "typeDescriptions": {
1200
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
1201
+ "typeString": "enum ECDSA.RecoverError"
1202
+ },
1203
+ "typeName": {
1204
+ "id": 4295,
1205
+ "nodeType": "UserDefinedTypeName",
1206
+ "pathNode": {
1207
+ "id": 4294,
1208
+ "name": "RecoverError",
1209
+ "nameLocations": [
1210
+ "3831:12:19"
1211
+ ],
1212
+ "nodeType": "IdentifierPath",
1213
+ "referencedDeclaration": 4216,
1214
+ "src": "3831:12:19"
1215
+ },
1216
+ "referencedDeclaration": 4216,
1217
+ "src": "3831:12:19",
1218
+ "typeDescriptions": {
1219
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
1220
+ "typeString": "enum ECDSA.RecoverError"
1221
+ }
1222
+ },
1223
+ "visibility": "internal"
1224
+ },
1225
+ {
1226
+ "constant": false,
1227
+ "id": 4298,
1228
+ "mutability": "mutable",
1229
+ "name": "errorArg",
1230
+ "nameLocation": "3859:8:19",
1231
+ "nodeType": "VariableDeclaration",
1232
+ "scope": 4311,
1233
+ "src": "3851:16:19",
1234
+ "stateVariable": false,
1235
+ "storageLocation": "default",
1236
+ "typeDescriptions": {
1237
+ "typeIdentifier": "t_bytes32",
1238
+ "typeString": "bytes32"
1239
+ },
1240
+ "typeName": {
1241
+ "id": 4297,
1242
+ "name": "bytes32",
1243
+ "nodeType": "ElementaryTypeName",
1244
+ "src": "3851:7:19",
1245
+ "typeDescriptions": {
1246
+ "typeIdentifier": "t_bytes32",
1247
+ "typeString": "bytes32"
1248
+ }
1249
+ },
1250
+ "visibility": "internal"
1251
+ }
1252
+ ],
1253
+ "id": 4303,
1254
+ "initialValue": {
1255
+ "arguments": [
1256
+ {
1257
+ "id": 4300,
1258
+ "name": "hash",
1259
+ "nodeType": "Identifier",
1260
+ "overloadedDeclarations": [],
1261
+ "referencedDeclaration": 4285,
1262
+ "src": "3882:4:19",
1263
+ "typeDescriptions": {
1264
+ "typeIdentifier": "t_bytes32",
1265
+ "typeString": "bytes32"
1266
+ }
1267
+ },
1268
+ {
1269
+ "id": 4301,
1270
+ "name": "signature",
1271
+ "nodeType": "Identifier",
1272
+ "overloadedDeclarations": [],
1273
+ "referencedDeclaration": 4287,
1274
+ "src": "3888:9:19",
1275
+ "typeDescriptions": {
1276
+ "typeIdentifier": "t_bytes_memory_ptr",
1277
+ "typeString": "bytes memory"
1278
+ }
1279
+ }
1280
+ ],
1281
+ "expression": {
1282
+ "argumentTypes": [
1283
+ {
1284
+ "typeIdentifier": "t_bytes32",
1285
+ "typeString": "bytes32"
1286
+ },
1287
+ {
1288
+ "typeIdentifier": "t_bytes_memory_ptr",
1289
+ "typeString": "bytes memory"
1290
+ }
1291
+ ],
1292
+ "id": 4299,
1293
+ "name": "tryRecover",
1294
+ "nodeType": "Identifier",
1295
+ "overloadedDeclarations": [
1296
+ 4282,
1297
+ 4362,
1298
+ 4470
1299
+ ],
1300
+ "referencedDeclaration": 4282,
1301
+ "src": "3871:10:19",
1302
+ "typeDescriptions": {
1303
+ "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
1304
+ "typeString": "function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError,bytes32)"
1305
+ }
1306
+ },
1307
+ "id": 4302,
1308
+ "isConstant": false,
1309
+ "isLValue": false,
1310
+ "isPure": false,
1311
+ "kind": "functionCall",
1312
+ "lValueRequested": false,
1313
+ "nameLocations": [],
1314
+ "names": [],
1315
+ "nodeType": "FunctionCall",
1316
+ "src": "3871:27:19",
1317
+ "tryCall": false,
1318
+ "typeDescriptions": {
1319
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
1320
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
1321
+ }
1322
+ },
1323
+ "nodeType": "VariableDeclarationStatement",
1324
+ "src": "3811:87:19"
1325
+ },
1326
+ {
1327
+ "expression": {
1328
+ "arguments": [
1329
+ {
1330
+ "id": 4305,
1331
+ "name": "error",
1332
+ "nodeType": "Identifier",
1333
+ "overloadedDeclarations": [],
1334
+ "referencedDeclaration": 4296,
1335
+ "src": "3920:5:19",
1336
+ "typeDescriptions": {
1337
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
1338
+ "typeString": "enum ECDSA.RecoverError"
1339
+ }
1340
+ },
1341
+ {
1342
+ "id": 4306,
1343
+ "name": "errorArg",
1344
+ "nodeType": "Identifier",
1345
+ "overloadedDeclarations": [],
1346
+ "referencedDeclaration": 4298,
1347
+ "src": "3927:8:19",
1348
+ "typeDescriptions": {
1349
+ "typeIdentifier": "t_bytes32",
1350
+ "typeString": "bytes32"
1351
+ }
1352
+ }
1353
+ ],
1354
+ "expression": {
1355
+ "argumentTypes": [
1356
+ {
1357
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
1358
+ "typeString": "enum ECDSA.RecoverError"
1359
+ },
1360
+ {
1361
+ "typeIdentifier": "t_bytes32",
1362
+ "typeString": "bytes32"
1363
+ }
1364
+ ],
1365
+ "id": 4304,
1366
+ "name": "_throwError",
1367
+ "nodeType": "Identifier",
1368
+ "overloadedDeclarations": [],
1369
+ "referencedDeclaration": 4555,
1370
+ "src": "3908:11:19",
1371
+ "typeDescriptions": {
1372
+ "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$4216_$_t_bytes32_$returns$__$",
1373
+ "typeString": "function (enum ECDSA.RecoverError,bytes32) pure"
1374
+ }
1375
+ },
1376
+ "id": 4307,
1377
+ "isConstant": false,
1378
+ "isLValue": false,
1379
+ "isPure": false,
1380
+ "kind": "functionCall",
1381
+ "lValueRequested": false,
1382
+ "nameLocations": [],
1383
+ "names": [],
1384
+ "nodeType": "FunctionCall",
1385
+ "src": "3908:28:19",
1386
+ "tryCall": false,
1387
+ "typeDescriptions": {
1388
+ "typeIdentifier": "t_tuple$__$",
1389
+ "typeString": "tuple()"
1390
+ }
1391
+ },
1392
+ "id": 4308,
1393
+ "nodeType": "ExpressionStatement",
1394
+ "src": "3908:28:19"
1395
+ },
1396
+ {
1397
+ "expression": {
1398
+ "id": 4309,
1399
+ "name": "recovered",
1400
+ "nodeType": "Identifier",
1401
+ "overloadedDeclarations": [],
1402
+ "referencedDeclaration": 4293,
1403
+ "src": "3953:9:19",
1404
+ "typeDescriptions": {
1405
+ "typeIdentifier": "t_address",
1406
+ "typeString": "address"
1407
+ }
1408
+ },
1409
+ "functionReturnParameters": 4291,
1410
+ "id": 4310,
1411
+ "nodeType": "Return",
1412
+ "src": "3946:16:19"
1413
+ }
1414
+ ]
1415
+ },
1416
+ "documentation": {
1417
+ "id": 4283,
1418
+ "nodeType": "StructuredDocumentation",
1419
+ "src": "2913:796:19",
1420
+ "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it."
1421
+ },
1422
+ "id": 4312,
1423
+ "implemented": true,
1424
+ "kind": "function",
1425
+ "modifiers": [],
1426
+ "name": "recover",
1427
+ "nameLocation": "3723:7:19",
1428
+ "nodeType": "FunctionDefinition",
1429
+ "parameters": {
1430
+ "id": 4288,
1431
+ "nodeType": "ParameterList",
1432
+ "parameters": [
1433
+ {
1434
+ "constant": false,
1435
+ "id": 4285,
1436
+ "mutability": "mutable",
1437
+ "name": "hash",
1438
+ "nameLocation": "3739:4:19",
1439
+ "nodeType": "VariableDeclaration",
1440
+ "scope": 4312,
1441
+ "src": "3731:12:19",
1442
+ "stateVariable": false,
1443
+ "storageLocation": "default",
1444
+ "typeDescriptions": {
1445
+ "typeIdentifier": "t_bytes32",
1446
+ "typeString": "bytes32"
1447
+ },
1448
+ "typeName": {
1449
+ "id": 4284,
1450
+ "name": "bytes32",
1451
+ "nodeType": "ElementaryTypeName",
1452
+ "src": "3731:7:19",
1453
+ "typeDescriptions": {
1454
+ "typeIdentifier": "t_bytes32",
1455
+ "typeString": "bytes32"
1456
+ }
1457
+ },
1458
+ "visibility": "internal"
1459
+ },
1460
+ {
1461
+ "constant": false,
1462
+ "id": 4287,
1463
+ "mutability": "mutable",
1464
+ "name": "signature",
1465
+ "nameLocation": "3758:9:19",
1466
+ "nodeType": "VariableDeclaration",
1467
+ "scope": 4312,
1468
+ "src": "3745:22:19",
1469
+ "stateVariable": false,
1470
+ "storageLocation": "memory",
1471
+ "typeDescriptions": {
1472
+ "typeIdentifier": "t_bytes_memory_ptr",
1473
+ "typeString": "bytes"
1474
+ },
1475
+ "typeName": {
1476
+ "id": 4286,
1477
+ "name": "bytes",
1478
+ "nodeType": "ElementaryTypeName",
1479
+ "src": "3745:5:19",
1480
+ "typeDescriptions": {
1481
+ "typeIdentifier": "t_bytes_storage_ptr",
1482
+ "typeString": "bytes"
1483
+ }
1484
+ },
1485
+ "visibility": "internal"
1486
+ }
1487
+ ],
1488
+ "src": "3730:38:19"
1489
+ },
1490
+ "returnParameters": {
1491
+ "id": 4291,
1492
+ "nodeType": "ParameterList",
1493
+ "parameters": [
1494
+ {
1495
+ "constant": false,
1496
+ "id": 4290,
1497
+ "mutability": "mutable",
1498
+ "name": "",
1499
+ "nameLocation": "-1:-1:-1",
1500
+ "nodeType": "VariableDeclaration",
1501
+ "scope": 4312,
1502
+ "src": "3792:7:19",
1503
+ "stateVariable": false,
1504
+ "storageLocation": "default",
1505
+ "typeDescriptions": {
1506
+ "typeIdentifier": "t_address",
1507
+ "typeString": "address"
1508
+ },
1509
+ "typeName": {
1510
+ "id": 4289,
1511
+ "name": "address",
1512
+ "nodeType": "ElementaryTypeName",
1513
+ "src": "3792:7:19",
1514
+ "stateMutability": "nonpayable",
1515
+ "typeDescriptions": {
1516
+ "typeIdentifier": "t_address",
1517
+ "typeString": "address"
1518
+ }
1519
+ },
1520
+ "visibility": "internal"
1521
+ }
1522
+ ],
1523
+ "src": "3791:9:19"
1524
+ },
1525
+ "scope": 4556,
1526
+ "src": "3714:255:19",
1527
+ "stateMutability": "pure",
1528
+ "virtual": false,
1529
+ "visibility": "internal"
1530
+ },
1531
+ {
1532
+ "body": {
1533
+ "id": 4361,
1534
+ "nodeType": "Block",
1535
+ "src": "4348:342:19",
1536
+ "statements": [
1537
+ {
1538
+ "id": 4360,
1539
+ "nodeType": "UncheckedBlock",
1540
+ "src": "4358:326:19",
1541
+ "statements": [
1542
+ {
1543
+ "assignments": [
1544
+ 4330
1545
+ ],
1546
+ "declarations": [
1547
+ {
1548
+ "constant": false,
1549
+ "id": 4330,
1550
+ "mutability": "mutable",
1551
+ "name": "s",
1552
+ "nameLocation": "4390:1:19",
1553
+ "nodeType": "VariableDeclaration",
1554
+ "scope": 4360,
1555
+ "src": "4382:9:19",
1556
+ "stateVariable": false,
1557
+ "storageLocation": "default",
1558
+ "typeDescriptions": {
1559
+ "typeIdentifier": "t_bytes32",
1560
+ "typeString": "bytes32"
1561
+ },
1562
+ "typeName": {
1563
+ "id": 4329,
1564
+ "name": "bytes32",
1565
+ "nodeType": "ElementaryTypeName",
1566
+ "src": "4382:7:19",
1567
+ "typeDescriptions": {
1568
+ "typeIdentifier": "t_bytes32",
1569
+ "typeString": "bytes32"
1570
+ }
1571
+ },
1572
+ "visibility": "internal"
1573
+ }
1574
+ ],
1575
+ "id": 4337,
1576
+ "initialValue": {
1577
+ "commonType": {
1578
+ "typeIdentifier": "t_bytes32",
1579
+ "typeString": "bytes32"
1580
+ },
1581
+ "id": 4336,
1582
+ "isConstant": false,
1583
+ "isLValue": false,
1584
+ "isPure": false,
1585
+ "lValueRequested": false,
1586
+ "leftExpression": {
1587
+ "id": 4331,
1588
+ "name": "vs",
1589
+ "nodeType": "Identifier",
1590
+ "overloadedDeclarations": [],
1591
+ "referencedDeclaration": 4319,
1592
+ "src": "4394:2:19",
1593
+ "typeDescriptions": {
1594
+ "typeIdentifier": "t_bytes32",
1595
+ "typeString": "bytes32"
1596
+ }
1597
+ },
1598
+ "nodeType": "BinaryOperation",
1599
+ "operator": "&",
1600
+ "rightExpression": {
1601
+ "arguments": [
1602
+ {
1603
+ "hexValue": "307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666",
1604
+ "id": 4334,
1605
+ "isConstant": false,
1606
+ "isLValue": false,
1607
+ "isPure": true,
1608
+ "kind": "number",
1609
+ "lValueRequested": false,
1610
+ "nodeType": "Literal",
1611
+ "src": "4407:66:19",
1612
+ "typeDescriptions": {
1613
+ "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1",
1614
+ "typeString": "int_const 5789...(69 digits omitted)...9967"
1615
+ },
1616
+ "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
1617
+ }
1618
+ ],
1619
+ "expression": {
1620
+ "argumentTypes": [
1621
+ {
1622
+ "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1",
1623
+ "typeString": "int_const 5789...(69 digits omitted)...9967"
1624
+ }
1625
+ ],
1626
+ "id": 4333,
1627
+ "isConstant": false,
1628
+ "isLValue": false,
1629
+ "isPure": true,
1630
+ "lValueRequested": false,
1631
+ "nodeType": "ElementaryTypeNameExpression",
1632
+ "src": "4399:7:19",
1633
+ "typeDescriptions": {
1634
+ "typeIdentifier": "t_type$_t_bytes32_$",
1635
+ "typeString": "type(bytes32)"
1636
+ },
1637
+ "typeName": {
1638
+ "id": 4332,
1639
+ "name": "bytes32",
1640
+ "nodeType": "ElementaryTypeName",
1641
+ "src": "4399:7:19",
1642
+ "typeDescriptions": {}
1643
+ }
1644
+ },
1645
+ "id": 4335,
1646
+ "isConstant": false,
1647
+ "isLValue": false,
1648
+ "isPure": true,
1649
+ "kind": "typeConversion",
1650
+ "lValueRequested": false,
1651
+ "nameLocations": [],
1652
+ "names": [],
1653
+ "nodeType": "FunctionCall",
1654
+ "src": "4399:75:19",
1655
+ "tryCall": false,
1656
+ "typeDescriptions": {
1657
+ "typeIdentifier": "t_bytes32",
1658
+ "typeString": "bytes32"
1659
+ }
1660
+ },
1661
+ "src": "4394:80:19",
1662
+ "typeDescriptions": {
1663
+ "typeIdentifier": "t_bytes32",
1664
+ "typeString": "bytes32"
1665
+ }
1666
+ },
1667
+ "nodeType": "VariableDeclarationStatement",
1668
+ "src": "4382:92:19"
1669
+ },
1670
+ {
1671
+ "assignments": [
1672
+ 4339
1673
+ ],
1674
+ "declarations": [
1675
+ {
1676
+ "constant": false,
1677
+ "id": 4339,
1678
+ "mutability": "mutable",
1679
+ "name": "v",
1680
+ "nameLocation": "4591:1:19",
1681
+ "nodeType": "VariableDeclaration",
1682
+ "scope": 4360,
1683
+ "src": "4585:7:19",
1684
+ "stateVariable": false,
1685
+ "storageLocation": "default",
1686
+ "typeDescriptions": {
1687
+ "typeIdentifier": "t_uint8",
1688
+ "typeString": "uint8"
1689
+ },
1690
+ "typeName": {
1691
+ "id": 4338,
1692
+ "name": "uint8",
1693
+ "nodeType": "ElementaryTypeName",
1694
+ "src": "4585:5:19",
1695
+ "typeDescriptions": {
1696
+ "typeIdentifier": "t_uint8",
1697
+ "typeString": "uint8"
1698
+ }
1699
+ },
1700
+ "visibility": "internal"
1701
+ }
1702
+ ],
1703
+ "id": 4352,
1704
+ "initialValue": {
1705
+ "arguments": [
1706
+ {
1707
+ "commonType": {
1708
+ "typeIdentifier": "t_uint256",
1709
+ "typeString": "uint256"
1710
+ },
1711
+ "id": 4350,
1712
+ "isConstant": false,
1713
+ "isLValue": false,
1714
+ "isPure": false,
1715
+ "lValueRequested": false,
1716
+ "leftExpression": {
1717
+ "components": [
1718
+ {
1719
+ "commonType": {
1720
+ "typeIdentifier": "t_uint256",
1721
+ "typeString": "uint256"
1722
+ },
1723
+ "id": 4347,
1724
+ "isConstant": false,
1725
+ "isLValue": false,
1726
+ "isPure": false,
1727
+ "lValueRequested": false,
1728
+ "leftExpression": {
1729
+ "arguments": [
1730
+ {
1731
+ "id": 4344,
1732
+ "name": "vs",
1733
+ "nodeType": "Identifier",
1734
+ "overloadedDeclarations": [],
1735
+ "referencedDeclaration": 4319,
1736
+ "src": "4610:2:19",
1737
+ "typeDescriptions": {
1738
+ "typeIdentifier": "t_bytes32",
1739
+ "typeString": "bytes32"
1740
+ }
1741
+ }
1742
+ ],
1743
+ "expression": {
1744
+ "argumentTypes": [
1745
+ {
1746
+ "typeIdentifier": "t_bytes32",
1747
+ "typeString": "bytes32"
1748
+ }
1749
+ ],
1750
+ "id": 4343,
1751
+ "isConstant": false,
1752
+ "isLValue": false,
1753
+ "isPure": true,
1754
+ "lValueRequested": false,
1755
+ "nodeType": "ElementaryTypeNameExpression",
1756
+ "src": "4602:7:19",
1757
+ "typeDescriptions": {
1758
+ "typeIdentifier": "t_type$_t_uint256_$",
1759
+ "typeString": "type(uint256)"
1760
+ },
1761
+ "typeName": {
1762
+ "id": 4342,
1763
+ "name": "uint256",
1764
+ "nodeType": "ElementaryTypeName",
1765
+ "src": "4602:7:19",
1766
+ "typeDescriptions": {}
1767
+ }
1768
+ },
1769
+ "id": 4345,
1770
+ "isConstant": false,
1771
+ "isLValue": false,
1772
+ "isPure": false,
1773
+ "kind": "typeConversion",
1774
+ "lValueRequested": false,
1775
+ "nameLocations": [],
1776
+ "names": [],
1777
+ "nodeType": "FunctionCall",
1778
+ "src": "4602:11:19",
1779
+ "tryCall": false,
1780
+ "typeDescriptions": {
1781
+ "typeIdentifier": "t_uint256",
1782
+ "typeString": "uint256"
1783
+ }
1784
+ },
1785
+ "nodeType": "BinaryOperation",
1786
+ "operator": ">>",
1787
+ "rightExpression": {
1788
+ "hexValue": "323535",
1789
+ "id": 4346,
1790
+ "isConstant": false,
1791
+ "isLValue": false,
1792
+ "isPure": true,
1793
+ "kind": "number",
1794
+ "lValueRequested": false,
1795
+ "nodeType": "Literal",
1796
+ "src": "4617:3:19",
1797
+ "typeDescriptions": {
1798
+ "typeIdentifier": "t_rational_255_by_1",
1799
+ "typeString": "int_const 255"
1800
+ },
1801
+ "value": "255"
1802
+ },
1803
+ "src": "4602:18:19",
1804
+ "typeDescriptions": {
1805
+ "typeIdentifier": "t_uint256",
1806
+ "typeString": "uint256"
1807
+ }
1808
+ }
1809
+ ],
1810
+ "id": 4348,
1811
+ "isConstant": false,
1812
+ "isInlineArray": false,
1813
+ "isLValue": false,
1814
+ "isPure": false,
1815
+ "lValueRequested": false,
1816
+ "nodeType": "TupleExpression",
1817
+ "src": "4601:20:19",
1818
+ "typeDescriptions": {
1819
+ "typeIdentifier": "t_uint256",
1820
+ "typeString": "uint256"
1821
+ }
1822
+ },
1823
+ "nodeType": "BinaryOperation",
1824
+ "operator": "+",
1825
+ "rightExpression": {
1826
+ "hexValue": "3237",
1827
+ "id": 4349,
1828
+ "isConstant": false,
1829
+ "isLValue": false,
1830
+ "isPure": true,
1831
+ "kind": "number",
1832
+ "lValueRequested": false,
1833
+ "nodeType": "Literal",
1834
+ "src": "4624:2:19",
1835
+ "typeDescriptions": {
1836
+ "typeIdentifier": "t_rational_27_by_1",
1837
+ "typeString": "int_const 27"
1838
+ },
1839
+ "value": "27"
1840
+ },
1841
+ "src": "4601:25:19",
1842
+ "typeDescriptions": {
1843
+ "typeIdentifier": "t_uint256",
1844
+ "typeString": "uint256"
1845
+ }
1846
+ }
1847
+ ],
1848
+ "expression": {
1849
+ "argumentTypes": [
1850
+ {
1851
+ "typeIdentifier": "t_uint256",
1852
+ "typeString": "uint256"
1853
+ }
1854
+ ],
1855
+ "id": 4341,
1856
+ "isConstant": false,
1857
+ "isLValue": false,
1858
+ "isPure": true,
1859
+ "lValueRequested": false,
1860
+ "nodeType": "ElementaryTypeNameExpression",
1861
+ "src": "4595:5:19",
1862
+ "typeDescriptions": {
1863
+ "typeIdentifier": "t_type$_t_uint8_$",
1864
+ "typeString": "type(uint8)"
1865
+ },
1866
+ "typeName": {
1867
+ "id": 4340,
1868
+ "name": "uint8",
1869
+ "nodeType": "ElementaryTypeName",
1870
+ "src": "4595:5:19",
1871
+ "typeDescriptions": {}
1872
+ }
1873
+ },
1874
+ "id": 4351,
1875
+ "isConstant": false,
1876
+ "isLValue": false,
1877
+ "isPure": false,
1878
+ "kind": "typeConversion",
1879
+ "lValueRequested": false,
1880
+ "nameLocations": [],
1881
+ "names": [],
1882
+ "nodeType": "FunctionCall",
1883
+ "src": "4595:32:19",
1884
+ "tryCall": false,
1885
+ "typeDescriptions": {
1886
+ "typeIdentifier": "t_uint8",
1887
+ "typeString": "uint8"
1888
+ }
1889
+ },
1890
+ "nodeType": "VariableDeclarationStatement",
1891
+ "src": "4585:42:19"
1892
+ },
1893
+ {
1894
+ "expression": {
1895
+ "arguments": [
1896
+ {
1897
+ "id": 4354,
1898
+ "name": "hash",
1899
+ "nodeType": "Identifier",
1900
+ "overloadedDeclarations": [],
1901
+ "referencedDeclaration": 4315,
1902
+ "src": "4659:4:19",
1903
+ "typeDescriptions": {
1904
+ "typeIdentifier": "t_bytes32",
1905
+ "typeString": "bytes32"
1906
+ }
1907
+ },
1908
+ {
1909
+ "id": 4355,
1910
+ "name": "v",
1911
+ "nodeType": "Identifier",
1912
+ "overloadedDeclarations": [],
1913
+ "referencedDeclaration": 4339,
1914
+ "src": "4665:1:19",
1915
+ "typeDescriptions": {
1916
+ "typeIdentifier": "t_uint8",
1917
+ "typeString": "uint8"
1918
+ }
1919
+ },
1920
+ {
1921
+ "id": 4356,
1922
+ "name": "r",
1923
+ "nodeType": "Identifier",
1924
+ "overloadedDeclarations": [],
1925
+ "referencedDeclaration": 4317,
1926
+ "src": "4668:1:19",
1927
+ "typeDescriptions": {
1928
+ "typeIdentifier": "t_bytes32",
1929
+ "typeString": "bytes32"
1930
+ }
1931
+ },
1932
+ {
1933
+ "id": 4357,
1934
+ "name": "s",
1935
+ "nodeType": "Identifier",
1936
+ "overloadedDeclarations": [],
1937
+ "referencedDeclaration": 4330,
1938
+ "src": "4671:1:19",
1939
+ "typeDescriptions": {
1940
+ "typeIdentifier": "t_bytes32",
1941
+ "typeString": "bytes32"
1942
+ }
1943
+ }
1944
+ ],
1945
+ "expression": {
1946
+ "argumentTypes": [
1947
+ {
1948
+ "typeIdentifier": "t_bytes32",
1949
+ "typeString": "bytes32"
1950
+ },
1951
+ {
1952
+ "typeIdentifier": "t_uint8",
1953
+ "typeString": "uint8"
1954
+ },
1955
+ {
1956
+ "typeIdentifier": "t_bytes32",
1957
+ "typeString": "bytes32"
1958
+ },
1959
+ {
1960
+ "typeIdentifier": "t_bytes32",
1961
+ "typeString": "bytes32"
1962
+ }
1963
+ ],
1964
+ "id": 4353,
1965
+ "name": "tryRecover",
1966
+ "nodeType": "Identifier",
1967
+ "overloadedDeclarations": [
1968
+ 4282,
1969
+ 4362,
1970
+ 4470
1971
+ ],
1972
+ "referencedDeclaration": 4470,
1973
+ "src": "4648:10:19",
1974
+ "typeDescriptions": {
1975
+ "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
1976
+ "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"
1977
+ }
1978
+ },
1979
+ "id": 4358,
1980
+ "isConstant": false,
1981
+ "isLValue": false,
1982
+ "isPure": false,
1983
+ "kind": "functionCall",
1984
+ "lValueRequested": false,
1985
+ "nameLocations": [],
1986
+ "names": [],
1987
+ "nodeType": "FunctionCall",
1988
+ "src": "4648:25:19",
1989
+ "tryCall": false,
1990
+ "typeDescriptions": {
1991
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
1992
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
1993
+ }
1994
+ },
1995
+ "functionReturnParameters": 4328,
1996
+ "id": 4359,
1997
+ "nodeType": "Return",
1998
+ "src": "4641:32:19"
1999
+ }
2000
+ ]
2001
+ }
2002
+ ]
2003
+ },
2004
+ "documentation": {
2005
+ "id": 4313,
2006
+ "nodeType": "StructuredDocumentation",
2007
+ "src": "3975:205:19",
2008
+ "text": " @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]"
2009
+ },
2010
+ "id": 4362,
2011
+ "implemented": true,
2012
+ "kind": "function",
2013
+ "modifiers": [],
2014
+ "name": "tryRecover",
2015
+ "nameLocation": "4194:10:19",
2016
+ "nodeType": "FunctionDefinition",
2017
+ "parameters": {
2018
+ "id": 4320,
2019
+ "nodeType": "ParameterList",
2020
+ "parameters": [
2021
+ {
2022
+ "constant": false,
2023
+ "id": 4315,
2024
+ "mutability": "mutable",
2025
+ "name": "hash",
2026
+ "nameLocation": "4222:4:19",
2027
+ "nodeType": "VariableDeclaration",
2028
+ "scope": 4362,
2029
+ "src": "4214:12:19",
2030
+ "stateVariable": false,
2031
+ "storageLocation": "default",
2032
+ "typeDescriptions": {
2033
+ "typeIdentifier": "t_bytes32",
2034
+ "typeString": "bytes32"
2035
+ },
2036
+ "typeName": {
2037
+ "id": 4314,
2038
+ "name": "bytes32",
2039
+ "nodeType": "ElementaryTypeName",
2040
+ "src": "4214:7:19",
2041
+ "typeDescriptions": {
2042
+ "typeIdentifier": "t_bytes32",
2043
+ "typeString": "bytes32"
2044
+ }
2045
+ },
2046
+ "visibility": "internal"
2047
+ },
2048
+ {
2049
+ "constant": false,
2050
+ "id": 4317,
2051
+ "mutability": "mutable",
2052
+ "name": "r",
2053
+ "nameLocation": "4244:1:19",
2054
+ "nodeType": "VariableDeclaration",
2055
+ "scope": 4362,
2056
+ "src": "4236:9:19",
2057
+ "stateVariable": false,
2058
+ "storageLocation": "default",
2059
+ "typeDescriptions": {
2060
+ "typeIdentifier": "t_bytes32",
2061
+ "typeString": "bytes32"
2062
+ },
2063
+ "typeName": {
2064
+ "id": 4316,
2065
+ "name": "bytes32",
2066
+ "nodeType": "ElementaryTypeName",
2067
+ "src": "4236:7:19",
2068
+ "typeDescriptions": {
2069
+ "typeIdentifier": "t_bytes32",
2070
+ "typeString": "bytes32"
2071
+ }
2072
+ },
2073
+ "visibility": "internal"
2074
+ },
2075
+ {
2076
+ "constant": false,
2077
+ "id": 4319,
2078
+ "mutability": "mutable",
2079
+ "name": "vs",
2080
+ "nameLocation": "4263:2:19",
2081
+ "nodeType": "VariableDeclaration",
2082
+ "scope": 4362,
2083
+ "src": "4255:10:19",
2084
+ "stateVariable": false,
2085
+ "storageLocation": "default",
2086
+ "typeDescriptions": {
2087
+ "typeIdentifier": "t_bytes32",
2088
+ "typeString": "bytes32"
2089
+ },
2090
+ "typeName": {
2091
+ "id": 4318,
2092
+ "name": "bytes32",
2093
+ "nodeType": "ElementaryTypeName",
2094
+ "src": "4255:7:19",
2095
+ "typeDescriptions": {
2096
+ "typeIdentifier": "t_bytes32",
2097
+ "typeString": "bytes32"
2098
+ }
2099
+ },
2100
+ "visibility": "internal"
2101
+ }
2102
+ ],
2103
+ "src": "4204:67:19"
2104
+ },
2105
+ "returnParameters": {
2106
+ "id": 4328,
2107
+ "nodeType": "ParameterList",
2108
+ "parameters": [
2109
+ {
2110
+ "constant": false,
2111
+ "id": 4322,
2112
+ "mutability": "mutable",
2113
+ "name": "recovered",
2114
+ "nameLocation": "4303:9:19",
2115
+ "nodeType": "VariableDeclaration",
2116
+ "scope": 4362,
2117
+ "src": "4295:17:19",
2118
+ "stateVariable": false,
2119
+ "storageLocation": "default",
2120
+ "typeDescriptions": {
2121
+ "typeIdentifier": "t_address",
2122
+ "typeString": "address"
2123
+ },
2124
+ "typeName": {
2125
+ "id": 4321,
2126
+ "name": "address",
2127
+ "nodeType": "ElementaryTypeName",
2128
+ "src": "4295:7:19",
2129
+ "stateMutability": "nonpayable",
2130
+ "typeDescriptions": {
2131
+ "typeIdentifier": "t_address",
2132
+ "typeString": "address"
2133
+ }
2134
+ },
2135
+ "visibility": "internal"
2136
+ },
2137
+ {
2138
+ "constant": false,
2139
+ "id": 4325,
2140
+ "mutability": "mutable",
2141
+ "name": "err",
2142
+ "nameLocation": "4327:3:19",
2143
+ "nodeType": "VariableDeclaration",
2144
+ "scope": 4362,
2145
+ "src": "4314:16:19",
2146
+ "stateVariable": false,
2147
+ "storageLocation": "default",
2148
+ "typeDescriptions": {
2149
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2150
+ "typeString": "enum ECDSA.RecoverError"
2151
+ },
2152
+ "typeName": {
2153
+ "id": 4324,
2154
+ "nodeType": "UserDefinedTypeName",
2155
+ "pathNode": {
2156
+ "id": 4323,
2157
+ "name": "RecoverError",
2158
+ "nameLocations": [
2159
+ "4314:12:19"
2160
+ ],
2161
+ "nodeType": "IdentifierPath",
2162
+ "referencedDeclaration": 4216,
2163
+ "src": "4314:12:19"
2164
+ },
2165
+ "referencedDeclaration": 4216,
2166
+ "src": "4314:12:19",
2167
+ "typeDescriptions": {
2168
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2169
+ "typeString": "enum ECDSA.RecoverError"
2170
+ }
2171
+ },
2172
+ "visibility": "internal"
2173
+ },
2174
+ {
2175
+ "constant": false,
2176
+ "id": 4327,
2177
+ "mutability": "mutable",
2178
+ "name": "errArg",
2179
+ "nameLocation": "4340:6:19",
2180
+ "nodeType": "VariableDeclaration",
2181
+ "scope": 4362,
2182
+ "src": "4332:14:19",
2183
+ "stateVariable": false,
2184
+ "storageLocation": "default",
2185
+ "typeDescriptions": {
2186
+ "typeIdentifier": "t_bytes32",
2187
+ "typeString": "bytes32"
2188
+ },
2189
+ "typeName": {
2190
+ "id": 4326,
2191
+ "name": "bytes32",
2192
+ "nodeType": "ElementaryTypeName",
2193
+ "src": "4332:7:19",
2194
+ "typeDescriptions": {
2195
+ "typeIdentifier": "t_bytes32",
2196
+ "typeString": "bytes32"
2197
+ }
2198
+ },
2199
+ "visibility": "internal"
2200
+ }
2201
+ ],
2202
+ "src": "4294:53:19"
2203
+ },
2204
+ "scope": 4556,
2205
+ "src": "4185:505:19",
2206
+ "stateMutability": "pure",
2207
+ "virtual": false,
2208
+ "visibility": "internal"
2209
+ },
2210
+ {
2211
+ "body": {
2212
+ "id": 4394,
2213
+ "nodeType": "Block",
2214
+ "src": "4903:164:19",
2215
+ "statements": [
2216
+ {
2217
+ "assignments": [
2218
+ 4375,
2219
+ 4378,
2220
+ 4380
2221
+ ],
2222
+ "declarations": [
2223
+ {
2224
+ "constant": false,
2225
+ "id": 4375,
2226
+ "mutability": "mutable",
2227
+ "name": "recovered",
2228
+ "nameLocation": "4922:9:19",
2229
+ "nodeType": "VariableDeclaration",
2230
+ "scope": 4394,
2231
+ "src": "4914:17:19",
2232
+ "stateVariable": false,
2233
+ "storageLocation": "default",
2234
+ "typeDescriptions": {
2235
+ "typeIdentifier": "t_address",
2236
+ "typeString": "address"
2237
+ },
2238
+ "typeName": {
2239
+ "id": 4374,
2240
+ "name": "address",
2241
+ "nodeType": "ElementaryTypeName",
2242
+ "src": "4914:7:19",
2243
+ "stateMutability": "nonpayable",
2244
+ "typeDescriptions": {
2245
+ "typeIdentifier": "t_address",
2246
+ "typeString": "address"
2247
+ }
2248
+ },
2249
+ "visibility": "internal"
2250
+ },
2251
+ {
2252
+ "constant": false,
2253
+ "id": 4378,
2254
+ "mutability": "mutable",
2255
+ "name": "error",
2256
+ "nameLocation": "4946:5:19",
2257
+ "nodeType": "VariableDeclaration",
2258
+ "scope": 4394,
2259
+ "src": "4933:18:19",
2260
+ "stateVariable": false,
2261
+ "storageLocation": "default",
2262
+ "typeDescriptions": {
2263
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2264
+ "typeString": "enum ECDSA.RecoverError"
2265
+ },
2266
+ "typeName": {
2267
+ "id": 4377,
2268
+ "nodeType": "UserDefinedTypeName",
2269
+ "pathNode": {
2270
+ "id": 4376,
2271
+ "name": "RecoverError",
2272
+ "nameLocations": [
2273
+ "4933:12:19"
2274
+ ],
2275
+ "nodeType": "IdentifierPath",
2276
+ "referencedDeclaration": 4216,
2277
+ "src": "4933:12:19"
2278
+ },
2279
+ "referencedDeclaration": 4216,
2280
+ "src": "4933:12:19",
2281
+ "typeDescriptions": {
2282
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2283
+ "typeString": "enum ECDSA.RecoverError"
2284
+ }
2285
+ },
2286
+ "visibility": "internal"
2287
+ },
2288
+ {
2289
+ "constant": false,
2290
+ "id": 4380,
2291
+ "mutability": "mutable",
2292
+ "name": "errorArg",
2293
+ "nameLocation": "4961:8:19",
2294
+ "nodeType": "VariableDeclaration",
2295
+ "scope": 4394,
2296
+ "src": "4953:16:19",
2297
+ "stateVariable": false,
2298
+ "storageLocation": "default",
2299
+ "typeDescriptions": {
2300
+ "typeIdentifier": "t_bytes32",
2301
+ "typeString": "bytes32"
2302
+ },
2303
+ "typeName": {
2304
+ "id": 4379,
2305
+ "name": "bytes32",
2306
+ "nodeType": "ElementaryTypeName",
2307
+ "src": "4953:7:19",
2308
+ "typeDescriptions": {
2309
+ "typeIdentifier": "t_bytes32",
2310
+ "typeString": "bytes32"
2311
+ }
2312
+ },
2313
+ "visibility": "internal"
2314
+ }
2315
+ ],
2316
+ "id": 4386,
2317
+ "initialValue": {
2318
+ "arguments": [
2319
+ {
2320
+ "id": 4382,
2321
+ "name": "hash",
2322
+ "nodeType": "Identifier",
2323
+ "overloadedDeclarations": [],
2324
+ "referencedDeclaration": 4365,
2325
+ "src": "4984:4:19",
2326
+ "typeDescriptions": {
2327
+ "typeIdentifier": "t_bytes32",
2328
+ "typeString": "bytes32"
2329
+ }
2330
+ },
2331
+ {
2332
+ "id": 4383,
2333
+ "name": "r",
2334
+ "nodeType": "Identifier",
2335
+ "overloadedDeclarations": [],
2336
+ "referencedDeclaration": 4367,
2337
+ "src": "4990:1:19",
2338
+ "typeDescriptions": {
2339
+ "typeIdentifier": "t_bytes32",
2340
+ "typeString": "bytes32"
2341
+ }
2342
+ },
2343
+ {
2344
+ "id": 4384,
2345
+ "name": "vs",
2346
+ "nodeType": "Identifier",
2347
+ "overloadedDeclarations": [],
2348
+ "referencedDeclaration": 4369,
2349
+ "src": "4993:2:19",
2350
+ "typeDescriptions": {
2351
+ "typeIdentifier": "t_bytes32",
2352
+ "typeString": "bytes32"
2353
+ }
2354
+ }
2355
+ ],
2356
+ "expression": {
2357
+ "argumentTypes": [
2358
+ {
2359
+ "typeIdentifier": "t_bytes32",
2360
+ "typeString": "bytes32"
2361
+ },
2362
+ {
2363
+ "typeIdentifier": "t_bytes32",
2364
+ "typeString": "bytes32"
2365
+ },
2366
+ {
2367
+ "typeIdentifier": "t_bytes32",
2368
+ "typeString": "bytes32"
2369
+ }
2370
+ ],
2371
+ "id": 4381,
2372
+ "name": "tryRecover",
2373
+ "nodeType": "Identifier",
2374
+ "overloadedDeclarations": [
2375
+ 4282,
2376
+ 4362,
2377
+ 4470
2378
+ ],
2379
+ "referencedDeclaration": 4362,
2380
+ "src": "4973:10:19",
2381
+ "typeDescriptions": {
2382
+ "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
2383
+ "typeString": "function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"
2384
+ }
2385
+ },
2386
+ "id": 4385,
2387
+ "isConstant": false,
2388
+ "isLValue": false,
2389
+ "isPure": false,
2390
+ "kind": "functionCall",
2391
+ "lValueRequested": false,
2392
+ "nameLocations": [],
2393
+ "names": [],
2394
+ "nodeType": "FunctionCall",
2395
+ "src": "4973:23:19",
2396
+ "tryCall": false,
2397
+ "typeDescriptions": {
2398
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
2399
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
2400
+ }
2401
+ },
2402
+ "nodeType": "VariableDeclarationStatement",
2403
+ "src": "4913:83:19"
2404
+ },
2405
+ {
2406
+ "expression": {
2407
+ "arguments": [
2408
+ {
2409
+ "id": 4388,
2410
+ "name": "error",
2411
+ "nodeType": "Identifier",
2412
+ "overloadedDeclarations": [],
2413
+ "referencedDeclaration": 4378,
2414
+ "src": "5018:5:19",
2415
+ "typeDescriptions": {
2416
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2417
+ "typeString": "enum ECDSA.RecoverError"
2418
+ }
2419
+ },
2420
+ {
2421
+ "id": 4389,
2422
+ "name": "errorArg",
2423
+ "nodeType": "Identifier",
2424
+ "overloadedDeclarations": [],
2425
+ "referencedDeclaration": 4380,
2426
+ "src": "5025:8:19",
2427
+ "typeDescriptions": {
2428
+ "typeIdentifier": "t_bytes32",
2429
+ "typeString": "bytes32"
2430
+ }
2431
+ }
2432
+ ],
2433
+ "expression": {
2434
+ "argumentTypes": [
2435
+ {
2436
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2437
+ "typeString": "enum ECDSA.RecoverError"
2438
+ },
2439
+ {
2440
+ "typeIdentifier": "t_bytes32",
2441
+ "typeString": "bytes32"
2442
+ }
2443
+ ],
2444
+ "id": 4387,
2445
+ "name": "_throwError",
2446
+ "nodeType": "Identifier",
2447
+ "overloadedDeclarations": [],
2448
+ "referencedDeclaration": 4555,
2449
+ "src": "5006:11:19",
2450
+ "typeDescriptions": {
2451
+ "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$4216_$_t_bytes32_$returns$__$",
2452
+ "typeString": "function (enum ECDSA.RecoverError,bytes32) pure"
2453
+ }
2454
+ },
2455
+ "id": 4390,
2456
+ "isConstant": false,
2457
+ "isLValue": false,
2458
+ "isPure": false,
2459
+ "kind": "functionCall",
2460
+ "lValueRequested": false,
2461
+ "nameLocations": [],
2462
+ "names": [],
2463
+ "nodeType": "FunctionCall",
2464
+ "src": "5006:28:19",
2465
+ "tryCall": false,
2466
+ "typeDescriptions": {
2467
+ "typeIdentifier": "t_tuple$__$",
2468
+ "typeString": "tuple()"
2469
+ }
2470
+ },
2471
+ "id": 4391,
2472
+ "nodeType": "ExpressionStatement",
2473
+ "src": "5006:28:19"
2474
+ },
2475
+ {
2476
+ "expression": {
2477
+ "id": 4392,
2478
+ "name": "recovered",
2479
+ "nodeType": "Identifier",
2480
+ "overloadedDeclarations": [],
2481
+ "referencedDeclaration": 4375,
2482
+ "src": "5051:9:19",
2483
+ "typeDescriptions": {
2484
+ "typeIdentifier": "t_address",
2485
+ "typeString": "address"
2486
+ }
2487
+ },
2488
+ "functionReturnParameters": 4373,
2489
+ "id": 4393,
2490
+ "nodeType": "Return",
2491
+ "src": "5044:16:19"
2492
+ }
2493
+ ]
2494
+ },
2495
+ "documentation": {
2496
+ "id": 4363,
2497
+ "nodeType": "StructuredDocumentation",
2498
+ "src": "4696:116:19",
2499
+ "text": " @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately."
2500
+ },
2501
+ "id": 4395,
2502
+ "implemented": true,
2503
+ "kind": "function",
2504
+ "modifiers": [],
2505
+ "name": "recover",
2506
+ "nameLocation": "4826:7:19",
2507
+ "nodeType": "FunctionDefinition",
2508
+ "parameters": {
2509
+ "id": 4370,
2510
+ "nodeType": "ParameterList",
2511
+ "parameters": [
2512
+ {
2513
+ "constant": false,
2514
+ "id": 4365,
2515
+ "mutability": "mutable",
2516
+ "name": "hash",
2517
+ "nameLocation": "4842:4:19",
2518
+ "nodeType": "VariableDeclaration",
2519
+ "scope": 4395,
2520
+ "src": "4834:12:19",
2521
+ "stateVariable": false,
2522
+ "storageLocation": "default",
2523
+ "typeDescriptions": {
2524
+ "typeIdentifier": "t_bytes32",
2525
+ "typeString": "bytes32"
2526
+ },
2527
+ "typeName": {
2528
+ "id": 4364,
2529
+ "name": "bytes32",
2530
+ "nodeType": "ElementaryTypeName",
2531
+ "src": "4834:7:19",
2532
+ "typeDescriptions": {
2533
+ "typeIdentifier": "t_bytes32",
2534
+ "typeString": "bytes32"
2535
+ }
2536
+ },
2537
+ "visibility": "internal"
2538
+ },
2539
+ {
2540
+ "constant": false,
2541
+ "id": 4367,
2542
+ "mutability": "mutable",
2543
+ "name": "r",
2544
+ "nameLocation": "4856:1:19",
2545
+ "nodeType": "VariableDeclaration",
2546
+ "scope": 4395,
2547
+ "src": "4848:9:19",
2548
+ "stateVariable": false,
2549
+ "storageLocation": "default",
2550
+ "typeDescriptions": {
2551
+ "typeIdentifier": "t_bytes32",
2552
+ "typeString": "bytes32"
2553
+ },
2554
+ "typeName": {
2555
+ "id": 4366,
2556
+ "name": "bytes32",
2557
+ "nodeType": "ElementaryTypeName",
2558
+ "src": "4848:7:19",
2559
+ "typeDescriptions": {
2560
+ "typeIdentifier": "t_bytes32",
2561
+ "typeString": "bytes32"
2562
+ }
2563
+ },
2564
+ "visibility": "internal"
2565
+ },
2566
+ {
2567
+ "constant": false,
2568
+ "id": 4369,
2569
+ "mutability": "mutable",
2570
+ "name": "vs",
2571
+ "nameLocation": "4867:2:19",
2572
+ "nodeType": "VariableDeclaration",
2573
+ "scope": 4395,
2574
+ "src": "4859:10:19",
2575
+ "stateVariable": false,
2576
+ "storageLocation": "default",
2577
+ "typeDescriptions": {
2578
+ "typeIdentifier": "t_bytes32",
2579
+ "typeString": "bytes32"
2580
+ },
2581
+ "typeName": {
2582
+ "id": 4368,
2583
+ "name": "bytes32",
2584
+ "nodeType": "ElementaryTypeName",
2585
+ "src": "4859:7:19",
2586
+ "typeDescriptions": {
2587
+ "typeIdentifier": "t_bytes32",
2588
+ "typeString": "bytes32"
2589
+ }
2590
+ },
2591
+ "visibility": "internal"
2592
+ }
2593
+ ],
2594
+ "src": "4833:37:19"
2595
+ },
2596
+ "returnParameters": {
2597
+ "id": 4373,
2598
+ "nodeType": "ParameterList",
2599
+ "parameters": [
2600
+ {
2601
+ "constant": false,
2602
+ "id": 4372,
2603
+ "mutability": "mutable",
2604
+ "name": "",
2605
+ "nameLocation": "-1:-1:-1",
2606
+ "nodeType": "VariableDeclaration",
2607
+ "scope": 4395,
2608
+ "src": "4894:7:19",
2609
+ "stateVariable": false,
2610
+ "storageLocation": "default",
2611
+ "typeDescriptions": {
2612
+ "typeIdentifier": "t_address",
2613
+ "typeString": "address"
2614
+ },
2615
+ "typeName": {
2616
+ "id": 4371,
2617
+ "name": "address",
2618
+ "nodeType": "ElementaryTypeName",
2619
+ "src": "4894:7:19",
2620
+ "stateMutability": "nonpayable",
2621
+ "typeDescriptions": {
2622
+ "typeIdentifier": "t_address",
2623
+ "typeString": "address"
2624
+ }
2625
+ },
2626
+ "visibility": "internal"
2627
+ }
2628
+ ],
2629
+ "src": "4893:9:19"
2630
+ },
2631
+ "scope": 4556,
2632
+ "src": "4817:250:19",
2633
+ "stateMutability": "pure",
2634
+ "virtual": false,
2635
+ "visibility": "internal"
2636
+ },
2637
+ {
2638
+ "body": {
2639
+ "id": 4469,
2640
+ "nodeType": "Block",
2641
+ "src": "5382:1372:19",
2642
+ "statements": [
2643
+ {
2644
+ "condition": {
2645
+ "commonType": {
2646
+ "typeIdentifier": "t_uint256",
2647
+ "typeString": "uint256"
2648
+ },
2649
+ "id": 4419,
2650
+ "isConstant": false,
2651
+ "isLValue": false,
2652
+ "isPure": false,
2653
+ "lValueRequested": false,
2654
+ "leftExpression": {
2655
+ "arguments": [
2656
+ {
2657
+ "id": 4416,
2658
+ "name": "s",
2659
+ "nodeType": "Identifier",
2660
+ "overloadedDeclarations": [],
2661
+ "referencedDeclaration": 4404,
2662
+ "src": "6278:1:19",
2663
+ "typeDescriptions": {
2664
+ "typeIdentifier": "t_bytes32",
2665
+ "typeString": "bytes32"
2666
+ }
2667
+ }
2668
+ ],
2669
+ "expression": {
2670
+ "argumentTypes": [
2671
+ {
2672
+ "typeIdentifier": "t_bytes32",
2673
+ "typeString": "bytes32"
2674
+ }
2675
+ ],
2676
+ "id": 4415,
2677
+ "isConstant": false,
2678
+ "isLValue": false,
2679
+ "isPure": true,
2680
+ "lValueRequested": false,
2681
+ "nodeType": "ElementaryTypeNameExpression",
2682
+ "src": "6270:7:19",
2683
+ "typeDescriptions": {
2684
+ "typeIdentifier": "t_type$_t_uint256_$",
2685
+ "typeString": "type(uint256)"
2686
+ },
2687
+ "typeName": {
2688
+ "id": 4414,
2689
+ "name": "uint256",
2690
+ "nodeType": "ElementaryTypeName",
2691
+ "src": "6270:7:19",
2692
+ "typeDescriptions": {}
2693
+ }
2694
+ },
2695
+ "id": 4417,
2696
+ "isConstant": false,
2697
+ "isLValue": false,
2698
+ "isPure": false,
2699
+ "kind": "typeConversion",
2700
+ "lValueRequested": false,
2701
+ "nameLocations": [],
2702
+ "names": [],
2703
+ "nodeType": "FunctionCall",
2704
+ "src": "6270:10:19",
2705
+ "tryCall": false,
2706
+ "typeDescriptions": {
2707
+ "typeIdentifier": "t_uint256",
2708
+ "typeString": "uint256"
2709
+ }
2710
+ },
2711
+ "nodeType": "BinaryOperation",
2712
+ "operator": ">",
2713
+ "rightExpression": {
2714
+ "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
2715
+ "id": 4418,
2716
+ "isConstant": false,
2717
+ "isLValue": false,
2718
+ "isPure": true,
2719
+ "kind": "number",
2720
+ "lValueRequested": false,
2721
+ "nodeType": "Literal",
2722
+ "src": "6283:66:19",
2723
+ "typeDescriptions": {
2724
+ "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
2725
+ "typeString": "int_const 5789...(69 digits omitted)...7168"
2726
+ },
2727
+ "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
2728
+ },
2729
+ "src": "6270:79:19",
2730
+ "typeDescriptions": {
2731
+ "typeIdentifier": "t_bool",
2732
+ "typeString": "bool"
2733
+ }
2734
+ },
2735
+ "id": 4430,
2736
+ "nodeType": "IfStatement",
2737
+ "src": "6266:164:19",
2738
+ "trueBody": {
2739
+ "id": 4429,
2740
+ "nodeType": "Block",
2741
+ "src": "6351:79:19",
2742
+ "statements": [
2743
+ {
2744
+ "expression": {
2745
+ "components": [
2746
+ {
2747
+ "arguments": [
2748
+ {
2749
+ "hexValue": "30",
2750
+ "id": 4422,
2751
+ "isConstant": false,
2752
+ "isLValue": false,
2753
+ "isPure": true,
2754
+ "kind": "number",
2755
+ "lValueRequested": false,
2756
+ "nodeType": "Literal",
2757
+ "src": "6381:1:19",
2758
+ "typeDescriptions": {
2759
+ "typeIdentifier": "t_rational_0_by_1",
2760
+ "typeString": "int_const 0"
2761
+ },
2762
+ "value": "0"
2763
+ }
2764
+ ],
2765
+ "expression": {
2766
+ "argumentTypes": [
2767
+ {
2768
+ "typeIdentifier": "t_rational_0_by_1",
2769
+ "typeString": "int_const 0"
2770
+ }
2771
+ ],
2772
+ "id": 4421,
2773
+ "isConstant": false,
2774
+ "isLValue": false,
2775
+ "isPure": true,
2776
+ "lValueRequested": false,
2777
+ "nodeType": "ElementaryTypeNameExpression",
2778
+ "src": "6373:7:19",
2779
+ "typeDescriptions": {
2780
+ "typeIdentifier": "t_type$_t_address_$",
2781
+ "typeString": "type(address)"
2782
+ },
2783
+ "typeName": {
2784
+ "id": 4420,
2785
+ "name": "address",
2786
+ "nodeType": "ElementaryTypeName",
2787
+ "src": "6373:7:19",
2788
+ "typeDescriptions": {}
2789
+ }
2790
+ },
2791
+ "id": 4423,
2792
+ "isConstant": false,
2793
+ "isLValue": false,
2794
+ "isPure": true,
2795
+ "kind": "typeConversion",
2796
+ "lValueRequested": false,
2797
+ "nameLocations": [],
2798
+ "names": [],
2799
+ "nodeType": "FunctionCall",
2800
+ "src": "6373:10:19",
2801
+ "tryCall": false,
2802
+ "typeDescriptions": {
2803
+ "typeIdentifier": "t_address",
2804
+ "typeString": "address"
2805
+ }
2806
+ },
2807
+ {
2808
+ "expression": {
2809
+ "id": 4424,
2810
+ "name": "RecoverError",
2811
+ "nodeType": "Identifier",
2812
+ "overloadedDeclarations": [],
2813
+ "referencedDeclaration": 4216,
2814
+ "src": "6385:12:19",
2815
+ "typeDescriptions": {
2816
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
2817
+ "typeString": "type(enum ECDSA.RecoverError)"
2818
+ }
2819
+ },
2820
+ "id": 4425,
2821
+ "isConstant": false,
2822
+ "isLValue": false,
2823
+ "isPure": true,
2824
+ "lValueRequested": false,
2825
+ "memberLocation": "6398:17:19",
2826
+ "memberName": "InvalidSignatureS",
2827
+ "nodeType": "MemberAccess",
2828
+ "referencedDeclaration": 4215,
2829
+ "src": "6385:30:19",
2830
+ "typeDescriptions": {
2831
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
2832
+ "typeString": "enum ECDSA.RecoverError"
2833
+ }
2834
+ },
2835
+ {
2836
+ "id": 4426,
2837
+ "name": "s",
2838
+ "nodeType": "Identifier",
2839
+ "overloadedDeclarations": [],
2840
+ "referencedDeclaration": 4404,
2841
+ "src": "6417:1:19",
2842
+ "typeDescriptions": {
2843
+ "typeIdentifier": "t_bytes32",
2844
+ "typeString": "bytes32"
2845
+ }
2846
+ }
2847
+ ],
2848
+ "id": 4427,
2849
+ "isConstant": false,
2850
+ "isInlineArray": false,
2851
+ "isLValue": false,
2852
+ "isPure": false,
2853
+ "lValueRequested": false,
2854
+ "nodeType": "TupleExpression",
2855
+ "src": "6372:47:19",
2856
+ "typeDescriptions": {
2857
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
2858
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
2859
+ }
2860
+ },
2861
+ "functionReturnParameters": 4413,
2862
+ "id": 4428,
2863
+ "nodeType": "Return",
2864
+ "src": "6365:54:19"
2865
+ }
2866
+ ]
2867
+ }
2868
+ },
2869
+ {
2870
+ "assignments": [
2871
+ 4432
2872
+ ],
2873
+ "declarations": [
2874
+ {
2875
+ "constant": false,
2876
+ "id": 4432,
2877
+ "mutability": "mutable",
2878
+ "name": "signer",
2879
+ "nameLocation": "6532:6:19",
2880
+ "nodeType": "VariableDeclaration",
2881
+ "scope": 4469,
2882
+ "src": "6524:14:19",
2883
+ "stateVariable": false,
2884
+ "storageLocation": "default",
2885
+ "typeDescriptions": {
2886
+ "typeIdentifier": "t_address",
2887
+ "typeString": "address"
2888
+ },
2889
+ "typeName": {
2890
+ "id": 4431,
2891
+ "name": "address",
2892
+ "nodeType": "ElementaryTypeName",
2893
+ "src": "6524:7:19",
2894
+ "stateMutability": "nonpayable",
2895
+ "typeDescriptions": {
2896
+ "typeIdentifier": "t_address",
2897
+ "typeString": "address"
2898
+ }
2899
+ },
2900
+ "visibility": "internal"
2901
+ }
2902
+ ],
2903
+ "id": 4439,
2904
+ "initialValue": {
2905
+ "arguments": [
2906
+ {
2907
+ "id": 4434,
2908
+ "name": "hash",
2909
+ "nodeType": "Identifier",
2910
+ "overloadedDeclarations": [],
2911
+ "referencedDeclaration": 4398,
2912
+ "src": "6551:4:19",
2913
+ "typeDescriptions": {
2914
+ "typeIdentifier": "t_bytes32",
2915
+ "typeString": "bytes32"
2916
+ }
2917
+ },
2918
+ {
2919
+ "id": 4435,
2920
+ "name": "v",
2921
+ "nodeType": "Identifier",
2922
+ "overloadedDeclarations": [],
2923
+ "referencedDeclaration": 4400,
2924
+ "src": "6557:1:19",
2925
+ "typeDescriptions": {
2926
+ "typeIdentifier": "t_uint8",
2927
+ "typeString": "uint8"
2928
+ }
2929
+ },
2930
+ {
2931
+ "id": 4436,
2932
+ "name": "r",
2933
+ "nodeType": "Identifier",
2934
+ "overloadedDeclarations": [],
2935
+ "referencedDeclaration": 4402,
2936
+ "src": "6560:1:19",
2937
+ "typeDescriptions": {
2938
+ "typeIdentifier": "t_bytes32",
2939
+ "typeString": "bytes32"
2940
+ }
2941
+ },
2942
+ {
2943
+ "id": 4437,
2944
+ "name": "s",
2945
+ "nodeType": "Identifier",
2946
+ "overloadedDeclarations": [],
2947
+ "referencedDeclaration": 4404,
2948
+ "src": "6563:1:19",
2949
+ "typeDescriptions": {
2950
+ "typeIdentifier": "t_bytes32",
2951
+ "typeString": "bytes32"
2952
+ }
2953
+ }
2954
+ ],
2955
+ "expression": {
2956
+ "argumentTypes": [
2957
+ {
2958
+ "typeIdentifier": "t_bytes32",
2959
+ "typeString": "bytes32"
2960
+ },
2961
+ {
2962
+ "typeIdentifier": "t_uint8",
2963
+ "typeString": "uint8"
2964
+ },
2965
+ {
2966
+ "typeIdentifier": "t_bytes32",
2967
+ "typeString": "bytes32"
2968
+ },
2969
+ {
2970
+ "typeIdentifier": "t_bytes32",
2971
+ "typeString": "bytes32"
2972
+ }
2973
+ ],
2974
+ "id": 4433,
2975
+ "name": "ecrecover",
2976
+ "nodeType": "Identifier",
2977
+ "overloadedDeclarations": [],
2978
+ "referencedDeclaration": 4294967290,
2979
+ "src": "6541:9:19",
2980
+ "typeDescriptions": {
2981
+ "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
2982
+ "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
2983
+ }
2984
+ },
2985
+ "id": 4438,
2986
+ "isConstant": false,
2987
+ "isLValue": false,
2988
+ "isPure": false,
2989
+ "kind": "functionCall",
2990
+ "lValueRequested": false,
2991
+ "nameLocations": [],
2992
+ "names": [],
2993
+ "nodeType": "FunctionCall",
2994
+ "src": "6541:24:19",
2995
+ "tryCall": false,
2996
+ "typeDescriptions": {
2997
+ "typeIdentifier": "t_address",
2998
+ "typeString": "address"
2999
+ }
3000
+ },
3001
+ "nodeType": "VariableDeclarationStatement",
3002
+ "src": "6524:41:19"
3003
+ },
3004
+ {
3005
+ "condition": {
3006
+ "commonType": {
3007
+ "typeIdentifier": "t_address",
3008
+ "typeString": "address"
3009
+ },
3010
+ "id": 4445,
3011
+ "isConstant": false,
3012
+ "isLValue": false,
3013
+ "isPure": false,
3014
+ "lValueRequested": false,
3015
+ "leftExpression": {
3016
+ "id": 4440,
3017
+ "name": "signer",
3018
+ "nodeType": "Identifier",
3019
+ "overloadedDeclarations": [],
3020
+ "referencedDeclaration": 4432,
3021
+ "src": "6579:6:19",
3022
+ "typeDescriptions": {
3023
+ "typeIdentifier": "t_address",
3024
+ "typeString": "address"
3025
+ }
3026
+ },
3027
+ "nodeType": "BinaryOperation",
3028
+ "operator": "==",
3029
+ "rightExpression": {
3030
+ "arguments": [
3031
+ {
3032
+ "hexValue": "30",
3033
+ "id": 4443,
3034
+ "isConstant": false,
3035
+ "isLValue": false,
3036
+ "isPure": true,
3037
+ "kind": "number",
3038
+ "lValueRequested": false,
3039
+ "nodeType": "Literal",
3040
+ "src": "6597:1:19",
3041
+ "typeDescriptions": {
3042
+ "typeIdentifier": "t_rational_0_by_1",
3043
+ "typeString": "int_const 0"
3044
+ },
3045
+ "value": "0"
3046
+ }
3047
+ ],
3048
+ "expression": {
3049
+ "argumentTypes": [
3050
+ {
3051
+ "typeIdentifier": "t_rational_0_by_1",
3052
+ "typeString": "int_const 0"
3053
+ }
3054
+ ],
3055
+ "id": 4442,
3056
+ "isConstant": false,
3057
+ "isLValue": false,
3058
+ "isPure": true,
3059
+ "lValueRequested": false,
3060
+ "nodeType": "ElementaryTypeNameExpression",
3061
+ "src": "6589:7:19",
3062
+ "typeDescriptions": {
3063
+ "typeIdentifier": "t_type$_t_address_$",
3064
+ "typeString": "type(address)"
3065
+ },
3066
+ "typeName": {
3067
+ "id": 4441,
3068
+ "name": "address",
3069
+ "nodeType": "ElementaryTypeName",
3070
+ "src": "6589:7:19",
3071
+ "typeDescriptions": {}
3072
+ }
3073
+ },
3074
+ "id": 4444,
3075
+ "isConstant": false,
3076
+ "isLValue": false,
3077
+ "isPure": true,
3078
+ "kind": "typeConversion",
3079
+ "lValueRequested": false,
3080
+ "nameLocations": [],
3081
+ "names": [],
3082
+ "nodeType": "FunctionCall",
3083
+ "src": "6589:10:19",
3084
+ "tryCall": false,
3085
+ "typeDescriptions": {
3086
+ "typeIdentifier": "t_address",
3087
+ "typeString": "address"
3088
+ }
3089
+ },
3090
+ "src": "6579:20:19",
3091
+ "typeDescriptions": {
3092
+ "typeIdentifier": "t_bool",
3093
+ "typeString": "bool"
3094
+ }
3095
+ },
3096
+ "id": 4459,
3097
+ "nodeType": "IfStatement",
3098
+ "src": "6575:113:19",
3099
+ "trueBody": {
3100
+ "id": 4458,
3101
+ "nodeType": "Block",
3102
+ "src": "6601:87:19",
3103
+ "statements": [
3104
+ {
3105
+ "expression": {
3106
+ "components": [
3107
+ {
3108
+ "arguments": [
3109
+ {
3110
+ "hexValue": "30",
3111
+ "id": 4448,
3112
+ "isConstant": false,
3113
+ "isLValue": false,
3114
+ "isPure": true,
3115
+ "kind": "number",
3116
+ "lValueRequested": false,
3117
+ "nodeType": "Literal",
3118
+ "src": "6631:1:19",
3119
+ "typeDescriptions": {
3120
+ "typeIdentifier": "t_rational_0_by_1",
3121
+ "typeString": "int_const 0"
3122
+ },
3123
+ "value": "0"
3124
+ }
3125
+ ],
3126
+ "expression": {
3127
+ "argumentTypes": [
3128
+ {
3129
+ "typeIdentifier": "t_rational_0_by_1",
3130
+ "typeString": "int_const 0"
3131
+ }
3132
+ ],
3133
+ "id": 4447,
3134
+ "isConstant": false,
3135
+ "isLValue": false,
3136
+ "isPure": true,
3137
+ "lValueRequested": false,
3138
+ "nodeType": "ElementaryTypeNameExpression",
3139
+ "src": "6623:7:19",
3140
+ "typeDescriptions": {
3141
+ "typeIdentifier": "t_type$_t_address_$",
3142
+ "typeString": "type(address)"
3143
+ },
3144
+ "typeName": {
3145
+ "id": 4446,
3146
+ "name": "address",
3147
+ "nodeType": "ElementaryTypeName",
3148
+ "src": "6623:7:19",
3149
+ "typeDescriptions": {}
3150
+ }
3151
+ },
3152
+ "id": 4449,
3153
+ "isConstant": false,
3154
+ "isLValue": false,
3155
+ "isPure": true,
3156
+ "kind": "typeConversion",
3157
+ "lValueRequested": false,
3158
+ "nameLocations": [],
3159
+ "names": [],
3160
+ "nodeType": "FunctionCall",
3161
+ "src": "6623:10:19",
3162
+ "tryCall": false,
3163
+ "typeDescriptions": {
3164
+ "typeIdentifier": "t_address",
3165
+ "typeString": "address"
3166
+ }
3167
+ },
3168
+ {
3169
+ "expression": {
3170
+ "id": 4450,
3171
+ "name": "RecoverError",
3172
+ "nodeType": "Identifier",
3173
+ "overloadedDeclarations": [],
3174
+ "referencedDeclaration": 4216,
3175
+ "src": "6635:12:19",
3176
+ "typeDescriptions": {
3177
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
3178
+ "typeString": "type(enum ECDSA.RecoverError)"
3179
+ }
3180
+ },
3181
+ "id": 4451,
3182
+ "isConstant": false,
3183
+ "isLValue": false,
3184
+ "isPure": true,
3185
+ "lValueRequested": false,
3186
+ "memberLocation": "6648:16:19",
3187
+ "memberName": "InvalidSignature",
3188
+ "nodeType": "MemberAccess",
3189
+ "referencedDeclaration": 4213,
3190
+ "src": "6635:29:19",
3191
+ "typeDescriptions": {
3192
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3193
+ "typeString": "enum ECDSA.RecoverError"
3194
+ }
3195
+ },
3196
+ {
3197
+ "arguments": [
3198
+ {
3199
+ "hexValue": "30",
3200
+ "id": 4454,
3201
+ "isConstant": false,
3202
+ "isLValue": false,
3203
+ "isPure": true,
3204
+ "kind": "number",
3205
+ "lValueRequested": false,
3206
+ "nodeType": "Literal",
3207
+ "src": "6674:1:19",
3208
+ "typeDescriptions": {
3209
+ "typeIdentifier": "t_rational_0_by_1",
3210
+ "typeString": "int_const 0"
3211
+ },
3212
+ "value": "0"
3213
+ }
3214
+ ],
3215
+ "expression": {
3216
+ "argumentTypes": [
3217
+ {
3218
+ "typeIdentifier": "t_rational_0_by_1",
3219
+ "typeString": "int_const 0"
3220
+ }
3221
+ ],
3222
+ "id": 4453,
3223
+ "isConstant": false,
3224
+ "isLValue": false,
3225
+ "isPure": true,
3226
+ "lValueRequested": false,
3227
+ "nodeType": "ElementaryTypeNameExpression",
3228
+ "src": "6666:7:19",
3229
+ "typeDescriptions": {
3230
+ "typeIdentifier": "t_type$_t_bytes32_$",
3231
+ "typeString": "type(bytes32)"
3232
+ },
3233
+ "typeName": {
3234
+ "id": 4452,
3235
+ "name": "bytes32",
3236
+ "nodeType": "ElementaryTypeName",
3237
+ "src": "6666:7:19",
3238
+ "typeDescriptions": {}
3239
+ }
3240
+ },
3241
+ "id": 4455,
3242
+ "isConstant": false,
3243
+ "isLValue": false,
3244
+ "isPure": true,
3245
+ "kind": "typeConversion",
3246
+ "lValueRequested": false,
3247
+ "nameLocations": [],
3248
+ "names": [],
3249
+ "nodeType": "FunctionCall",
3250
+ "src": "6666:10:19",
3251
+ "tryCall": false,
3252
+ "typeDescriptions": {
3253
+ "typeIdentifier": "t_bytes32",
3254
+ "typeString": "bytes32"
3255
+ }
3256
+ }
3257
+ ],
3258
+ "id": 4456,
3259
+ "isConstant": false,
3260
+ "isInlineArray": false,
3261
+ "isLValue": false,
3262
+ "isPure": true,
3263
+ "lValueRequested": false,
3264
+ "nodeType": "TupleExpression",
3265
+ "src": "6622:55:19",
3266
+ "typeDescriptions": {
3267
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
3268
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
3269
+ }
3270
+ },
3271
+ "functionReturnParameters": 4413,
3272
+ "id": 4457,
3273
+ "nodeType": "Return",
3274
+ "src": "6615:62:19"
3275
+ }
3276
+ ]
3277
+ }
3278
+ },
3279
+ {
3280
+ "expression": {
3281
+ "components": [
3282
+ {
3283
+ "id": 4460,
3284
+ "name": "signer",
3285
+ "nodeType": "Identifier",
3286
+ "overloadedDeclarations": [],
3287
+ "referencedDeclaration": 4432,
3288
+ "src": "6706:6:19",
3289
+ "typeDescriptions": {
3290
+ "typeIdentifier": "t_address",
3291
+ "typeString": "address"
3292
+ }
3293
+ },
3294
+ {
3295
+ "expression": {
3296
+ "id": 4461,
3297
+ "name": "RecoverError",
3298
+ "nodeType": "Identifier",
3299
+ "overloadedDeclarations": [],
3300
+ "referencedDeclaration": 4216,
3301
+ "src": "6714:12:19",
3302
+ "typeDescriptions": {
3303
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
3304
+ "typeString": "type(enum ECDSA.RecoverError)"
3305
+ }
3306
+ },
3307
+ "id": 4462,
3308
+ "isConstant": false,
3309
+ "isLValue": false,
3310
+ "isPure": true,
3311
+ "lValueRequested": false,
3312
+ "memberLocation": "6727:7:19",
3313
+ "memberName": "NoError",
3314
+ "nodeType": "MemberAccess",
3315
+ "referencedDeclaration": 4212,
3316
+ "src": "6714:20:19",
3317
+ "typeDescriptions": {
3318
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3319
+ "typeString": "enum ECDSA.RecoverError"
3320
+ }
3321
+ },
3322
+ {
3323
+ "arguments": [
3324
+ {
3325
+ "hexValue": "30",
3326
+ "id": 4465,
3327
+ "isConstant": false,
3328
+ "isLValue": false,
3329
+ "isPure": true,
3330
+ "kind": "number",
3331
+ "lValueRequested": false,
3332
+ "nodeType": "Literal",
3333
+ "src": "6744:1:19",
3334
+ "typeDescriptions": {
3335
+ "typeIdentifier": "t_rational_0_by_1",
3336
+ "typeString": "int_const 0"
3337
+ },
3338
+ "value": "0"
3339
+ }
3340
+ ],
3341
+ "expression": {
3342
+ "argumentTypes": [
3343
+ {
3344
+ "typeIdentifier": "t_rational_0_by_1",
3345
+ "typeString": "int_const 0"
3346
+ }
3347
+ ],
3348
+ "id": 4464,
3349
+ "isConstant": false,
3350
+ "isLValue": false,
3351
+ "isPure": true,
3352
+ "lValueRequested": false,
3353
+ "nodeType": "ElementaryTypeNameExpression",
3354
+ "src": "6736:7:19",
3355
+ "typeDescriptions": {
3356
+ "typeIdentifier": "t_type$_t_bytes32_$",
3357
+ "typeString": "type(bytes32)"
3358
+ },
3359
+ "typeName": {
3360
+ "id": 4463,
3361
+ "name": "bytes32",
3362
+ "nodeType": "ElementaryTypeName",
3363
+ "src": "6736:7:19",
3364
+ "typeDescriptions": {}
3365
+ }
3366
+ },
3367
+ "id": 4466,
3368
+ "isConstant": false,
3369
+ "isLValue": false,
3370
+ "isPure": true,
3371
+ "kind": "typeConversion",
3372
+ "lValueRequested": false,
3373
+ "nameLocations": [],
3374
+ "names": [],
3375
+ "nodeType": "FunctionCall",
3376
+ "src": "6736:10:19",
3377
+ "tryCall": false,
3378
+ "typeDescriptions": {
3379
+ "typeIdentifier": "t_bytes32",
3380
+ "typeString": "bytes32"
3381
+ }
3382
+ }
3383
+ ],
3384
+ "id": 4467,
3385
+ "isConstant": false,
3386
+ "isInlineArray": false,
3387
+ "isLValue": false,
3388
+ "isPure": false,
3389
+ "lValueRequested": false,
3390
+ "nodeType": "TupleExpression",
3391
+ "src": "6705:42:19",
3392
+ "typeDescriptions": {
3393
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
3394
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
3395
+ }
3396
+ },
3397
+ "functionReturnParameters": 4413,
3398
+ "id": 4468,
3399
+ "nodeType": "Return",
3400
+ "src": "6698:49:19"
3401
+ }
3402
+ ]
3403
+ },
3404
+ "documentation": {
3405
+ "id": 4396,
3406
+ "nodeType": "StructuredDocumentation",
3407
+ "src": "5073:125:19",
3408
+ "text": " @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately."
3409
+ },
3410
+ "id": 4470,
3411
+ "implemented": true,
3412
+ "kind": "function",
3413
+ "modifiers": [],
3414
+ "name": "tryRecover",
3415
+ "nameLocation": "5212:10:19",
3416
+ "nodeType": "FunctionDefinition",
3417
+ "parameters": {
3418
+ "id": 4405,
3419
+ "nodeType": "ParameterList",
3420
+ "parameters": [
3421
+ {
3422
+ "constant": false,
3423
+ "id": 4398,
3424
+ "mutability": "mutable",
3425
+ "name": "hash",
3426
+ "nameLocation": "5240:4:19",
3427
+ "nodeType": "VariableDeclaration",
3428
+ "scope": 4470,
3429
+ "src": "5232:12:19",
3430
+ "stateVariable": false,
3431
+ "storageLocation": "default",
3432
+ "typeDescriptions": {
3433
+ "typeIdentifier": "t_bytes32",
3434
+ "typeString": "bytes32"
3435
+ },
3436
+ "typeName": {
3437
+ "id": 4397,
3438
+ "name": "bytes32",
3439
+ "nodeType": "ElementaryTypeName",
3440
+ "src": "5232:7:19",
3441
+ "typeDescriptions": {
3442
+ "typeIdentifier": "t_bytes32",
3443
+ "typeString": "bytes32"
3444
+ }
3445
+ },
3446
+ "visibility": "internal"
3447
+ },
3448
+ {
3449
+ "constant": false,
3450
+ "id": 4400,
3451
+ "mutability": "mutable",
3452
+ "name": "v",
3453
+ "nameLocation": "5260:1:19",
3454
+ "nodeType": "VariableDeclaration",
3455
+ "scope": 4470,
3456
+ "src": "5254:7:19",
3457
+ "stateVariable": false,
3458
+ "storageLocation": "default",
3459
+ "typeDescriptions": {
3460
+ "typeIdentifier": "t_uint8",
3461
+ "typeString": "uint8"
3462
+ },
3463
+ "typeName": {
3464
+ "id": 4399,
3465
+ "name": "uint8",
3466
+ "nodeType": "ElementaryTypeName",
3467
+ "src": "5254:5:19",
3468
+ "typeDescriptions": {
3469
+ "typeIdentifier": "t_uint8",
3470
+ "typeString": "uint8"
3471
+ }
3472
+ },
3473
+ "visibility": "internal"
3474
+ },
3475
+ {
3476
+ "constant": false,
3477
+ "id": 4402,
3478
+ "mutability": "mutable",
3479
+ "name": "r",
3480
+ "nameLocation": "5279:1:19",
3481
+ "nodeType": "VariableDeclaration",
3482
+ "scope": 4470,
3483
+ "src": "5271:9:19",
3484
+ "stateVariable": false,
3485
+ "storageLocation": "default",
3486
+ "typeDescriptions": {
3487
+ "typeIdentifier": "t_bytes32",
3488
+ "typeString": "bytes32"
3489
+ },
3490
+ "typeName": {
3491
+ "id": 4401,
3492
+ "name": "bytes32",
3493
+ "nodeType": "ElementaryTypeName",
3494
+ "src": "5271:7:19",
3495
+ "typeDescriptions": {
3496
+ "typeIdentifier": "t_bytes32",
3497
+ "typeString": "bytes32"
3498
+ }
3499
+ },
3500
+ "visibility": "internal"
3501
+ },
3502
+ {
3503
+ "constant": false,
3504
+ "id": 4404,
3505
+ "mutability": "mutable",
3506
+ "name": "s",
3507
+ "nameLocation": "5298:1:19",
3508
+ "nodeType": "VariableDeclaration",
3509
+ "scope": 4470,
3510
+ "src": "5290:9:19",
3511
+ "stateVariable": false,
3512
+ "storageLocation": "default",
3513
+ "typeDescriptions": {
3514
+ "typeIdentifier": "t_bytes32",
3515
+ "typeString": "bytes32"
3516
+ },
3517
+ "typeName": {
3518
+ "id": 4403,
3519
+ "name": "bytes32",
3520
+ "nodeType": "ElementaryTypeName",
3521
+ "src": "5290:7:19",
3522
+ "typeDescriptions": {
3523
+ "typeIdentifier": "t_bytes32",
3524
+ "typeString": "bytes32"
3525
+ }
3526
+ },
3527
+ "visibility": "internal"
3528
+ }
3529
+ ],
3530
+ "src": "5222:83:19"
3531
+ },
3532
+ "returnParameters": {
3533
+ "id": 4413,
3534
+ "nodeType": "ParameterList",
3535
+ "parameters": [
3536
+ {
3537
+ "constant": false,
3538
+ "id": 4407,
3539
+ "mutability": "mutable",
3540
+ "name": "recovered",
3541
+ "nameLocation": "5337:9:19",
3542
+ "nodeType": "VariableDeclaration",
3543
+ "scope": 4470,
3544
+ "src": "5329:17:19",
3545
+ "stateVariable": false,
3546
+ "storageLocation": "default",
3547
+ "typeDescriptions": {
3548
+ "typeIdentifier": "t_address",
3549
+ "typeString": "address"
3550
+ },
3551
+ "typeName": {
3552
+ "id": 4406,
3553
+ "name": "address",
3554
+ "nodeType": "ElementaryTypeName",
3555
+ "src": "5329:7:19",
3556
+ "stateMutability": "nonpayable",
3557
+ "typeDescriptions": {
3558
+ "typeIdentifier": "t_address",
3559
+ "typeString": "address"
3560
+ }
3561
+ },
3562
+ "visibility": "internal"
3563
+ },
3564
+ {
3565
+ "constant": false,
3566
+ "id": 4410,
3567
+ "mutability": "mutable",
3568
+ "name": "err",
3569
+ "nameLocation": "5361:3:19",
3570
+ "nodeType": "VariableDeclaration",
3571
+ "scope": 4470,
3572
+ "src": "5348:16:19",
3573
+ "stateVariable": false,
3574
+ "storageLocation": "default",
3575
+ "typeDescriptions": {
3576
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3577
+ "typeString": "enum ECDSA.RecoverError"
3578
+ },
3579
+ "typeName": {
3580
+ "id": 4409,
3581
+ "nodeType": "UserDefinedTypeName",
3582
+ "pathNode": {
3583
+ "id": 4408,
3584
+ "name": "RecoverError",
3585
+ "nameLocations": [
3586
+ "5348:12:19"
3587
+ ],
3588
+ "nodeType": "IdentifierPath",
3589
+ "referencedDeclaration": 4216,
3590
+ "src": "5348:12:19"
3591
+ },
3592
+ "referencedDeclaration": 4216,
3593
+ "src": "5348:12:19",
3594
+ "typeDescriptions": {
3595
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3596
+ "typeString": "enum ECDSA.RecoverError"
3597
+ }
3598
+ },
3599
+ "visibility": "internal"
3600
+ },
3601
+ {
3602
+ "constant": false,
3603
+ "id": 4412,
3604
+ "mutability": "mutable",
3605
+ "name": "errArg",
3606
+ "nameLocation": "5374:6:19",
3607
+ "nodeType": "VariableDeclaration",
3608
+ "scope": 4470,
3609
+ "src": "5366:14:19",
3610
+ "stateVariable": false,
3611
+ "storageLocation": "default",
3612
+ "typeDescriptions": {
3613
+ "typeIdentifier": "t_bytes32",
3614
+ "typeString": "bytes32"
3615
+ },
3616
+ "typeName": {
3617
+ "id": 4411,
3618
+ "name": "bytes32",
3619
+ "nodeType": "ElementaryTypeName",
3620
+ "src": "5366:7:19",
3621
+ "typeDescriptions": {
3622
+ "typeIdentifier": "t_bytes32",
3623
+ "typeString": "bytes32"
3624
+ }
3625
+ },
3626
+ "visibility": "internal"
3627
+ }
3628
+ ],
3629
+ "src": "5328:53:19"
3630
+ },
3631
+ "scope": 4556,
3632
+ "src": "5203:1551:19",
3633
+ "stateMutability": "pure",
3634
+ "virtual": false,
3635
+ "visibility": "internal"
3636
+ },
3637
+ {
3638
+ "body": {
3639
+ "id": 4505,
3640
+ "nodeType": "Block",
3641
+ "src": "6981:166:19",
3642
+ "statements": [
3643
+ {
3644
+ "assignments": [
3645
+ 4485,
3646
+ 4488,
3647
+ 4490
3648
+ ],
3649
+ "declarations": [
3650
+ {
3651
+ "constant": false,
3652
+ "id": 4485,
3653
+ "mutability": "mutable",
3654
+ "name": "recovered",
3655
+ "nameLocation": "7000:9:19",
3656
+ "nodeType": "VariableDeclaration",
3657
+ "scope": 4505,
3658
+ "src": "6992:17:19",
3659
+ "stateVariable": false,
3660
+ "storageLocation": "default",
3661
+ "typeDescriptions": {
3662
+ "typeIdentifier": "t_address",
3663
+ "typeString": "address"
3664
+ },
3665
+ "typeName": {
3666
+ "id": 4484,
3667
+ "name": "address",
3668
+ "nodeType": "ElementaryTypeName",
3669
+ "src": "6992:7:19",
3670
+ "stateMutability": "nonpayable",
3671
+ "typeDescriptions": {
3672
+ "typeIdentifier": "t_address",
3673
+ "typeString": "address"
3674
+ }
3675
+ },
3676
+ "visibility": "internal"
3677
+ },
3678
+ {
3679
+ "constant": false,
3680
+ "id": 4488,
3681
+ "mutability": "mutable",
3682
+ "name": "error",
3683
+ "nameLocation": "7024:5:19",
3684
+ "nodeType": "VariableDeclaration",
3685
+ "scope": 4505,
3686
+ "src": "7011:18:19",
3687
+ "stateVariable": false,
3688
+ "storageLocation": "default",
3689
+ "typeDescriptions": {
3690
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3691
+ "typeString": "enum ECDSA.RecoverError"
3692
+ },
3693
+ "typeName": {
3694
+ "id": 4487,
3695
+ "nodeType": "UserDefinedTypeName",
3696
+ "pathNode": {
3697
+ "id": 4486,
3698
+ "name": "RecoverError",
3699
+ "nameLocations": [
3700
+ "7011:12:19"
3701
+ ],
3702
+ "nodeType": "IdentifierPath",
3703
+ "referencedDeclaration": 4216,
3704
+ "src": "7011:12:19"
3705
+ },
3706
+ "referencedDeclaration": 4216,
3707
+ "src": "7011:12:19",
3708
+ "typeDescriptions": {
3709
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3710
+ "typeString": "enum ECDSA.RecoverError"
3711
+ }
3712
+ },
3713
+ "visibility": "internal"
3714
+ },
3715
+ {
3716
+ "constant": false,
3717
+ "id": 4490,
3718
+ "mutability": "mutable",
3719
+ "name": "errorArg",
3720
+ "nameLocation": "7039:8:19",
3721
+ "nodeType": "VariableDeclaration",
3722
+ "scope": 4505,
3723
+ "src": "7031:16:19",
3724
+ "stateVariable": false,
3725
+ "storageLocation": "default",
3726
+ "typeDescriptions": {
3727
+ "typeIdentifier": "t_bytes32",
3728
+ "typeString": "bytes32"
3729
+ },
3730
+ "typeName": {
3731
+ "id": 4489,
3732
+ "name": "bytes32",
3733
+ "nodeType": "ElementaryTypeName",
3734
+ "src": "7031:7:19",
3735
+ "typeDescriptions": {
3736
+ "typeIdentifier": "t_bytes32",
3737
+ "typeString": "bytes32"
3738
+ }
3739
+ },
3740
+ "visibility": "internal"
3741
+ }
3742
+ ],
3743
+ "id": 4497,
3744
+ "initialValue": {
3745
+ "arguments": [
3746
+ {
3747
+ "id": 4492,
3748
+ "name": "hash",
3749
+ "nodeType": "Identifier",
3750
+ "overloadedDeclarations": [],
3751
+ "referencedDeclaration": 4473,
3752
+ "src": "7062:4:19",
3753
+ "typeDescriptions": {
3754
+ "typeIdentifier": "t_bytes32",
3755
+ "typeString": "bytes32"
3756
+ }
3757
+ },
3758
+ {
3759
+ "id": 4493,
3760
+ "name": "v",
3761
+ "nodeType": "Identifier",
3762
+ "overloadedDeclarations": [],
3763
+ "referencedDeclaration": 4475,
3764
+ "src": "7068:1:19",
3765
+ "typeDescriptions": {
3766
+ "typeIdentifier": "t_uint8",
3767
+ "typeString": "uint8"
3768
+ }
3769
+ },
3770
+ {
3771
+ "id": 4494,
3772
+ "name": "r",
3773
+ "nodeType": "Identifier",
3774
+ "overloadedDeclarations": [],
3775
+ "referencedDeclaration": 4477,
3776
+ "src": "7071:1:19",
3777
+ "typeDescriptions": {
3778
+ "typeIdentifier": "t_bytes32",
3779
+ "typeString": "bytes32"
3780
+ }
3781
+ },
3782
+ {
3783
+ "id": 4495,
3784
+ "name": "s",
3785
+ "nodeType": "Identifier",
3786
+ "overloadedDeclarations": [],
3787
+ "referencedDeclaration": 4479,
3788
+ "src": "7074:1:19",
3789
+ "typeDescriptions": {
3790
+ "typeIdentifier": "t_bytes32",
3791
+ "typeString": "bytes32"
3792
+ }
3793
+ }
3794
+ ],
3795
+ "expression": {
3796
+ "argumentTypes": [
3797
+ {
3798
+ "typeIdentifier": "t_bytes32",
3799
+ "typeString": "bytes32"
3800
+ },
3801
+ {
3802
+ "typeIdentifier": "t_uint8",
3803
+ "typeString": "uint8"
3804
+ },
3805
+ {
3806
+ "typeIdentifier": "t_bytes32",
3807
+ "typeString": "bytes32"
3808
+ },
3809
+ {
3810
+ "typeIdentifier": "t_bytes32",
3811
+ "typeString": "bytes32"
3812
+ }
3813
+ ],
3814
+ "id": 4491,
3815
+ "name": "tryRecover",
3816
+ "nodeType": "Identifier",
3817
+ "overloadedDeclarations": [
3818
+ 4282,
3819
+ 4362,
3820
+ 4470
3821
+ ],
3822
+ "referencedDeclaration": 4470,
3823
+ "src": "7051:10:19",
3824
+ "typeDescriptions": {
3825
+ "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
3826
+ "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"
3827
+ }
3828
+ },
3829
+ "id": 4496,
3830
+ "isConstant": false,
3831
+ "isLValue": false,
3832
+ "isPure": false,
3833
+ "kind": "functionCall",
3834
+ "lValueRequested": false,
3835
+ "nameLocations": [],
3836
+ "names": [],
3837
+ "nodeType": "FunctionCall",
3838
+ "src": "7051:25:19",
3839
+ "tryCall": false,
3840
+ "typeDescriptions": {
3841
+ "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$4216_$_t_bytes32_$",
3842
+ "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)"
3843
+ }
3844
+ },
3845
+ "nodeType": "VariableDeclarationStatement",
3846
+ "src": "6991:85:19"
3847
+ },
3848
+ {
3849
+ "expression": {
3850
+ "arguments": [
3851
+ {
3852
+ "id": 4499,
3853
+ "name": "error",
3854
+ "nodeType": "Identifier",
3855
+ "overloadedDeclarations": [],
3856
+ "referencedDeclaration": 4488,
3857
+ "src": "7098:5:19",
3858
+ "typeDescriptions": {
3859
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3860
+ "typeString": "enum ECDSA.RecoverError"
3861
+ }
3862
+ },
3863
+ {
3864
+ "id": 4500,
3865
+ "name": "errorArg",
3866
+ "nodeType": "Identifier",
3867
+ "overloadedDeclarations": [],
3868
+ "referencedDeclaration": 4490,
3869
+ "src": "7105:8:19",
3870
+ "typeDescriptions": {
3871
+ "typeIdentifier": "t_bytes32",
3872
+ "typeString": "bytes32"
3873
+ }
3874
+ }
3875
+ ],
3876
+ "expression": {
3877
+ "argumentTypes": [
3878
+ {
3879
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
3880
+ "typeString": "enum ECDSA.RecoverError"
3881
+ },
3882
+ {
3883
+ "typeIdentifier": "t_bytes32",
3884
+ "typeString": "bytes32"
3885
+ }
3886
+ ],
3887
+ "id": 4498,
3888
+ "name": "_throwError",
3889
+ "nodeType": "Identifier",
3890
+ "overloadedDeclarations": [],
3891
+ "referencedDeclaration": 4555,
3892
+ "src": "7086:11:19",
3893
+ "typeDescriptions": {
3894
+ "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$4216_$_t_bytes32_$returns$__$",
3895
+ "typeString": "function (enum ECDSA.RecoverError,bytes32) pure"
3896
+ }
3897
+ },
3898
+ "id": 4501,
3899
+ "isConstant": false,
3900
+ "isLValue": false,
3901
+ "isPure": false,
3902
+ "kind": "functionCall",
3903
+ "lValueRequested": false,
3904
+ "nameLocations": [],
3905
+ "names": [],
3906
+ "nodeType": "FunctionCall",
3907
+ "src": "7086:28:19",
3908
+ "tryCall": false,
3909
+ "typeDescriptions": {
3910
+ "typeIdentifier": "t_tuple$__$",
3911
+ "typeString": "tuple()"
3912
+ }
3913
+ },
3914
+ "id": 4502,
3915
+ "nodeType": "ExpressionStatement",
3916
+ "src": "7086:28:19"
3917
+ },
3918
+ {
3919
+ "expression": {
3920
+ "id": 4503,
3921
+ "name": "recovered",
3922
+ "nodeType": "Identifier",
3923
+ "overloadedDeclarations": [],
3924
+ "referencedDeclaration": 4485,
3925
+ "src": "7131:9:19",
3926
+ "typeDescriptions": {
3927
+ "typeIdentifier": "t_address",
3928
+ "typeString": "address"
3929
+ }
3930
+ },
3931
+ "functionReturnParameters": 4483,
3932
+ "id": 4504,
3933
+ "nodeType": "Return",
3934
+ "src": "7124:16:19"
3935
+ }
3936
+ ]
3937
+ },
3938
+ "documentation": {
3939
+ "id": 4471,
3940
+ "nodeType": "StructuredDocumentation",
3941
+ "src": "6760:122:19",
3942
+ "text": " @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."
3943
+ },
3944
+ "id": 4506,
3945
+ "implemented": true,
3946
+ "kind": "function",
3947
+ "modifiers": [],
3948
+ "name": "recover",
3949
+ "nameLocation": "6896:7:19",
3950
+ "nodeType": "FunctionDefinition",
3951
+ "parameters": {
3952
+ "id": 4480,
3953
+ "nodeType": "ParameterList",
3954
+ "parameters": [
3955
+ {
3956
+ "constant": false,
3957
+ "id": 4473,
3958
+ "mutability": "mutable",
3959
+ "name": "hash",
3960
+ "nameLocation": "6912:4:19",
3961
+ "nodeType": "VariableDeclaration",
3962
+ "scope": 4506,
3963
+ "src": "6904:12:19",
3964
+ "stateVariable": false,
3965
+ "storageLocation": "default",
3966
+ "typeDescriptions": {
3967
+ "typeIdentifier": "t_bytes32",
3968
+ "typeString": "bytes32"
3969
+ },
3970
+ "typeName": {
3971
+ "id": 4472,
3972
+ "name": "bytes32",
3973
+ "nodeType": "ElementaryTypeName",
3974
+ "src": "6904:7:19",
3975
+ "typeDescriptions": {
3976
+ "typeIdentifier": "t_bytes32",
3977
+ "typeString": "bytes32"
3978
+ }
3979
+ },
3980
+ "visibility": "internal"
3981
+ },
3982
+ {
3983
+ "constant": false,
3984
+ "id": 4475,
3985
+ "mutability": "mutable",
3986
+ "name": "v",
3987
+ "nameLocation": "6924:1:19",
3988
+ "nodeType": "VariableDeclaration",
3989
+ "scope": 4506,
3990
+ "src": "6918:7:19",
3991
+ "stateVariable": false,
3992
+ "storageLocation": "default",
3993
+ "typeDescriptions": {
3994
+ "typeIdentifier": "t_uint8",
3995
+ "typeString": "uint8"
3996
+ },
3997
+ "typeName": {
3998
+ "id": 4474,
3999
+ "name": "uint8",
4000
+ "nodeType": "ElementaryTypeName",
4001
+ "src": "6918:5:19",
4002
+ "typeDescriptions": {
4003
+ "typeIdentifier": "t_uint8",
4004
+ "typeString": "uint8"
4005
+ }
4006
+ },
4007
+ "visibility": "internal"
4008
+ },
4009
+ {
4010
+ "constant": false,
4011
+ "id": 4477,
4012
+ "mutability": "mutable",
4013
+ "name": "r",
4014
+ "nameLocation": "6935:1:19",
4015
+ "nodeType": "VariableDeclaration",
4016
+ "scope": 4506,
4017
+ "src": "6927:9:19",
4018
+ "stateVariable": false,
4019
+ "storageLocation": "default",
4020
+ "typeDescriptions": {
4021
+ "typeIdentifier": "t_bytes32",
4022
+ "typeString": "bytes32"
4023
+ },
4024
+ "typeName": {
4025
+ "id": 4476,
4026
+ "name": "bytes32",
4027
+ "nodeType": "ElementaryTypeName",
4028
+ "src": "6927:7:19",
4029
+ "typeDescriptions": {
4030
+ "typeIdentifier": "t_bytes32",
4031
+ "typeString": "bytes32"
4032
+ }
4033
+ },
4034
+ "visibility": "internal"
4035
+ },
4036
+ {
4037
+ "constant": false,
4038
+ "id": 4479,
4039
+ "mutability": "mutable",
4040
+ "name": "s",
4041
+ "nameLocation": "6946:1:19",
4042
+ "nodeType": "VariableDeclaration",
4043
+ "scope": 4506,
4044
+ "src": "6938:9:19",
4045
+ "stateVariable": false,
4046
+ "storageLocation": "default",
4047
+ "typeDescriptions": {
4048
+ "typeIdentifier": "t_bytes32",
4049
+ "typeString": "bytes32"
4050
+ },
4051
+ "typeName": {
4052
+ "id": 4478,
4053
+ "name": "bytes32",
4054
+ "nodeType": "ElementaryTypeName",
4055
+ "src": "6938:7:19",
4056
+ "typeDescriptions": {
4057
+ "typeIdentifier": "t_bytes32",
4058
+ "typeString": "bytes32"
4059
+ }
4060
+ },
4061
+ "visibility": "internal"
4062
+ }
4063
+ ],
4064
+ "src": "6903:45:19"
4065
+ },
4066
+ "returnParameters": {
4067
+ "id": 4483,
4068
+ "nodeType": "ParameterList",
4069
+ "parameters": [
4070
+ {
4071
+ "constant": false,
4072
+ "id": 4482,
4073
+ "mutability": "mutable",
4074
+ "name": "",
4075
+ "nameLocation": "-1:-1:-1",
4076
+ "nodeType": "VariableDeclaration",
4077
+ "scope": 4506,
4078
+ "src": "6972:7:19",
4079
+ "stateVariable": false,
4080
+ "storageLocation": "default",
4081
+ "typeDescriptions": {
4082
+ "typeIdentifier": "t_address",
4083
+ "typeString": "address"
4084
+ },
4085
+ "typeName": {
4086
+ "id": 4481,
4087
+ "name": "address",
4088
+ "nodeType": "ElementaryTypeName",
4089
+ "src": "6972:7:19",
4090
+ "stateMutability": "nonpayable",
4091
+ "typeDescriptions": {
4092
+ "typeIdentifier": "t_address",
4093
+ "typeString": "address"
4094
+ }
4095
+ },
4096
+ "visibility": "internal"
4097
+ }
4098
+ ],
4099
+ "src": "6971:9:19"
4100
+ },
4101
+ "scope": 4556,
4102
+ "src": "6887:260:19",
4103
+ "stateMutability": "pure",
4104
+ "virtual": false,
4105
+ "visibility": "internal"
4106
+ },
4107
+ {
4108
+ "body": {
4109
+ "id": 4554,
4110
+ "nodeType": "Block",
4111
+ "src": "7352:460:19",
4112
+ "statements": [
4113
+ {
4114
+ "condition": {
4115
+ "commonType": {
4116
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4117
+ "typeString": "enum ECDSA.RecoverError"
4118
+ },
4119
+ "id": 4518,
4120
+ "isConstant": false,
4121
+ "isLValue": false,
4122
+ "isPure": false,
4123
+ "lValueRequested": false,
4124
+ "leftExpression": {
4125
+ "id": 4515,
4126
+ "name": "error",
4127
+ "nodeType": "Identifier",
4128
+ "overloadedDeclarations": [],
4129
+ "referencedDeclaration": 4510,
4130
+ "src": "7366:5:19",
4131
+ "typeDescriptions": {
4132
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4133
+ "typeString": "enum ECDSA.RecoverError"
4134
+ }
4135
+ },
4136
+ "nodeType": "BinaryOperation",
4137
+ "operator": "==",
4138
+ "rightExpression": {
4139
+ "expression": {
4140
+ "id": 4516,
4141
+ "name": "RecoverError",
4142
+ "nodeType": "Identifier",
4143
+ "overloadedDeclarations": [],
4144
+ "referencedDeclaration": 4216,
4145
+ "src": "7375:12:19",
4146
+ "typeDescriptions": {
4147
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
4148
+ "typeString": "type(enum ECDSA.RecoverError)"
4149
+ }
4150
+ },
4151
+ "id": 4517,
4152
+ "isConstant": false,
4153
+ "isLValue": false,
4154
+ "isPure": true,
4155
+ "lValueRequested": false,
4156
+ "memberLocation": "7388:7:19",
4157
+ "memberName": "NoError",
4158
+ "nodeType": "MemberAccess",
4159
+ "referencedDeclaration": 4212,
4160
+ "src": "7375:20:19",
4161
+ "typeDescriptions": {
4162
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4163
+ "typeString": "enum ECDSA.RecoverError"
4164
+ }
4165
+ },
4166
+ "src": "7366:29:19",
4167
+ "typeDescriptions": {
4168
+ "typeIdentifier": "t_bool",
4169
+ "typeString": "bool"
4170
+ }
4171
+ },
4172
+ "falseBody": {
4173
+ "condition": {
4174
+ "commonType": {
4175
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4176
+ "typeString": "enum ECDSA.RecoverError"
4177
+ },
4178
+ "id": 4524,
4179
+ "isConstant": false,
4180
+ "isLValue": false,
4181
+ "isPure": false,
4182
+ "lValueRequested": false,
4183
+ "leftExpression": {
4184
+ "id": 4521,
4185
+ "name": "error",
4186
+ "nodeType": "Identifier",
4187
+ "overloadedDeclarations": [],
4188
+ "referencedDeclaration": 4510,
4189
+ "src": "7462:5:19",
4190
+ "typeDescriptions": {
4191
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4192
+ "typeString": "enum ECDSA.RecoverError"
4193
+ }
4194
+ },
4195
+ "nodeType": "BinaryOperation",
4196
+ "operator": "==",
4197
+ "rightExpression": {
4198
+ "expression": {
4199
+ "id": 4522,
4200
+ "name": "RecoverError",
4201
+ "nodeType": "Identifier",
4202
+ "overloadedDeclarations": [],
4203
+ "referencedDeclaration": 4216,
4204
+ "src": "7471:12:19",
4205
+ "typeDescriptions": {
4206
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
4207
+ "typeString": "type(enum ECDSA.RecoverError)"
4208
+ }
4209
+ },
4210
+ "id": 4523,
4211
+ "isConstant": false,
4212
+ "isLValue": false,
4213
+ "isPure": true,
4214
+ "lValueRequested": false,
4215
+ "memberLocation": "7484:16:19",
4216
+ "memberName": "InvalidSignature",
4217
+ "nodeType": "MemberAccess",
4218
+ "referencedDeclaration": 4213,
4219
+ "src": "7471:29:19",
4220
+ "typeDescriptions": {
4221
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4222
+ "typeString": "enum ECDSA.RecoverError"
4223
+ }
4224
+ },
4225
+ "src": "7462:38:19",
4226
+ "typeDescriptions": {
4227
+ "typeIdentifier": "t_bool",
4228
+ "typeString": "bool"
4229
+ }
4230
+ },
4231
+ "falseBody": {
4232
+ "condition": {
4233
+ "commonType": {
4234
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4235
+ "typeString": "enum ECDSA.RecoverError"
4236
+ },
4237
+ "id": 4532,
4238
+ "isConstant": false,
4239
+ "isLValue": false,
4240
+ "isPure": false,
4241
+ "lValueRequested": false,
4242
+ "leftExpression": {
4243
+ "id": 4529,
4244
+ "name": "error",
4245
+ "nodeType": "Identifier",
4246
+ "overloadedDeclarations": [],
4247
+ "referencedDeclaration": 4510,
4248
+ "src": "7567:5:19",
4249
+ "typeDescriptions": {
4250
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4251
+ "typeString": "enum ECDSA.RecoverError"
4252
+ }
4253
+ },
4254
+ "nodeType": "BinaryOperation",
4255
+ "operator": "==",
4256
+ "rightExpression": {
4257
+ "expression": {
4258
+ "id": 4530,
4259
+ "name": "RecoverError",
4260
+ "nodeType": "Identifier",
4261
+ "overloadedDeclarations": [],
4262
+ "referencedDeclaration": 4216,
4263
+ "src": "7576:12:19",
4264
+ "typeDescriptions": {
4265
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
4266
+ "typeString": "type(enum ECDSA.RecoverError)"
4267
+ }
4268
+ },
4269
+ "id": 4531,
4270
+ "isConstant": false,
4271
+ "isLValue": false,
4272
+ "isPure": true,
4273
+ "lValueRequested": false,
4274
+ "memberLocation": "7589:22:19",
4275
+ "memberName": "InvalidSignatureLength",
4276
+ "nodeType": "MemberAccess",
4277
+ "referencedDeclaration": 4214,
4278
+ "src": "7576:35:19",
4279
+ "typeDescriptions": {
4280
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4281
+ "typeString": "enum ECDSA.RecoverError"
4282
+ }
4283
+ },
4284
+ "src": "7567:44:19",
4285
+ "typeDescriptions": {
4286
+ "typeIdentifier": "t_bool",
4287
+ "typeString": "bool"
4288
+ }
4289
+ },
4290
+ "falseBody": {
4291
+ "condition": {
4292
+ "commonType": {
4293
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4294
+ "typeString": "enum ECDSA.RecoverError"
4295
+ },
4296
+ "id": 4544,
4297
+ "isConstant": false,
4298
+ "isLValue": false,
4299
+ "isPure": false,
4300
+ "lValueRequested": false,
4301
+ "leftExpression": {
4302
+ "id": 4541,
4303
+ "name": "error",
4304
+ "nodeType": "Identifier",
4305
+ "overloadedDeclarations": [],
4306
+ "referencedDeclaration": 4510,
4307
+ "src": "7701:5:19",
4308
+ "typeDescriptions": {
4309
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4310
+ "typeString": "enum ECDSA.RecoverError"
4311
+ }
4312
+ },
4313
+ "nodeType": "BinaryOperation",
4314
+ "operator": "==",
4315
+ "rightExpression": {
4316
+ "expression": {
4317
+ "id": 4542,
4318
+ "name": "RecoverError",
4319
+ "nodeType": "Identifier",
4320
+ "overloadedDeclarations": [],
4321
+ "referencedDeclaration": 4216,
4322
+ "src": "7710:12:19",
4323
+ "typeDescriptions": {
4324
+ "typeIdentifier": "t_type$_t_enum$_RecoverError_$4216_$",
4325
+ "typeString": "type(enum ECDSA.RecoverError)"
4326
+ }
4327
+ },
4328
+ "id": 4543,
4329
+ "isConstant": false,
4330
+ "isLValue": false,
4331
+ "isPure": true,
4332
+ "lValueRequested": false,
4333
+ "memberLocation": "7723:17:19",
4334
+ "memberName": "InvalidSignatureS",
4335
+ "nodeType": "MemberAccess",
4336
+ "referencedDeclaration": 4215,
4337
+ "src": "7710:30:19",
4338
+ "typeDescriptions": {
4339
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4340
+ "typeString": "enum ECDSA.RecoverError"
4341
+ }
4342
+ },
4343
+ "src": "7701:39:19",
4344
+ "typeDescriptions": {
4345
+ "typeIdentifier": "t_bool",
4346
+ "typeString": "bool"
4347
+ }
4348
+ },
4349
+ "id": 4550,
4350
+ "nodeType": "IfStatement",
4351
+ "src": "7697:109:19",
4352
+ "trueBody": {
4353
+ "id": 4549,
4354
+ "nodeType": "Block",
4355
+ "src": "7742:64:19",
4356
+ "statements": [
4357
+ {
4358
+ "errorCall": {
4359
+ "arguments": [
4360
+ {
4361
+ "id": 4546,
4362
+ "name": "errorArg",
4363
+ "nodeType": "Identifier",
4364
+ "overloadedDeclarations": [],
4365
+ "referencedDeclaration": 4512,
4366
+ "src": "7786:8:19",
4367
+ "typeDescriptions": {
4368
+ "typeIdentifier": "t_bytes32",
4369
+ "typeString": "bytes32"
4370
+ }
4371
+ }
4372
+ ],
4373
+ "expression": {
4374
+ "argumentTypes": [
4375
+ {
4376
+ "typeIdentifier": "t_bytes32",
4377
+ "typeString": "bytes32"
4378
+ }
4379
+ ],
4380
+ "id": 4545,
4381
+ "name": "ECDSAInvalidSignatureS",
4382
+ "nodeType": "Identifier",
4383
+ "overloadedDeclarations": [],
4384
+ "referencedDeclaration": 4229,
4385
+ "src": "7763:22:19",
4386
+ "typeDescriptions": {
4387
+ "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$",
4388
+ "typeString": "function (bytes32) pure"
4389
+ }
4390
+ },
4391
+ "id": 4547,
4392
+ "isConstant": false,
4393
+ "isLValue": false,
4394
+ "isPure": false,
4395
+ "kind": "functionCall",
4396
+ "lValueRequested": false,
4397
+ "nameLocations": [],
4398
+ "names": [],
4399
+ "nodeType": "FunctionCall",
4400
+ "src": "7763:32:19",
4401
+ "tryCall": false,
4402
+ "typeDescriptions": {
4403
+ "typeIdentifier": "t_tuple$__$",
4404
+ "typeString": "tuple()"
4405
+ }
4406
+ },
4407
+ "id": 4548,
4408
+ "nodeType": "RevertStatement",
4409
+ "src": "7756:39:19"
4410
+ }
4411
+ ]
4412
+ }
4413
+ },
4414
+ "id": 4551,
4415
+ "nodeType": "IfStatement",
4416
+ "src": "7563:243:19",
4417
+ "trueBody": {
4418
+ "id": 4540,
4419
+ "nodeType": "Block",
4420
+ "src": "7613:78:19",
4421
+ "statements": [
4422
+ {
4423
+ "errorCall": {
4424
+ "arguments": [
4425
+ {
4426
+ "arguments": [
4427
+ {
4428
+ "id": 4536,
4429
+ "name": "errorArg",
4430
+ "nodeType": "Identifier",
4431
+ "overloadedDeclarations": [],
4432
+ "referencedDeclaration": 4512,
4433
+ "src": "7670:8:19",
4434
+ "typeDescriptions": {
4435
+ "typeIdentifier": "t_bytes32",
4436
+ "typeString": "bytes32"
4437
+ }
4438
+ }
4439
+ ],
4440
+ "expression": {
4441
+ "argumentTypes": [
4442
+ {
4443
+ "typeIdentifier": "t_bytes32",
4444
+ "typeString": "bytes32"
4445
+ }
4446
+ ],
4447
+ "id": 4535,
4448
+ "isConstant": false,
4449
+ "isLValue": false,
4450
+ "isPure": true,
4451
+ "lValueRequested": false,
4452
+ "nodeType": "ElementaryTypeNameExpression",
4453
+ "src": "7662:7:19",
4454
+ "typeDescriptions": {
4455
+ "typeIdentifier": "t_type$_t_uint256_$",
4456
+ "typeString": "type(uint256)"
4457
+ },
4458
+ "typeName": {
4459
+ "id": 4534,
4460
+ "name": "uint256",
4461
+ "nodeType": "ElementaryTypeName",
4462
+ "src": "7662:7:19",
4463
+ "typeDescriptions": {}
4464
+ }
4465
+ },
4466
+ "id": 4537,
4467
+ "isConstant": false,
4468
+ "isLValue": false,
4469
+ "isPure": false,
4470
+ "kind": "typeConversion",
4471
+ "lValueRequested": false,
4472
+ "nameLocations": [],
4473
+ "names": [],
4474
+ "nodeType": "FunctionCall",
4475
+ "src": "7662:17:19",
4476
+ "tryCall": false,
4477
+ "typeDescriptions": {
4478
+ "typeIdentifier": "t_uint256",
4479
+ "typeString": "uint256"
4480
+ }
4481
+ }
4482
+ ],
4483
+ "expression": {
4484
+ "argumentTypes": [
4485
+ {
4486
+ "typeIdentifier": "t_uint256",
4487
+ "typeString": "uint256"
4488
+ }
4489
+ ],
4490
+ "id": 4533,
4491
+ "name": "ECDSAInvalidSignatureLength",
4492
+ "nodeType": "Identifier",
4493
+ "overloadedDeclarations": [],
4494
+ "referencedDeclaration": 4224,
4495
+ "src": "7634:27:19",
4496
+ "typeDescriptions": {
4497
+ "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
4498
+ "typeString": "function (uint256) pure"
4499
+ }
4500
+ },
4501
+ "id": 4538,
4502
+ "isConstant": false,
4503
+ "isLValue": false,
4504
+ "isPure": false,
4505
+ "kind": "functionCall",
4506
+ "lValueRequested": false,
4507
+ "nameLocations": [],
4508
+ "names": [],
4509
+ "nodeType": "FunctionCall",
4510
+ "src": "7634:46:19",
4511
+ "tryCall": false,
4512
+ "typeDescriptions": {
4513
+ "typeIdentifier": "t_tuple$__$",
4514
+ "typeString": "tuple()"
4515
+ }
4516
+ },
4517
+ "id": 4539,
4518
+ "nodeType": "RevertStatement",
4519
+ "src": "7627:53:19"
4520
+ }
4521
+ ]
4522
+ }
4523
+ },
4524
+ "id": 4552,
4525
+ "nodeType": "IfStatement",
4526
+ "src": "7458:348:19",
4527
+ "trueBody": {
4528
+ "id": 4528,
4529
+ "nodeType": "Block",
4530
+ "src": "7502:55:19",
4531
+ "statements": [
4532
+ {
4533
+ "errorCall": {
4534
+ "arguments": [],
4535
+ "expression": {
4536
+ "argumentTypes": [],
4537
+ "id": 4525,
4538
+ "name": "ECDSAInvalidSignature",
4539
+ "nodeType": "Identifier",
4540
+ "overloadedDeclarations": [],
4541
+ "referencedDeclaration": 4219,
4542
+ "src": "7523:21:19",
4543
+ "typeDescriptions": {
4544
+ "typeIdentifier": "t_function_error_pure$__$returns$__$",
4545
+ "typeString": "function () pure"
4546
+ }
4547
+ },
4548
+ "id": 4526,
4549
+ "isConstant": false,
4550
+ "isLValue": false,
4551
+ "isPure": false,
4552
+ "kind": "functionCall",
4553
+ "lValueRequested": false,
4554
+ "nameLocations": [],
4555
+ "names": [],
4556
+ "nodeType": "FunctionCall",
4557
+ "src": "7523:23:19",
4558
+ "tryCall": false,
4559
+ "typeDescriptions": {
4560
+ "typeIdentifier": "t_tuple$__$",
4561
+ "typeString": "tuple()"
4562
+ }
4563
+ },
4564
+ "id": 4527,
4565
+ "nodeType": "RevertStatement",
4566
+ "src": "7516:30:19"
4567
+ }
4568
+ ]
4569
+ }
4570
+ },
4571
+ "id": 4553,
4572
+ "nodeType": "IfStatement",
4573
+ "src": "7362:444:19",
4574
+ "trueBody": {
4575
+ "id": 4520,
4576
+ "nodeType": "Block",
4577
+ "src": "7397:55:19",
4578
+ "statements": [
4579
+ {
4580
+ "functionReturnParameters": 4514,
4581
+ "id": 4519,
4582
+ "nodeType": "Return",
4583
+ "src": "7411:7:19"
4584
+ }
4585
+ ]
4586
+ }
4587
+ }
4588
+ ]
4589
+ },
4590
+ "documentation": {
4591
+ "id": 4507,
4592
+ "nodeType": "StructuredDocumentation",
4593
+ "src": "7153:122:19",
4594
+ "text": " @dev Optionally reverts with the corresponding custom error according to the `error` argument provided."
4595
+ },
4596
+ "id": 4555,
4597
+ "implemented": true,
4598
+ "kind": "function",
4599
+ "modifiers": [],
4600
+ "name": "_throwError",
4601
+ "nameLocation": "7289:11:19",
4602
+ "nodeType": "FunctionDefinition",
4603
+ "parameters": {
4604
+ "id": 4513,
4605
+ "nodeType": "ParameterList",
4606
+ "parameters": [
4607
+ {
4608
+ "constant": false,
4609
+ "id": 4510,
4610
+ "mutability": "mutable",
4611
+ "name": "error",
4612
+ "nameLocation": "7314:5:19",
4613
+ "nodeType": "VariableDeclaration",
4614
+ "scope": 4555,
4615
+ "src": "7301:18:19",
4616
+ "stateVariable": false,
4617
+ "storageLocation": "default",
4618
+ "typeDescriptions": {
4619
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4620
+ "typeString": "enum ECDSA.RecoverError"
4621
+ },
4622
+ "typeName": {
4623
+ "id": 4509,
4624
+ "nodeType": "UserDefinedTypeName",
4625
+ "pathNode": {
4626
+ "id": 4508,
4627
+ "name": "RecoverError",
4628
+ "nameLocations": [
4629
+ "7301:12:19"
4630
+ ],
4631
+ "nodeType": "IdentifierPath",
4632
+ "referencedDeclaration": 4216,
4633
+ "src": "7301:12:19"
4634
+ },
4635
+ "referencedDeclaration": 4216,
4636
+ "src": "7301:12:19",
4637
+ "typeDescriptions": {
4638
+ "typeIdentifier": "t_enum$_RecoverError_$4216",
4639
+ "typeString": "enum ECDSA.RecoverError"
4640
+ }
4641
+ },
4642
+ "visibility": "internal"
4643
+ },
4644
+ {
4645
+ "constant": false,
4646
+ "id": 4512,
4647
+ "mutability": "mutable",
4648
+ "name": "errorArg",
4649
+ "nameLocation": "7329:8:19",
4650
+ "nodeType": "VariableDeclaration",
4651
+ "scope": 4555,
4652
+ "src": "7321:16:19",
4653
+ "stateVariable": false,
4654
+ "storageLocation": "default",
4655
+ "typeDescriptions": {
4656
+ "typeIdentifier": "t_bytes32",
4657
+ "typeString": "bytes32"
4658
+ },
4659
+ "typeName": {
4660
+ "id": 4511,
4661
+ "name": "bytes32",
4662
+ "nodeType": "ElementaryTypeName",
4663
+ "src": "7321:7:19",
4664
+ "typeDescriptions": {
4665
+ "typeIdentifier": "t_bytes32",
4666
+ "typeString": "bytes32"
4667
+ }
4668
+ },
4669
+ "visibility": "internal"
4670
+ }
4671
+ ],
4672
+ "src": "7300:38:19"
4673
+ },
4674
+ "returnParameters": {
4675
+ "id": 4514,
4676
+ "nodeType": "ParameterList",
4677
+ "parameters": [],
4678
+ "src": "7352:0:19"
4679
+ },
4680
+ "scope": 4556,
4681
+ "src": "7280:532:19",
4682
+ "stateMutability": "pure",
4683
+ "virtual": false,
4684
+ "visibility": "private"
4685
+ }
4686
+ ],
4687
+ "scope": 4557,
4688
+ "src": "344:7470:19",
4689
+ "usedErrors": [
4690
+ 4219,
4691
+ 4224,
4692
+ 4229
4693
+ ],
4694
+ "usedEvents": []
4695
+ }
4696
+ ],
4697
+ "src": "112:7703:19"
4698
+ },
4699
+ "compiler": {
4700
+ "name": "solc",
4701
+ "version": "0.8.21+commit.d9974bed.Emscripten.clang"
4702
+ },
4703
+ "networks": {},
4704
+ "schemaVersion": "3.4.16",
4705
+ "updatedAt": "2026-01-24T20:23:04.138Z",
4706
+ "devdoc": {
4707
+ "details": "Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.",
4708
+ "errors": {
4709
+ "ECDSAInvalidSignature()": [
4710
+ {
4711
+ "details": "The signature derives the `address(0)`."
4712
+ }
4713
+ ],
4714
+ "ECDSAInvalidSignatureLength(uint256)": [
4715
+ {
4716
+ "details": "The signature has an invalid length."
4717
+ }
4718
+ ],
4719
+ "ECDSAInvalidSignatureS(bytes32)": [
4720
+ {
4721
+ "details": "The signature has an S value that is in the upper half order."
4722
+ }
4723
+ ]
4724
+ },
4725
+ "kind": "dev",
4726
+ "methods": {},
4727
+ "version": 1
4728
+ },
4729
+ "userdoc": {
4730
+ "kind": "user",
4731
+ "methods": {},
4732
+ "version": 1
4733
+ }
4734
+ }