git.delta.rocks / unique-network / refs/commits / b3ebe07cdd5d

difftreelog

Karura

str-mv2022-01-17parent: #de5ac2f.patch.diff
in: master

3 files changed

modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -333,3 +333,35 @@
 */
 
 ```
+
+
+## Karura token transfer
+
+To get started, you need to open the hrmr channel.
+Next, we need to register our asset in Karura.
+
+assetRegistry -> registerForeignAsset(location, metadata)
+location:
+	V0(X2(Parent, Parachain(PARA_ID))) 
+metadata:
+	name         OPL
+	symbol       OPL
+	decimals     15
+minimalBalance	 1
+
+Next, we can send tokens of our chain:
+polkadotXcm -> reserveTransferAssets
+dest:
+	V0(X2(Parent, Parachain(KARURA_PARA_ID))) 
+beneficiary:
+	X1(AccountId(Any, ACCOUNT))
+assets:
+	V1(Concrete(0,Here), Fungible(AMOUNT))
+feeAssetItem: 
+	0	
+weightLimit:
+	Limit
+	
+
+The result will be displayed in ChainState   
+tokens -> accounts	
modifiedlaunch-config.jsondiffbeforeafterboth
before · launch-config.json
1{2    "relaychain": {3        "bin": "../polkadot/target/release/polkadot",4        "chain": "rococo-local",5        "nodes": [6            {7                "name": "alice",8                "wsPort": 9844,9                "rpcPort": 9843,10                "port": 30444,11                "flags": [12                    "-lparachain::candidate_validation=debug"13                ]14            },15            {16                "name": "bob",17                "wsPort": 9855,18                "rpcPort": 9854,19                "port": 30555,20                "flags": [21                    "-lparachain::candidate_validation=debug"22                ]23            },24            {25                "name": "charlie",26                "wsPort": 9866,27                "rpcPort": 9865,28                "port": 30666,29                "flags": [30                    "-lparachain::candidate_validation=debug"31                ]32            },33            {34                "name": "dave",35                "wsPort": 9877,36                "rpcPort": 9876,37                "port": 30777,38                "flags": [39                    "-lparachain::candidate_validation=debug"40                ]41            }42        ],43        "genesis": {44            "runtime": {45                "runtime_genesis_config": {46                    "parachainsConfiguration": {47                        "config": {48                            "validation_upgrade_frequency": 1,49                            "validation_upgrade_delay": 150                        }51                    }52                }53            }54        }55    },56    "parachains": [57        {58            "bin": "../unique-chain/target/release/unique-collator",59            "id": "1000",60            "balance": "1000000000000000000000000",61            "nodes": [62                {63                    "port": 31200,64                    "wsPort": 9944,65                    "rpcPort": 9933,66                    "name": "alice",67                    "flags": [68                        "--rpc-cors=all",69                        "--unsafe-rpc-external",70                        "--unsafe-ws-external"71                    ]72                },73                {74                    "port": 31201,75                    "wsPort": 9945,76                    "rpcPort": 9934,77                    "name": "bob",78                    "flags": [79                        "--rpc-cors=all",80                        "--unsafe-rpc-external",81                        "--unsafe-ws-external"82                    ]83                }84            ]85        }86    ],87    "simpleParachains": [],88    "hrmpChannels": [],89    "finalization": false90}
after · launch-config.json
1{2    "relaychain": {3        "bin": "../polkadot/target/release/polkadot",4        "chain": "rococo-local",5        "nodes": [6            {7                "name": "alice",8                "wsPort": 9844,9                "rpcPort": 9843,10                "port": 30444,11                "flags": [12                    "-lparachain::candidate_validation=debug",13                    "-lxcm=trace"14                ]15            },16            {17                "name": "bob",18                "wsPort": 9855,19                "rpcPort": 9854,20                "port": 30555,21                "flags": [22                    "-lparachain::candidate_validation=debug",23                    "-lxcm=trace"24                ]25            },26            {27                "name": "charlie",28                "wsPort": 9866,29                "rpcPort": 9865,30                "port": 30666,31                "flags": [32                    "-lparachain::candidate_validation=debug"33                ]34            },35            {36                "name": "dave",37                "wsPort": 9877,38                "rpcPort": 9876,39                "port": 30777,40                "flags": [41                    "-lparachain::candidate_validation=debug"42                ]43            }44        ],45        "genesis": {46            "runtime": {47                "runtime_genesis_config": {48                    "parachainsConfiguration": {49                        "config": {50                            "validation_upgrade_frequency": 1,51                            "validation_upgrade_delay": 152                        }53                    }54                }55            }56        }57    },58    "parachains": [59        {60            "bin": "../unique-chain/target/release/unique-collator",61            "id": "1000",62            "balance": "1000000000000000000000000",63            "nodes": [64                {65                    "port": 31200,66                    "wsPort": 9944,67                    "rpcPort": 9933,68                    "name": "alice",69                    "flags": [70                        "--rpc-cors=all",71                        "--unsafe-rpc-external",72                        "--unsafe-ws-external",73                        "-lxcm=trace"74                    ]75                },76                {77                    "port": 31201,78                    "wsPort": 9945,79                    "rpcPort": 9934,80                    "name": "bob",81                    "flags": [82                        "--rpc-cors=all",83                        "--unsafe-rpc-external",84                        "--unsafe-ws-external",85                        "-lxcm=trace"86                    ]87                }88            ]89        },90        {91            "bin": "../Acala/target/release/acala",92            "id": "2000",93            "chain":  "karura-dev",94			"balance": "1000000000000000000000",95			"nodes": [96				{97					"wsPort": 9988,98					"port": 31200,99					"name": "alice",100                    "flags": [101                        "--rpc-cors=all",102                        "--unsafe-rpc-external",103                        "--unsafe-ws-external",104                        "-lxcm=trace"105                    ]106				}107			]108		}109    ],110    "simpleParachains": [],111    "hrmpChannels": [112        {113            "sender": 2000,114            "recipient": 1000,115            "maxCapacity": 8,116            "maxMessageSize": 512117        },118        {119            "sender": 1000,120            "recipient": 2000,121            "maxCapacity": 8,122            "maxMessageSize": 512123        }124    ],125    "finalization": false126}
modifiedruntime/src/lib.rsdiffbeforeafterboth
--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -82,13 +82,22 @@
 use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};
 use xcm_builder::{
 	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,
-	EnsureXcmOrigin, FixedWeightBounds, IsConcrete, LocationInverter, NativeAsset,
+	EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset,
 	ParentAsSuperuser, ParentIsDefault, RelayChainAsNative, SiblingParachainAsNative,
 	SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32,
 	SovereignSignedViaLocation, TakeWeightCredit, UsingComponents,
 };
 use xcm_executor::{Config, XcmExecutor};
 
+use xcm::latest::{
+//	Xcm, 	
+	AssetId::{Concrete},
+	Fungibility::Fungible as XcmFungible,
+	MultiAsset
+};
+use xcm_executor::traits::MatchesFungible;
+use sp_runtime::traits::CheckedConversion;
+
 // mod chain_extension;
 // use crate::chain_extension::{NFTExtension, Imbalance};
 
@@ -616,12 +625,24 @@
 	AccountId32Aliases<RelayNetwork, AccountId>,
 );
 
+
+pub struct OnlySelfCurrency;
+impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {
+	fn matches_fungible(a: &MultiAsset) -> Option<B> {
+		match (&a.id, &a.fun) {
+			(Concrete(_), XcmFungible(ref amount)) =>
+				CheckedConversion::checked_from(*amount),
+			_ => None,
+		}
+	}
+}
+
 /// Means for transacting assets on this chain.
 pub type LocalAssetTransactor = CurrencyAdapter<
 	// Use this currency:
 	Balances,
 	// Use this currency when it is a fungible asset matching the given location or name:
-	IsConcrete<RelayLocation>,
+	OnlySelfCurrency,
 	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:
 	LocationToAccountId,
 	// Our chain's account ID type (we can't get away without mentioning it explicitly):