Signing transactions/request before submitting to canister

Sorry for an elementary question. But typically in Ethereum, Solana one signs the transaction using their wallet before submitting it to chain. Does IC doesn’t seem to have such a requirement? How would non-repudiation be dealt with? Thanks in advance.

On ICP we have two models to sign transactions. One is the explicit confirmation for every transaction as you know it from other ecosystems. That is used by e.g. NNS dapp if you connect a hardware wallet on which you hold your tokens. It has the advantage that the user has extreme control over what gets signed with the key. The drawback is that every call requires user interaction.

The other model that we have is that we create delegations that websites can freely use for a certain time period. With such a delegation the site can autonomously sign a transaction with/for a certain key. This is what usually happens when you sign in with Internet identity. The advantage is that the user does not need to be prompted for every single call (e.g. on a site where you make dozens of calls just for a single page load this is a basic usability requirement), on the other hand the user must trust the page a lot more.

1 Like