@snapshot-labs/snapshot.js 0.12.12 → 0.12.14

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.
@@ -541,6 +541,14 @@ var definitions = {
541
541
  },
542
542
  domain: {
543
543
  type: "string",
544
+ allOf: [
545
+ {
546
+ format: "hostname"
547
+ },
548
+ {
549
+ format: "lowercase"
550
+ }
551
+ ],
544
552
  title: "domain",
545
553
  maxLength: 64
546
554
  },
@@ -1486,6 +1494,7 @@ var starknet = /*#__PURE__*/Object.freeze({
1486
1494
  'default': verify
1487
1495
  });
1488
1496
 
1497
+ const ERC6492_DETECTION_SUFFIX = '6492649264926492649264926492649264926492649264926492649264926492';
1489
1498
  function isEqual(a, b) {
1490
1499
  return a.toLowerCase() === b.toLowerCase();
1491
1500
  }
@@ -1504,6 +1513,28 @@ function verify$1(address_1, sig_1, data_1) {
1504
1513
  catch (e) { }
1505
1514
  const provider = getProvider(network, options);
1506
1515
  const hash = getHash$1(data);
1516
+ // Handle EIP-6492
1517
+ // https://eips.ethereum.org/EIPS/eip-6492
1518
+ //
1519
+ // We can actually replace verifyTypedData and verifyDefault with the following code,
1520
+ // but https://github.com/AmbireTech/signature-validator/blob/main/contracts/DeploylessUniversalSigValidator.sol
1521
+ // also can send an extra network request to the provider. (with verifyTypedData we don't send any extra request)
1522
+ //
1523
+ if (sig.endsWith(ERC6492_DETECTION_SUFFIX)) {
1524
+ try {
1525
+ return ('0x01' ===
1526
+ (yield provider.call({
1527
+ data: bytes.concat([
1528
+ '0x60806040523480156200001157600080fd5b50604051620007003803806200070083398101604081905262000034916200056f565b6000620000438484846200004f565b9050806000526001601ff35b600080846001600160a01b0316803b806020016040519081016040528181526000908060200190933c90507f6492649264926492649264926492649264926492649264926492649264926492620000a68462000451565b036200021f57600060608085806020019051810190620000c79190620005ce565b8651929550909350915060000362000192576000836001600160a01b031683604051620000f5919062000643565b6000604051808303816000865af19150503d806000811462000134576040519150601f19603f3d011682016040523d82523d6000602084013e62000139565b606091505b5050905080620001905760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b505b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90620001c4908b90869060040162000661565b602060405180830381865afa158015620001e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020891906200069d565b6001600160e01b031916149450505050506200044a565b805115620002b157604051630b135d3f60e11b808252906001600160a01b03871690631626ba7e9062000259908890889060040162000661565b602060405180830381865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d91906200069d565b6001600160e01b031916149150506200044a565b8251604114620003195760405162461bcd60e51b815260206004820152603a6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840162000187565b620003236200046b565b506020830151604080850151855186939260009185919081106200034b576200034b620006c9565b016020015160f81c9050601b81148015906200036b57508060ff16601c14155b15620003cf5760405162461bcd60e51b815260206004820152603b6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c75650000000000606482015260840162000187565b6040805160008152602081018083528a905260ff83169181019190915260608101849052608081018390526001600160a01b038a169060019060a0016020604051602081039080840390855afa1580156200042e573d6000803e3d6000fd5b505050602060405103516001600160a01b031614955050505050505b9392505050565b60006020825110156200046357600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b03811681146200049f57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d5578181015183820152602001620004bb565b50506000910152565b600082601f830112620004f057600080fd5b81516001600160401b03808211156200050d576200050d620004a2565b604051601f8301601f19908116603f01168101908282118183101715620005385762000538620004a2565b816040528381528660208588010111156200055257600080fd5b62000565846020830160208901620004b8565b9695505050505050565b6000806000606084860312156200058557600080fd5b8351620005928162000489565b6020850151604086015191945092506001600160401b03811115620005b657600080fd5b620005c486828701620004de565b9150509250925092565b600080600060608486031215620005e457600080fd5b8351620005f18162000489565b60208501519093506001600160401b03808211156200060f57600080fd5b6200061d87838801620004de565b935060408601519150808211156200063457600080fd5b50620005c486828701620004de565b6000825162000657818460208701620004b8565b9190910192915050565b828152604060208201526000825180604084015262000688816060850160208701620004b8565b601f01601f1916919091016060019392505050565b600060208284031215620006b057600080fd5b81516001600160e01b0319811681146200044a57600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572',
1529
+ new abi.AbiCoder().encode(['address', 'bytes32', 'bytes'], [address, bytes.arrayify(hash), sig])
1530
+ ])
1531
+ })));
1532
+ }
1533
+ catch (error) {
1534
+ return false;
1535
+ }
1536
+ }
1537
+ // Handle EIP-1271
1507
1538
  if (yield verifyDefault(address, sig, hash, provider))
1508
1539
  return true;
1509
1540
  return yield verifyOldVersion(address, sig, hash, provider);
@@ -2480,6 +2511,21 @@ var networks = {
2480
2511
  },
2481
2512
  start: 4219343,
2482
2513
  logo: "ipfs://QmXkneyRB6HbHTHRLCZpZqSsawiyJY7b2kZ2V8ydvKYAgv"
2514
+ },
2515
+ "2192": {
2516
+ key: "2192",
2517
+ name: "SnaxChain",
2518
+ shortName: "mainnet",
2519
+ chainId: 2192,
2520
+ network: "mainnet",
2521
+ multicall: "0xcA11bde05977b3631167028862bE2a173976CA11",
2522
+ rpc: [
2523
+ ],
2524
+ explorer: {
2525
+ url: "https://explorer.snaxchain.io"
2526
+ },
2527
+ start: 1554893,
2528
+ logo: "ipfs://bafkreibzz757piho2llzkbiszpvalf5k5hpmxcwhvrmgp7vpz2vp4vj7ly"
2483
2529
  },
2484
2530
  "2221": {
2485
2531
  key: "2221",
@@ -3156,7 +3202,7 @@ var networks = {
3156
3202
  "0x8FADE66B79cC9f707aB26799354482EB93a5B7dD"
3157
3203
  ],
3158
3204
  ensNameWrapper: "0x0635513f179D50A207757E05759CbD106d7dFcE8",
3159
- ensSubgraph: "https://api.studio.thegraph.com/proxy/49574/enssepolia/version/latest",
3205
+ ensSubgraph: "https://subgrapher.snapshot.org/subgraph/arbitrum/DmMXLtMZnGbQXASJ7p1jfzLUbBYnYUD9zNBTxpkjHYXV",
3160
3206
  explorer: {
3161
3207
  url: "https://sepolia.etherscan.io",
3162
3208
  apiUrl: "https://api-sepolia.etherscan.io"
@@ -3796,6 +3842,9 @@ ajv.addFormat('starknetAddress', {
3796
3842
  ajv.addFormat('long', {
3797
3843
  validate: () => true
3798
3844
  });
3845
+ ajv.addFormat('lowercase', {
3846
+ validate: (value) => value === value.toLowerCase()
3847
+ });
3799
3848
  ajv.addFormat('ethValue', {
3800
3849
  validate: (value) => {
3801
3850
  if (!value.match(/^([0-9]|[1-9][0-9]+)(\.[0-9]+)?$/))
@@ -1,6 +1,6 @@
1
1
  import fetch from 'cross-fetch';
2
2
  import { getAddress, isAddress } from '@ethersproject/address';
3
- import { Interface } from '@ethersproject/abi';
3
+ import { AbiCoder, Interface } from '@ethersproject/abi';
4
4
  import { Contract as Contract$1 } from '@ethersproject/contracts';
5
5
  import { parseUnits } from '@ethersproject/units';
6
6
  import { _TypedDataEncoder, namehash, ensNormalize } from '@ethersproject/hash';
@@ -10,7 +10,7 @@ import addFormats from 'ajv-formats';
10
10
  import addErrors from 'ajv-errors';
11
11
  import set from 'lodash.set';
12
12
  import { StaticJsonRpcProvider } from '@ethersproject/providers';
13
- import { hexlify, arrayify } from '@ethersproject/bytes';
13
+ import { hexlify, concat, arrayify } from '@ethersproject/bytes';
14
14
  import { Contract, RpcProvider, typedData, validateAndParseAddress } from 'starknet';
15
15
  import { BigNumber } from '@ethersproject/bignumber';
16
16
  import { verifyTypedData } from '@ethersproject/wallet';
@@ -531,6 +531,14 @@ var definitions = {
531
531
  },
532
532
  domain: {
533
533
  type: "string",
534
+ allOf: [
535
+ {
536
+ format: "hostname"
537
+ },
538
+ {
539
+ format: "lowercase"
540
+ }
541
+ ],
534
542
  title: "domain",
535
543
  maxLength: 64
536
544
  },
@@ -1476,6 +1484,7 @@ var starknet = /*#__PURE__*/Object.freeze({
1476
1484
  'default': verify
1477
1485
  });
1478
1486
 
1487
+ const ERC6492_DETECTION_SUFFIX = '6492649264926492649264926492649264926492649264926492649264926492';
1479
1488
  function isEqual(a, b) {
1480
1489
  return a.toLowerCase() === b.toLowerCase();
1481
1490
  }
@@ -1494,6 +1503,28 @@ function verify$1(address_1, sig_1, data_1) {
1494
1503
  catch (e) { }
1495
1504
  const provider = getProvider(network, options);
1496
1505
  const hash = getHash$1(data);
1506
+ // Handle EIP-6492
1507
+ // https://eips.ethereum.org/EIPS/eip-6492
1508
+ //
1509
+ // We can actually replace verifyTypedData and verifyDefault with the following code,
1510
+ // but https://github.com/AmbireTech/signature-validator/blob/main/contracts/DeploylessUniversalSigValidator.sol
1511
+ // also can send an extra network request to the provider. (with verifyTypedData we don't send any extra request)
1512
+ //
1513
+ if (sig.endsWith(ERC6492_DETECTION_SUFFIX)) {
1514
+ try {
1515
+ return ('0x01' ===
1516
+ (yield provider.call({
1517
+ data: concat([
1518
+ '0x60806040523480156200001157600080fd5b50604051620007003803806200070083398101604081905262000034916200056f565b6000620000438484846200004f565b9050806000526001601ff35b600080846001600160a01b0316803b806020016040519081016040528181526000908060200190933c90507f6492649264926492649264926492649264926492649264926492649264926492620000a68462000451565b036200021f57600060608085806020019051810190620000c79190620005ce565b8651929550909350915060000362000192576000836001600160a01b031683604051620000f5919062000643565b6000604051808303816000865af19150503d806000811462000134576040519150601f19603f3d011682016040523d82523d6000602084013e62000139565b606091505b5050905080620001905760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b505b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90620001c4908b90869060040162000661565b602060405180830381865afa158015620001e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020891906200069d565b6001600160e01b031916149450505050506200044a565b805115620002b157604051630b135d3f60e11b808252906001600160a01b03871690631626ba7e9062000259908890889060040162000661565b602060405180830381865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d91906200069d565b6001600160e01b031916149150506200044a565b8251604114620003195760405162461bcd60e51b815260206004820152603a6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840162000187565b620003236200046b565b506020830151604080850151855186939260009185919081106200034b576200034b620006c9565b016020015160f81c9050601b81148015906200036b57508060ff16601c14155b15620003cf5760405162461bcd60e51b815260206004820152603b6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c75650000000000606482015260840162000187565b6040805160008152602081018083528a905260ff83169181019190915260608101849052608081018390526001600160a01b038a169060019060a0016020604051602081039080840390855afa1580156200042e573d6000803e3d6000fd5b505050602060405103516001600160a01b031614955050505050505b9392505050565b60006020825110156200046357600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b03811681146200049f57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d5578181015183820152602001620004bb565b50506000910152565b600082601f830112620004f057600080fd5b81516001600160401b03808211156200050d576200050d620004a2565b604051601f8301601f19908116603f01168101908282118183101715620005385762000538620004a2565b816040528381528660208588010111156200055257600080fd5b62000565846020830160208901620004b8565b9695505050505050565b6000806000606084860312156200058557600080fd5b8351620005928162000489565b6020850151604086015191945092506001600160401b03811115620005b657600080fd5b620005c486828701620004de565b9150509250925092565b600080600060608486031215620005e457600080fd5b8351620005f18162000489565b60208501519093506001600160401b03808211156200060f57600080fd5b6200061d87838801620004de565b935060408601519150808211156200063457600080fd5b50620005c486828701620004de565b6000825162000657818460208701620004b8565b9190910192915050565b828152604060208201526000825180604084015262000688816060850160208701620004b8565b601f01601f1916919091016060019392505050565b600060208284031215620006b057600080fd5b81516001600160e01b0319811681146200044a57600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572',
1519
+ new AbiCoder().encode(['address', 'bytes32', 'bytes'], [address, arrayify(hash), sig])
1520
+ ])
1521
+ })));
1522
+ }
1523
+ catch (error) {
1524
+ return false;
1525
+ }
1526
+ }
1527
+ // Handle EIP-1271
1497
1528
  if (yield verifyDefault(address, sig, hash, provider))
1498
1529
  return true;
1499
1530
  return yield verifyOldVersion(address, sig, hash, provider);
@@ -2470,6 +2501,21 @@ var networks = {
2470
2501
  },
2471
2502
  start: 4219343,
2472
2503
  logo: "ipfs://QmXkneyRB6HbHTHRLCZpZqSsawiyJY7b2kZ2V8ydvKYAgv"
2504
+ },
2505
+ "2192": {
2506
+ key: "2192",
2507
+ name: "SnaxChain",
2508
+ shortName: "mainnet",
2509
+ chainId: 2192,
2510
+ network: "mainnet",
2511
+ multicall: "0xcA11bde05977b3631167028862bE2a173976CA11",
2512
+ rpc: [
2513
+ ],
2514
+ explorer: {
2515
+ url: "https://explorer.snaxchain.io"
2516
+ },
2517
+ start: 1554893,
2518
+ logo: "ipfs://bafkreibzz757piho2llzkbiszpvalf5k5hpmxcwhvrmgp7vpz2vp4vj7ly"
2473
2519
  },
2474
2520
  "2221": {
2475
2521
  key: "2221",
@@ -3146,7 +3192,7 @@ var networks = {
3146
3192
  "0x8FADE66B79cC9f707aB26799354482EB93a5B7dD"
3147
3193
  ],
3148
3194
  ensNameWrapper: "0x0635513f179D50A207757E05759CbD106d7dFcE8",
3149
- ensSubgraph: "https://api.studio.thegraph.com/proxy/49574/enssepolia/version/latest",
3195
+ ensSubgraph: "https://subgrapher.snapshot.org/subgraph/arbitrum/DmMXLtMZnGbQXASJ7p1jfzLUbBYnYUD9zNBTxpkjHYXV",
3150
3196
  explorer: {
3151
3197
  url: "https://sepolia.etherscan.io",
3152
3198
  apiUrl: "https://api-sepolia.etherscan.io"
@@ -3786,6 +3832,9 @@ ajv.addFormat('starknetAddress', {
3786
3832
  ajv.addFormat('long', {
3787
3833
  validate: () => true
3788
3834
  });
3835
+ ajv.addFormat('lowercase', {
3836
+ validate: (value) => value === value.toLowerCase()
3837
+ });
3789
3838
  ajv.addFormat('ethValue', {
3790
3839
  validate: (value) => {
3791
3840
  if (!value.match(/^([0-9]|[1-9][0-9]+)(\.[0-9]+)?$/))