In coin.move:
assert!(
coin_address<CoinType>() == account_addr,
error::invalid_argument(ECOIN_INFO_ADDRESS_MISMATCH),
);
My guess is it prevents account A from initializing coins on behalf of account B to avoid scam?
But look forward to more clarification!