difftreelog
Karura
in: master
3 files changed
README.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
launch-config.jsondiffbeforeafterboth1{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}runtime/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):