1
- import { Accounts , Chains , ParaId } from '@/types' ;
1
+ import {
2
+ Accounts ,
3
+ Chains ,
4
+ type CreateAssetsParams ,
5
+ ParaId ,
6
+ type TransferDataParams ,
7
+ } from '@/types' ;
2
8
import {
3
9
XcmV3Instruction ,
4
10
XcmV3Junction ,
@@ -51,7 +57,12 @@ const custom_xcm_on_dest = (): XcmVersionedXcm => {
51
57
] ) ;
52
58
} ;
53
59
54
- const createHubAssets = ( amount : bigint , assetIndex ?: bigint ) : XcmVersionedAssets =>
60
+ // TODO: Modify this function to allow the creation of an XcmVersionedAssets that supports also WETH/bridged assets.
61
+ const createHubAssets = ( {
62
+ amount,
63
+ assetIndex,
64
+ isFromBridge,
65
+ } : CreateAssetsParams ) : XcmVersionedAssets =>
55
66
XcmVersionedAssets . V3 ( [
56
67
{
57
68
fun : XcmV3MultiassetFungibility . Fungible ( amount ) ,
@@ -67,7 +78,7 @@ const createHubAssets = (amount: bigint, assetIndex?: bigint): XcmVersionedAsset
67
78
} ,
68
79
] ) ;
69
80
70
- const createDotAssets = ( amount : bigint ) : XcmVersionedAssets =>
81
+ const createDotAssets = ( { amount } : CreateAssetsParams ) : XcmVersionedAssets =>
71
82
XcmVersionedAssets . V3 ( [
72
83
{
73
84
fun : XcmV3MultiassetFungibility . Fungible ( amount ) ,
@@ -78,8 +89,11 @@ const createDotAssets = (amount: bigint): XcmVersionedAssets =>
78
89
} ,
79
90
] ) ;
80
91
81
- const createPolimecAssets = ( amount : bigint , assetIndex = 1984n ) : XcmVersionedAssets =>
82
- XcmVersionedAssets . V3 ( [
92
+ const createPolimecAssets = ( { amount, assetIndex } : CreateAssetsParams ) : XcmVersionedAssets => {
93
+ if ( ! assetIndex ) {
94
+ throw new Error ( 'You need to specify an Asset ID while creating an asset for Polimec' ) ;
95
+ }
96
+ return XcmVersionedAssets . V3 ( [
83
97
{
84
98
id : XcmV3MultiassetAssetId . Concrete ( {
85
99
parents : 1 ,
@@ -95,14 +109,7 @@ const createPolimecAssets = (amount: bigint, assetIndex = 1984n): XcmVersionedAs
95
109
fun : XcmV3MultiassetFungibility . Fungible ( amount ) ,
96
110
} ,
97
111
] ) ;
98
-
99
- interface TransferDataParams {
100
- amount : bigint ;
101
- toChain : Chains ;
102
- assetIndex ?: bigint ;
103
- recv ?: Accounts ;
104
- isMultiHop ?: boolean ;
105
- }
112
+ } ;
106
113
107
114
export const createTransferData = ( { amount, toChain, assetIndex, recv } : TransferDataParams ) => {
108
115
if ( toChain === Chains . Polkadot ) {
@@ -128,24 +135,22 @@ export const createTransferData = ({ amount, toChain, assetIndex, recv }: Transf
128
135
beneficiary,
129
136
assets :
130
137
toChain === Chains . PolkadotHub
131
- ? createPolimecAssets ( amount , assetIndex )
132
- : createHubAssets ( amount , assetIndex ) ,
138
+ ? createPolimecAssets ( { amount, assetIndex } )
139
+ : createHubAssets ( { amount, assetIndex } ) ,
133
140
fee_asset_item : 0 ,
134
141
weight_limit : XcmV3WeightLimit . Unlimited ( ) ,
135
142
} ;
136
143
} ;
137
144
138
- export const createMultiHopTransferData = ( { amount, toChain } : TransferDataParams ) => {
139
- if ( toChain === Chains . Polkadot ) {
140
- throw new Error ( 'The Multi Hop destination cannot be Polkadot' ) ;
141
- }
145
+ export const createMultiHopTransferData = ( { amount } : TransferDataParams ) => {
142
146
const dest = XcmVersionedLocation . V3 ( {
143
147
parents : 0 ,
144
148
interior : XcmV3Junctions . X1 ( XcmV3Junction . Parachain ( ParaId [ Chains . PolkadotHub ] ) ) ,
145
149
} ) ;
150
+
146
151
return {
147
152
dest,
148
- assets : createDotAssets ( amount ) ,
153
+ assets : createDotAssets ( { amount } ) ,
149
154
assets_transfer_type : Enum ( 'Teleport' ) ,
150
155
remote_fees_id : XcmVersionedAssetId . V3 (
151
156
XcmV3MultiassetAssetId . Concrete ( {
0 commit comments