Partner Chains Node v1.2.0
Notes
Code migration guide for partner-chains v1.1.0 to v1.2.0
Code migration guide for partner-chains v1.1.0 to v1.2.0
partner-chains-node-commands
Code supporting generate-signatures
, get-ariadne-parameters
and get-registration-status
commands has been moved from the reference node to library crates of partner-chains
.
Moving this code to library crates will make it less code to update in the future.
Any node has to recognize these commands in order to be a valid partner chain node.
-
Add
partner-chains-node-commands
crate to your dependencies in Cargo.toml. -
Modify
Subcommand
enum (in reference implementation it is in cli.rs file):
#[derive(Debug, clap::Subcommand)]
pub enum Subcommand {
// ... other subcommands
#[clap(flatten)]
PartnerChains(PartnerChainsSubcommand<YourSidechainParams>),
// ... other subcommands
}
, where YourSidechainParams
is the struct that holds the parameters of your partner chains. Reference implementation uses chain_params::SidechainParams
struct.
- Wire all the partner chains commands in the
run
function of your node. For example:
pub fn run() -> sc_cli::Result<()> {
let cli = Cli::from_args();
match &cli.subcommand {
// ... other commmands
Some(Subcommand::PartnerChains(cmd)) => {
let make_dependencies = |config| {
let components = service::new_partial(&config)?;
Ok((components.client, components.task_manager, components.other.3.candidate))
};
partner_chains_node_commands::run(&cli, make_dependencies, cmd.clone())
},
/// ... other commands
- Cleanup cli.rs and mod.rs files in case you node had copy-paste implementation of these commands.
polkadot-sdk
partner-chains toolkit has migrated from custom fork of polkadot-sdk to paritytech fork of polkadot-sdk.
This changes the structure of crates used by partner-chains toolkit.
Please update your dependencies to reflect this change and depend only on the paritytech fork.
Replace git = "https://github.com/input-output-hk/polkadot-sdk.git", tag = "partnerchains-stable2407"
with "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2407-2"
in your cargo files.
sc-partner-chains-consensus-aura
input-output-hk fork of polkadot used modified sc-consensus-aura
crate to inject slot in inherent data providers and to have access to inherent digest (Cardano stable block hash).
These modifications are moved to partner-chains crate sc-partner-chains-consensus-aura
that depends on unmodified sc-consensus-aura
crate from paritytech/polkadot-sdk.
Add sc-partner-chains-consensus-aura
to your dependencies in Cargo.toml
.
Code changes related wiring this change are (service.rs file in reference node implementation):
-
Replace
use sp_partner_chains_consensus_aura::CurrentSlotProvider;
withuse sc_consensus_aura::CurrentSlotProvider;
. -
Replace
sc_consensus_aura::import_queue
withsc_partner_chains_consensus_aura::import_queue
. -
Replace
sc_consensus_aura::start_aura
withsc_partner_chains_consensus_aura::start_aura
. -
Use custom
BlockProposerFactory
fromsc-partner-chains-consensus-aura
crate:
let basic_authorship_proposer_factory = sc_basic_authorship::ProposerFactory::new(
task_manager.spawn_handle(),
client.clone(),
transaction_pool.clone(),
prometheus_registry.as_ref(),
telemetry.as_ref().map(|x| x.handle()),
);
let proposer_factory: PartnerChainsProposerFactory<_, _, McHashInherentDigest> =
PartnerChainsProposerFactory::new(basic_authorship_proposer_factory);
pallet-partner-chains-session
This pallet was moved from polkadot-sdk to partner-chains, please update your cargo files.
Also add pallet-session-runtime-stub
from partner-chains to your runtime dependencies.
Add pallet-session
from polkadot-sdk as well to runtime and node dependencies.
runtime code
It is required to add pallet-session
Runtime
configuration to your construct_runtime!
macro.
What is more, currently it has to be stubbed implementation, because of how pallet-partner-chains-session
is implemented and wired in.
To obtain this stub implementation use:
pallet_session_runtime_stub::impl_pallet_session_config!(Runtime);
Then add: PolkadotSession:pallet_session
in the construct_runtime!
macro.
Increase the spec_version
, so it will be possible to upgrade the runtime.
sc-cli
Runner
has been reverted to pairtytech version, this requires changes in the node code,
because the vanilla polkadot-sdk version doesn't support async in a way our custom code did.
Required change is in service.rs file, where the main chain follower has to be created in a blocking way:
let data_sources = task::block_in_place(|| {
config.tokio_handle.block_on(
crate::main_chain_follower::create_cached_main_chain_follower_data_sources(
mc_follower_metrics.clone(),
),
)
})?;
pub fn new_partial
is not async anymore, please follow the change in your implementation.
Please remove async move
and .await
in the run
function of your node in places where compiler complains.
For example replace:
Some(Subcommand::CheckBlock(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| async move {
let PartialComponents { client, task_manager, import_queue, .. } =
service::new_partial(&config).await?;
Ok((cmd.run(client, import_queue), task_manager))
})
},
with:
Some(Subcommand::CheckBlock(cmd)) => {
let runner = cli.create_runner(cmd)?;
runner.async_run(|config| {
let PartialComponents { client, task_manager, import_queue, .. } =
service::new_partial(&config)?;
Ok((cmd.run(client, import_queue), task_manager))
})
},
chain-init feature
Code that was present in node
crate related to USE_CHAIN_INIT
feature has been removed.
The only supported way to obtain the chain-spec is through partner-chains-cli.
Please cleanup your node if it contained copy-pasted code for it.
Observation of native token illiquid supply address
This feature is not complete, please do not follow changes in partner-chains reference runtime and node.
Please do not wire it in your node code nor use the "native-token" feature in the main chain follower.
Changed
- Switched to paritytech/polkadot-sdk polkadot-stable2407-2. No migration is required because of this change.
- Reverted usage of custom Runner that allowed
async_run
with asynchronous initializer.
NowRunner
code used is the same as in paritytech/polkadot-sdk.
This change requires updates in node:new_partial
cannot be async.
Run command dispatch looks more like in paritytech/polkadot-sdk. - bugfix for Mainnet compatibility in the db-sync main-chain follower. Fixes null block_no column decoding problem.
- moved out some cli related code from
node
crate, in order to require less copy-paste in users nodes - moved
pallet-partner-chains-session
from polkadot-sdk fork to this repository. Node uses vanilla grandpa and aura consensus now. No migration is needed. - moved
sc-consensus-aura
from input-output-hk/polkadot-sdk fork to this repository,
tosc-partner-chains-consensus-aura
andsp-partner-chains-consensus-aura
.
This change requires migration of the node, PartnerChainsProposerFactory has to be used.
Seeservice.rs
inpartner-chains-node
crate for an example. - renamed sidechain-main-cli and relevant naming to pc-contracts-cli
Removed
- removed USE_CHAIN_INIT code. Migration strategy is to remove copy-pasted and adapted code. It will not compile with vanilla polkadot-sdk, that we plan to use in future.
Fixed
- ETCM-8267 - fixed
partner-chains-cli
missing the native token configuration
Added
- ETCM-7811 - native token movement observability components:
sp-native-token-management
and
pallet-native-token-management
crates; data sources behind thenative-token
feature in
main-chain-follower-api
anddb-sync-follower
crates. - added helper functions to
SidechainParams
and allMainChainScripts
types to read them from environment - Extrinsic
set_main_chain_scripts
for migrating to new committee selection main chain scripts
Compatibility matrix
partner-chains-node | partner-chains-smart-contracts | cardano-node | cardano-db-sync | kupo | ogmios |
---|---|---|---|---|---|
1.2.0 | 6.1.0 | 9.1.1 | 13.5.0.2 | 2.9.0 | 6.6.0 |
Binaries
You can download the archives that contain both partner-chains-node
and partner-chains-cli
from assets attached to this release (available for MacOS and Linux architectures). PC smart contracts CLI can be downloaded from here.
Docker
You can also pull the Docker image of the partner-chains-node
from GitHub Container Registry:
docker pull ghcr.io/input-output-hk/partner-chains/partner-chains-node:v1.2.0
How to Use
Refer to the documentation for detailed instructions on using the node and CLI tools.
Support
You can visit our issues page for support, feature requests, or to report a bug.
Thank you for being a part of our community!