@across-protocol/sdk 4.1.44 → 4.1.45-beta.1
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/BundleDataClient/BundleDataClient.js +23 -14
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/DataworkerUtils.js +10 -1
- package/dist/cjs/clients/BundleDataClient/utils/DataworkerUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/FillUtils.d.ts +7 -7
- package/dist/cjs/clients/BundleDataClient/utils/FillUtils.js +47 -36
- package/dist/cjs/clients/BundleDataClient/utils/FillUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.d.ts +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js +2 -2
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/cjs/clients/HubPoolClient.d.ts +3 -2
- package/dist/cjs/clients/HubPoolClient.js +27 -15
- package/dist/cjs/clients/HubPoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.d.ts +1 -0
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js +19 -5
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockHubPoolClient.d.ts +2 -0
- package/dist/cjs/clients/mocks/MockHubPoolClient.js +18 -0
- package/dist/cjs/clients/mocks/MockHubPoolClient.js.map +1 -1
- package/dist/cjs/svm/eventsClient.js +5 -12
- package/dist/cjs/svm/eventsClient.js.map +1 -1
- package/dist/cjs/svm/index.d.ts +2 -0
- package/dist/cjs/svm/index.js +3 -0
- package/dist/cjs/svm/index.js.map +1 -1
- package/dist/cjs/svm/utils/events.d.ts +6 -1
- package/dist/cjs/svm/utils/events.js +13 -4
- package/dist/cjs/svm/utils/events.js.map +1 -1
- package/dist/cjs/svm/utils/index.d.ts +1 -0
- package/dist/cjs/svm/utils/index.js +5 -0
- package/dist/cjs/svm/utils/index.js.map +1 -0
- package/dist/cjs/utils/DepositUtils.d.ts +1 -0
- package/dist/cjs/utils/DepositUtils.js +5 -1
- package/dist/cjs/utils/DepositUtils.js.map +1 -1
- package/dist/cjs/utils/common.d.ts +2 -0
- package/dist/cjs/utils/common.js +3 -1
- package/dist/cjs/utils/common.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js +24 -15
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/DataworkerUtils.js +16 -1
- package/dist/esm/clients/BundleDataClient/utils/DataworkerUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/FillUtils.d.ts +28 -7
- package/dist/esm/clients/BundleDataClient/utils/FillUtils.js +83 -50
- package/dist/esm/clients/BundleDataClient/utils/FillUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.d.ts +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js +2 -2
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/esm/clients/HubPoolClient.d.ts +3 -16
- package/dist/esm/clients/HubPoolClient.js +31 -33
- package/dist/esm/clients/HubPoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.d.ts +1 -0
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js +28 -14
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockHubPoolClient.d.ts +2 -0
- package/dist/esm/clients/mocks/MockHubPoolClient.js +18 -0
- package/dist/esm/clients/mocks/MockHubPoolClient.js.map +1 -1
- package/dist/esm/svm/eventsClient.js +6 -13
- package/dist/esm/svm/eventsClient.js.map +1 -1
- package/dist/esm/svm/index.d.ts +2 -0
- package/dist/esm/svm/index.js +3 -0
- package/dist/esm/svm/index.js.map +1 -1
- package/dist/esm/svm/utils/events.d.ts +9 -1
- package/dist/esm/svm/utils/events.js +15 -3
- package/dist/esm/svm/utils/events.js.map +1 -1
- package/dist/esm/svm/utils/index.d.ts +1 -0
- package/dist/esm/svm/utils/index.js +2 -0
- package/dist/esm/svm/utils/index.js.map +1 -0
- package/dist/esm/utils/DepositUtils.d.ts +1 -0
- package/dist/esm/utils/DepositUtils.js +5 -1
- package/dist/esm/utils/DepositUtils.js.map +1 -1
- package/dist/esm/utils/common.d.ts +2 -0
- package/dist/esm/utils/common.js +2 -0
- package/dist/esm/utils/common.js.map +1 -1
- package/dist/types/clients/BundleDataClient/BundleDataClient.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/utils/DataworkerUtils.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/utils/FillUtils.d.ts +28 -7
- package/dist/types/clients/BundleDataClient/utils/FillUtils.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/utils/PoolRebalanceUtils.d.ts +1 -1
- package/dist/types/clients/BundleDataClient/utils/PoolRebalanceUtils.d.ts.map +1 -1
- package/dist/types/clients/HubPoolClient.d.ts +3 -16
- package/dist/types/clients/HubPoolClient.d.ts.map +1 -1
- package/dist/types/clients/SpokePoolClient/SpokePoolClient.d.ts +1 -0
- package/dist/types/clients/SpokePoolClient/SpokePoolClient.d.ts.map +1 -1
- package/dist/types/clients/mocks/MockHubPoolClient.d.ts +2 -0
- package/dist/types/clients/mocks/MockHubPoolClient.d.ts.map +1 -1
- package/dist/types/svm/eventsClient.d.ts.map +1 -1
- package/dist/types/svm/index.d.ts +2 -0
- package/dist/types/svm/index.d.ts.map +1 -1
- package/dist/types/svm/utils/events.d.ts +9 -1
- package/dist/types/svm/utils/events.d.ts.map +1 -1
- package/dist/types/svm/utils/index.d.ts +2 -0
- package/dist/types/svm/utils/index.d.ts.map +1 -0
- package/dist/types/utils/DepositUtils.d.ts +1 -0
- package/dist/types/utils/DepositUtils.d.ts.map +1 -1
- package/dist/types/utils/common.d.ts +2 -0
- package/dist/types/utils/common.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/clients/BundleDataClient/BundleDataClient.ts +38 -21
- package/src/clients/BundleDataClient/utils/DataworkerUtils.ts +36 -1
- package/src/clients/BundleDataClient/utils/FillUtils.ts +133 -71
- package/src/clients/BundleDataClient/utils/PoolRebalanceUtils.ts +3 -2
- package/src/clients/HubPoolClient.ts +41 -38
- package/src/clients/SpokePoolClient/SpokePoolClient.ts +54 -16
- package/src/clients/mocks/MockHubPoolClient.ts +16 -0
- package/src/svm/eventsClient.ts +6 -12
- package/src/svm/index.ts +2 -0
- package/src/svm/utils/events.ts +16 -4
- package/src/svm/utils/index.ts +1 -0
- package/src/utils/DepositUtils.ts +6 -1
- package/src/utils/common.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpokePoolClient.d.ts","sourceRoot":"","sources":["../../../../src/clients/SpokePoolClient/SpokePoolClient.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,SAAS,EACT,SAAS,EAET,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAEjB,YAAY,
|
|
1
|
+
{"version":3,"file":"SpokePoolClient.d.ts","sourceRoot":"","sources":["../../../../src/clients/SpokePoolClient/SpokePoolClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,8 @@ export declare class MockHubPoolClient extends HubPoolClient {
|
|
|
24
24
|
getL1Tokens(): L1Token[];
|
|
25
25
|
getTokenInfoForDeposit(): L1Token;
|
|
26
26
|
setTokenMapping(l1Token: string, chainId: number, l2Token: string): void;
|
|
27
|
+
l2TokenEnabledForL1TokenAtBlock(l1Token: string, destinationChainId: number, hubBlockNumber: number): boolean;
|
|
28
|
+
l2TokenHasPoolRebalanceRoute(l2Token: string, chainId: number, hubPoolBlock: number): boolean;
|
|
27
29
|
deleteTokenMapping(l1Token: string, chainId: number): void;
|
|
28
30
|
getL1TokenForL2TokenAtBlock(l2Token: string, chainId: number, blockNumber: number): string;
|
|
29
31
|
getL2TokenForL1TokenAtBlock(l1Token: string, chainId: number, blockNumber: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockHubPoolClient.d.ts","sourceRoot":"","sources":["../../../../src/clients/mocks/MockHubPoolClient.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,SAAS,EAAiC,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,uBAAuB,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAgB,cAAc,EAAmB,MAAM,cAAc,CAAC;AAa7E,qBAAa,iBAAkB,SAAQ,aAAa;IAC3C,kBAAkB,oBAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,wBAAwB,CAAS;IAEzC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,iBAAiB,CAAqD;IAE9E,OAAO,CAAC,eAAe,CAA4D;IAEnF,OAAO,CAAC,YAAY,CAAe;gBAGjC,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,EAAE,QAAQ,EACjB,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,SAAI,EACnB,OAAO,SAAI;IAMb,0BAA0B,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAKhD,4BAA4B,IAAI,IAAI;IAI9B,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAMtE,4BAA4B,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IASvF,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,IAAI;IAehF,oBAAoB,CAAC,WAAW,EAAE,MAAM;IAIxC,UAAU,CAAC,OAAO,EAAE,OAAO;IAI3B,WAAW;IAIX,sBAAsB;IAItB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKjE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAInD,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAO1F,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAK1F,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI5D,oBAAoB,CAAC,SAAS,EAAE,OAAO;IAIvC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IA+BrD,SAAgB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKrD;IAEF,qBAAqB,CACnB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EACxB,SAAS,GAAE,cAAmB,GAC7B,GAAG;IAmBN,iBAAiB,CACf,2BAA2B,EAAE,MAAM,EACnC,sBAAsB,EAAE,MAAM,EAC9B,4BAA4B,EAAE,SAAS,EAAE,EACzC,iBAAiB,CAAC,EAAE,MAAM,EAC1B,iBAAiB,CAAC,EAAE,MAAM,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,GAAE,cAAmB,GAC7B,GAAG;IA4BN,iBAAiB,CACf,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,SAAS,EAAE,EACzB,cAAc,EAAE,SAAS,EAAE,EAC3B,eAAe,EAAE,SAAS,EAAE,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,GAAE,cAAmB,GAC7B,GAAG;CAyBP"}
|
|
1
|
+
{"version":3,"file":"MockHubPoolClient.d.ts","sourceRoot":"","sources":["../../../../src/clients/mocks/MockHubPoolClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventsClient.d.ts","sourceRoot":"","sources":["../../../src/svm/eventsClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eventsClient.d.ts","sourceRoot":"","sources":["../../../src/svm/eventsClient.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,EAAE,EAGX,0BAA0B,EAE1B,YAAY,EAEb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAa9D,KAAK,6BAA6B,GAAG,UAAU,CAAC,0BAA0B,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAI1G,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAyD;IACpE,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,sBAAsB,CAAU;IAExC;;OAEG;IACH,OAAO;IAUP;;OAEG;WACiB,MAAM,CACxB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,GAC1D,OAAO,CAAC,oBAAoB,CAAC;IAYhC;;;;;;;;OAQG;IACU,WAAW,CAAC,CAAC,SAAS,SAAS,EAC1C,SAAS,EAAE,SAAS,EACpB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,6BAAwE,GAChF,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAK9B;;;;;;;OAOG;YACW,cAAc;IAoD5B;;;;;;OAMG;YACW,uBAAuB;IASrC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;CAkC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/svm/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/svm/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Idl } from "@coral-xyz/anchor";
|
|
2
|
+
import { EventName, EventData } from "../types";
|
|
2
3
|
/**
|
|
3
4
|
* Parses event data from a transaction.
|
|
4
5
|
*/
|
|
5
6
|
export declare function parseEventData(eventData: any): any;
|
|
7
|
+
/**
|
|
8
|
+
* Decodes a raw event according to a supplied IDL.
|
|
9
|
+
*/
|
|
10
|
+
export declare function decodeEvent(idl: Idl, rawEvent: string): {
|
|
11
|
+
data: EventData;
|
|
12
|
+
name: EventName;
|
|
13
|
+
};
|
|
6
14
|
/**
|
|
7
15
|
* Gets the event name from a raw name.
|
|
8
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/svm/utils/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/svm/utils/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAiB,MAAM,UAAU,CAAC;AAE/D;;GAEG;AAEH,wBAAgB,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAsBlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAO5F;AASD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAGvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/svm/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
@@ -56,6 +56,7 @@ export declare function validateFillForDeposit(relayData: Omit<RelayData, "messa
|
|
|
56
56
|
* @returns True if deposit's input amount is 0 and message is empty.
|
|
57
57
|
*/
|
|
58
58
|
export declare function isZeroValueDeposit(deposit: Pick<Deposit, "inputAmount" | "message">): boolean;
|
|
59
|
+
export declare function invalidOutputToken(deposit: Pick<DepositWithBlock, "outputToken">): boolean;
|
|
59
60
|
export declare function isZeroValueFillOrSlowFillRequest(e: Pick<Fill | SlowFillRequest, "inputAmount" | "messageHash">): boolean;
|
|
60
61
|
/**
|
|
61
62
|
* Determines if a message is empty or not.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DepositUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/DepositUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAavH,oBAAY,WAAW;IACrB,gBAAgB,IAAI;IACpB,iBAAiB,IAAA;IACjB,YAAY,IAAA;IACZ,mBAAmB,IAAA;CACpB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;;;;;;;;GAWG;AAEH,wBAAsB,6BAA6B,CACjD,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,IAAI,GAAG,eAAe,EAC5B,KAAK,CAAC,EAAE,yBAAyB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAkF9B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CAkBR;AAoBD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,EAC3F,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAAC,GAC1E;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBpD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAE7F;AAED,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,eAAe,EAAE,aAAa,GAAG,aAAa,CAAC,GAC7D,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAgB,GAAG,OAAO,CAE/D;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAI9D"}
|
|
1
|
+
{"version":3,"file":"DepositUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/DepositUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAavH,oBAAY,WAAW;IACrB,gBAAgB,IAAI;IACpB,iBAAiB,IAAA;IACjB,YAAY,IAAA;IACZ,mBAAmB,IAAA;CACpB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;;;;;;;;GAWG;AAEH,wBAAsB,6BAA6B,CACjD,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,IAAI,GAAG,eAAe,EAC5B,KAAK,CAAC,EAAE,yBAAyB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAkF9B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CAkBR;AAoBD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,EAC3F,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAAC,GAC1E;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBpD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAE7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG,OAAO,CAG1F;AAED,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,eAAe,EAAE,aAAa,GAAG,aAAa,CAAC,GAC7D,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAgB,GAAG,OAAO,CAE/D;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAI9D"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import Decimal from "decimal.js";
|
|
2
|
+
import bs58 from "bs58";
|
|
2
3
|
import { ethers } from "ethers";
|
|
3
4
|
import { BigNumber, BigNumberish, BN } from "./BigNumberUtils";
|
|
4
5
|
export type Decimalish = string | number | Decimal;
|
|
5
6
|
export declare const AddressZero = "0x0000000000000000000000000000000000000000";
|
|
6
7
|
export declare const MAX_BIG_INT: ethers.BigNumber;
|
|
7
8
|
export declare const keccak256: typeof ethers.utils.keccak256;
|
|
9
|
+
export { bs58 };
|
|
8
10
|
/**
|
|
9
11
|
* toBNWei.
|
|
10
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAiC,MAAM,kBAAkB,CAAC;AAG9F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACnD,eAAO,MAAM,WAAW,+CAA+B,CAAC;AACxD,eAAO,MAAM,WAAW,kBAAqD,CAAC;AAE9E,eAAO,MAAQ,SAAS,+BAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAiC,MAAM,kBAAkB,CAAC;AAG9F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACnD,eAAO,MAAM,WAAW,+CAA+B,CAAC;AACxD,eAAO,MAAM,WAAW,kBAAqD,CAAC;AAE9E,eAAO,MAAQ,SAAS,+BAAiB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,QAAS,YAAY,aAAa,MAAM,KAAG,EAA0C,CAAC;AAE1G;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,QAAS,YAAY,aAAa,MAAM,KAAG,MAA+C,CAAC;AAE/G;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,EAAE,CAIxD;AACD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,EAAE,CAIxD;AAED,eAAO,MAAM,oBAAoB,kBAAe,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,YAAY,EACxB,KAAK,GAAE,MAAM,GAAG,MAAU,EAC1B,UAAU,SAAK,EACf,cAAc,SAAK,GAClB,MAAM,CAIR;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,QAAS,YAAY,YAAY,YAAY,KAAG,SAEnE,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,YAAY,EACtB,KAAK,GAAE,MAAM,GAAG,MAAU,EAC1B,QAAQ,SAAK,GACZ,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,GAAG,EAAE,CAE9E;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,gBAC5B,UAAU,aACZ,UAAU,kBACL,UAAU,kBACV,UAAU,KACzB,MAGF,CAAC;AACF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,gBAC1B,UAAU,aACZ,UAAU,kBACL,UAAU,kBACV,UAAU,KACzB,MAaF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,gBACL,UAAU,aACZ,UAAU,kBACL,UAAU,kBACV,UAAU,KACzB,MAEF,CAAC;AACF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,QAAS,MAAM,OAAO,MAAM,QAAQ,MAAM,eAYvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,oBAEpC;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ1F;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,SAAS,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B,CAAC;AAEF,wBAAgB,aAAa,WAE5B"}
|
package/package.json
CHANGED
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
chainIsEvm,
|
|
43
43
|
isValidEvmAddress,
|
|
44
44
|
duplicateEvent,
|
|
45
|
+
invalidOutputToken,
|
|
45
46
|
} from "../../utils";
|
|
46
47
|
import winston from "winston";
|
|
47
48
|
import {
|
|
@@ -358,6 +359,7 @@ export class BundleDataClient {
|
|
|
358
359
|
// @dev This helper function should probably be moved to the InventoryClient
|
|
359
360
|
async getApproximateRefundsForBlockRange(chainIds: number[], blockRanges: number[][]): Promise<CombinedRefunds> {
|
|
360
361
|
const refundsForChain: CombinedRefunds = {};
|
|
362
|
+
const bundleEndBlockForMainnet = blockRanges[0][1];
|
|
361
363
|
for (const chainId of chainIds) {
|
|
362
364
|
if (this.spokePoolClients[chainId] === undefined) {
|
|
363
365
|
continue;
|
|
@@ -372,7 +374,8 @@ export class BundleDataClient {
|
|
|
372
374
|
if (
|
|
373
375
|
fill.blockNumber < blockRanges[chainIndex][0] ||
|
|
374
376
|
fill.blockNumber > blockRanges[chainIndex][1] ||
|
|
375
|
-
isZeroValueFillOrSlowFillRequest(fill)
|
|
377
|
+
isZeroValueFillOrSlowFillRequest(fill) ||
|
|
378
|
+
invalidOutputToken(fill)
|
|
376
379
|
) {
|
|
377
380
|
return false;
|
|
378
381
|
}
|
|
@@ -399,17 +402,19 @@ export class BundleDataClient {
|
|
|
399
402
|
_fill,
|
|
400
403
|
spokeClient.spokePool.provider,
|
|
401
404
|
matchingDeposit,
|
|
402
|
-
this.clients.hubPoolClient
|
|
405
|
+
this.clients.hubPoolClient,
|
|
406
|
+
bundleEndBlockForMainnet
|
|
403
407
|
);
|
|
404
408
|
if (!isDefined(fill)) {
|
|
405
409
|
return;
|
|
406
410
|
}
|
|
407
411
|
const { chainToSendRefundTo, repaymentToken } = getRefundInformationFromFill(
|
|
408
|
-
|
|
412
|
+
{
|
|
413
|
+
...fill,
|
|
414
|
+
fromLiteChain: matchingDeposit.fromLiteChain,
|
|
415
|
+
},
|
|
409
416
|
this.clients.hubPoolClient,
|
|
410
|
-
|
|
411
|
-
this.chainIdListForBundleEvaluationBlockNumbers,
|
|
412
|
-
matchingDeposit.fromLiteChain
|
|
417
|
+
bundleEndBlockForMainnet
|
|
413
418
|
);
|
|
414
419
|
// Assume that lp fees are 0 for the sake of speed. In the future we could batch compute
|
|
415
420
|
// these or make hardcoded assumptions based on the origin-repayment chain direction. This might result
|
|
@@ -672,6 +677,7 @@ export class BundleDataClient {
|
|
|
672
677
|
}
|
|
673
678
|
|
|
674
679
|
const chainIds = this.clients.configStoreClient.getChainIdIndicesForBlock(blockRangesForChains[0][0]);
|
|
680
|
+
const bundleEndBlockForMainnet = blockRangesForChains[0][1];
|
|
675
681
|
|
|
676
682
|
if (blockRangesForChains.length > chainIds.length) {
|
|
677
683
|
throw new Error(
|
|
@@ -708,7 +714,7 @@ export class BundleDataClient {
|
|
|
708
714
|
deposit.originChainId,
|
|
709
715
|
deposit.outputToken,
|
|
710
716
|
deposit.destinationChainId,
|
|
711
|
-
|
|
717
|
+
bundleEndBlockForMainnet
|
|
712
718
|
) &&
|
|
713
719
|
// Cannot slow fill from or to a lite chain.
|
|
714
720
|
!deposit.fromLiteChain &&
|
|
@@ -885,7 +891,10 @@ export class BundleDataClient {
|
|
|
885
891
|
// tokens to the filler. We can't remove non-empty message deposit here in case there is a slow fill
|
|
886
892
|
// request for the deposit, we'd want to see the fill took place.
|
|
887
893
|
.filter(
|
|
888
|
-
(fill) =>
|
|
894
|
+
(fill) =>
|
|
895
|
+
fill.blockNumber <= destinationChainBlockRange[1] &&
|
|
896
|
+
!isZeroValueFillOrSlowFillRequest(fill) &&
|
|
897
|
+
!invalidOutputToken(fill)
|
|
889
898
|
),
|
|
890
899
|
async (fill) => {
|
|
891
900
|
fillCounter++;
|
|
@@ -904,7 +913,8 @@ export class BundleDataClient {
|
|
|
904
913
|
fill,
|
|
905
914
|
destinationClient.spokePool.provider,
|
|
906
915
|
deposits[0],
|
|
907
|
-
this.clients.hubPoolClient
|
|
916
|
+
this.clients.hubPoolClient,
|
|
917
|
+
bundleEndBlockForMainnet
|
|
908
918
|
);
|
|
909
919
|
if (!isDefined(fillToRefund)) {
|
|
910
920
|
bundleUnrepayableFillsV3.push(fill);
|
|
@@ -1008,7 +1018,8 @@ export class BundleDataClient {
|
|
|
1008
1018
|
fill,
|
|
1009
1019
|
destinationClient.spokePool.provider,
|
|
1010
1020
|
matchedDeposit,
|
|
1011
|
-
this.clients.hubPoolClient
|
|
1021
|
+
this.clients.hubPoolClient,
|
|
1022
|
+
bundleEndBlockForMainnet
|
|
1012
1023
|
);
|
|
1013
1024
|
if (!isDefined(fillToRefund)) {
|
|
1014
1025
|
bundleUnrepayableFillsV3.push(fill);
|
|
@@ -1054,7 +1065,9 @@ export class BundleDataClient {
|
|
|
1054
1065
|
.getSlowFillRequestsForOriginChain(originChainId)
|
|
1055
1066
|
.filter(
|
|
1056
1067
|
(request) =>
|
|
1057
|
-
request.blockNumber <= destinationChainBlockRange[1] &&
|
|
1068
|
+
request.blockNumber <= destinationChainBlockRange[1] &&
|
|
1069
|
+
!isZeroValueFillOrSlowFillRequest(request) &&
|
|
1070
|
+
!invalidOutputToken(request)
|
|
1058
1071
|
),
|
|
1059
1072
|
async (slowFillRequest: SlowFillRequestWithBlock) => {
|
|
1060
1073
|
const relayDataHash = getRelayEventKey(slowFillRequest);
|
|
@@ -1186,7 +1199,8 @@ export class BundleDataClient {
|
|
|
1186
1199
|
fill,
|
|
1187
1200
|
destinationClient.spokePool.provider,
|
|
1188
1201
|
deposits[0],
|
|
1189
|
-
this.clients.hubPoolClient
|
|
1202
|
+
this.clients.hubPoolClient,
|
|
1203
|
+
bundleEndBlockForMainnet
|
|
1190
1204
|
);
|
|
1191
1205
|
if (!isDefined(fillToRefund)) {
|
|
1192
1206
|
bundleUnrepayableFillsV3.push(fill);
|
|
@@ -1242,7 +1256,8 @@ export class BundleDataClient {
|
|
|
1242
1256
|
prefill,
|
|
1243
1257
|
destinationClient.spokePool.provider,
|
|
1244
1258
|
deposit,
|
|
1245
|
-
this.clients.hubPoolClient
|
|
1259
|
+
this.clients.hubPoolClient,
|
|
1260
|
+
bundleEndBlockForMainnet
|
|
1246
1261
|
);
|
|
1247
1262
|
if (!isDefined(verifiedFill)) {
|
|
1248
1263
|
bundleUnrepayableFillsV3.push(prefill);
|
|
@@ -1376,11 +1391,12 @@ export class BundleDataClient {
|
|
|
1376
1391
|
const matchedDeposit = deposits[0];
|
|
1377
1392
|
assert(isDefined(matchedDeposit), "Deposit should exist in relay hash dictionary.");
|
|
1378
1393
|
const { chainToSendRefundTo: paymentChainId } = getRefundInformationFromFill(
|
|
1379
|
-
|
|
1394
|
+
{
|
|
1395
|
+
...fill,
|
|
1396
|
+
fromLiteChain: matchedDeposit.fromLiteChain,
|
|
1397
|
+
},
|
|
1380
1398
|
this.clients.hubPoolClient,
|
|
1381
|
-
|
|
1382
|
-
chainIds,
|
|
1383
|
-
matchedDeposit.fromLiteChain
|
|
1399
|
+
bundleEndBlockForMainnet
|
|
1384
1400
|
);
|
|
1385
1401
|
return {
|
|
1386
1402
|
...fill,
|
|
@@ -1422,11 +1438,12 @@ export class BundleDataClient {
|
|
|
1422
1438
|
const associatedDeposit = deposits[0];
|
|
1423
1439
|
assert(isDefined(associatedDeposit), "Deposit should exist in relay hash dictionary.");
|
|
1424
1440
|
const { chainToSendRefundTo, repaymentToken } = getRefundInformationFromFill(
|
|
1425
|
-
|
|
1441
|
+
{
|
|
1442
|
+
...fill,
|
|
1443
|
+
fromLiteChain: associatedDeposit.fromLiteChain,
|
|
1444
|
+
},
|
|
1426
1445
|
this.clients.hubPoolClient,
|
|
1427
|
-
|
|
1428
|
-
chainIds,
|
|
1429
|
-
associatedDeposit.fromLiteChain
|
|
1446
|
+
bundleEndBlockForMainnet
|
|
1430
1447
|
);
|
|
1431
1448
|
updateBundleFillsV3(bundleFillsV3, fill, realizedLpFeePct, chainToSendRefundTo, repaymentToken, fill.relayer);
|
|
1432
1449
|
});
|
|
@@ -146,6 +146,13 @@ export function _buildPoolRebalanceRoot(
|
|
|
146
146
|
const repaymentChainId = Number(_repaymentChainId);
|
|
147
147
|
Object.entries(fillsForChain).forEach(
|
|
148
148
|
([l2TokenAddress, { realizedLpFees: totalRealizedLpFee, totalRefundAmount }]) => {
|
|
149
|
+
// If the repayment token and repayment chain ID do not map to a PoolRebalanceRoute graph, then
|
|
150
|
+
// there are no relevant L1 running balances.
|
|
151
|
+
if (
|
|
152
|
+
!clients.hubPoolClient.l2TokenHasPoolRebalanceRoute(l2TokenAddress, repaymentChainId, mainnetBundleEndBlock)
|
|
153
|
+
) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
149
156
|
const l1TokenCounterpart = clients.hubPoolClient.getL1TokenForL2TokenAtBlock(
|
|
150
157
|
l2TokenAddress,
|
|
151
158
|
repaymentChainId,
|
|
@@ -215,7 +222,24 @@ export function _buildPoolRebalanceRoot(
|
|
|
215
222
|
Object.entries(bundleV3Deposits).forEach(([, depositsForChain]) => {
|
|
216
223
|
Object.entries(depositsForChain).forEach(([, deposits]) => {
|
|
217
224
|
deposits.forEach((deposit) => {
|
|
218
|
-
|
|
225
|
+
// If the repayment token and repayment chain ID do not map to a PoolRebalanceRoute graph, then
|
|
226
|
+
// there are no relevant L1 running balances.
|
|
227
|
+
if (
|
|
228
|
+
!clients.hubPoolClient.l2TokenHasPoolRebalanceRoute(
|
|
229
|
+
deposit.inputToken,
|
|
230
|
+
deposit.originChainId,
|
|
231
|
+
mainnetBundleEndBlock
|
|
232
|
+
)
|
|
233
|
+
) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
updateRunningBalanceForDeposit(
|
|
237
|
+
runningBalances,
|
|
238
|
+
clients.hubPoolClient,
|
|
239
|
+
deposit,
|
|
240
|
+
deposit.inputAmount.mul(-1),
|
|
241
|
+
mainnetBundleEndBlock
|
|
242
|
+
);
|
|
219
243
|
});
|
|
220
244
|
});
|
|
221
245
|
});
|
|
@@ -229,6 +253,17 @@ export function _buildPoolRebalanceRoot(
|
|
|
229
253
|
const originChainId = Number(_originChainId);
|
|
230
254
|
Object.entries(depositsForChain).forEach(([inputToken, deposits]) => {
|
|
231
255
|
deposits.forEach((deposit) => {
|
|
256
|
+
// If the repayment token and repayment chain ID do not map to a PoolRebalanceRoute graph, then
|
|
257
|
+
// there are no relevant L1 running balances.
|
|
258
|
+
if (
|
|
259
|
+
!clients.hubPoolClient.l2TokenHasPoolRebalanceRoute(
|
|
260
|
+
deposit.inputToken,
|
|
261
|
+
deposit.originChainId,
|
|
262
|
+
mainnetBundleEndBlock
|
|
263
|
+
)
|
|
264
|
+
) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
232
267
|
const l1TokenCounterpart = clients.hubPoolClient.getL1TokenForL2TokenAtBlock(
|
|
233
268
|
inputToken,
|
|
234
269
|
originChainId,
|
|
@@ -1,124 +1,120 @@
|
|
|
1
1
|
import _ from "lodash";
|
|
2
|
+
import assert from "assert";
|
|
2
3
|
import { providers } from "ethers";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
4
|
+
import { DepositWithBlock, Fill, FillWithBlock } from "../../../interfaces";
|
|
5
|
+
import { isSlowFill, isValidEvmAddress, isDefined, chainIsEvm } from "../../../utils";
|
|
5
6
|
import { HubPoolClient } from "../../HubPoolClient";
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* @notice FillRepaymentInformation is a fill with additional properties required to determine where it can
|
|
10
|
+
* be repaid.
|
|
11
|
+
*/
|
|
12
|
+
type FillRepaymentInformation = Fill & { fromLiteChain: boolean };
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @notice Return repayment chain and repayment token for a fill, but does not verify if the returned
|
|
16
|
+
* repayment information is valid for the desired repayment address.
|
|
17
|
+
* @dev The passed in fill should be verified first via verifyFillRepayment().
|
|
18
|
+
* @param fill The fill to get the repayment information for.
|
|
19
|
+
* @return The chain to send the refund to and the token to use for the refund.
|
|
20
|
+
*/
|
|
7
21
|
export function getRefundInformationFromFill(
|
|
8
|
-
|
|
22
|
+
relayData: FillRepaymentInformation,
|
|
9
23
|
hubPoolClient: HubPoolClient,
|
|
10
|
-
|
|
11
|
-
chainIdListForBundleEvaluationBlockNumbers: number[],
|
|
12
|
-
fromLiteChain: boolean
|
|
24
|
+
bundleEndBlockForMainnet: number
|
|
13
25
|
): {
|
|
14
26
|
chainToSendRefundTo: number;
|
|
15
27
|
repaymentToken: string;
|
|
16
28
|
} {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (fromLiteChain) {
|
|
24
|
-
chainToSendRefundTo = fill.originChainId;
|
|
29
|
+
const chainToSendRefundTo = _getRepaymentChainId(relayData, hubPoolClient, bundleEndBlockForMainnet);
|
|
30
|
+
if (chainToSendRefundTo === relayData.originChainId) {
|
|
31
|
+
return {
|
|
32
|
+
chainToSendRefundTo,
|
|
33
|
+
repaymentToken: relayData.inputToken,
|
|
34
|
+
};
|
|
25
35
|
}
|
|
26
36
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
hubPoolClient.chainId,
|
|
31
|
-
chainIdListForBundleEvaluationBlockNumbers
|
|
32
|
-
)[1];
|
|
33
|
-
|
|
37
|
+
// Now figure out the equivalent L2 token for the repayment token. If the inputToken doesn't have a
|
|
38
|
+
// PoolRebalanceRoute, then the repayment chain would have been the originChainId after the getRepaymentChainId()
|
|
39
|
+
// call and we would have returned already, so the following call should always succeed.
|
|
34
40
|
const l1TokenCounterpart = hubPoolClient.getL1TokenForL2TokenAtBlock(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
relayData.inputToken,
|
|
42
|
+
relayData.originChainId,
|
|
43
|
+
bundleEndBlockForMainnet
|
|
38
44
|
);
|
|
39
45
|
|
|
40
46
|
const repaymentToken = hubPoolClient.getL2TokenForL1TokenAtBlock(
|
|
41
47
|
l1TokenCounterpart,
|
|
42
48
|
chainToSendRefundTo,
|
|
43
|
-
|
|
49
|
+
bundleEndBlockForMainnet
|
|
44
50
|
);
|
|
45
51
|
return {
|
|
46
52
|
chainToSendRefundTo,
|
|
47
53
|
repaymentToken,
|
|
48
54
|
};
|
|
49
55
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
): boolean {
|
|
61
|
-
if (!matchedDeposit.fromLiteChain) {
|
|
62
|
-
try {
|
|
63
|
-
const l1TokenCounterpart = hubPoolClient.getL1TokenForL2TokenAtBlock(
|
|
64
|
-
matchedDeposit.inputToken,
|
|
65
|
-
matchedDeposit.originChainId,
|
|
66
|
-
matchedDeposit.quoteBlockNumber
|
|
67
|
-
);
|
|
68
|
-
hubPoolClient.getL2TokenForL1TokenAtBlock(l1TokenCounterpart, repaymentChainId, matchedDeposit.quoteBlockNumber);
|
|
69
|
-
// Repayment token could be found, this is a valid repayment chain.
|
|
70
|
-
return false;
|
|
71
|
-
} catch {
|
|
72
|
-
// Repayment token doesn't exist on repayment chain via PoolRebalanceRoutes, impossible to repay filler there.
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
} else {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Verify that a fill sent to an EVM chain has a 20 byte address. If the fill does not, then attempt
|
|
81
|
-
// to repay the `msg.sender` of the relay transaction. Otherwise, return undefined.
|
|
56
|
+
/**
|
|
57
|
+
* @notice Verifies that the fill can be repaid. If the repayment address is not
|
|
58
|
+
* valid for the requested repayment chain, then this function will attempt to change the fill's repayment chain
|
|
59
|
+
* to the destination chain and its repayment address to the msg.sender and if this is possible,
|
|
60
|
+
* return the fill. Otherwise, return undefined.
|
|
61
|
+
* @param _fill Fill with a requested repayment chain and address
|
|
62
|
+
* @return Fill with the applied repayment chain (depends on the validity of the requested repayment address)
|
|
63
|
+
* and applied repayment address, or undefined if the applied repayment address is not valid for the
|
|
64
|
+
* applied repayment chain.
|
|
65
|
+
*/
|
|
82
66
|
export async function verifyFillRepayment(
|
|
83
67
|
_fill: FillWithBlock,
|
|
84
68
|
destinationChainProvider: providers.Provider,
|
|
85
69
|
matchedDeposit: DepositWithBlock,
|
|
86
|
-
hubPoolClient: HubPoolClient
|
|
70
|
+
hubPoolClient: HubPoolClient,
|
|
71
|
+
bundleEndBlockForMainnet: number
|
|
87
72
|
): Promise<FillWithBlock | undefined> {
|
|
88
|
-
const fill =
|
|
73
|
+
const fill = {
|
|
74
|
+
..._.cloneDeep(_fill),
|
|
75
|
+
fromLiteChain: matchedDeposit.fromLiteChain,
|
|
76
|
+
};
|
|
89
77
|
|
|
90
78
|
// Slow fills don't result in repayments so they're always valid.
|
|
91
79
|
if (isSlowFill(fill)) {
|
|
92
80
|
return fill;
|
|
93
81
|
}
|
|
94
82
|
|
|
95
|
-
let repaymentChainId =
|
|
96
|
-
|
|
97
|
-
// If repayment chain doesn't have a Pool Rebalance Route for the input token, then change the repayment
|
|
98
|
-
// chain to the destination chain.
|
|
99
|
-
if (forceDestinationRepayment(repaymentChainId, matchedDeposit, hubPoolClient)) {
|
|
100
|
-
repaymentChainId = fill.destinationChainId;
|
|
101
|
-
}
|
|
83
|
+
let repaymentChainId = _getRepaymentChainId(fill, hubPoolClient, bundleEndBlockForMainnet);
|
|
102
84
|
|
|
103
|
-
|
|
85
|
+
// Repayments will always go to the fill.relayer address so check if its a valid EVM address. If its not, attempt
|
|
86
|
+
// to change it to the msg.sender of the FilledRelay.
|
|
87
|
+
if (_repaymentAddressNeedsToBeOverwritten(fill)) {
|
|
104
88
|
// TODO: Handle case where fill was sent on non-EVM chain, in which case the following call would fail
|
|
105
89
|
// or return something unexpected. We'd want to return undefined here.
|
|
90
|
+
|
|
91
|
+
// @todo: If chainIsEvm:
|
|
106
92
|
const fillTransaction = await destinationChainProvider.getTransaction(fill.transactionHash);
|
|
107
93
|
const destinationRelayer = fillTransaction?.from;
|
|
108
94
|
// Repayment chain is still an EVM chain, but the msg.sender is a bytes32 address, so the fill is invalid.
|
|
109
95
|
if (!isDefined(destinationRelayer) || !isValidEvmAddress(destinationRelayer)) {
|
|
110
96
|
return undefined;
|
|
111
97
|
}
|
|
112
|
-
|
|
98
|
+
// If we can switch the repayment chain to the destination chain, then do so. We should only switch if the
|
|
99
|
+
// destination chain has a valid repayment token that is equivalent to the deposited input token. This would
|
|
100
|
+
// also be the same mapping as the repayment token on the repayment chain.
|
|
101
|
+
if (
|
|
102
|
+
!matchedDeposit.fromLiteChain &&
|
|
103
|
+
hubPoolClient.areTokensEquivalent(fill.inputToken, fill.originChainId, fill.outputToken, fill.destinationChainId)
|
|
104
|
+
) {
|
|
113
105
|
repaymentChainId = fill.destinationChainId;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
106
|
+
}
|
|
107
|
+
// If we can't switch the chain, then we need to verify that the msg.sender is a valid address on the repayment chain.
|
|
108
|
+
// Because we already checked that the `destinationRelayer` was a valid EVM address above, we only need to check
|
|
109
|
+
// that the repayment chain is an EVM chain.
|
|
110
|
+
else {
|
|
117
111
|
if (!chainIsEvm(repaymentChainId)) {
|
|
118
112
|
return undefined;
|
|
119
113
|
}
|
|
120
114
|
}
|
|
121
115
|
fill.relayer = destinationRelayer;
|
|
116
|
+
|
|
117
|
+
// @todo: If chainIsSvm:
|
|
122
118
|
}
|
|
123
119
|
|
|
124
120
|
// Repayment address is now valid and repayment chain is either origin chain for lite chain or the destination
|
|
@@ -126,3 +122,69 @@ export async function verifyFillRepayment(
|
|
|
126
122
|
fill.repaymentChainId = repaymentChainId;
|
|
127
123
|
return fill;
|
|
128
124
|
}
|
|
125
|
+
|
|
126
|
+
function _getRepaymentChainId(
|
|
127
|
+
relayData: FillRepaymentInformation,
|
|
128
|
+
hubPoolClient: HubPoolClient,
|
|
129
|
+
bundleEndBlockForMainnet: number
|
|
130
|
+
): number {
|
|
131
|
+
if (relayData.fromLiteChain) {
|
|
132
|
+
assert(!isSlowFill(relayData), "getRepaymentChainId: fromLiteChain and slow fill are mutually exclusive");
|
|
133
|
+
return relayData.originChainId;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Handle slow relay where FilledRelay.repaymentChainId = 0, as hardcoded in the SpokePool contract.
|
|
137
|
+
// Slow relays always pay recipient on destination chain.
|
|
138
|
+
if (isSlowFill(relayData)) {
|
|
139
|
+
return relayData.destinationChainId;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Repayment chain is valid if the input token and repayment chain are mapped to the same PoolRebalanceRoute.
|
|
143
|
+
const repaymentTokenIsValid = _repaymentChainTokenIsValid(relayData, hubPoolClient, bundleEndBlockForMainnet);
|
|
144
|
+
if (repaymentTokenIsValid) {
|
|
145
|
+
return relayData.repaymentChainId;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// If repayment chain is not valid, default to origin chain since we always know the input token can be refunded.
|
|
149
|
+
return relayData.originChainId;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function _repaymentChainTokenIsValid(
|
|
153
|
+
relayData: FillRepaymentInformation,
|
|
154
|
+
hubPoolClient: HubPoolClient,
|
|
155
|
+
bundleEndBlockForMainnet: number
|
|
156
|
+
): boolean {
|
|
157
|
+
if (
|
|
158
|
+
!hubPoolClient.l2TokenHasPoolRebalanceRoute(relayData.inputToken, relayData.originChainId, bundleEndBlockForMainnet)
|
|
159
|
+
) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const l1TokenCounterpart = hubPoolClient.getL1TokenForL2TokenAtBlock(
|
|
163
|
+
relayData.inputToken,
|
|
164
|
+
relayData.originChainId,
|
|
165
|
+
bundleEndBlockForMainnet
|
|
166
|
+
);
|
|
167
|
+
if (
|
|
168
|
+
!hubPoolClient.l2TokenEnabledForL1TokenAtBlock(
|
|
169
|
+
l1TokenCounterpart,
|
|
170
|
+
relayData.repaymentChainId,
|
|
171
|
+
bundleEndBlockForMainnet
|
|
172
|
+
)
|
|
173
|
+
) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function _repaymentAddressNeedsToBeOverwritten(fill: Fill): boolean {
|
|
180
|
+
// Slow fills don't result in repayments so they're always valid.
|
|
181
|
+
if (isSlowFill(fill)) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// @todo add Solana logic here:
|
|
186
|
+
// - i.e. If chainIsSvm && !isValidSvmAddress(fill.relayer) then return false
|
|
187
|
+
// If chainIsEvm && !isValidEvmAddress(fill.relayer) then return false
|
|
188
|
+
// If chainIsEvm && isValidEvmAddress(fill.relayer) then return true
|
|
189
|
+
return !isValidEvmAddress(fill.relayer);
|
|
190
|
+
}
|