Enable Canisters to Hold ICP

  • The cycles minting canister is not notified of all transfers: it is only notified by transfers of ICP which should be converted to cycles. That is: if i want to get cycles (to either create a canister or top up a canister) I make a ledger transfer to a specific account of the CMC and then ask the ledger to notify the CMC. The CMC burns the ICPs mints cycles & either creates a canister or tops up a canister.

  • The sender of the ICPs would have to call the recipient directly to let it know about the incoming transfer. Above I outlined two ways in which the recipient can confirm the transfer was “as it should be”.

  • As you hint, the guarantees are sufficient for all replicated execution but not for unreplicated execution. For example, Rosetta nodes fetch the blocks of the ledger via query calls. Instead of (somehow) verifying that each individual block they got was correct (e.g. by making repeated queries to different replicas) one can get all blocks of the ledger, verify that chaining is correct and get a certificate (digital signature) on the hash of the last block in the chain.

  • The intention of the fee field is to indicate a max fee the caller is willing to pay for the transfer – this is in a world where the fee for transfer are dynamic (e.g. to throttle calls in case of overload). We’re not there yet, but it is part of the thinking.

  • They’re related but not the same: the Address is the AccountIdentifier prepended with a CRC32 checksum.

3 Likes