@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.
- package/dist/snapshot.cjs.js +50 -1
- package/dist/snapshot.esm.js +52 -3
- package/dist/snapshot.min.js +14 -14
- package/dist/src/index.d.ts +3 -0
- package/dist/src/schemas/index.d.ts +3 -0
- package/package.json +1 -1
- package/src/networks.json +16 -2
- package/src/schemas/space.json +4 -0
- package/src/utils.ts +4 -0
- package/src/verify/evm.spec.ts +58 -0
- package/src/verify/evm.ts +32 -2
package/dist/snapshot.cjs.js
CHANGED
|
@@ -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://
|
|
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]+)?$/))
|
package/dist/snapshot.esm.js
CHANGED
|
@@ -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://
|
|
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]+)?$/))
|