Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ jobs:
no_output_timeout: 30m
- run:
name: Upgrade chain to current version.
command: cargo run --locked --bin tools -- upgrade_chain ../assets/ci-runtime/polymesh_runtime_develop.compact.compressed.wasm
command: cargo run --features current_release --locked --bin tools -- upgrade_chain ../assets/ci-runtime/polymesh_runtime_develop.compact.compressed.wasm
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this needs to run/compile against the old chain, we need to use previous_release here.

working_directory: ./integration
no_output_timeout: 30m
- run:
Expand Down
2 changes: 1 addition & 1 deletion integration/rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[toolchain]
channel = "nightly-2025-07-16"
channel = "nightly-2025-09-01"
components = [ "rustfmt" ]
profile = "minimal"
68 changes: 46 additions & 22 deletions integration/src/asset_helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ use anyhow::Result;
use std::collections::BTreeSet;

#[cfg(feature = "current_release")]
use polymesh_api::types::polymesh_primitives::settlement::InstructionId;
use polymesh_api::types::polymesh_primitives::{
asset::{AssetHolder, AssetHolderKind},
settlement::InstructionId,
};

use polymesh_api::types::polymesh_primitives::{
asset::{AssetName, AssetType},
identity_id::{PortfolioId, PortfolioKind},
Expand Down Expand Up @@ -61,7 +65,8 @@ impl AssetHelper {
mint: u128,
signers: Vec<AccountId>,
need_venue: bool,
portfolio_kind: Option<PortfolioKind>,
#[cfg(feature = "current_release")] kind: Option<AssetHolderKind>,
#[cfg(feature = "previous_release")] kind: Option<PortfolioKind>,
) -> Result<Self> {
// Create a new venue.
let venue_res = if need_venue {
Expand Down Expand Up @@ -100,14 +105,15 @@ impl AssetHelper {
.expect("Asset ID not found");

// Mint some tokens.
#[cfg(feature = "current_release")]
let kind = kind.unwrap_or(AssetHolderKind::DefaultPortfolio);
#[cfg(feature = "previous_release")]
let kind = kind.unwrap_or(PortfolioKind::Default);

let mut mint_res = api
.call()
.asset()
.issue(
asset_id,
mint,
portfolio_kind.unwrap_or(PortfolioKind::Default),
)?
.issue(asset_id, mint, kind)?
.submit_and_watch(issuer)
.await?;

Expand Down Expand Up @@ -136,12 +142,17 @@ impl AssetHelper {

/// Mint some more tokens.
pub async fn mint(&mut self, amount: u128) -> Result<()> {
#[cfg(feature = "current_release")]
let kind = AssetHolderKind::DefaultPortfolio;
#[cfg(feature = "previous_release")]
let kind = PortfolioKind::Default;

// Mint some tokens.
let mut mint_res = self
.api
.call()
.asset()
.issue(self.asset_id, amount, PortfolioKind::Default)?
.issue(self.asset_id, amount, kind)?
.submit_and_watch(&mut self.issuer)
.await?;

Expand All @@ -161,12 +172,18 @@ impl AssetHelper {
let total = amount * investors.len() as u128;
self.mint(total).await?;

// Issuer portfolios.
let issuer_portfolio = PortfolioId {
did: self.issuer_did,
kind: PortfolioKind::Default,
};
let issuer_portfolios = [issuer_portfolio].into_iter().collect::<BTreeSet<_>>();

// Issuer.
#[cfg(feature = "current_release")]
let issuer = AssetHolder::Portfolio(issuer_portfolio);
#[cfg(feature = "previous_release")]
let issuer = issuer_portfolio;

let issuer_holdings = [issuer.clone()].into_iter().collect::<BTreeSet<_>>();

let mut pending_settlements = Vec::new();
for batch in investors.chunks_mut(10) {
Expand All @@ -181,10 +198,15 @@ impl AssetHelper {
kind: PortfolioKind::Default,
};

#[cfg(feature = "current_release")]
let investor = AssetHolder::Portfolio(investor_portfolio);
#[cfg(feature = "previous_release")]
let investor = investor_portfolio;

// Create a simple Settlement to transfer tokens from the issuer to the investor.
legs.push(Leg::Fungible {
sender: issuer_portfolio,
receiver: investor_portfolio,
sender: issuer.clone(),
receiver: investor,
asset_id: self.asset_id,
amount,
});
Expand All @@ -202,7 +224,7 @@ impl AssetHelper {
None,
None,
legs.clone(),
issuer_portfolios.clone(),
issuer_holdings.clone(),
None,
)?
.submit_and_watch(&mut self.issuer)
Expand All @@ -216,19 +238,21 @@ impl AssetHelper {
// The investors need to affirm the settlement.
let mut pending_affirms = Vec::new();
for investor in batch.iter_mut() {
let investor_portfolio = PortfolioId {
did: investor.did.expect("Investor DID"),
kind: PortfolioKind::Default,
};

#[cfg(feature = "current_release")]
let inv_holding = AssetHolder::Portfolio(investor_portfolio);
#[cfg(feature = "previous_release")]
let inv_holding = investor_portfolio;

let affirm_res = self
.api
.call()
.settlement()
.affirm_instruction(
settlement_id,
vec![PortfolioId {
did: investor.did.expect("Investor DID"),
kind: PortfolioKind::Default,
}]
.into_iter()
.collect(),
)?
.affirm_instruction(settlement_id, vec![inv_holding].into_iter().collect())?
.submit_and_watch(*investor)
.await?;
pending_affirms.push(affirm_res);
Expand Down
37 changes: 29 additions & 8 deletions integration/tests/asset_transfers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ mod asset_transfer_tests {
use anyhow::Result;

use integration::*;

#[cfg(feature = "previous_release")]
use polymesh_api::types::polymesh_primitives::identity_id::PortfolioKind;

#[cfg(feature = "current_release")]
use polymesh_api::types::polymesh_primitives::asset::{AssetHolderKind};

/// Test for an asset transfer requiring receiver affirmation.
#[tokio::test]
async fn asset_transfer_with_receiver_affirm() -> Result<()> {
Expand All @@ -15,9 +20,13 @@ mod asset_transfer_tests {
.await?
.into_iter();
let mut asset_issuer = users.next().expect("Asset issuer");
let asset_issuer_acc = asset_issuer.account();
let mut investor = users.next().expect("Investor");

#[cfg(feature = "current_release")]
let kind = AssetHolderKind::Account;
#[cfg(feature = "previous_release")]
let kind = PortfolioKind::AccountId(asset_issuer.account());

// Create a new asset and mint some tokens.
let asset_helper = AssetHelper::new_full(
&tester.api,
Expand All @@ -26,7 +35,7 @@ mod asset_transfer_tests {
1_000_000,
vec![],
false,
Some(PortfolioKind::AccountId(asset_issuer_acc)),
Some(kind),
)
.await?;
let asset_id = asset_helper.asset_id;
Expand Down Expand Up @@ -69,9 +78,13 @@ mod asset_transfer_tests {
.await?
.into_iter();
let mut asset_issuer = users.next().expect("Asset issuer");
let asset_issuer_acc = asset_issuer.account();
let mut investor = users.next().expect("Investor");

#[cfg(feature = "current_release")]
let kind = AssetHolderKind::Account;
#[cfg(feature = "previous_release")]
let kind = PortfolioKind::AccountId(asset_issuer.account());

// Create a new asset and mint some tokens.
let asset_helper = AssetHelper::new_full(
&tester.api,
Expand All @@ -80,7 +93,7 @@ mod asset_transfer_tests {
1_000_000,
vec![],
false,
Some(PortfolioKind::AccountId(asset_issuer_acc)),
Some(kind),
)
.await?;
let asset_id = asset_helper.asset_id;
Expand Down Expand Up @@ -123,9 +136,13 @@ mod asset_transfer_tests {
.await?
.into_iter();
let mut asset_issuer = users.next().expect("Asset issuer");
let asset_issuer_acc = asset_issuer.account();
let investor = users.next().expect("Investor");

#[cfg(feature = "current_release")]
let kind = AssetHolderKind::Account;
#[cfg(feature = "previous_release")]
let kind = PortfolioKind::AccountId(asset_issuer.account());

// Create a new asset and mint some tokens.
let asset_helper = AssetHelper::new_full(
&tester.api,
Expand All @@ -134,7 +151,7 @@ mod asset_transfer_tests {
1_000_000,
vec![],
false,
Some(PortfolioKind::AccountId(asset_issuer_acc)),
Some(kind),
)
.await?;
let asset_id = asset_helper.asset_id;
Expand Down Expand Up @@ -177,9 +194,13 @@ mod asset_transfer_tests {
.await?
.into_iter();
let mut asset_issuer = users.next().expect("Asset issuer");
let asset_issuer_acc = asset_issuer.account();
let mut investor = users.next().expect("Investor");

#[cfg(feature = "current_release")]
let kind = AssetHolderKind::Account;
#[cfg(feature = "previous_release")]
let kind = PortfolioKind::AccountId(asset_issuer.account());

// Create a new asset and mint some tokens.
let asset_helper = AssetHelper::new_full(
&tester.api,
Expand All @@ -188,7 +209,7 @@ mod asset_transfer_tests {
1_000_000,
vec![],
false,
Some(PortfolioKind::AccountId(asset_issuer_acc)),
Some(kind),
)
.await?;
let asset_id = asset_helper.asset_id;
Expand Down
14 changes: 10 additions & 4 deletions integration/tests/permissions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,11 @@ async fn secondary_keys_permissions() -> Result<()> {

// Prepare a POLYX transfer to one user.
let user0_pk = users[0].account();
let balance_transfer_call =
Arc::new(tester.api.call().balances().transfer_with_memo(user0_pk.into(), 1, None)?);
let balance_transfer_call = Arc::new(tester.api.call().balances().transfer_with_memo(
user0_pk.into(),
1,
None,
)?);
// Prepare `system.remark` call.
let remark_call = Arc::new(tester.api.call().system().remark(vec![])?);
// Prepare `settlement.create_venue` call.
Expand Down Expand Up @@ -242,8 +245,11 @@ async fn secondary_key_change_identity() -> Result<()> {
.expect("Missing JoinIdentity auth id");

// Prepare a POLYX transfer to one user.
let balance_transfer_call =
Arc::new(tester.api.call().balances().transfer_with_memo(user0_pk.into(), 1, None)?);
let balance_transfer_call = Arc::new(tester.api.call().balances().transfer_with_memo(
user0_pk.into(),
1,
None,
)?);
// Prepare `system.remark` call.
let remark_call = Arc::new(tester.api.call().system().remark(vec![])?);
// Prepare `settlement.create_venue` call.
Expand Down
Loading