Preventing replay attacks and nonces

Are nonces used in IC for preventing replay attacks and ordering of transaction on a per principal basis? If so, are the nonces per canister i.e. every canister tracks the “account” state and hence the nonce too? I know how this works in Ethereum but trying to see how that is dealt with in the IC. Thanks in advance.

ICP uses request ids that have the same effect of nonces. I was not around when request ids were defined, but I would bet that acting as a nonce was one of the design goals