7 releases

0.2.5 Aug 22, 2022
0.2.4 Jul 12, 2022
0.2.2 May 12, 2022
0.1.0 Feb 3, 2022

#5 in #certification

Download history 67/week @ 2024-01-24 23/week @ 2024-01-31 2/week @ 2024-02-21 11/week @ 2024-02-28 27/week @ 2024-03-06 6/week @ 2024-03-13 8/week @ 2024-03-20 13/week @ 2024-03-27 25/week @ 2024-04-03

52 downloads per month

Apache-2.0

250KB
5K SLoC

Certified Assets Library

Rust support for asset certification.

Certified assets can also be served from any Rust canister by including this library.

Adding to a canister

[dependencies]
ic-certified-assets = "0.2.2"

The assets are preserved over upgrades by including the corresponding functions in the init/pre_upgrade/upgrade hooks which can be mixed with the other state from the canister:

#[derive(Clone, Debug, CandidType, Deserialize)]
struct StableState {
  my_state: MyState,
  assets: crate::assets::StableState,
}

#[init]
fn init() {
  crate::assets::init();
}

#[pre_upgrade]
fn pre_upgrade() {
  let stable_state = STATE.with(|s| StableState {
    my_state: s.my_state,
    assets: crate::assets::pre_upgrade(),
  });
  ic_cdk::storage::stable_save((stable_state,)).expect("failed to save stable state");
}

#[post_upgrade]
fn post_upgrade() {
  let (StableState { assets, my_state },): (StableState,) =
                                         ic_cdk::storage::stable_restore().expect("failed to restore stable state");
  crate::assets::post_upgrade(assets);
  STATE.with(|s| {
      s.my_state = my_state;
  };
}

Uploading assets

cd assets
icx-asset --pem ~/.config/dfx/identity/default/identity.pem --replica https://ic0.app sync <canister_id> .

Dependencies

~4.5–7.5MB
~112K SLoC