# Deployment via Orbit CLI didn't include argument even it show argument check sum

**URL:** <https://forum.dfinity.org/t/deployment-via-orbit-cli-didnt-include-argument-even-it-show-argument-check-sum/62556>\
**Category:** Developers\
**Tags:** Discussing\
**Created:** [January 13, 2026, 8:09am UTC](https://forum.dfinity.org/t/deployment-via-orbit-cli-didnt-include-argument-even-it-show-argument-check-sum/62556 "2026-01-13T08:09:14Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![baolongt](https://avatars.discourse-cdn.com/v4/letter/b/4491bb/32.png) [@baolongt](https://forum.dfinity.org/u/baolongt)\
**Post date:** [January 13, 2026, 8:09am UTC](https://forum.dfinity.org/t/deployment-via-orbit-cli-didnt-include-argument-even-it-show-argument-check-sum/62556/1 "2026-01-13T08:09:14Z")

</div>

Hi devs,

When I using Orbit CLI via my CI/CD pipeline, I got issue that the argument is show in orbit but when it deployed the argument is not set

the argument I use

```auto
(record { log_settings=opt record { enable_console=opt true; in_memory_records=opt 10000; log_filter=opt "global,cashier=debug,token_storage=debug"; }; owner=principal "useor-pyaaa-aaaad-ac2ya-cai"; tokens = opt vec { record { details = variant { IC = record { ledger_id = principal "ryjl3-tyaaa-aaaaa-aaaba-cai"; index_id = opt principal "qhbym-qaaaa-aaaaa-aaafq-cai"; fee = 10000 : nat; }}; symbol = "ICP"; name = "Internet Computer"; decimals = 8; enabled_by_default = true; }; record { details = variant { IC = record { ledger_id = principal "mxzaz-hqaaa-aaaar-qaada-cai"; index_id = opt principal "n5wcd-faaaa-aaaar-qaaea-cai"; fee = 10 : nat; }}; symbol = "ckBTC"; name = "Chain Key Bitcoin"; decimals = 8; enabled_by_default = true; }; record { details = variant { IC = record { ledger_id = principal "ss2fx-dyaaa-aaaar-qacoq-cai"; index_id = opt principal "s3zol-vqaaa-aaaar-qacpa-cai"; fee = 2_000_000_000_000 : nat; }}; symbol = "ckETH"; name = "Chain Key Ethereum"; decimals = 18; enabled_by_default = true; }; record { details = variant { IC = record { ledger_id = principal "xevnm-gaaaa-aaaar-qafnq-cai"; index_id = opt principal "xrs4b-hiaaa-aaaar-qafoa-cai"; fee = 10_000 : nat; }}; symbol = "ckUSDC"; name = "Chain Key USD Coin"; decimals = 6; enabled_by_default = true; }; };})

```

 ![Screenshot 2026-01-12 at 14.14.46](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/d/0/d0ae216b0544c45a8c38c69b588affc5af444566.png)  
 ![Screenshot 2026-01-12 at 14.15.15](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/3/0/30bed8ad214b36308cc54565590020ff94f9b65a.png)

After reinstall, it seems the list of token is not included

 ![Screenshot 2026-01-12 at 14.50.58](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/f/a/fa0777715135756a6c42589f0babdb031305791d.png)

---

<div class="post-metadata">

**Author:** ![baolongt](https://avatars.discourse-cdn.com/v4/letter/b/4491bb/32.png) [@baolongt](https://forum.dfinity.org/u/baolongt)\
**Post date:** [January 14, 2026, 9:01am UTC](https://forum.dfinity.org/t/deployment-via-orbit-cli-didnt-include-argument-even-it-show-argument-check-sum/62556/2 "2026-01-14T09:01:16Z")

</div>

I found the root cause summarize it in

> <https://github.com/dfinity/orbit/issues/611>
>
> Following this \[post\](https://forum.dfinity.org/t/deployment-via-orbit-cli-didnt…-include-argument-even-it-show-argument-check-sum/62556)
> 
> I found that there method \`parse\_arguments\` used for canister install in tools/dfx-orbit/src/canister/util.rs silently convert \`opt int\` to None
> 
> Here is the unit test I test the code
> 
> \`\`\`rs
> 
> \#\[cfg(test)\]
> mod tests {
> use candid::Principal;
> 
> /// Proves dfx-orbit untyped Candid encoding bug: tokens silently become None.
> ///
> /// Root cause chain:
> /// 1. \`parse\_idl\_args().to\_bytes()\` encodes \`decimals = 8\` as \`int\` (no type info)
> /// 2. Canister expects \`nat8\` for decimals field
> /// 3. Candid int→nat8 coercion fails (Subtyping error)
> /// 4. Candid opt upgradeability rule: inner decode failure → silently becomes None
> /// 5. Result: tokens = None despite providing valid token data
> #\[test\]
> fn test\_untyped\_encoding\_causes\_silent\_data\_loss() {
> // Types matching TokenStorageInitData from canister .did
> #\[derive(candid::CandidType, candid::Deserialize, Debug)\]
> struct TokenStorageInitData {
> owner: Principal,
> tokens: Option\<Vec\<RegistryToken\>\>,
> }
> 
> #\[derive(candid::CandidType, candid::Deserialize, Debug)\]
> struct RegistryToken {
> decimals: u8, // nat8 - int will fail here
> name: String,
> enabled\_by\_default: bool,
> details: ChainTokenDetails,
> symbol: String,
> }
> 
> #\[derive(candid::CandidType, candid::Deserialize, Debug)\]
> enum ChainTokenDetails {
> IC(ChainTokenDetailsIC),
> }
> 
> #\[derive(candid::CandidType, candid::Deserialize, Debug)\]
> struct ChainTokenDetailsIC {
> fee: candid::Nat,
> ledger\_id: Principal,
> index\_id: Option\<Principal\>,
> }
> 
> // Untyped encoding (current dfx-orbit): decimals encoded as int
> let untyped = r#"(record {
> 947\_296\_307 = principal "aaaaa-aa";
> 2\_447\_841\_114 = opt vec {
> record {
> 308\_955\_842 = 8 : int;
> 1\_224\_700\_491 = "ICP";
> 1\_430\_142\_295 = true;
> 2\_874\_596\_546 = variant { 16\_346 = record {
> 5\_094\_982 = 10000 : nat;
> 1\_862\_220\_785 = principal "ryjl3-tyaaa-aaaaa-aaaba-cai";
> 3\_333\_197\_352 = opt principal "qhbym-qaaaa-aaaaa-aaafq-cai";
> }};
> 4\_007\_505\_752 = "ICP";
> }
> }
> })"#;
> 
> let untyped\_bytes = candid\_parser::parse\_idl\_args(untyped)
> .unwrap()
> .to\_bytes()
> .unwrap();
> 
> // Decode succeeds but tokens = None (silent data loss!)
> let result: (TokenStorageInitData,) = candid::decode\_args(&untyped\_bytes).unwrap();
> assert!(
> result.0.tokens.is\_none(),
> "BUG: untyped encoding causes tokens to silently become None"
> );
> 
> // Typed encoding (correct): decimals encoded as nat8
> let typed = r#"(record {
> 947\_296\_307 = principal "aaaaa-aa";
> 2\_447\_841\_114 = opt vec {
> record {
> 308\_955\_842 = 8 : nat8;
> 1\_224\_700\_491 = "ICP";
> 1\_430\_142\_295 = true;
> 2\_874\_596\_546 = variant { 16\_346 = record {
> 5\_094\_982 = 10000 : nat;
> 1\_862\_220\_785 = principal "ryjl3-tyaaa-aaaaa-aaaba-cai";
> 3\_333\_197\_352 = opt principal "qhbym-qaaaa-aaaaa-aaafq-cai";
> }};
> 4\_007\_505\_752 = "ICP";
> }
> }
> })"#;
> 
> let typed\_bytes = candid\_parser::parse\_idl\_args(typed)
> .unwrap()
> .to\_bytes()
> .unwrap();
> 
> // Decode succeeds with tokens present
> let result: (TokenStorageInitData,) = candid::decode\_args(&typed\_bytes).unwrap();
> assert!(
> result.0.tokens.is\_some(),
> "typed encoding preserves tokens"
> );
> assert\_eq!(result.0.tokens.unwrap().len(), 1, "should have 1 token");
> }
> }
> 
> \`\`\`
