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
9 "rpcPort": 9843,9 "rpcPort": 9843,
10 "port": 30444,10 "port": 30444,
11 "flags": [11 "flags": [
12 "-lparachain::candidate_validation=debug"12 "-lparachain::candidate_validation=debug",
13 "-lxcm=trace"
13 ]14 ]
14 },15 },
15 {16 {
18 "rpcPort": 9854,19 "rpcPort": 9854,
19 "port": 30555,20 "port": 30555,
20 "flags": [21 "flags": [
21 "-lparachain::candidate_validation=debug"22 "-lparachain::candidate_validation=debug",
23 "-lxcm=trace"
22 ]24 ]
23 },25 },
24 {26 {
67 "flags": [69 "flags": [
68 "--rpc-cors=all",70 "--rpc-cors=all",
69 "--unsafe-rpc-external",71 "--unsafe-rpc-external",
70 "--unsafe-ws-external"72 "--unsafe-ws-external",
73 "-lxcm=trace"
71 ]74 ]
72 },75 },
73 {76 {
78 "flags": [81 "flags": [
79 "--rpc-cors=all",82 "--rpc-cors=all",
80 "--unsafe-rpc-external",83 "--unsafe-rpc-external",
81 "--unsafe-ws-external"84 "--unsafe-ws-external",
85 "-lxcm=trace"
82 ]86 ]
83 }87 }
84 ]88 ]
85 }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 }
86 ],109 ],
87 "simpleParachains": [],110 "simpleParachains": [],
88 "hrmpChannels": [],111 "hrmpChannels": [
112 {
113 "sender": 2000,
114 "recipient": 1000,
115 "maxCapacity": 8,
116 "maxMessageSize": 512
117 },
118 {
119 "sender": 1000,
120 "recipient": 2000,
121 "maxCapacity": 8,
122 "maxMessageSize": 512
123 }
124 ],
89 "finalization": false125 "finalization": false
90}126}
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):