Skip to content

Commit 643c08d

Browse files
authored
add: ETCM-12253 bridge pallet, IDP and data source API (#963)
1 parent ea6e658 commit 643c08d

File tree

19 files changed

+1111
-0
lines changed

19 files changed

+1111
-0
lines changed

Cargo.lock

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ members = [
5757
"toolkit/governed-map/primitives",
5858
"toolkit/governed-map/pallet",
5959
"toolkit/committee-selection/selection-simulator",
60+
"toolkit/bridge/pallet",
61+
"toolkit/bridge/primitives",
6062
]
6163
resolver = "2"
6264

@@ -330,5 +332,9 @@ partner-chains-mock-data-sources = { path = "toolkit/data-sources/mock", default
330332
sp-governed-map = { path = "toolkit/governed-map/primitives", default-features = false }
331333
pallet-governed-map = { path = "toolkit/governed-map/pallet", default-features = false }
332334

335+
# Bridge
336+
sp-partner-chains-bridge = { path = "toolkit/bridge/primitives", default-features = false }
337+
pallet-partner-chains-bridge = { path = "toolkit/bridge/pallet", default-features = false }
338+
333339
# demo node
334340
partner-chains-demo-runtime = { path = "demo/runtime" }

changelog.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ In SCALE encoding of inherent data custom implementations of `Encode` and `Decod
4646

4747
`getAriadneParameters` and `getRegistrations` RPC results format has changed, `auraPubKey` and `grandpaPubKey` are replaced by `"keys": {"aura": "...", "gran": "..."}`.
4848

49+
### Unidirectional Token Bridge (Work-in-progress)
50+
51+
A set of modules implementing observability layer, runtime pallet and offchain commands for a trustless token bridge moving tokens from Cardano to the Partner Chain.
52+
53+
This bridge feature works by monitoring an *illiquid supply validator address* on Cardano for new UTXOs. These UTXOs are interpreted as being either user-initiated
54+
transfers sent to a specified address on the Partner Chain, or reserve transfers made as part of the chain's operations for the purposes of distributing them as
55+
block producer rewards on-chain. Handling of the transfers is left to the chain builders themselves to implement according to their business needs and ledger structure.
56+
4957
### Other additions
5058

5159
* `delete_metadata` extrinsic in `pallet-block-producer-metadata`

demo/node/src/chain_spec.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ pub fn pc_create_chain_spec(config: &CreateChainSpecConfig<SessionKeys>) -> serd
5656
participation_data_release_period: 30,
5757
..Default::default()
5858
},
59+
bridge: Default::default(),
5960
};
6061
let genesis_json = serde_json::to_value(runtime_genesis_config)
6162
.expect("Genesis config must be serialized correctly");

demo/node/src/staging.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ pub fn staging_genesis(
161161
participation_data_release_period: 30,
162162
..Default::default()
163163
},
164+
bridge: Default::default(),
164165
};
165166

166167
Ok(serde_json::to_value(config).expect("Genesis config must be serialized correctly"))

demo/node/src/template_chain_spec.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ pub fn chain_spec() -> Result<ChainSpec, envy::Error> {
5151
participation_data_release_period: 30,
5252
..Default::default()
5353
},
54+
bridge: Default::default(),
5455
};
5556
let genesis_json = serde_json::to_value(runtime_genesis_config)
5657
.expect("Genesis config must be serialized correctly");

demo/node/src/testnet.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ pub fn testnet_genesis(
213213
participation_data_release_period: 30,
214214
..Default::default()
215215
},
216+
bridge: Default::default(),
216217
};
217218

218219
Ok(serde_json::to_value(config).expect("Genesis config must be serialized correctly"))

demo/runtime/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ pallet-governed-map = { workspace = true }
9393
sp-governed-map = { workspace = true }
9494
sp-block-producer-fees = { workspace = true }
9595
pallet-block-producer-fees = { workspace = true }
96+
pallet-partner-chains-bridge = { workspace = true }
97+
sp-partner-chains-bridge = { workspace = true }
9698

9799
[dev-dependencies]
98100
sp-io = { workspace = true }
@@ -172,6 +174,8 @@ std = [
172174
"sp-block-participation/std",
173175
"pallet-governed-map/std",
174176
"sp-governed-map/std",
177+
"pallet-partner-chains-bridge/std",
178+
"sp-partner-chains-bridge/std",
175179
]
176180

177181
runtime-benchmarks = [
@@ -191,6 +195,7 @@ runtime-benchmarks = [
191195
"pallet-block-producer-metadata/runtime-benchmarks",
192196
"pallet-block-participation/runtime-benchmarks",
193197
"pallet-governed-map/runtime-benchmarks",
198+
"pallet-partner-chains-bridge/runtime-benchmarks",
194199
]
195200
try-runtime = [
196201
"frame-try-runtime/try-runtime",

demo/runtime/src/genesis_config_presets.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ fn testnet_genesis(
6565
main_chain_scripts: Some(sp_governed_map::MainChainScriptsV1::default()),
6666
..Default::default()
6767
},
68+
bridge: Default::default(),
6869
};
6970

7071
serde_json::to_value(config).expect("Could not build genesis config.")

demo/runtime/src/lib.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ use sp_core::ByteArray;
4646
use sp_core::{OpaqueMetadata, crypto::KeyTypeId};
4747
use sp_governed_map::MainChainScriptsV1;
4848
use sp_inherents::InherentIdentifier;
49+
use sp_partner_chains_bridge::{BridgeDataCheckpoint, MainChainScripts as BridgeMainChainScripts};
4950
use sp_runtime::{
5051
ApplyExtrinsicResult, MultiSignature, Perbill, generic, impl_opaque_keys,
5152
traits::{
@@ -674,6 +675,20 @@ impl pallet_governed_map::Config for Runtime {
674675

675676
impl crate::test_helper_pallet::Config for Runtime {}
676677

678+
parameter_types! {
679+
pub const MaxTransfersPerBlock: u32 = 256;}
680+
681+
impl pallet_partner_chains_bridge::Config for Runtime {
682+
type GovernanceOrigin = EnsureRoot<Runtime>;
683+
type Recipient = AccountId;
684+
type TransferHandler = TestHelperPallet;
685+
type MaxTransfersPerBlock = MaxTransfersPerBlock;
686+
type WeightInfo = ();
687+
688+
#[cfg(feature = "runtime-benchmarks")]
689+
type BenchmarkHelper = ();
690+
}
691+
677692
// Create the runtime by composing the FRAME pallets that were previously configured.
678693
construct_runtime!(
679694
pub struct Runtime {
@@ -702,6 +717,7 @@ construct_runtime!(
702717
Session: pallet_partner_chains_session,
703718
NativeTokenManagement: pallet_native_token_management,
704719
GovernedMap: pallet_governed_map,
720+
Bridge: pallet_partner_chains_bridge,
705721
TestHelperPallet: crate::test_helper_pallet,
706722
}
707723
);
@@ -758,6 +774,7 @@ mod benches {
758774
[pallet_block_producer_metadata, BlockProducerMetadata]
759775
[pallet_block_participation, BlockParticipation]
760776
[pallet_governed_map, GovernedMap]
777+
[pallet_partner_chains_bridge, Bridge]
761778
);
762779
}
763780

@@ -1129,6 +1146,21 @@ impl_runtime_apis! {
11291146
GovernedMap::get_version()
11301147
}
11311148
}
1149+
1150+
impl sp_partner_chains_bridge::TokenBridgeIDPRuntimeApi<Block> for Runtime {
1151+
fn get_pallet_version() -> u32 {
1152+
Bridge::get_pallet_version()
1153+
}
1154+
fn get_main_chain_scripts() -> Option<BridgeMainChainScripts> {
1155+
Bridge::get_main_chain_scripts()
1156+
}
1157+
fn get_max_transfers_per_block() -> u32 {
1158+
Bridge::get_max_transfers_per_block()
1159+
}
1160+
fn get_last_data_checkpoint() -> Option<BridgeDataCheckpoint> {
1161+
Bridge::get_data_checkpoint()
1162+
}
1163+
}
11321164
}
11331165

11341166
#[cfg(test)]

0 commit comments

Comments
 (0)