@across-protocol/sdk 4.1.25 → 4.1.26
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/cjs/clients/SpokePoolClient.d.ts +2 -8
- package/dist/cjs/clients/SpokePoolClient.js +25 -44
- package/dist/cjs/clients/SpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockSpokePoolClient.js +0 -5
- package/dist/cjs/clients/mocks/MockSpokePoolClient.js.map +1 -1
- package/dist/cjs/providers/solana/cachedRpcFactory.js +23 -8
- package/dist/cjs/providers/solana/cachedRpcFactory.js.map +1 -1
- package/dist/cjs/utils/DepositUtils.js +16 -27
- package/dist/cjs/utils/DepositUtils.js.map +1 -1
- package/dist/cjs/utils/Multicall.d.ts +1 -0
- package/dist/cjs/utils/Multicall.js +55 -1
- package/dist/cjs/utils/Multicall.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient.d.ts +8 -8
- package/dist/esm/clients/SpokePoolClient.js +32 -45
- package/dist/esm/clients/SpokePoolClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockSpokePoolClient.js +1 -7
- package/dist/esm/clients/mocks/MockSpokePoolClient.js.map +1 -1
- package/dist/esm/providers/solana/cachedRpcFactory.js +24 -8
- package/dist/esm/providers/solana/cachedRpcFactory.js.map +1 -1
- package/dist/esm/utils/DepositUtils.js +16 -27
- package/dist/esm/utils/DepositUtils.js.map +1 -1
- package/dist/esm/utils/Multicall.d.ts +6 -0
- package/dist/esm/utils/Multicall.js +60 -1
- package/dist/esm/utils/Multicall.js.map +1 -1
- package/dist/types/clients/SpokePoolClient.d.ts +8 -8
- package/dist/types/clients/SpokePoolClient.d.ts.map +1 -1
- package/dist/types/clients/mocks/MockSpokePoolClient.d.ts.map +1 -1
- package/dist/types/providers/solana/cachedRpcFactory.d.ts.map +1 -1
- package/dist/types/utils/DepositUtils.d.ts.map +1 -1
- package/dist/types/utils/Multicall.d.ts +6 -0
- package/dist/types/utils/Multicall.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/clients/SpokePoolClient.ts +29 -45
- package/src/clients/mocks/MockSpokePoolClient.ts +0 -10
- package/src/providers/solana/cachedRpcFactory.ts +28 -14
- package/src/utils/DepositUtils.ts +18 -29
- package/src/utils/Multicall.ts +34 -1
|
@@ -60,40 +60,23 @@ export async function queryHistoricalDepositForFill(
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
const { depositId } = fill;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
({ earliestDepositIdQueried: lowId, latestDepositIdQueried: highId } = spokePoolClient);
|
|
73
|
-
if (depositId.gte(lowId) && depositId.lte(highId)) {
|
|
74
|
-
const originChain = getNetworkName(fill.originChainId);
|
|
75
|
-
const deposit = spokePoolClient.getDeposit(depositId);
|
|
76
|
-
if (isDefined(deposit)) {
|
|
77
|
-
const match = validateFillForDeposit(fill, deposit);
|
|
78
|
-
if (match.valid) {
|
|
79
|
-
return { found: true, deposit };
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
found: false,
|
|
84
|
-
code: InvalidFill.FillMismatch,
|
|
85
|
-
reason: `Fill for ${originChain} deposit ID ${depositId.toString()} is invalid (${match.reason}).`,
|
|
86
|
-
};
|
|
63
|
+
const originChain = getNetworkName(fill.originChainId);
|
|
64
|
+
let deposit = spokePoolClient.getDeposit(depositId);
|
|
65
|
+
if (isDefined(deposit)) {
|
|
66
|
+
const match = validateFillForDeposit(fill, deposit);
|
|
67
|
+
if (match.valid) {
|
|
68
|
+
return { found: true, deposit };
|
|
87
69
|
}
|
|
88
70
|
|
|
89
71
|
return {
|
|
90
72
|
found: false,
|
|
91
|
-
code: InvalidFill.
|
|
92
|
-
reason:
|
|
73
|
+
code: InvalidFill.FillMismatch,
|
|
74
|
+
reason: `Fill for ${originChain} deposit ID ${depositId.toString()} is invalid (${match.reason}).`,
|
|
93
75
|
};
|
|
94
76
|
}
|
|
95
77
|
|
|
96
|
-
|
|
78
|
+
// Deposit not found in SpokePoolClient buffer, search elsewhere.
|
|
79
|
+
let cachedDeposit: Deposit | undefined;
|
|
97
80
|
if (cache) {
|
|
98
81
|
cachedDeposit = await getDepositInCache(getDepositKey(fill), cache);
|
|
99
82
|
// We only want to warn and remove the cached deposit if it
|
|
@@ -116,17 +99,23 @@ export async function queryHistoricalDepositForFill(
|
|
|
116
99
|
if (isDefined(cachedDeposit)) {
|
|
117
100
|
deposit = cachedDeposit as DepositWithBlock;
|
|
118
101
|
} else {
|
|
119
|
-
|
|
102
|
+
const result = await spokePoolClient.findDeposit(fill.depositId);
|
|
103
|
+
if (!result.found) {
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
({ deposit } = result);
|
|
120
108
|
if (cache) {
|
|
121
109
|
await setDepositInCache(deposit, getCurrentTime(), cache, DEFAULT_CACHING_TTL);
|
|
122
110
|
}
|
|
123
111
|
}
|
|
112
|
+
assert(isDefined(deposit), `Unexpectedly failed to locate ${originChain} deposit ${fill.depositId}`);
|
|
124
113
|
|
|
125
114
|
deposit.messageHash ??= getMessageHash(deposit.message);
|
|
126
115
|
|
|
127
116
|
const match = validateFillForDeposit(fill, deposit);
|
|
128
117
|
if (match.valid) {
|
|
129
|
-
return { found: true, deposit };
|
|
118
|
+
return { found: true, deposit: deposit! };
|
|
130
119
|
}
|
|
131
120
|
|
|
132
121
|
return {
|
package/src/utils/Multicall.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import assert from "assert";
|
|
1
2
|
import { Contract, providers, Signer, utils as ethersUtils } from "ethers";
|
|
2
|
-
import { CHAIN_IDs } from "@across-protocol/constants";
|
|
3
|
+
import { CHAIN_IDs, MAINNET_CHAIN_IDs } from "@across-protocol/constants";
|
|
3
4
|
import { chainIsOPStack, hreNetworks } from "./NetworkUtils";
|
|
4
5
|
import { BigNumber } from "./BigNumberUtils";
|
|
5
6
|
import { Multicall3, Multicall3__factory } from "./abi/typechain";
|
|
@@ -16,6 +17,7 @@ export type Call3 = {
|
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
const DETERMINISTIC_MULTICALL_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
20
|
+
const MULTICALL_DEPLOYER = "0x05f32B3cC3888453ff71B01135B34FF8e41263F2";
|
|
19
21
|
|
|
20
22
|
const NON_DETERMINISTIC_MULTICALL_ADDRESSES = {
|
|
21
23
|
[CHAIN_IDs.ZK_SYNC]: "0xF9cda624FBC7e059355ce98a31693d299FACd963",
|
|
@@ -94,3 +96,34 @@ export async function blockAndAggregate(
|
|
|
94
96
|
|
|
95
97
|
return { blockNumber: blockNumber.toNumber(), returnData };
|
|
96
98
|
}
|
|
99
|
+
|
|
100
|
+
async function isDeployed(provider: providers.Provider): Promise<boolean> {
|
|
101
|
+
const { chainId } = await provider.getNetwork();
|
|
102
|
+
const expectedMulticallAddress = getMulticallAddress(chainId) ?? DETERMINISTIC_MULTICALL_ADDRESS;
|
|
103
|
+
const code = await provider.getCode(expectedMulticallAddress);
|
|
104
|
+
return code !== "0x";
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Deploy a Multicall3 instance.
|
|
109
|
+
* Guidance: https://github.com/mds1/multicall3?tab=readme-ov-file#new-deployments
|
|
110
|
+
* @param signer An Ethers Signer instance with at least 0.1 ETH.
|
|
111
|
+
*/
|
|
112
|
+
export async function deploy(signer: Signer) {
|
|
113
|
+
assert(signer.provider);
|
|
114
|
+
if (await isDeployed(signer.provider)) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
const { chainId } = await signer.provider.getNetwork();
|
|
118
|
+
assert(!Object.values(MAINNET_CHAIN_IDs).includes(chainId));
|
|
119
|
+
|
|
120
|
+
await signer.sendTransaction({ to: MULTICALL_DEPLOYER, value: ethersUtils.parseEther("0.1") }); // Pre-fund the deployer address.
|
|
121
|
+
await signer.provider.sendTransaction(MULTICALL_CALLDATA); // Deploy
|
|
122
|
+
|
|
123
|
+
assert(await isDeployed(signer.provider));
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Multicall3 deployment transaction, pre-signed `deployer`.
|
|
128
|
+
const MULTICALL_CALLDATA =
|
|
129
|
+
"0xf90f538085174876e800830f42408080b90f00608060405234801561001057600080fd5b50610ee0806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c00331ca0edce47092c0f398cebf3ffc267f05c8e7076e3b89445e0fe50f6332273d4569ba01b0b9d000e19b24c5869b0fc3b22b0d6fa47cd63316875cbbd577d76e6fde086";
|