I am utilizing actor classes within my motoko app that are created dynamically. How do I upgrade those canisters using dfx.
When using dfx deploy it only upgrades the static actor canisters, not any of my dynamically created actor classes.
Update 1:
I have found the IC management canister can install new code on other canisters with webassembly bytes, but am unsure how to get that new code to update the actor class instances
What is the proper way of rolling out updates to all dynamically created actor classes that are deployed already?
Example
Main.mo
import A "ActorClass";
import Array "mo:base/Array";
import Cycles "mo:base/ExperimentalCycles";
actor MainCanister {
var created_canisters : [A.ActorClass] = [];
public func create_player() : async A.ActorClass {
let canister : A.ActorClass = await A.ActorClass();
created_canisters := Array.append(created_canisters, [canister]);
return canister;
};
};
ActorClass.mo
actor class ActorClass() {
}
Step 1: Deploy
MainCainster is installed as expected
Step 2: Call create_player func
A instance/canister of ActorClass is created
Step 3: Update ActorClass with new/changed functionality
Step 4: Re-Deploy
ONLY MainCanister is updated, not any ActorClass instance
check this thread. it explains how to upgrade child canisters with a node script and a management canister.
https://forum.dfinity.org/t/how-do-i-upgrade-child-canisters-that-were-dynamically-created-from-a-parent-canister-of-which-i-am-the-controlller-in-motoko/12289/4