@folks-finance/xchain-sdk 0.0.25 → 0.0.27
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/chains/evm/hub/modules/folks-hub-gmp.d.ts +3 -0
- package/dist/chains/evm/hub/modules/folks-hub-gmp.js +27 -2
- package/dist/chains/evm/hub/modules/folks-hub-gmp.js.map +1 -1
- package/dist/chains/evm/spoke/modules/folks-evm-gmp.d.ts +3 -0
- package/dist/chains/evm/spoke/modules/folks-evm-gmp.js +28 -1
- package/dist/chains/evm/spoke/modules/folks-evm-gmp.js.map +1 -1
- package/dist/common/utils/adapter.d.ts +2 -0
- package/dist/common/utils/adapter.js +9 -0
- package/dist/common/utils/adapter.js.map +1 -1
- package/dist/xchain/modules/folks-gmp.d.ts +8 -2
- package/dist/xchain/modules/folks-gmp.js +36 -3
- package/dist/xchain/modules/folks-gmp.js.map +1 -1
- package/package.json +1 -1
- package/src/chains/evm/hub/modules/folks-hub-gmp.ts +40 -3
- package/src/chains/evm/spoke/modules/folks-evm-gmp.ts +46 -2
- package/src/common/utils/adapter.ts +13 -0
- package/src/xchain/modules/folks-gmp.ts +88 -4
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { EvmAddress } from "../../../../common/types/address.js";
|
|
2
|
+
import type { FolksChainId } from "../../../../common/types/chain.js";
|
|
2
3
|
import type { MessageId } from "../../../../common/types/gmp.js";
|
|
3
4
|
import type { AdapterType } from "../../../../common/types/message.js";
|
|
4
5
|
import type { MessageReceived } from "../../common/types/gmp.js";
|
|
5
6
|
import type { PrepareRetryMessageCall, PrepareReverseMessageCall } from "../../common/types/module.js";
|
|
6
7
|
import type { HubChain } from "../types/chain.js";
|
|
8
|
+
import type { HubTokenData } from "../types/token.js";
|
|
7
9
|
import type { Client, EstimateGasParameters, Hex, WalletClient } from "viem";
|
|
8
10
|
export declare const prepare: {
|
|
9
11
|
retryMessage(provider: Client, sender: EvmAddress, adapterId: AdapterType, messageId: MessageId, message: MessageReceived, extraArgs: Hex, value: bigint, hubChain: HubChain, transactionOptions?: EstimateGasParameters): Promise<PrepareRetryMessageCall>;
|
|
@@ -13,3 +15,4 @@ export declare const write: {
|
|
|
13
15
|
retryMessage(provider: Client, signer: WalletClient, adapterId: AdapterType, messageId: MessageId, prepareCall: PrepareRetryMessageCall): Promise<`0x${string}`>;
|
|
14
16
|
reverseMessage(provider: Client, signer: WalletClient, adapterId: AdapterType, messageId: MessageId, prepareCall: PrepareReverseMessageCall): Promise<`0x${string}`>;
|
|
15
17
|
};
|
|
18
|
+
export declare function getSendMessageFee(provider: Client, toFolksChainId: FolksChainId, adapterId: AdapterType, gasLimit: bigint, hubChain: HubChain, hubTokenData: HubTokenData): Promise<bigint>;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { FINALITY } from "../../../../common/constants/message.js";
|
|
2
|
+
import { getRandomGenericAddress } from "../../../../common/utils/address.js";
|
|
3
|
+
import { getRandomBytes } from "../../../../common/utils/bytes.js";
|
|
1
4
|
import { GAS_LIMIT_ESTIMATE_INCREASE } from "../../common/constants/contract.js";
|
|
2
5
|
import { getEvmSignerAccount } from "../../common/utils/chain.js";
|
|
6
|
+
import { buildMessageParams, buildSendTokenExtraArgsWhenRemoving } from "../../common/utils/message.js";
|
|
3
7
|
import { getBridgeRouterHubContract } from "../utils/contract.js";
|
|
4
8
|
export const prepare = {
|
|
5
9
|
async retryMessage(provider, sender, adapterId, messageId, message, extraArgs, value, hubChain, transactionOptions = {
|
|
@@ -45,7 +49,7 @@ export const write = {
|
|
|
45
49
|
account: getEvmSignerAccount(signer),
|
|
46
50
|
chain: signer.chain,
|
|
47
51
|
gas: gasLimit,
|
|
48
|
-
msgValue,
|
|
52
|
+
value: msgValue,
|
|
49
53
|
});
|
|
50
54
|
},
|
|
51
55
|
async reverseMessage(provider, signer, adapterId, messageId, prepareCall) {
|
|
@@ -55,8 +59,29 @@ export const write = {
|
|
|
55
59
|
account: getEvmSignerAccount(signer),
|
|
56
60
|
chain: signer.chain,
|
|
57
61
|
gas: gasLimit,
|
|
58
|
-
msgValue,
|
|
62
|
+
value: msgValue,
|
|
59
63
|
});
|
|
60
64
|
},
|
|
61
65
|
};
|
|
66
|
+
export async function getSendMessageFee(provider, toFolksChainId, adapterId, gasLimit, hubChain, hubTokenData) {
|
|
67
|
+
const hubBridgeRouter = getBridgeRouterHubContract(provider, hubChain.bridgeRouterAddress);
|
|
68
|
+
// construct return message
|
|
69
|
+
const message = {
|
|
70
|
+
params: buildMessageParams({
|
|
71
|
+
adapters: {
|
|
72
|
+
adapterId,
|
|
73
|
+
returnAdapterId: 0,
|
|
74
|
+
},
|
|
75
|
+
gasLimit,
|
|
76
|
+
}),
|
|
77
|
+
sender: hubChain.hubAddress,
|
|
78
|
+
destinationChainId: toFolksChainId,
|
|
79
|
+
handler: getRandomGenericAddress(),
|
|
80
|
+
payload: getRandomBytes(256),
|
|
81
|
+
finalityLevel: FINALITY.FINALISED,
|
|
82
|
+
extraArgs: buildSendTokenExtraArgsWhenRemoving(getRandomGenericAddress(), hubTokenData.token, 1n),
|
|
83
|
+
};
|
|
84
|
+
// get return adapter fee
|
|
85
|
+
return await hubBridgeRouter.read.getSendFee([message]);
|
|
86
|
+
}
|
|
62
87
|
//# sourceMappingURL=folks-hub-gmp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folks-hub-gmp.js","sourceRoot":"","sources":["../../../../../src/chains/evm/hub/modules/folks-hub-gmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"folks-hub-gmp.js","sourceRoot":"","sources":["../../../../../src/chains/evm/hub/modules/folks-hub-gmp.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,10 @@ import type { EvmAddress, GenericAddress } from "../../../../common/types/addres
|
|
|
2
2
|
import type { FolksChainId, SpokeChain } from "../../../../common/types/chain.js";
|
|
3
3
|
import type { MessageId } from "../../../../common/types/gmp.js";
|
|
4
4
|
import type { AdapterType } from "../../../../common/types/message.js";
|
|
5
|
+
import type { SpokeTokenData } from "../../../../common/types/token.js";
|
|
5
6
|
import type { MessageReceived } from "../../common/types/gmp.js";
|
|
6
7
|
import type { PrepareResendWormholeMessageCall, PrepareRetryMessageCall, PrepareReverseMessageCall } from "../../common/types/module.js";
|
|
8
|
+
import type { HubChain } from "../../hub/types/chain.js";
|
|
7
9
|
import type { Client, EstimateGasParameters, Hex, WalletClient } from "viem";
|
|
8
10
|
export declare const prepare: {
|
|
9
11
|
retryMessage(provider: Client, sender: EvmAddress, adapterId: AdapterType, messageId: MessageId, message: MessageReceived, extraArgs: Hex, value: bigint, spokeChain: SpokeChain, transactionOptions?: EstimateGasParameters): Promise<PrepareRetryMessageCall>;
|
|
@@ -15,3 +17,4 @@ export declare const write: {
|
|
|
15
17
|
reverseMessage(provider: Client, signer: WalletClient, adapterId: AdapterType, messageId: MessageId, prepareCall: PrepareReverseMessageCall): Promise<`0x${string}`>;
|
|
16
18
|
resendMessage(provider: Client, signer: WalletClient, prepareCall: PrepareResendWormholeMessageCall): Promise<`0x${string}`>;
|
|
17
19
|
};
|
|
20
|
+
export declare function getSendMessageFee(provider: Client, adapterId: AdapterType, receiverValue: bigint, gasLimit: bigint, hubChain: HubChain, spokeChain: SpokeChain, spokeTokenData?: SpokeTokenData): Promise<bigint>;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { FINALITY } from "../../../../common/constants/message.js";
|
|
1
2
|
import { ChainType } from "../../../../common/types/chain.js";
|
|
2
|
-
import { convertFromGenericAddress, convertToGenericAddress } from "../../../../common/utils/address.js";
|
|
3
|
+
import { convertFromGenericAddress, convertToGenericAddress, getRandomGenericAddress, } from "../../../../common/utils/address.js";
|
|
4
|
+
import { getRandomBytes } from "../../../../common/utils/bytes.js";
|
|
3
5
|
import { getWormholeData } from "../../../../common/utils/gmp.js";
|
|
4
6
|
import { GAS_LIMIT_ESTIMATE_INCREASE } from "../../common/constants/contract.js";
|
|
5
7
|
import { getEvmSignerAccount } from "../../common/utils/chain.js";
|
|
6
8
|
import { getWormholeRelayerContract } from "../../common/utils/contract.js";
|
|
9
|
+
import { buildMessageParams, buildSendTokenExtraArgsWhenAdding } from "../../common/utils/message.js";
|
|
7
10
|
import { getBridgeRouterSpokeContract } from "../utils/contract.js";
|
|
8
11
|
export const prepare = {
|
|
9
12
|
async retryMessage(provider, sender, adapterId, messageId, message, extraArgs, value, spokeChain, transactionOptions = {
|
|
@@ -111,4 +114,28 @@ export const write = {
|
|
|
111
114
|
});
|
|
112
115
|
},
|
|
113
116
|
};
|
|
117
|
+
export async function getSendMessageFee(provider, adapterId, receiverValue, gasLimit, hubChain, spokeChain, spokeTokenData) {
|
|
118
|
+
const bridgeRouter = getBridgeRouterSpokeContract(provider, spokeChain.bridgeRouterAddress);
|
|
119
|
+
// construct return message
|
|
120
|
+
const message = {
|
|
121
|
+
params: buildMessageParams({
|
|
122
|
+
adapters: {
|
|
123
|
+
adapterId,
|
|
124
|
+
returnAdapterId: 0,
|
|
125
|
+
},
|
|
126
|
+
gasLimit,
|
|
127
|
+
receiverValue,
|
|
128
|
+
}),
|
|
129
|
+
sender: spokeChain.spokeCommonAddress,
|
|
130
|
+
destinationChainId: hubChain.folksChainId,
|
|
131
|
+
handler: getRandomGenericAddress(),
|
|
132
|
+
payload: getRandomBytes(256),
|
|
133
|
+
finalityLevel: FINALITY.FINALISED,
|
|
134
|
+
extraArgs: spokeTokenData
|
|
135
|
+
? buildSendTokenExtraArgsWhenAdding(getRandomGenericAddress(), spokeTokenData.token, 1n)
|
|
136
|
+
: "0x",
|
|
137
|
+
};
|
|
138
|
+
// get return adapter fee
|
|
139
|
+
return await bridgeRouter.read.getSendFee([message]);
|
|
140
|
+
}
|
|
114
141
|
//# sourceMappingURL=folks-evm-gmp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folks-evm-gmp.js","sourceRoot":"","sources":["../../../../../src/chains/evm/spoke/modules/folks-evm-gmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"folks-evm-gmp.js","sourceRoot":"","sources":["../../../../../src/chains/evm/spoke/modules/folks-evm-gmp.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ export declare function doesAdapterSupportDataMessage(folksChainId: FolksChainId
|
|
|
5
5
|
export declare function assertAdapterSupportsDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): void;
|
|
6
6
|
export declare function doesAdapterSupportTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean;
|
|
7
7
|
export declare function assertAdapterSupportsTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): void;
|
|
8
|
+
export declare function doesAdapterSupportReceiverValue(folksChainId: FolksChainId, adapterId: AdapterType): boolean;
|
|
9
|
+
export declare function assertAdapterSupportsReceiverValue(folksChainId: FolksChainId, adapterId: AdapterType): void;
|
|
8
10
|
export declare function getSupportedMessageAdapters(params: MessageAdapterParams): {
|
|
9
11
|
adapterIds: readonly [AdapterType.WORMHOLE_CCTP, AdapterType.CCIP_TOKEN] | readonly [AdapterType.WORMHOLE_DATA, AdapterType.CCIP_DATA] | readonly [AdapterType.HUB];
|
|
10
12
|
returnAdapterIds: readonly [AdapterType.WORMHOLE_CCTP, AdapterType.CCIP_TOKEN] | readonly [AdapterType.WORMHOLE_DATA, AdapterType.CCIP_DATA] | readonly [AdapterType.HUB];
|
|
@@ -23,6 +23,15 @@ export function assertAdapterSupportsTokenMessage(folksChainId, adapterId) {
|
|
|
23
23
|
if (!doesAdapterSupportTokenMessage(folksChainId, adapterId))
|
|
24
24
|
throw Error(`Adapter ${adapterId} does not support token message for folksChainId: ${folksChainId}`);
|
|
25
25
|
}
|
|
26
|
+
export function doesAdapterSupportReceiverValue(folksChainId, adapterId) {
|
|
27
|
+
const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
|
|
28
|
+
return ((isHub && adapterId === AdapterType.HUB) ||
|
|
29
|
+
(!isHub && (adapterId === AdapterType.WORMHOLE_DATA || adapterId === AdapterType.WORMHOLE_CCTP)));
|
|
30
|
+
}
|
|
31
|
+
export function assertAdapterSupportsReceiverValue(folksChainId, adapterId) {
|
|
32
|
+
if (!doesAdapterSupportReceiverValue(folksChainId, adapterId))
|
|
33
|
+
throw Error(`Adapter ${adapterId} does not support receiver value for folksChainId: ${folksChainId}`);
|
|
34
|
+
}
|
|
26
35
|
function getAdapterIds(messageAdapterParams) {
|
|
27
36
|
const { sourceFolksChainId, network, messageAdapterParamType } = messageAdapterParams;
|
|
28
37
|
if (isHubChain(sourceFolksChainId, network))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/common/utils/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/common/utils/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,11 @@ import type { MessageReceived, RetryMessageExtraArgs, ReverseMessageExtraArgs }
|
|
|
2
2
|
import type { GenericAddress } from "../../common/types/address.js";
|
|
3
3
|
import type { FolksChainId } from "../../common/types/chain.js";
|
|
4
4
|
import type { MessageId } from "../../common/types/gmp.js";
|
|
5
|
-
import type { AdapterType } from "../../common/types/message.js";
|
|
5
|
+
import type { AdapterType, MessageAdapters } from "../../common/types/message.js";
|
|
6
6
|
import type { PrepareRetryMessageCall, PrepareReverseMessageCall, PrepareResendWormholeMessageCall } from "../../common/types/module.js";
|
|
7
|
+
import type { FolksTokenId } from "../../common/types/token.js";
|
|
7
8
|
export declare const prepare: {
|
|
8
|
-
retryMessage(adapterId: AdapterType, messageId: MessageId,
|
|
9
|
+
retryMessage(adapterId: AdapterType, messageId: MessageId, message: MessageReceived, extraArgs: RetryMessageExtraArgs | undefined, value: bigint, isHub?: boolean): Promise<import("../../chains/evm/common/types/module.js").PrepareRetryMessageCall>;
|
|
9
10
|
reverseMessage(adapterId: AdapterType, messageId: MessageId, message: MessageReceived, extraArgs: ReverseMessageExtraArgs | undefined, value: bigint, isHub?: boolean): Promise<import("../../chains/evm/common/types/module.js").PrepareRetryMessageCall>;
|
|
10
11
|
resendWormholeMessage(sourceFolksChainId: FolksChainId, emitterAddress: GenericAddress, sequence: bigint, targetFolksChainId: FolksChainId, receiverValue: bigint, receiverGasLimit: bigint): Promise<import("../../chains/evm/common/types/module.js").PrepareResendWormholeMessageCall>;
|
|
11
12
|
};
|
|
@@ -14,3 +15,8 @@ export declare const write: {
|
|
|
14
15
|
reverseMessage(adapterId: AdapterType, messageId: MessageId, prepareCall: PrepareReverseMessageCall): Promise<`0x${string}`>;
|
|
15
16
|
resendWormholeMessage(prepareCall: PrepareResendWormholeMessageCall): Promise<`0x${string}`>;
|
|
16
17
|
};
|
|
18
|
+
export declare const util: {
|
|
19
|
+
spokeToHubMessageFee(adapterId: AdapterType, fromFolksChainId: FolksChainId, sendFolksTokenId?: FolksTokenId, receiverValue?: bigint, gasLimit?: bigint): Promise<bigint>;
|
|
20
|
+
hubToSpokeMessageFee(adapterId: AdapterType, toFolksChainId: FolksChainId, receiveFolksTokenId: FolksTokenId, gasLimit?: bigint): Promise<bigint>;
|
|
21
|
+
roundTripMessageFee(adapters: MessageAdapters, startFolksChainId: FolksChainId, endFolksChainId: FolksChainId, receiveFolksTokenId: FolksTokenId, gasLimit?: bigint, returnGasLimit?: bigint): Promise<bigint>;
|
|
22
|
+
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { getEvmSignerAddress } from "../../chains/evm/common/utils/chain.js";
|
|
2
2
|
import { encodeRetryMessageExtraArgs, encodeReverseMessageExtraArgs } from "../../chains/evm/common/utils/gmp.js";
|
|
3
3
|
import { FolksHubGmp } from "../../chains/evm/hub/modules/index.js";
|
|
4
|
-
import { getHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
4
|
+
import { getHubChain, getHubTokenData } from "../../chains/evm/hub/utils/chain.js";
|
|
5
5
|
import { FolksEvmGmp } from "../../chains/evm/spoke/modules/index.js";
|
|
6
|
-
import {
|
|
6
|
+
import { assertAdapterSupportsDataMessage, assertAdapterSupportsReceiverValue, assertAdapterSupportsTokenMessage, } from "../../common/utils/adapter.js";
|
|
7
|
+
import { assertHubChainSelected, getSpokeChain, getSpokeTokenData } from "../../common/utils/chain.js";
|
|
8
|
+
import { isCircleToken } from "../../common/utils/token.js";
|
|
7
9
|
import { FolksCore } from "../core/folks-core.js";
|
|
8
10
|
export const prepare = {
|
|
9
|
-
async retryMessage(adapterId, messageId,
|
|
11
|
+
async retryMessage(adapterId, messageId, message, extraArgs, value, isHub = true) {
|
|
10
12
|
const folksChain = FolksCore.getSelectedFolksChain();
|
|
11
13
|
const encodedExtraArgs = encodeRetryMessageExtraArgs(extraArgs);
|
|
12
14
|
if (isHub) {
|
|
@@ -60,4 +62,35 @@ export const write = {
|
|
|
60
62
|
return await FolksEvmGmp.write.resendMessage(FolksCore.getHubProvider(), FolksCore.getSigner(), prepareCall);
|
|
61
63
|
},
|
|
62
64
|
};
|
|
65
|
+
export const util = {
|
|
66
|
+
async spokeToHubMessageFee(adapterId, fromFolksChainId, sendFolksTokenId, receiverValue = 0n, gasLimit = 1500000n) {
|
|
67
|
+
const network = FolksCore.getSelectedNetwork();
|
|
68
|
+
const spokeChain = getSpokeChain(fromFolksChainId, network);
|
|
69
|
+
const hubChain = getHubChain(network);
|
|
70
|
+
// check receiver value is support
|
|
71
|
+
if (receiverValue > 0n)
|
|
72
|
+
assertAdapterSupportsReceiverValue(fromFolksChainId, adapterId);
|
|
73
|
+
// check adapter id is supported
|
|
74
|
+
sendFolksTokenId && isCircleToken(sendFolksTokenId)
|
|
75
|
+
? assertAdapterSupportsTokenMessage(fromFolksChainId, adapterId)
|
|
76
|
+
: assertAdapterSupportsDataMessage(fromFolksChainId, adapterId);
|
|
77
|
+
const spokeTokenData = sendFolksTokenId ? getSpokeTokenData(spokeChain, sendFolksTokenId) : undefined;
|
|
78
|
+
return FolksEvmGmp.getSendMessageFee(FolksCore.getProvider(fromFolksChainId), adapterId, receiverValue, gasLimit, hubChain, spokeChain, spokeTokenData);
|
|
79
|
+
},
|
|
80
|
+
async hubToSpokeMessageFee(adapterId, toFolksChainId, receiveFolksTokenId, gasLimit = 500000n) {
|
|
81
|
+
const network = FolksCore.getSelectedNetwork();
|
|
82
|
+
const hubChain = getHubChain(network);
|
|
83
|
+
// check adapter id is supported
|
|
84
|
+
isCircleToken(receiveFolksTokenId)
|
|
85
|
+
? assertAdapterSupportsTokenMessage(toFolksChainId, adapterId)
|
|
86
|
+
: assertAdapterSupportsDataMessage(toFolksChainId, adapterId);
|
|
87
|
+
const hubTokenData = getHubTokenData(receiveFolksTokenId, network);
|
|
88
|
+
return await FolksHubGmp.getSendMessageFee(FolksCore.getHubProvider(), toFolksChainId, adapterId, gasLimit, hubChain, hubTokenData);
|
|
89
|
+
},
|
|
90
|
+
async roundTripMessageFee(adapters, startFolksChainId, endFolksChainId, receiveFolksTokenId, gasLimit = 1500000n, returnGasLimit = 500000n) {
|
|
91
|
+
const { adapterId, returnAdapterId } = adapters;
|
|
92
|
+
const receiverValue = await this.hubToSpokeMessageFee(returnAdapterId, endFolksChainId, receiveFolksTokenId, returnGasLimit);
|
|
93
|
+
return await this.spokeToHubMessageFee(adapterId, startFolksChainId, undefined, receiverValue, gasLimit);
|
|
94
|
+
},
|
|
95
|
+
};
|
|
63
96
|
//# sourceMappingURL=folks-gmp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folks-gmp.js","sourceRoot":"","sources":["../../../src/xchain/modules/folks-gmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"folks-gmp.js","sourceRoot":"","sources":["../../../src/xchain/modules/folks-gmp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
import { FINALITY } from "../../../../common/constants/message.js";
|
|
2
|
+
import { getRandomGenericAddress } from "../../../../common/utils/address.js";
|
|
3
|
+
import { getRandomBytes } from "../../../../common/utils/bytes.js";
|
|
1
4
|
import { GAS_LIMIT_ESTIMATE_INCREASE } from "../../common/constants/contract.js";
|
|
2
5
|
import { getEvmSignerAccount } from "../../common/utils/chain.js";
|
|
6
|
+
import { buildMessageParams, buildSendTokenExtraArgsWhenRemoving } from "../../common/utils/message.js";
|
|
3
7
|
import { getBridgeRouterHubContract } from "../utils/contract.js";
|
|
4
8
|
|
|
5
9
|
import type { EvmAddress } from "../../../../common/types/address.js";
|
|
10
|
+
import type { FolksChainId } from "../../../../common/types/chain.js";
|
|
6
11
|
import type { MessageId } from "../../../../common/types/gmp.js";
|
|
7
|
-
import type { AdapterType } from "../../../../common/types/message.js";
|
|
12
|
+
import type { AdapterType, MessageToSend } from "../../../../common/types/message.js";
|
|
8
13
|
import type { MessageReceived } from "../../common/types/gmp.js";
|
|
9
14
|
import type { PrepareRetryMessageCall, PrepareReverseMessageCall } from "../../common/types/module.js";
|
|
10
15
|
import type { HubChain } from "../types/chain.js";
|
|
16
|
+
import type { HubTokenData } from "../types/token.js";
|
|
11
17
|
import type { Client, EstimateGasParameters, Hex, WalletClient } from "viem";
|
|
12
18
|
|
|
13
19
|
export const prepare = {
|
|
@@ -88,7 +94,7 @@ export const write = {
|
|
|
88
94
|
account: getEvmSignerAccount(signer),
|
|
89
95
|
chain: signer.chain,
|
|
90
96
|
gas: gasLimit,
|
|
91
|
-
msgValue,
|
|
97
|
+
value: msgValue,
|
|
92
98
|
});
|
|
93
99
|
},
|
|
94
100
|
|
|
@@ -107,7 +113,38 @@ export const write = {
|
|
|
107
113
|
account: getEvmSignerAccount(signer),
|
|
108
114
|
chain: signer.chain,
|
|
109
115
|
gas: gasLimit,
|
|
110
|
-
msgValue,
|
|
116
|
+
value: msgValue,
|
|
111
117
|
});
|
|
112
118
|
},
|
|
113
119
|
};
|
|
120
|
+
|
|
121
|
+
export async function getSendMessageFee(
|
|
122
|
+
provider: Client,
|
|
123
|
+
toFolksChainId: FolksChainId,
|
|
124
|
+
adapterId: AdapterType,
|
|
125
|
+
gasLimit: bigint,
|
|
126
|
+
hubChain: HubChain,
|
|
127
|
+
hubTokenData: HubTokenData,
|
|
128
|
+
): Promise<bigint> {
|
|
129
|
+
const hubBridgeRouter = getBridgeRouterHubContract(provider, hubChain.bridgeRouterAddress);
|
|
130
|
+
|
|
131
|
+
// construct return message
|
|
132
|
+
const message: MessageToSend = {
|
|
133
|
+
params: buildMessageParams({
|
|
134
|
+
adapters: {
|
|
135
|
+
adapterId,
|
|
136
|
+
returnAdapterId: 0 as AdapterType,
|
|
137
|
+
},
|
|
138
|
+
gasLimit,
|
|
139
|
+
}),
|
|
140
|
+
sender: hubChain.hubAddress,
|
|
141
|
+
destinationChainId: toFolksChainId,
|
|
142
|
+
handler: getRandomGenericAddress(),
|
|
143
|
+
payload: getRandomBytes(256),
|
|
144
|
+
finalityLevel: FINALITY.FINALISED,
|
|
145
|
+
extraArgs: buildSendTokenExtraArgsWhenRemoving(getRandomGenericAddress(), hubTokenData.token, 1n),
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// get return adapter fee
|
|
149
|
+
return await hubBridgeRouter.read.getSendFee([message]);
|
|
150
|
+
}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
|
+
import { FINALITY } from "../../../../common/constants/message.js";
|
|
1
2
|
import { ChainType } from "../../../../common/types/chain.js";
|
|
2
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
convertFromGenericAddress,
|
|
5
|
+
convertToGenericAddress,
|
|
6
|
+
getRandomGenericAddress,
|
|
7
|
+
} from "../../../../common/utils/address.js";
|
|
8
|
+
import { getRandomBytes } from "../../../../common/utils/bytes.js";
|
|
3
9
|
import { getWormholeData } from "../../../../common/utils/gmp.js";
|
|
4
10
|
import { GAS_LIMIT_ESTIMATE_INCREASE } from "../../common/constants/contract.js";
|
|
5
11
|
import { getEvmSignerAccount } from "../../common/utils/chain.js";
|
|
6
12
|
import { getWormholeRelayerContract } from "../../common/utils/contract.js";
|
|
13
|
+
import { buildMessageParams, buildSendTokenExtraArgsWhenAdding } from "../../common/utils/message.js";
|
|
7
14
|
import { getBridgeRouterSpokeContract } from "../utils/contract.js";
|
|
8
15
|
|
|
9
16
|
import type { EvmAddress, GenericAddress } from "../../../../common/types/address.js";
|
|
10
17
|
import type { FolksChainId, SpokeChain } from "../../../../common/types/chain.js";
|
|
11
18
|
import type { MessageId } from "../../../../common/types/gmp.js";
|
|
12
|
-
import type { AdapterType } from "../../../../common/types/message.js";
|
|
19
|
+
import type { AdapterType, MessageToSend } from "../../../../common/types/message.js";
|
|
20
|
+
import type { SpokeTokenData } from "../../../../common/types/token.js";
|
|
13
21
|
import type { MessageReceived } from "../../common/types/gmp.js";
|
|
14
22
|
import type {
|
|
15
23
|
PrepareResendWormholeMessageCall,
|
|
16
24
|
PrepareRetryMessageCall,
|
|
17
25
|
PrepareReverseMessageCall,
|
|
18
26
|
} from "../../common/types/module.js";
|
|
27
|
+
import type { HubChain } from "../../hub/types/chain.js";
|
|
19
28
|
import type { Client, EstimateGasParameters, Hex, WalletClient } from "viem";
|
|
20
29
|
|
|
21
30
|
export const prepare = {
|
|
@@ -201,3 +210,38 @@ export const write = {
|
|
|
201
210
|
);
|
|
202
211
|
},
|
|
203
212
|
};
|
|
213
|
+
|
|
214
|
+
export async function getSendMessageFee(
|
|
215
|
+
provider: Client,
|
|
216
|
+
adapterId: AdapterType,
|
|
217
|
+
receiverValue: bigint,
|
|
218
|
+
gasLimit: bigint,
|
|
219
|
+
hubChain: HubChain,
|
|
220
|
+
spokeChain: SpokeChain,
|
|
221
|
+
spokeTokenData?: SpokeTokenData,
|
|
222
|
+
): Promise<bigint> {
|
|
223
|
+
const bridgeRouter = getBridgeRouterSpokeContract(provider, spokeChain.bridgeRouterAddress);
|
|
224
|
+
|
|
225
|
+
// construct return message
|
|
226
|
+
const message: MessageToSend = {
|
|
227
|
+
params: buildMessageParams({
|
|
228
|
+
adapters: {
|
|
229
|
+
adapterId,
|
|
230
|
+
returnAdapterId: 0 as AdapterType,
|
|
231
|
+
},
|
|
232
|
+
gasLimit,
|
|
233
|
+
receiverValue,
|
|
234
|
+
}),
|
|
235
|
+
sender: spokeChain.spokeCommonAddress,
|
|
236
|
+
destinationChainId: hubChain.folksChainId,
|
|
237
|
+
handler: getRandomGenericAddress(),
|
|
238
|
+
payload: getRandomBytes(256),
|
|
239
|
+
finalityLevel: FINALITY.FINALISED,
|
|
240
|
+
extraArgs: spokeTokenData
|
|
241
|
+
? buildSendTokenExtraArgsWhenAdding(getRandomGenericAddress(), spokeTokenData.token, 1n)
|
|
242
|
+
: "0x",
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
// get return adapter fee
|
|
246
|
+
return await bridgeRouter.read.getSendFee([message]);
|
|
247
|
+
}
|
|
@@ -36,6 +36,19 @@ export function assertAdapterSupportsTokenMessage(folksChainId: FolksChainId, ad
|
|
|
36
36
|
throw Error(`Adapter ${adapterId} does not support token message for folksChainId: ${folksChainId}`);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
export function doesAdapterSupportReceiverValue(folksChainId: FolksChainId, adapterId: AdapterType): boolean {
|
|
40
|
+
const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
|
|
41
|
+
return (
|
|
42
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
43
|
+
(!isHub && (adapterId === AdapterType.WORMHOLE_DATA || adapterId === AdapterType.WORMHOLE_CCTP))
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function assertAdapterSupportsReceiverValue(folksChainId: FolksChainId, adapterId: AdapterType): void {
|
|
48
|
+
if (!doesAdapterSupportReceiverValue(folksChainId, adapterId))
|
|
49
|
+
throw Error(`Adapter ${adapterId} does not support receiver value for folksChainId: ${folksChainId}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
39
52
|
function getAdapterIds(messageAdapterParams: MessageAdapterParams) {
|
|
40
53
|
const { sourceFolksChainId, network, messageAdapterParamType } = messageAdapterParams;
|
|
41
54
|
if (isHubChain(sourceFolksChainId, network)) return HUB_ADAPTERS;
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { getEvmSignerAddress } from "../../chains/evm/common/utils/chain.js";
|
|
2
2
|
import { encodeRetryMessageExtraArgs, encodeReverseMessageExtraArgs } from "../../chains/evm/common/utils/gmp.js";
|
|
3
3
|
import { FolksHubGmp } from "../../chains/evm/hub/modules/index.js";
|
|
4
|
-
import { getHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
4
|
+
import { getHubChain, getHubTokenData } from "../../chains/evm/hub/utils/chain.js";
|
|
5
5
|
import { FolksEvmGmp } from "../../chains/evm/spoke/modules/index.js";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
assertAdapterSupportsDataMessage,
|
|
8
|
+
assertAdapterSupportsReceiverValue,
|
|
9
|
+
assertAdapterSupportsTokenMessage,
|
|
10
|
+
} from "../../common/utils/adapter.js";
|
|
11
|
+
import { assertHubChainSelected, getSpokeChain, getSpokeTokenData } from "../../common/utils/chain.js";
|
|
12
|
+
import { isCircleToken } from "../../common/utils/token.js";
|
|
7
13
|
import { FolksCore } from "../core/folks-core.js";
|
|
8
14
|
|
|
9
15
|
import type {
|
|
@@ -14,20 +20,21 @@ import type {
|
|
|
14
20
|
import type { GenericAddress } from "../../common/types/address.js";
|
|
15
21
|
import type { ChainType, FolksChainId } from "../../common/types/chain.js";
|
|
16
22
|
import type { MessageId } from "../../common/types/gmp.js";
|
|
17
|
-
import type { AdapterType } from "../../common/types/message.js";
|
|
23
|
+
import type { AdapterType, MessageAdapters } from "../../common/types/message.js";
|
|
18
24
|
import type {
|
|
19
25
|
PrepareRetryMessageCall,
|
|
20
26
|
PrepareReverseMessageCall,
|
|
21
27
|
PrepareResendWormholeMessageCall,
|
|
22
28
|
} from "../../common/types/module.js";
|
|
29
|
+
import type { FolksTokenId } from "../../common/types/token.js";
|
|
23
30
|
|
|
24
31
|
export const prepare = {
|
|
25
32
|
async retryMessage(
|
|
26
33
|
adapterId: AdapterType,
|
|
27
34
|
messageId: MessageId,
|
|
28
|
-
value: bigint,
|
|
29
35
|
message: MessageReceived,
|
|
30
36
|
extraArgs: RetryMessageExtraArgs | undefined,
|
|
37
|
+
value: bigint,
|
|
31
38
|
isHub = true,
|
|
32
39
|
) {
|
|
33
40
|
const folksChain = FolksCore.getSelectedFolksChain();
|
|
@@ -176,3 +183,80 @@ export const write = {
|
|
|
176
183
|
);
|
|
177
184
|
},
|
|
178
185
|
};
|
|
186
|
+
|
|
187
|
+
export const util = {
|
|
188
|
+
async spokeToHubMessageFee(
|
|
189
|
+
adapterId: AdapterType,
|
|
190
|
+
fromFolksChainId: FolksChainId,
|
|
191
|
+
sendFolksTokenId?: FolksTokenId,
|
|
192
|
+
receiverValue = 0n,
|
|
193
|
+
gasLimit = 1_500_000n,
|
|
194
|
+
): Promise<bigint> {
|
|
195
|
+
const network = FolksCore.getSelectedNetwork();
|
|
196
|
+
const spokeChain = getSpokeChain(fromFolksChainId, network);
|
|
197
|
+
const hubChain = getHubChain(network);
|
|
198
|
+
|
|
199
|
+
// check receiver value is support
|
|
200
|
+
if (receiverValue > 0n) assertAdapterSupportsReceiverValue(fromFolksChainId, adapterId);
|
|
201
|
+
|
|
202
|
+
// check adapter id is supported
|
|
203
|
+
sendFolksTokenId && isCircleToken(sendFolksTokenId)
|
|
204
|
+
? assertAdapterSupportsTokenMessage(fromFolksChainId, adapterId)
|
|
205
|
+
: assertAdapterSupportsDataMessage(fromFolksChainId, adapterId);
|
|
206
|
+
const spokeTokenData = sendFolksTokenId ? getSpokeTokenData(spokeChain, sendFolksTokenId) : undefined;
|
|
207
|
+
|
|
208
|
+
return FolksEvmGmp.getSendMessageFee(
|
|
209
|
+
FolksCore.getProvider<ChainType.EVM>(fromFolksChainId),
|
|
210
|
+
adapterId,
|
|
211
|
+
receiverValue,
|
|
212
|
+
gasLimit,
|
|
213
|
+
hubChain,
|
|
214
|
+
spokeChain,
|
|
215
|
+
spokeTokenData,
|
|
216
|
+
);
|
|
217
|
+
},
|
|
218
|
+
|
|
219
|
+
async hubToSpokeMessageFee(
|
|
220
|
+
adapterId: AdapterType,
|
|
221
|
+
toFolksChainId: FolksChainId,
|
|
222
|
+
receiveFolksTokenId: FolksTokenId,
|
|
223
|
+
gasLimit = 500_000n,
|
|
224
|
+
): Promise<bigint> {
|
|
225
|
+
const network = FolksCore.getSelectedNetwork();
|
|
226
|
+
const hubChain = getHubChain(network);
|
|
227
|
+
|
|
228
|
+
// check adapter id is supported
|
|
229
|
+
isCircleToken(receiveFolksTokenId)
|
|
230
|
+
? assertAdapterSupportsTokenMessage(toFolksChainId, adapterId)
|
|
231
|
+
: assertAdapterSupportsDataMessage(toFolksChainId, adapterId);
|
|
232
|
+
|
|
233
|
+
const hubTokenData = getHubTokenData(receiveFolksTokenId, network);
|
|
234
|
+
|
|
235
|
+
return await FolksHubGmp.getSendMessageFee(
|
|
236
|
+
FolksCore.getHubProvider(),
|
|
237
|
+
toFolksChainId,
|
|
238
|
+
adapterId,
|
|
239
|
+
gasLimit,
|
|
240
|
+
hubChain,
|
|
241
|
+
hubTokenData,
|
|
242
|
+
);
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
async roundTripMessageFee(
|
|
246
|
+
adapters: MessageAdapters,
|
|
247
|
+
startFolksChainId: FolksChainId,
|
|
248
|
+
endFolksChainId: FolksChainId,
|
|
249
|
+
receiveFolksTokenId: FolksTokenId,
|
|
250
|
+
gasLimit = 1_500_000n,
|
|
251
|
+
returnGasLimit = 500_000n,
|
|
252
|
+
): Promise<bigint> {
|
|
253
|
+
const { adapterId, returnAdapterId } = adapters;
|
|
254
|
+
const receiverValue = await this.hubToSpokeMessageFee(
|
|
255
|
+
returnAdapterId,
|
|
256
|
+
endFolksChainId,
|
|
257
|
+
receiveFolksTokenId,
|
|
258
|
+
returnGasLimit,
|
|
259
|
+
);
|
|
260
|
+
return await this.spokeToHubMessageFee(adapterId, startFolksChainId, undefined, receiverValue, gasLimit);
|
|
261
|
+
},
|
|
262
|
+
};
|