Skip to content

Commit 7e356c4

Browse files
authored
Add Kusama and Kusama Asset Hub max xcm delivery fees (#198)
* add manually max Xcm Delivery fees for Kusama and Kusama Asset Hub * add changeset
1 parent ce63c3e commit 7e356c4

File tree

5 files changed

+37
-2
lines changed

5 files changed

+37
-2
lines changed

.changeset/eight-parrots-cheer.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@moonbeam-network/xcm-config': patch
3+
'@moonbeam-network/xcm-sdk': patch
4+
---
5+
6+
Xcm Delivery fees for Kusama and Kusama Asset Hub

packages/config/src/configs/kusama.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ export const kusamaConfig = new ChainConfig({
2323
.xcmPallet()
2424
.limitedReserveTransferAssets(0)
2525
.here(),
26+
fee: {
27+
asset: ksm,
28+
balance: BalanceBuilder().substrate().system().account(),
29+
xcmDeliveryFeeAmount: 0.0015,
30+
},
2631
}),
2732
],
2833
chain: kusama,

packages/config/src/configs/kusamaAssetHub.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export const kusamaAssetHubConfig = new ChainConfig({
2727
fee: {
2828
asset: ksm,
2929
balance: BalanceBuilder().substrate().system().account(),
30+
xcmDeliveryFeeAmount: 0.00115,
3031
},
3132
min: AssetMinBuilder().assets().asset(),
3233
}),
@@ -46,6 +47,7 @@ export const kusamaAssetHubConfig = new ChainConfig({
4647
fee: {
4748
asset: ksm,
4849
balance: BalanceBuilder().substrate().system().account(),
50+
xcmDeliveryFeeAmount: 0.00115,
4951
},
5052
min: AssetMinBuilder().assets().asset(),
5153
}),

packages/config/src/types/AssetConfig.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export interface DestinationFeeConfig extends FeeAssetConfig {
2525
export interface FeeAssetConfig {
2626
asset: Asset;
2727
balance: BalanceConfigBuilder;
28+
xcmDeliveryFeeAmount?: number;
2829
}
2930

3031
export class AssetConfig {

packages/sdk/src/getTransferData/getSourceData.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
} from '@moonbeam-network/xcm-builder';
77
import { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';
88
import { AssetAmount } from '@moonbeam-network/xcm-types';
9-
import { convertDecimals } from '@moonbeam-network/xcm-utils';
9+
import { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';
1010
import Big from 'big.js';
1111
import { TransferContractInterface, createContract } from '../contract';
1212
import { PolkadotService } from '../polkadot';
@@ -121,6 +121,7 @@ export async function getSourceData({
121121
decimals: zeroFeeAmount.decimals,
122122
evmSigner,
123123
extrinsic,
124+
feeConfig: config.fee,
124125
polkadot,
125126
sourceAddress,
126127
});
@@ -181,6 +182,7 @@ export interface GetFeeParams {
181182
decimals: number;
182183
evmSigner?: EvmSigner;
183184
extrinsic?: ExtrinsicConfig;
185+
feeConfig?: FeeAssetConfig;
184186
polkadot: PolkadotService;
185187
sourceAddress: string;
186188
}
@@ -191,6 +193,7 @@ export async function getFee({
191193
decimals,
192194
evmSigner,
193195
extrinsic,
196+
feeConfig,
194197
polkadot,
195198
sourceAddress,
196199
}: GetFeeParams): Promise<bigint> {
@@ -203,7 +206,16 @@ export async function getFee({
203206
}
204207

205208
if (extrinsic) {
206-
return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);
209+
const extrinsicFee = await getExtrinsicFee(
210+
balance,
211+
extrinsic,
212+
polkadot,
213+
sourceAddress,
214+
);
215+
216+
const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);
217+
218+
return extrinsicFee + xcmDeliveryFee;
207219
}
208220

209221
throw new Error('Either contract or extrinsic must be provided');
@@ -246,6 +258,15 @@ export async function getExtrinsicFee(
246258
}
247259
}
248260

261+
function getXcmDeliveryFee(
262+
decimals: number,
263+
feeConfig?: FeeAssetConfig,
264+
): bigint {
265+
return feeConfig?.xcmDeliveryFeeAmount
266+
? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)
267+
: 0n;
268+
}
269+
249270
export interface GetMaxParams {
250271
balanceAmount: AssetAmount;
251272
existentialDeposit: AssetAmount;

0 commit comments

Comments
 (0)