v-swap-smart-order-router 3.13.1 → 3.13.2
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/build/main/providers/multicall-uniswap-provider.d.ts +1 -0
- package/build/main/providers/multicall-uniswap-provider.js +44 -43
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/module/providers/multicall-uniswap-provider.d.ts +1 -0
- package/build/module/providers/multicall-uniswap-provider.js +44 -43
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -24,6 +24,7 @@ export declare class UniswapMulticallProvider extends IMulticallProvider<Uniswap
|
|
|
24
24
|
blockNumber: BigNumber;
|
|
25
25
|
results: Result<TReturn>[];
|
|
26
26
|
}>;
|
|
27
|
+
private customMulticall;
|
|
27
28
|
callSameFunctionOnContractWithMultipleParams<TFunctionParams extends any[] | undefined, TReturn>(params: CallSameFunctionOnContractWithMultipleParams<TFunctionParams, UniswapMulticallConfig>): Promise<{
|
|
28
29
|
blockNumber: BigNumber;
|
|
29
30
|
results: Result<TReturn>[];
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.UniswapMulticallProvider = void 0;
|
|
7
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
7
8
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
9
|
const stats_lite_1 = __importDefault(require("stats-lite"));
|
|
9
10
|
const UniswapInterfaceMulticall__factory_1 = require("../types/v3/factories/UniswapInterfaceMulticall__factory");
|
|
@@ -11,16 +12,16 @@ const addresses_1 = require("../util/addresses");
|
|
|
11
12
|
const log_1 = require("../util/log");
|
|
12
13
|
const multicall_provider_1 = require("./multicall-provider");
|
|
13
14
|
// @ts-nocheck
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
const STAKING_CONTRACT_OVERRIDES = {
|
|
16
|
+
1030: {
|
|
17
|
+
"0x50caddc77c6727bdd3c78b428c149bf110b4f595": {
|
|
18
|
+
"stateDiff": {
|
|
19
|
+
"0x0000000000000000000000000000000000000000000000000000000000000006": "0x00000000000000000000000086e01175a5569c970cfb7a44e224120ddc85901a",
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
71: {},
|
|
24
|
+
};
|
|
24
25
|
/**
|
|
25
26
|
* The UniswapMulticall contract has added functionality for limiting the amount of gas
|
|
26
27
|
* that each call within the multicall can consume. This is useful for operations where
|
|
@@ -56,9 +57,11 @@ class UniswapMulticallProvider extends multicall_provider_1.IMulticallProvider {
|
|
|
56
57
|
};
|
|
57
58
|
});
|
|
58
59
|
log_1.log.debug({ calls }, `About to multicall for ${functionName} across ${addresses.length} addresses`);
|
|
59
|
-
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
const stateOverride = STAKING_CONTRACT_OVERRIDES[this.chainId] || {};
|
|
62
|
+
const { blockNumber, returnData: aggregateResults } = await this.customMulticall(calls, {
|
|
60
63
|
blockTag: blockNumberOverride,
|
|
61
|
-
});
|
|
64
|
+
}, stateOverride);
|
|
62
65
|
const results = [];
|
|
63
66
|
for (let i = 0; i < aggregateResults.length; i++) {
|
|
64
67
|
const { success, returnData } = aggregateResults[i];
|
|
@@ -80,32 +83,26 @@ class UniswapMulticallProvider extends multicall_provider_1.IMulticallProvider {
|
|
|
80
83
|
return { blockNumber, results };
|
|
81
84
|
}
|
|
82
85
|
// support state overrides
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
'multicall',
|
|
104
|
-
rawResult
|
|
105
|
-
);
|
|
106
|
-
// @ts-ignore
|
|
107
|
-
return decodedResult;
|
|
108
|
-
}*/
|
|
86
|
+
async customMulticall(calls, overrides = {}, stateOverride = {}) {
|
|
87
|
+
let blockNumberOverride = (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) ? overrides.blockTag : 'latest';
|
|
88
|
+
if (typeof blockNumberOverride === 'number') {
|
|
89
|
+
blockNumberOverride = bignumber_1.BigNumber.from(blockNumberOverride).toHexString();
|
|
90
|
+
blockNumberOverride = '0x' + blockNumberOverride.replace(/^0x0+/, '');
|
|
91
|
+
}
|
|
92
|
+
const contractInterface = this.multicallContract.interface;
|
|
93
|
+
const callData = contractInterface.encodeFunctionData('multicall', [calls]);
|
|
94
|
+
const address = this.multicallContract.address;
|
|
95
|
+
const tx = {
|
|
96
|
+
to: address,
|
|
97
|
+
data: callData,
|
|
98
|
+
// ...overrides,
|
|
99
|
+
};
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
const rawResult = await this.provider.send("eth_call", [tx, blockNumberOverride, stateOverride]);
|
|
102
|
+
const decodedResult = contractInterface.decodeFunctionResult('multicall', rawResult);
|
|
103
|
+
// @ts-ignore
|
|
104
|
+
return decodedResult;
|
|
105
|
+
}
|
|
109
106
|
async callSameFunctionOnContractWithMultipleParams(params) {
|
|
110
107
|
var _a, _b;
|
|
111
108
|
const { address, contractInterface, functionName, functionParams, additionalConfig, providerConfig, } = params;
|
|
@@ -122,10 +119,12 @@ class UniswapMulticallProvider extends multicall_provider_1.IMulticallProvider {
|
|
|
122
119
|
};
|
|
123
120
|
});
|
|
124
121
|
log_1.log.debug({ calls }, `About to multicall for ${functionName} at address ${address} with ${functionParams.length} different sets of params`);
|
|
125
|
-
|
|
122
|
+
// @ts-ignore
|
|
123
|
+
const stateOverride = STAKING_CONTRACT_OVERRIDES[this.chainId] || {};
|
|
124
|
+
const { blockNumber, returnData: aggregateResults } = await this.customMulticall(calls, {
|
|
126
125
|
blockTag: blockNumberOverride,
|
|
127
126
|
// gasLimit: 15000000,
|
|
128
|
-
});
|
|
127
|
+
}, stateOverride);
|
|
129
128
|
const results = [];
|
|
130
129
|
const gasUsedForSuccess = [];
|
|
131
130
|
for (let i = 0; i < aggregateResults.length; i++) {
|
|
@@ -168,9 +167,11 @@ class UniswapMulticallProvider extends multicall_provider_1.IMulticallProvider {
|
|
|
168
167
|
};
|
|
169
168
|
});
|
|
170
169
|
log_1.log.debug({ calls }, `About to multicall for ${functionNames.length} functions at address ${address} with ${functionParams === null || functionParams === void 0 ? void 0 : functionParams.length} different sets of params`);
|
|
171
|
-
|
|
170
|
+
// @ts-ignore
|
|
171
|
+
const stateOverride = STAKING_CONTRACT_OVERRIDES[this.chainId] || {};
|
|
172
|
+
const { blockNumber, returnData: aggregateResults } = await this.customMulticall(calls, {
|
|
172
173
|
blockTag: blockNumberOverride,
|
|
173
|
-
});
|
|
174
|
+
}, stateOverride);
|
|
174
175
|
const results = [];
|
|
175
176
|
const gasUsedForSuccess = [];
|
|
176
177
|
for (let i = 0; i < aggregateResults.length; i++) {
|
|
@@ -200,4 +201,4 @@ class UniswapMulticallProvider extends multicall_provider_1.IMulticallProvider {
|
|
|
200
201
|
}
|
|
201
202
|
}
|
|
202
203
|
exports.UniswapMulticallProvider = UniswapMulticallProvider;
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLXVuaXN3YXAtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL211bHRpY2FsbC11bmlzd2FwLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUFxRDtBQUVyRCxvREFBdUI7QUFDdkIsNERBQStCO0FBRy9CLGlIQUE4RztBQUU5RyxpREFBZ0U7QUFDaEUscUNBQWtDO0FBRWxDLDZEQU04QjtBQU05QixjQUFjO0FBQ2QsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxJQUFJLEVBQUU7UUFDSiw0Q0FBNEMsRUFBRTtZQUM1QyxXQUFXLEVBQUU7Z0JBQ1gsb0VBQW9FLEVBQUUsb0VBQW9FO2FBQzNJO1NBQ0Y7S0FDRjtJQUNELEVBQUUsRUFBRSxFQUFFO0NBQ1AsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSx1Q0FBMEM7SUFHdEYsWUFDWSxPQUFnQixFQUNoQixRQUFzQixFQUN0QixrQkFBa0IsT0FBUztRQUVyQyxLQUFLLEVBQUUsQ0FBQztRQUpFLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBWTtRQUdyQyxNQUFNLGdCQUFnQixHQUFHLHVDQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsT0FBTyxFQUFFLENBQ3BFLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyx1RUFBa0MsQ0FBQyxPQUFPLENBQ2pFLGdCQUFnQixFQUNoQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLG1DQUFtQyxDQUk5QyxNQUFrRTs7UUFLbEUsTUFBTSxFQUNKLFNBQVMs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
|