<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.internetcomputer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Markus.perdrizat</id>
	<title>Internet Computer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.internetcomputer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Markus.perdrizat"/>
	<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/wiki/Special:Contributions/Markus.perdrizat"/>
	<updated>2026-04-30T17:00:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=ICP_custody_options&amp;diff=8007</id>
		<title>ICP custody options</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=ICP_custody_options&amp;diff=8007"/>
		<updated>2024-11-26T12:31:49Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: added some more wallets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Understand the benefits and limitations of each custody option so you can choose the wallet that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 33%&amp;quot; |&lt;br /&gt;
== Onchain Wallets==&lt;br /&gt;
Onchain dapps that are easily accessible with the creation of an Internet Identity. Great for daily use and small amount transfers.&lt;br /&gt;
* [https://oisy.com/ Oisy]&lt;br /&gt;
*[https://nns.ic0.app/ NNS frontend dapp] with [https://identity.ic0.app/ Internet Identity]&lt;br /&gt;
*[https://astrox.me/ AstroX ME]&lt;br /&gt;
* [https://nfid.one/ NFID Wallet]&lt;br /&gt;
*[https://orbitwallet.io/ Orbit] (private alpha)&lt;br /&gt;
*[https://www.stoicwallet.com/ Stoic wallet]&lt;br /&gt;
 | style=&amp;quot;width: 34%&amp;quot; |&lt;br /&gt;
== Mobile Wallets ==&lt;br /&gt;
Mobile apps offer easy access to crypto assets for people who use them frequently.&lt;br /&gt;
*[https://plugwallet.ooo/ Plug wallet]&lt;br /&gt;
*[https://astrox.me/ AstroX ME]&lt;br /&gt;
*[https://klever.io/en-us/crypto-wallet/icp-wallet Klever]&lt;br /&gt;
*[https://airgap.it/ AirGap]&lt;br /&gt;
*[https://trustwallet.com/blog/beginners-guide-to-icp Trust Wallet]&lt;br /&gt;
 | style=&amp;quot;width: 33%&amp;quot; |&lt;br /&gt;
==Hardware Wallets==&lt;br /&gt;
Maximum security. Hardware wallets hold private keys in airgapped machines or ledger devices.&lt;br /&gt;
*[[ICP custody with Ledger Nano|Ledger Nano]] and other Ledger hardware devices&lt;br /&gt;
*[https://airgap.it/ AirGap]&lt;br /&gt;
*[https://x.com/Tangem/status/1841759127845982370 Tangem]&lt;br /&gt;
*[https://www.taurushq.com/blog/taurus-integrates-the-full-icp-value-chain-including-staking-in-its-custody-solution-taurus-protect/ Taurus]&lt;br /&gt;
*ICP Custody with [https://github.com/dfinity/quill Quill] (Minimalistic ledger and governance toolkit for cold wallets) Networked computer&lt;br /&gt;
*[[ICP custody with seed phrase and air-gapped machine]]&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
==Institutional Custody==&lt;br /&gt;
For anyone managing large amounts of crypto assets. Institutional custodians offer reliability and customer support.&lt;br /&gt;
*[https://www.coinbase.com/custody Coinbase]&lt;br /&gt;
*[https://www.sygnum.com/digital-asset-banking/internet-computer-icp/ Sygnum]&lt;br /&gt;
* [https://copper.co/en/insights/company-news/copper-adds-support-for-new-token-standards-on-the-internet-computer-blockchain-as-institutional-interest-grows Copper]&lt;br /&gt;
*[https://www.crypto-finance.com/ Crypto Finance]&lt;br /&gt;
*[https://www.dfns.co/article/icp-support Dfns] (wallet-as-a-service)&lt;br /&gt;
*[https://www.primevault.com/ Primevault]&lt;br /&gt;
* [https://www.taurushq.com/blog/taurus-integrates-the-full-icp-value-chain-including-staking-in-its-custody-solution-taurus-protect/ Taurus]&lt;br /&gt;
*[https://nfid.one/ NFID Wallet]&lt;br /&gt;
*[https://orbitwallet.io/ Orbit] (private alpha)&lt;br /&gt;
|&lt;br /&gt;
==Browser-Extensions==&lt;br /&gt;
Great for users already familiar with crypto wallets from other chains.&lt;br /&gt;
*[https://plugwallet.ooo/ Plug wallet]&lt;br /&gt;
*[https://trustwallet.com/blog/beginners-guide-to-icp Trust Wallet]&lt;br /&gt;
*[https://wallet.bitfinity.network Bitfinity Wallet]&lt;br /&gt;
*[https://snaps.metamask.io/snap/npm/fort-major/msq/ Metamask] (MSQ snap)&lt;br /&gt;
*[https://www.primevault.com/ Primevault] (coupled to institutional custody)&lt;br /&gt;
|&lt;br /&gt;
==Special Use Cases ==&lt;br /&gt;
ICP staking, voting &amp;amp; governance (NNS)&lt;br /&gt;
&lt;br /&gt;
*[https://nns.ic0.app/ NNS frontend dapp]&lt;br /&gt;
*[https://www.ledger.com/coin/staking/internet-computer Ledger Nano ICP staking]&lt;br /&gt;
&lt;br /&gt;
SNS staking &amp;amp; governance&lt;br /&gt;
&lt;br /&gt;
*[https://nns.ic0.app/ NNS frontend dapp]&lt;br /&gt;
*[https://www.ledger.com/coin/staking/internet-computer Ledger Nano ICP staking]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Do you want maximum control of your keys?==&lt;br /&gt;
&lt;br /&gt;
===No? Then, use third party custody solutions:===&lt;br /&gt;
&lt;br /&gt;
Third party custody solutions allow you to trade-off ease-of-use for control. The trade-off is simple: if you do not feel comfortable managing your own keys and are willing to have a third party to have access to your keys for the sake of being hand-held through the process, then third party solutions can be the right choice for you.&lt;br /&gt;
&lt;br /&gt;
Third party custody solutions include the Institutional Custody solutions listed above, as well as any of the exchanges supporting ICP on these lists:&lt;br /&gt;
&lt;br /&gt;
*[https://coinmarketcap.com/currencies/internet-computer/#Markets CoinMarketCap list of ICP exchanges]&lt;br /&gt;
*[https://www.coingecko.com/en/coins/internet-computer CoinGecko list of ICP exchanges]&lt;br /&gt;
&lt;br /&gt;
===Yes? Then, use self-custody:===&lt;br /&gt;
All of the solutions above, except Institutional Custody, are self-custody. On ICP, Oisy and other Onchain Wallets are the preferred solution.&lt;br /&gt;
&lt;br /&gt;
==Self-custody: Maximum ease option==&lt;br /&gt;
&lt;br /&gt;
If you choose self-custody, the simplest option to consider is [https://oisy.com/ Oisy]. And if Staking is required, then [[ICP Custody with NNS frontend dapp]]. It consists of using an [https://identity.ic0.app/ Internet Identity] with the [https://nns.ic0.app/ NNS frontend dapp].&lt;br /&gt;
&lt;br /&gt;
===Traits===&lt;br /&gt;
*It&#039;s the most convenient, entirely web-based, with no need to download or install anything.&lt;br /&gt;
*The [https://nns.ic0.app/ NNS frontend dapp] has all the functionality you need.&lt;br /&gt;
*This is a very common method.&lt;br /&gt;
*This method is ideal for people who want the easiest path to control their ICP.&lt;br /&gt;
*This custody solution has staking and voting built-in if you want to participate in governance.&lt;br /&gt;
&lt;br /&gt;
==Self-custody: Maximum control option==&lt;br /&gt;
&lt;br /&gt;
If you choose self-custody, the options which maximize control are: &lt;br /&gt;
&lt;br /&gt;
*[[ICP custody with seed phrase and air-gapped machine]]&lt;br /&gt;
*[[ICP custody with Ledger Nano]]&lt;br /&gt;
&lt;br /&gt;
===Traits===&lt;br /&gt;
&lt;br /&gt;
*This option requires more technical understanding.&lt;br /&gt;
*This is the &#039;&#039;safest&#039;&#039; option from a software point of view because the user relies on less software surface area, but it is the &#039;&#039;riskiest&#039;&#039; from a human point of view in that it puts the risk of the user&#039;s [[seed phrase]] and [[private key]] custody on them.&lt;br /&gt;
*Ideal for people who want as much control over their ICP as possible.&lt;br /&gt;
*This custody solution has staking built-in if you want to stake as well.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Tutorials for acquiring, managing, and staking ICP]]&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Tutorials_for_acquiring,_managing,_and_staking_ICP&amp;diff=8006</id>
		<title>Tutorials for acquiring, managing, and staking ICP</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Tutorials_for_acquiring,_managing,_and_staking_ICP&amp;diff=8006"/>
		<updated>2024-11-26T07:55:06Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: Added crypto onramps &amp;amp; link to Coingecko&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NUMBEREDHEADINGS__&lt;br /&gt;
The governance of the Internet Computer depends on people staking their [[ICP Tokenomics | ICP token]] and voting on proposals. To do this, there are four steps. Each step has different sets of options (with trade-offs):&lt;br /&gt;
&lt;br /&gt;
# Acquire ICP&lt;br /&gt;
# Custody &lt;br /&gt;
# Staking&lt;br /&gt;
# Voting&lt;br /&gt;
&lt;br /&gt;
This article is an entry point into these four topics. For a simple, opinionated tutorial that makes choices to maximize simplicity, see [[Staking for dummies]].&lt;br /&gt;
&lt;br /&gt;
==Acquire ICP==&lt;br /&gt;
&lt;br /&gt;
To get started, you first need to acquire ICP tokens. You can do this buying them in an exchange or by having someone you send you ICP.&lt;br /&gt;
&lt;br /&gt;
===Buy ICP from Crypto Onramps===&lt;br /&gt;
Crypto onramps allow you to buy ICP directly from your credit card or bank account without having to open an account. They don&#039;t store your tokens, instead send them directly to your wallet address (see [[ICP custody options|Wallet &amp;amp; Custody options]]).&lt;br /&gt;
&lt;br /&gt;
*[https://banxa.com Banxa]&lt;br /&gt;
*[https://guardarian.com Guardarian]&lt;br /&gt;
*[https://ramp.alchemypay.org/ AlchemyPay]&lt;br /&gt;
*[https://transak.com Transak]&lt;br /&gt;
*[https://onramp.money Onramp.money]&lt;br /&gt;
*[https://www.simplex.com Simplex]&lt;br /&gt;
* [https://bity.com/ Bity]&lt;br /&gt;
&lt;br /&gt;
===Buy/Sell ICP at Exchanges===&lt;br /&gt;
Please check below for a list of exchanges where you can buy/sell ICP &lt;br /&gt;
&lt;br /&gt;
*[https://coinmarketcap.com/currencies/internet-computer/#Markets CoinMarketCap list of ICP exchanges]&lt;br /&gt;
*[https://www.coingecko.com/en/coins/internet-computer CoinGecko list of ICP exchanges]&lt;br /&gt;
&lt;br /&gt;
===Seed Round Contributors===&lt;br /&gt;
&lt;br /&gt;
Seed round participants who wish to claim their neurons (from 2021) should first see: [[How-To: Claim neurons for seed participants]].&lt;br /&gt;
&lt;br /&gt;
==Custody==&lt;br /&gt;
&lt;br /&gt;
Custody is the act of managing your ICP. There are many options, each with different security and usability trade-offs. For a summary of the range of options available to you depending on your comfort level, see [[ICP custody options]]. &lt;br /&gt;
&lt;br /&gt;
==Staking==&lt;br /&gt;
&lt;br /&gt;
Once you decide on your custody, staking is the action of locking ICP within a [[neuron]] with a [[dissolve delay]]. [[Staking and voting]] are critical to [[Governance of the Internet Computer]].&lt;br /&gt;
&lt;br /&gt;
By staking you can vote on NNS Proposals and collect NNS rewards. There are many options for staking, each with different security and usability trade-offs. See [[ICP staking options]].&lt;br /&gt;
&lt;br /&gt;
==Voting==&lt;br /&gt;
&lt;br /&gt;
Voting is the act of voting on [[NNS proposals]] using neurons. See [[ICP voting options]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*&#039;&#039;&#039;The Internet Computer project website (hosted on the IC): [https://internetcomputer.org/ internetcomputer.org]&#039;&#039;&#039;&lt;br /&gt;
*[[Governance of the Internet Computer]]&lt;br /&gt;
*[[Staking and voting]]&lt;br /&gt;
*[[Staking for dummies]]&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
&lt;br /&gt;
*https://www.dfinitycommunity.com/best-exchanges-to-buy-icp/&lt;br /&gt;
*https://medium.com/dfinity/the-community-led-governance-of-the-internet-computer-b863cd2975ba&lt;br /&gt;
*https://medium.com/dfinity/earn-substantial-voting-rewards-by-staking-in-the-network-nervous-system-7eb5cf988182&lt;br /&gt;
*https://medium.com/dfinity/introducing-the-ledger-internet-computer-icp-app-for-nano-wallets-eed38c549f0d&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=ICP_custody_options&amp;diff=8000</id>
		<title>ICP custody options</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=ICP_custody_options&amp;diff=8000"/>
		<updated>2024-11-25T14:58:40Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: Completed the list of wallets and custody solutions. Added a table with all wallets on top&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Understand the benefits and limitations of each custody option so you can choose the wallet that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 33%&amp;quot; |&lt;br /&gt;
== Onchain Wallets==&lt;br /&gt;
Onchain dapps that are easily accessible with the creation of an Internet Identity. Great for daily use and small amount transfers.&lt;br /&gt;
* [https://oisy.com/ Oisy]&lt;br /&gt;
*[https://identity.ic0.app/ Internet Identity] with the [https://nns.ic0.app/ NNS frontend dapp]&lt;br /&gt;
*[https://astrox.me/ AstroX ME]&lt;br /&gt;
* [https://nfid.one/ NFID Wallet]&lt;br /&gt;
*[https://orbitwallet.io/ Orbit] (private alpha)&lt;br /&gt;
*[https://www.stoicwallet.com/ Stoic wallet]&lt;br /&gt;
 | style=&amp;quot;width: 34%&amp;quot; |&lt;br /&gt;
== Mobile Wallets ==&lt;br /&gt;
Mobile apps offer easy access to crypto assets for people who use them frequently.&lt;br /&gt;
*[https://plugwallet.ooo/ Plug wallet]&lt;br /&gt;
*[https://astrox.me/ AstroX ME]&lt;br /&gt;
*[https://klever.io/en-us/crypto-wallet/icp-wallet Klever]&lt;br /&gt;
*[https://airgap.it/ AirGap]&lt;br /&gt;
*[https://trustwallet.com/blog/beginners-guide-to-icp Trust Wallet]&lt;br /&gt;
 | style=&amp;quot;width: 33%&amp;quot; |&lt;br /&gt;
==Hardware Wallets==&lt;br /&gt;
Maximum security. Hardware wallets hold private keys in airgapped machines or ledger devices.&lt;br /&gt;
*[[ICP custody with Ledger Nano|Ledger Nano]] and other Ledger hardware devices&lt;br /&gt;
*[https://airgap.it/ AirGap]&lt;br /&gt;
*[https://x.com/Tangem/status/1841759127845982370 Tangem]&lt;br /&gt;
*[https://www.taurushq.com/blog/taurus-integrates-the-full-icp-value-chain-including-staking-in-its-custody-solution-taurus-protect/ Taurus]&lt;br /&gt;
*ICP Custody with [https://github.com/dfinity/quill Quill] (Minimalistic ledger and governance toolkit for cold wallets) Networked computer&lt;br /&gt;
*[[ICP custody with seed phrase and air-gapped machine]]&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
==Institutional Custody==&lt;br /&gt;
For anyone managing large amounts of crypto assets. Institutional custodians offer reliability and customer support.&lt;br /&gt;
*[https://www.coinbase.com/custody Coinbase]&lt;br /&gt;
*[https://www.sygnum.com/digital-asset-banking/internet-computer-icp/ Sygnum]&lt;br /&gt;
* [https://copper.co/en/insights/company-news/copper-adds-support-for-new-token-standards-on-the-internet-computer-blockchain-as-institutional-interest-grows Copper]&lt;br /&gt;
*[https://www.crypto-finance.com/ Crypto Finance]&lt;br /&gt;
*[https://www.dfns.co/article/icp-support Dfns] (wallet-as-a-service)&lt;br /&gt;
*[https://www.primevault.com/ Primevault]&lt;br /&gt;
* [https://www.taurushq.com/blog/taurus-integrates-the-full-icp-value-chain-including-staking-in-its-custody-solution-taurus-protect/ Taurus]&lt;br /&gt;
*[https://nfid.one/ NFID Wallet]&lt;br /&gt;
*[https://orbitwallet.io/ Orbit] (private alpha)&lt;br /&gt;
|&lt;br /&gt;
==Browser-Extensions==&lt;br /&gt;
Great for users already familiar with crypto wallets from other chains.&lt;br /&gt;
*[https://plugwallet.ooo/ Plug wallet]&lt;br /&gt;
*[https://wallet.bitfinity.network Bitfinity Wallet]&lt;br /&gt;
*[https://snaps.metamask.io/snap/npm/fort-major/msq/ Metamask] (MSQ snap)&lt;br /&gt;
*[https://www.primevault.com/ Primevault] (coupled to institutional custody)&lt;br /&gt;
|&lt;br /&gt;
==Special Use Cases ==&lt;br /&gt;
ICP staking, voting &amp;amp; governance (NNS)&lt;br /&gt;
&lt;br /&gt;
*[https://nns.ic0.app/ NNS frontend dapp]&lt;br /&gt;
*[https://www.ledger.com/coin/staking/internet-computer Ledger Nano ICP staking]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SNS staking &amp;amp; governance&lt;br /&gt;
&lt;br /&gt;
*[https://nns.ic0.app/ NNS frontend dapp]&lt;br /&gt;
*[https://www.ledger.com/coin/staking/internet-computer Ledger Nano ICP staking]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Do you want maximum control of your keys?==&lt;br /&gt;
&lt;br /&gt;
===No? Then, use third party custody solutions:===&lt;br /&gt;
&lt;br /&gt;
Third party custody solutions allow you to trade-off ease-of-use for control. The trade-off is simple: if you do not feel comfortable managing your own keys and are willing to have a third party to have access to your keys for the sake of being hand-held through the process, then third party solutions can be the right choice for you.&lt;br /&gt;
&lt;br /&gt;
Third party custody solutions include the Institutional Custody solutions listed above, as well as any of the exchanges supporting ICP on these lists:&lt;br /&gt;
&lt;br /&gt;
*[https://coinmarketcap.com/currencies/internet-computer/#Markets CoinMarketCap list of ICP exchanges]&lt;br /&gt;
*[https://www.coingecko.com/en/coins/internet-computer CoinGecko list of ICP exchanges]&lt;br /&gt;
&lt;br /&gt;
===Yes? Then, use self-custody:===&lt;br /&gt;
All of the solutions above, except Institutional Custody, are self-custody. On ICP, Oisy and other Onchain Wallets are the preferred solution.&lt;br /&gt;
&lt;br /&gt;
==Self-custody: Maximum ease option==&lt;br /&gt;
&lt;br /&gt;
If you choose self-custody, the simplest option to consider is [https://oisy.com/ Oisy]. And if Staking is required, then [[ICP Custody with NNS frontend dapp]]. It consists of using an [https://identity.ic0.app/ Internet Identity] with the [https://nns.ic0.app/ NNS frontend dapp].&lt;br /&gt;
&lt;br /&gt;
===Traits===&lt;br /&gt;
*It&#039;s the most convenient, entirely web-based, with no need to download or install anything.&lt;br /&gt;
*The [https://nns.ic0.app/ NNS frontend dapp] has all the functionality you need.&lt;br /&gt;
*This is a very common method.&lt;br /&gt;
*This method is ideal for people who want the easiest path to control their ICP.&lt;br /&gt;
*This custody solution has staking and voting built-in if you want to participate in governance.&lt;br /&gt;
&lt;br /&gt;
==Self-custody: Maximum control option==&lt;br /&gt;
&lt;br /&gt;
If you choose self-custody, the options which maximize control are: &lt;br /&gt;
&lt;br /&gt;
*[[ICP custody with seed phrase and air-gapped machine]]&lt;br /&gt;
*[[ICP custody with Ledger Nano]]&lt;br /&gt;
&lt;br /&gt;
===Traits===&lt;br /&gt;
&lt;br /&gt;
*This option requires more technical understanding.&lt;br /&gt;
*This is the &#039;&#039;safest&#039;&#039; option from a software point of view because the user relies on less software surface area, but it is the &#039;&#039;riskiest&#039;&#039; from a human point of view in that it puts the risk of the user&#039;s [[seed phrase]] and [[private key]] custody on them.&lt;br /&gt;
*Ideal for people who want as much control over their ICP as possible.&lt;br /&gt;
*This custody solution has staking built-in if you want to stake as well.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Tutorials for acquiring, managing, and staking ICP]]&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7999</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7999"/>
		<updated>2024-11-25T14:57:53Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: Staking update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is aimed at product owners and architects at custody providers and analytics/reporting firms (“Integrators”) who’d like to get an overview of the integration architecture required for supporting the ICP token and ICP network tokens following the ICRC standards (“ICRC tokens”).&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Internet Computer (ICP) Integrations ===&lt;br /&gt;
First, the canonical [[Introduction to ICP]]. BTW, we use “ICP” interchangeably for the protocol, the network and the token!&lt;br /&gt;
&lt;br /&gt;
The TL;DR from ICP’s 3rd generation approach are:&lt;br /&gt;
&lt;br /&gt;
# You don’t run a node to validate transactions block by block. Instead, you get the block(s) in question using https APIs and verify them using ICP’s 48 byte BLS master public key.&lt;br /&gt;
# BLS is only needed for chain validation, i.e. in online systems. Transaction signing requires ECDSA or Ed25519, at least one of which is available in every crypto HSM and MPC library.&lt;br /&gt;
# You don’t need an off-chain RPC node: ICP and ICRC token ledgers are ICP canisters (ICP’s name for smart contracts) and have https APIs as primary interface to read balance and transaction data and submit new transactions for broadcasting.&lt;br /&gt;
&lt;br /&gt;
Additionally, Dfinity offers an open source implementation of Coinbase’s Rosetta API as a Docker container. It provides a simple interface to query ICP and ICRC token balances &amp;amp; transactions, as well as prepare and broadcast custody &amp;amp; staking transactions.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
&lt;br /&gt;
==== Transaction signing: ECDSA or Ed25519 ====&lt;br /&gt;
Integrators that send requests to the Internet Computer authenticate the request via a digital signature on a 32-byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256).&lt;br /&gt;
&lt;br /&gt;
==== Transaction verification: BLS ====&lt;br /&gt;
Integrators also need to support verification of BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
Rosetta takes care of this internally, i.e. integration with Rosetta does not require any BLS support.&lt;br /&gt;
&lt;br /&gt;
=== Creating and Broadcasting Transactions ===&lt;br /&gt;
Valid transaction requests need to be signed and sent to the corresponding token ledger using the token ledger’s https API. There are libraries for Rust, C, Go, TypeScript, etc.&lt;br /&gt;
&lt;br /&gt;
Rosetta API takes care of both transaction request creation and broadcasting.&lt;br /&gt;
&lt;br /&gt;
=== Querying Balances and Transactions ===&lt;br /&gt;
Token ledgers on ICP create a new block for every transaction, the current practical limit of transactions per second per ledger is 400-600 tps.&lt;br /&gt;
&lt;br /&gt;
Good to know for analytics &amp;amp; reporting use cases: ICP &amp;amp; ICRC Rosetta containers include a sqlite instance that stores all the relevant information for direct querying. Though, to be clear, that’s not a formally supported interface under the Rosetta standard.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker] image for integrators building on ICP. [https://docs.cloud.coinbase.com/rosetta/docs/welcome Rosetta is an open standard designed by Coinbase] to simplify blockchain deployment and interaction; this allows integrators to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
Rosetta supports all the following use cases:&lt;br /&gt;
&lt;br /&gt;
* Querying verified balances &amp;amp; transactions for ICP and ICRC tokens&lt;br /&gt;
* Creating transaction requests for ICP and ICRC token transfers&lt;br /&gt;
* Creating transaction requests for all steps of the ICP staking / voting workflow&lt;br /&gt;
* Broadcasting signed requests&lt;br /&gt;
&lt;br /&gt;
Each token ledger requires its own Rosetta container for local data storage, i.e. integrators will deploy the ICP Rosetta container for ICP token support, and deploy the ICRC Rosetta container multiple times for supporting multiple ICRC tokens.&lt;br /&gt;
&lt;br /&gt;
Compute, memory and storage requirements are minimal, as the heavy lifting computing happens on ICP, and Rosetta acts more like a light node. As of Q2 2024, the biggest container size is the ICP Rosetta container with about 10 GiB space required for the complete 3+ year history.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then integrators interact with ICP or ICRC ledgers directly using their https API.&lt;br /&gt;
&lt;br /&gt;
This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* Candid, the language used to specify the interfaces of smart contracts running on ICP&lt;br /&gt;
&lt;br /&gt;
* API and execution model of ICP&lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* API of the ICP ledger (in particular how to fetch and verify the transaction chain)&lt;br /&gt;
* API of the Governance smart contract (for implementing staking and staking related operations)&lt;br /&gt;
* The ICRC-1 and ICRC-3 standards to support ICRC tokens&lt;br /&gt;
&lt;br /&gt;
There are libraries available from Dfinity for JavaScript/TypeScript ([https://github.com/dfinity/agent-js agent-js]) and Rust ([https://docs.rs/ic-agent/latest/ic_agent/ agent-rs]) as well as third-party libraries for other languages incl. Java, C, C++ and Go.&lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is similar to delegated PoS, but with some key differences:&lt;br /&gt;
&lt;br /&gt;
* ICP staking rewards active voting instead of the typical block creation &amp;amp; validation activity. The factors influencing voting rewards are: staked amount, dissolve delay, age bonus, voting activity (the bigger the better)&lt;br /&gt;
* It doesn’t require a validator infrastructure because the voting process runs as a smart contract on ICP. &lt;br /&gt;
* Staking sends assets from a custody address to an address type called “neuron”, managed by the Network Nervous System dapp, NNS. The neuron continuous to be controlled by the same private key as the sending custody address (similar to ETH staking)&lt;br /&gt;
* Instead of actively voting on all proposals, a staker can delegate their vote to someone else’s neuron, this is called “following a neuron”&lt;br /&gt;
* The unlocking period (called “dissolve delay”) can be up to 8 years for maximum rewards. Note that during the last 6 months of the unlocking period, no more rewards will be paid out, meaning that the minimum viable dissolve delay is 6 months.. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See the chart below for an overview of the main custody-related workflows[[File:ICP staking flow chart.png|alt=ICP staking flow chart|frameless|927x927px]]&lt;br /&gt;
&lt;br /&gt;
=== ICRC Token Standards ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1] and ICRC-3 token standards were created to facilitate handling of tokens on ICP through a common interface, similar to ERC-20 on Ethereum. It is expected that, going forward, all tokens will support them.&lt;br /&gt;
&lt;br /&gt;
ICP and ICRC tokens have close but not 100% API compatibility, which needs to be considered when using native integration. Another gotcha to consider when going from ICP to ICRC is that the ICP ledger uses a hashed representation of the principal, subaccount pair, while interactions with ICRC ledgers require and use the principal, subaccount pair in plaintext. (Although, to confuse things further, Dfinity’s [https://dashboard.internetcomputer.org/ dashboard block explorer] uses the hashed representation also for ICRC token addresses).&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to go on about a native integration.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Copper, Taurus and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7737</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7737"/>
		<updated>2024-05-02T13:26:32Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: /* Support and more detailed documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is aimed at product owners and architects at custody providers and analytics/reporting firms (“Integrators”) who’d like to get an overview of the integration architecture required for supporting the ICP token and ICP network tokens following the ICRC standards (“ICRC tokens”).&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Internet Computer (ICP) Integrations ===&lt;br /&gt;
First, the canonical [[Introduction to ICP]]. BTW, we use “ICP” interchangeably for the protocol, the network and the token!&lt;br /&gt;
&lt;br /&gt;
The TL;DR from ICP’s 3rd generation approach are:&lt;br /&gt;
&lt;br /&gt;
# You don’t run a node to validate transactions block by block. Instead, you get the block(s) in question using https APIs and verify them using ICP’s 48 byte BLS master public key.&lt;br /&gt;
# BLS is only needed for chain validation, i.e. in online systems. Transaction signing requires ECDSA or Ed25519, at least one of which is available in every crypto HSM and MPC library.&lt;br /&gt;
# You don’t need an off-chain RPC node: ICP and ICRC token ledgers are ICP canisters (ICP’s name for smart contracts) and have https APIs as primary interface to read balance and transaction data and submit new transactions for broadcasting.&lt;br /&gt;
&lt;br /&gt;
Additionally, Dfinity offers an open source implementation of Coinbase’s Rosetta API as a Docker container. It provides a simple interface to query ICP and ICRC token balances &amp;amp; transactions, as well as prepare and broadcast custody &amp;amp; staking transactions.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
&lt;br /&gt;
==== Transaction signing: ECDSA or Ed25519 ====&lt;br /&gt;
Integrators that send requests to the Internet Computer authenticate the request via a digital signature on a 32-byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256).&lt;br /&gt;
&lt;br /&gt;
==== Transaction verification: BLS ====&lt;br /&gt;
Integrators also need to support verification of BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
Rosetta takes care of this internally, i.e. integration with Rosetta does not require any BLS support.&lt;br /&gt;
&lt;br /&gt;
=== Creating and Broadcasting Transactions ===&lt;br /&gt;
Valid transaction requests need to be signed and sent to the corresponding token ledger using the token ledger’s https API. There are libraries for Rust, C, Go, TypeScript, etc.&lt;br /&gt;
&lt;br /&gt;
Rosetta API takes care of both transaction request creation and broadcasting.&lt;br /&gt;
&lt;br /&gt;
=== Querying Balances and Transactions ===&lt;br /&gt;
Token ledgers on ICP create a new block for every transaction, the current practical limit of transactions per second per ledger is 400-600 tps.&lt;br /&gt;
&lt;br /&gt;
Good to know for analytics &amp;amp; reporting use cases: ICP &amp;amp; ICRC Rosetta containers include a sqlite instance that stores all the relevant information for direct querying. Though, to be clear, that’s not a formally supported interface under the Rosetta standard.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker] image for integrators building on ICP. [https://docs.cloud.coinbase.com/rosetta/docs/welcome Rosetta is an open standard designed by Coinbase] to simplify blockchain deployment and interaction; this allows integrators to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
Rosetta supports all the following use cases:&lt;br /&gt;
&lt;br /&gt;
* Querying verified balances &amp;amp; transactions for ICP and ICRC tokens&lt;br /&gt;
* Creating transaction requests for ICP and ICRC token transfers&lt;br /&gt;
* Creating transaction requests for all steps of the ICP staking / voting workflow&lt;br /&gt;
* Broadcasting signed requests&lt;br /&gt;
&lt;br /&gt;
Each token ledger requires its own Rosetta container for local data storage, i.e. integrators will deploy the ICP Rosetta container for ICP token support, and deploy the ICRC Rosetta container multiple times for supporting multiple ICRC tokens.&lt;br /&gt;
&lt;br /&gt;
Compute, memory and storage requirements are minimal, as the heavy lifting computing happens on ICP, and Rosetta acts more like a light node. As of Q2 2024, the biggest container size is the ICP Rosetta container with about 10 GiB space required for the complete 3+ year history.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then integrators interact with ICP or ICRC ledgers directly using their https API.&lt;br /&gt;
&lt;br /&gt;
This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* Candid, the language used to specify the interfaces of smart contracts running on ICP&lt;br /&gt;
&lt;br /&gt;
* API and execution model of ICP&lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* API of the ICP ledger (in particular how to fetch and verify the transaction chain)&lt;br /&gt;
* API of the Governance smart contract (for implementing staking and staking related operations)&lt;br /&gt;
* The ICRC-1 and ICRC-3 standards to support ICRC tokens&lt;br /&gt;
&lt;br /&gt;
There are libraries available from Dfinity for JavaScript/TypeScript ([https://github.com/dfinity/agent-js agent-js]) and Rust ([https://docs.rs/ic-agent/latest/ic_agent/ agent-rs]) as well as third-party libraries for other languages incl. Java, C, C++ and Go.&lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is similar to delegated PoS, but with some key differences:&lt;br /&gt;
&lt;br /&gt;
* ICP staking rewards active voting instead of the typical block creation &amp;amp; validation activity. The factors influencing voting rewards are: staked amount, dissolve delay, age bonus, voting activity (the bigger the better)&lt;br /&gt;
* It doesn’t require a validator infrastructure because the voting process runs as a smart contract on ICP. &lt;br /&gt;
* Staking sends assets from a custody address to an address type called “neuron”, managed by the Network Nervous System dapp, NNS. The neuron continuous to be controlled by the same private key as the sending custody address (similar to ETH staking)&lt;br /&gt;
* Instead of actively voting on all proposals, a staker can delegate their vote to someone else’s neuron, this is called “following a neuron”&lt;br /&gt;
* The unlocking period (called “dissolve delay”) can be up to 8 years for maximum rewards. Note that during the last 6 months of the unlocking period, no more rewards will be paid out, meaning that the minimum viable dissolve delay is 6 months.. &lt;br /&gt;
&lt;br /&gt;
See the chart below for an overview of the main custody-related workflows[[File:ICP staking flow chart.png|alt=ICP staking flow chart|frameless|927x927px]]&lt;br /&gt;
&lt;br /&gt;
=== ICRC Token Standards ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1] and ICRC-3 token standards were created to facilitate handling of tokens on ICP through a common interface, similar to ERC-20 on Ethereum. It is expected that, going forward, all tokens will support them.&lt;br /&gt;
&lt;br /&gt;
ICP and ICRC tokens have close but not 100% API compatibility, which needs to be considered when using native integration. Another gotcha to consider when going from ICP to ICRC is that the ICP ledger uses a hashed representation of the principal, subaccount pair, while interactions with ICRC ledgers require and use the principal, subaccount pair in plaintext. (Although, to confuse things further, Dfinity’s [https://dashboard.internetcomputer.org/ dashboard block explorer] uses the hashed representation also for ICRC token addresses).&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to go on about a native integration.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Copper, Taurus and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7736</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7736"/>
		<updated>2024-05-02T13:21:59Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: /* Integration with Rosetta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is aimed at product owners and architects at custody providers and analytics/reporting firms (“Integrators”) who’d like to get an overview of the integration architecture required for supporting the ICP token and ICP network tokens following the ICRC standards (“ICRC tokens”).&lt;br /&gt;
&lt;br /&gt;
=== Introduction to Internet Computer (ICP) Integrations ===&lt;br /&gt;
First, the canonical [[Introduction to ICP]]. BTW, we use “ICP” interchangeably for the protocol, the network and the token!&lt;br /&gt;
&lt;br /&gt;
The TL;DR from ICP’s 3rd generation approach are:&lt;br /&gt;
&lt;br /&gt;
# You don’t run a node to validate transactions block by block. Instead, you get the block(s) in question using https APIs and verify them using ICP’s 48 byte BLS master public key.&lt;br /&gt;
# BLS is only needed for chain validation, i.e. in online systems. Transaction signing requires ECDSA or Ed25519, at least one of which is available in every crypto HSM and MPC library.&lt;br /&gt;
# You don’t need an off-chain RPC node: ICP and ICRC token ledgers are ICP canisters (ICP’s name for smart contracts) and have https APIs as primary interface to read balance and transaction data and submit new transactions for broadcasting.&lt;br /&gt;
&lt;br /&gt;
Additionally, Dfinity offers an open source implementation of Coinbase’s Rosetta API as a Docker container. It provides a simple interface to query ICP and ICRC token balances &amp;amp; transactions, as well as prepare and broadcast custody &amp;amp; staking transactions.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
&lt;br /&gt;
==== Transaction signing: ECDSA or Ed25519 ====&lt;br /&gt;
Integrators that send requests to the Internet Computer authenticate the request via a digital signature on a 32-byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256).&lt;br /&gt;
&lt;br /&gt;
==== Transaction verification: BLS ====&lt;br /&gt;
Integrators also need to support verification of BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
Rosetta takes care of this internally, i.e. integration with Rosetta does not require any BLS support.&lt;br /&gt;
&lt;br /&gt;
=== Creating and Broadcasting Transactions ===&lt;br /&gt;
Valid transaction requests need to be signed and sent to the corresponding token ledger using the token ledger’s https API. There are libraries for Rust, C, Go, TypeScript, etc.&lt;br /&gt;
&lt;br /&gt;
Rosetta API takes care of both transaction request creation and broadcasting.&lt;br /&gt;
&lt;br /&gt;
=== Querying Balances and Transactions ===&lt;br /&gt;
Token ledgers on ICP create a new block for every transaction, the current practical limit of transactions per second per ledger is 400-600 tps.&lt;br /&gt;
&lt;br /&gt;
Good to know for analytics &amp;amp; reporting use cases: ICP &amp;amp; ICRC Rosetta containers include a sqlite instance that stores all the relevant information for direct querying. Though, to be clear, that’s not a formally supported interface under the Rosetta standard.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker] image for integrators building on ICP. [https://docs.cloud.coinbase.com/rosetta/docs/welcome Rosetta is an open standard designed by Coinbase] to simplify blockchain deployment and interaction; this allows integrators to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
Rosetta supports all the following use cases:&lt;br /&gt;
&lt;br /&gt;
* Querying verified balances &amp;amp; transactions for ICP and ICRC tokens&lt;br /&gt;
* Creating transaction requests for ICP and ICRC token transfers&lt;br /&gt;
* Creating transaction requests for all steps of the ICP staking / voting workflow&lt;br /&gt;
* Broadcasting signed requests&lt;br /&gt;
&lt;br /&gt;
Each token ledger requires its own Rosetta container for local data storage, i.e. integrators will deploy the ICP Rosetta container for ICP token support, and deploy the ICRC Rosetta container multiple times for supporting multiple ICRC tokens.&lt;br /&gt;
&lt;br /&gt;
Compute, memory and storage requirements are minimal, as the heavy lifting computing happens on ICP, and Rosetta acts more like a light node. As of Q2 2024, the biggest container size is the ICP Rosetta container with about 10 GiB space required for the complete 3+ year history.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then integrators interact with ICP or ICRC ledgers directly using their https API.&lt;br /&gt;
&lt;br /&gt;
This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* Candid, the language used to specify the interfaces of smart contracts running on ICP&lt;br /&gt;
&lt;br /&gt;
* API and execution model of ICP&lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* API of the ICP ledger (in particular how to fetch and verify the transaction chain)&lt;br /&gt;
* API of the Governance smart contract (for implementing staking and staking related operations)&lt;br /&gt;
* The ICRC-1 and ICRC-3 standards to support ICRC tokens&lt;br /&gt;
&lt;br /&gt;
There are libraries available from Dfinity for JavaScript/TypeScript ([https://github.com/dfinity/agent-js agent-js]) and Rust ([https://docs.rs/ic-agent/latest/ic_agent/ agent-rs]) as well as third-party libraries for other languages incl. Java, C, C++ and Go.&lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is similar to delegated PoS, but with some key differences:&lt;br /&gt;
&lt;br /&gt;
* ICP staking rewards active voting instead of the typical block creation &amp;amp; validation activity. The factors influencing voting rewards are: staked amount, dissolve delay, age bonus, voting activity (the bigger the better)&lt;br /&gt;
* It doesn’t require a validator infrastructure because the voting process runs as a smart contract on ICP. &lt;br /&gt;
* Staking sends assets from a custody address to an address type called “neuron”, managed by the Network Nervous System dapp, NNS. The neuron continuous to be controlled by the same private key as the sending custody address (similar to ETH staking)&lt;br /&gt;
* Instead of actively voting on all proposals, a staker can delegate their vote to someone else’s neuron, this is called “following a neuron”&lt;br /&gt;
* The unlocking period (called “dissolve delay”) can be up to 8 years for maximum rewards. Note that during the last 6 months of the unlocking period, no more rewards will be paid out, meaning that the minimum viable dissolve delay is 6 months.. &lt;br /&gt;
&lt;br /&gt;
See the chart below for an overview of the main custody-related workflows[[File:ICP staking flow chart.png|alt=ICP staking flow chart|frameless|927x927px]]&lt;br /&gt;
&lt;br /&gt;
=== ICRC Token Standards ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1] and ICRC-3 token standards were created to facilitate handling of tokens on ICP through a common interface, similar to ERC-20 on Ethereum. It is expected that, going forward, all tokens will support them.&lt;br /&gt;
&lt;br /&gt;
ICP and ICRC tokens have close but not 100% API compatibility, which needs to be considered when using native integration. Another gotcha to consider when going from ICP to ICRC is that the ICP ledger uses a hashed representation of the principal, subaccount pair, while interactions with ICRC ledgers require and use the principal, subaccount pair in plaintext. (Although, to confuse things further, Dfinity’s [https://dashboard.internetcomputer.org/ dashboard block explorer] uses the hashed representation also for ICRC token addresses).&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to interact with boundary nodes.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Zondax and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7735</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7735"/>
		<updated>2024-05-02T13:17:07Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer (ICP) Integration for Custody and Reporting ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers and analytics/reporting firms (“Integrators”) who’d like to get an overview of the integration architecture required for supporting the ICP token and ICP network tokens following the ICRC standards (“ICRC tokens”).&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP Integrations ===&lt;br /&gt;
First, the canonical [[Introduction to ICP]]. BTW, we use “ICP” interchangeably for the protocol, the network and the token!&lt;br /&gt;
&lt;br /&gt;
The TL;DR from ICP’s 3rd generation approach are:&lt;br /&gt;
&lt;br /&gt;
# You don’t run a node to validate transactions block by block. Instead, you get the block(s) in question using https APIs and verify them using ICP’s 48 byte BLS master public key.&lt;br /&gt;
# BLS is only needed for chain validation, i.e. in online systems. Transaction signing requires ECDSA or Ed25519, at least one of which is available in every crypto HSM and MPC library.&lt;br /&gt;
# You don’t need an off-chain RPC node: ICP and ICRC token ledgers are ICP canisters (ICP’s name for smart contracts) and have https APIs as primary interface to read balance and transaction data and submit new transactions for broadcasting.&lt;br /&gt;
&lt;br /&gt;
Finally, Dfinity offers an open source implementation of Coinbase’s Rosetta API as a Docker container. It provides a simple interface to query ICP and ICRC token balances &amp;amp; transactions, as well as prepare and broadcast custody &amp;amp; staking transactions.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
&lt;br /&gt;
==== Transaction signing: ECDSA or Ed25519 ====&lt;br /&gt;
Integrators that send requests to the Internet Computer authenticate the request via a digital signature on a 32-byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256).&lt;br /&gt;
&lt;br /&gt;
==== Transaction verification: BLS ====&lt;br /&gt;
Integrators also need to support verification of BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
Rosetta takes care of this internally, i.e. integration with Rosetta does not require any BLS support.&lt;br /&gt;
&lt;br /&gt;
=== Creating and Broadcasting Transactions ===&lt;br /&gt;
Valid transaction requests need to be signed and sent to the corresponding token ledger using the token ledger’s https API. There are libraries for Rust, C, Go, TypeScript, etc.&lt;br /&gt;
&lt;br /&gt;
Rosetta API takes care of both transaction request creation and broadcasting.&lt;br /&gt;
&lt;br /&gt;
=== Querying Balances and Transactions ===&lt;br /&gt;
Token ledgers on ICP create a new block for every transaction, the current practical limit of transactions per second per ledger is 400-600 tps.&lt;br /&gt;
&lt;br /&gt;
Good to know for analytics &amp;amp; reporting use cases: ICP &amp;amp; ICRC Rosetta containers include a sqlite instance that stores all the relevant information for direct querying. Though, to be clear, that’s not a formally supported interface under the Rosetta standard.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker] image for integrators building on ICP. [https://docs.cloud.coinbase.com/rosetta/docs/welcome Rosetta is an open standard designed by Coinbase] to simplify blockchain deployment and interaction; this allows integrators to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
Rosetta supports all the following use cases:&lt;br /&gt;
&lt;br /&gt;
* Querying verified balances &amp;amp; transactions for ICP and ICRC tokens&lt;br /&gt;
* Creating transaction requests for ICP and ICRC token transfers&lt;br /&gt;
* Creating transaction requests for all steps of the ICP staking / voting workflow&lt;br /&gt;
* Broadcasting signed requests&lt;br /&gt;
&lt;br /&gt;
Each token ledger requires its own Rosetta container for local data storage, i.e. you will deploy the ICP Rosetta container for ICP token support, and deploy the ICRC Rosetta container multiple times for supporting multiple ICRC tokens.&lt;br /&gt;
&lt;br /&gt;
Compute, memory and storage requirements are minimal, as the heavy lifting computing happens on ICP, and Rosetta acts more like a light node. As of Q2 2024, the biggest container size is the ICP Rosetta container with about 10 GiB space required for the complete 3+ year history.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then integrators interact with ICP or ICRC ledgers directly using their https API.&lt;br /&gt;
&lt;br /&gt;
This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* Candid, the language used to specify the interfaces of smart contracts running on ICP&lt;br /&gt;
&lt;br /&gt;
* API and execution model of ICP&lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* API of the ICP ledger (in particular how to fetch and verify the transaction chain)&lt;br /&gt;
* API of the Governance smart contract (for implementing staking and staking related operations)&lt;br /&gt;
* The ICRC-1 and ICRC-3 standards to support ICRC tokens&lt;br /&gt;
&lt;br /&gt;
There are libraries available from Dfinity for JavaScript/TypeScript ([https://github.com/dfinity/agent-js agent-js]) and Rust ([https://docs.rs/ic-agent/latest/ic_agent/ agent-rs]) as well as third-party libraries for other languages incl. Java, C, C++ and Go.&lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is similar to delegated PoS, but with some key differences:&lt;br /&gt;
&lt;br /&gt;
* ICP staking rewards active voting instead of the typical block creation &amp;amp; validation activity. The factors influencing voting rewards are: staked amount, dissolve delay, age bonus, voting activity (the bigger the better)&lt;br /&gt;
* It doesn’t require a validator infrastructure because the voting process runs as a smart contract on ICP. &lt;br /&gt;
* Staking sends assets from a custody address to an address type called “neuron”, managed by the Network Nervous System dapp, NNS. The neuron continuous to be controlled by the same private key as the sending custody address (similar to ETH staking)&lt;br /&gt;
* Instead of actively voting on all proposals, a staker can delegate their vote to someone else’s neuron, this is called “following a neuron”&lt;br /&gt;
* The unlocking period (called “dissolve delay”) can be up to 8 years for maximum rewards. Note that during the last 6 months of the unlocking period, no more rewards will be paid out, meaning that the minimum viable dissolve delay is 6 months.. &lt;br /&gt;
&lt;br /&gt;
See the chart below for an overview of the main custody-related workflows[[File:ICP staking flow chart.png|alt=ICP staking flow chart|frameless|927x927px]]&lt;br /&gt;
&lt;br /&gt;
=== ICRC Token Standards ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1] and ICRC-3 token standards were created to facilitate handling of tokens on ICP through a common interface, similar to ERC-20 on Ethereum. It is expected that, going forward, all tokens will support them.&lt;br /&gt;
&lt;br /&gt;
ICP and ICRC tokens have close but not 100% API compatibility, which needs to be considered when using native integration. Another gotcha to consider when going from ICP to ICRC is that the ICP ledger uses a hashed representation of the principal, subaccount pair, while interactions with ICRC ledgers require and use the principal, subaccount pair in plaintext. (Although, to confuse things further, Dfinity’s [https://dashboard.internetcomputer.org/ dashboard block explorer] uses the hashed representation also for ICRC token addresses).&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to interact with boundary nodes.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Zondax and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7734</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=7734"/>
		<updated>2024-05-02T13:15:16Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: Major rewrite based on last 6 months of custody &amp;amp; AML provider interactions and better understanding gained from working with the FI team&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer (ICP) Integration for Custody and Reporting ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers and analytics/reporting firms (“Integrators”) who’d like to get an overview of the integration architecture required for supporting the ICP token and ICP network tokens following the ICRC standards (“ICRC tokens”).&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP and what You need to know about the Blockchain ===&lt;br /&gt;
First, the canonical [[Introduction to ICP]]. BTW, we use “ICP” interchangeably for the protocol, the network and the token!&lt;br /&gt;
&lt;br /&gt;
The TL;DR from ICP’s 3rd generation approach are:&lt;br /&gt;
&lt;br /&gt;
# You don’t run a node to validate transactions block by block. Instead, you get the block(s) in question using https APIs and verify them using ICP’s 48 byte BLS master public key.&lt;br /&gt;
# BLS is only needed for chain validation, i.e. in online systems. Transaction signing requires ECDSA or Ed25519, at least one of which is available in every crypto HSM and MPC library.&lt;br /&gt;
# You don’t need an off-chain RPC node: ICP and ICRC token ledgers are ICP canisters (ICP’s name for smart contracts) and have https APIs as primary interface to read balance and transaction data and submit new transactions for broadcasting.&lt;br /&gt;
&lt;br /&gt;
Finally, Dfinity offers an open source implementation of Coinbase’s Rosetta API as a Docker container. It provides a simple interface to query ICP and ICRC token balances &amp;amp; transactions, as well as prepare and broadcast custody &amp;amp; staking transactions.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
&lt;br /&gt;
==== Transaction signing: ECDSA or Ed25519 ====&lt;br /&gt;
Integrators that send requests to the Internet Computer authenticate the request via a digital signature on a 32-byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256).&lt;br /&gt;
&lt;br /&gt;
==== Transaction verification: BLS ====&lt;br /&gt;
Integrators also need to support verification of BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
Rosetta takes care of this internally, i.e. integration with Rosetta does not require any BLS support.&lt;br /&gt;
&lt;br /&gt;
=== Creating and Broadcasting Transactions ===&lt;br /&gt;
Valid transaction requests need to be signed and sent to the corresponding token ledger using the token ledger’s https API. There are libraries for Rust, C, Go, TypeScript, etc.&lt;br /&gt;
&lt;br /&gt;
Rosetta API takes care of both transaction request creation and broadcasting.&lt;br /&gt;
&lt;br /&gt;
=== Querying Balances and Transactions ===&lt;br /&gt;
Token ledgers on ICP create a new block for every transaction, the current practical limit of transactions per second per ledger is 400-600 tps.&lt;br /&gt;
&lt;br /&gt;
Good to know for analytics &amp;amp; reporting use cases: ICP &amp;amp; ICRC Rosetta containers include a sqlite instance that stores all the relevant information for direct querying. Though, to be clear, that’s not a formally supported interface under the Rosetta standard.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker] image for integrators building on ICP. [https://docs.cloud.coinbase.com/rosetta/docs/welcome Rosetta is an open standard designed by Coinbase] to simplify blockchain deployment and interaction; this allows integrators to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
Rosetta supports all the following use cases:&lt;br /&gt;
&lt;br /&gt;
* Querying verified balances &amp;amp; transactions for ICP and ICRC tokens&lt;br /&gt;
* Creating transaction requests for ICP and ICRC token transfers&lt;br /&gt;
* Creating transaction requests for all steps of the ICP staking / voting workflow&lt;br /&gt;
* Broadcasting signed requests&lt;br /&gt;
&lt;br /&gt;
Each token ledger requires its own Rosetta container for local data storage, i.e. you will deploy the ICP Rosetta container for ICP token support, and deploy the ICRC Rosetta container multiple times for supporting multiple ICRC tokens.&lt;br /&gt;
&lt;br /&gt;
Compute, memory and storage requirements are minimal, as the heavy lifting computing happens on ICP, and Rosetta acts more like a light node. As of Q2 2024, the biggest container size is the ICP Rosetta container with about 10 GiB space required for the complete 3+ year history.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then integrators interact with ICP or ICRC ledgers directly using their https API.&lt;br /&gt;
&lt;br /&gt;
This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* Candid, the language used to specify the interfaces of smart contracts running on ICP&lt;br /&gt;
&lt;br /&gt;
* API and execution model of ICP&lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* API of the ICP ledger (in particular how to fetch and verify the transaction chain)&lt;br /&gt;
* API of the Governance smart contract (for implementing staking and staking related operations)&lt;br /&gt;
* The ICRC-1 and ICRC-3 standards to support ICRC tokens&lt;br /&gt;
&lt;br /&gt;
There are libraries available from Dfinity for JavaScript/TypeScript ([https://github.com/dfinity/agent-js agent-js]) and Rust ([https://docs.rs/ic-agent/latest/ic_agent/ agent-rs]) as well as third-party libraries for other languages incl. Java, C, C++ and Go.&lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is similar to delegated PoS, but with some key differences:&lt;br /&gt;
&lt;br /&gt;
* ICP staking rewards active voting instead of the typical block creation &amp;amp; validation activity. The factors influencing voting rewards are: staked amount, dissolve delay, age bonus, voting activity (the bigger the better)&lt;br /&gt;
* It doesn’t require a validator infrastructure because the voting process runs as a smart contract on ICP. &lt;br /&gt;
* Staking sends assets from a custody address to an address type called “neuron”, managed by the Network Nervous System dapp, NNS. The neuron continuous to be controlled by the same private key as the sending custody address (similar to ETH staking)&lt;br /&gt;
* Instead of actively voting on all proposals, a staker can delegate their vote to someone else’s neuron, this is called “following a neuron”&lt;br /&gt;
* The unlocking period (called “dissolve delay”) can be up to 8 years for maximum rewards. Note that during the last 6 months of the unlocking period, no more rewards will be paid out, meaning that the minimum viable dissolve delay is 6 months.. &lt;br /&gt;
&lt;br /&gt;
See the chart below for an overview of the main custody-related workflows[[File:ICP staking flow chart.png|alt=ICP staking flow chart|frameless|927x927px]]&lt;br /&gt;
&lt;br /&gt;
=== ICRC Token Standards ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1] and ICRC-3 token standards were created to facilitate handling of tokens on ICP through a common interface, similar to ERC-20 on Ethereum. It is expected that, going forward, all tokens will support them.&lt;br /&gt;
&lt;br /&gt;
ICP and ICRC tokens have close but not 100% API compatibility, which needs to be considered when using native integration. Another gotcha to consider when going from ICP to ICRC is that the ICP ledger uses a hashed representation of the principal, subaccount pair, while interactions with ICRC ledgers require and use the principal, subaccount pair in plaintext. (Although, to confuse things further, Dfinity’s [https://dashboard.internetcomputer.org/ dashboard block explorer] uses the hashed representation also for ICRC token addresses).&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to interact with boundary nodes.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Zondax and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=File:ICP_staking_flow_chart.png&amp;diff=7733</id>
		<title>File:ICP staking flow chart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=File:ICP_staking_flow_chart.png&amp;diff=7733"/>
		<updated>2024-05-02T13:08:00Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A graphical representation of the steps involved in staking ICP and managing a neuron&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=6449</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=6449"/>
		<updated>2023-09-19T14:16:38Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: /* Staking */ added the main custody-related workflows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer Integration for Custody Providers ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers who’d like to get an overview of the integration tasks ahead, before diving deeper into implementation details.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP and what You need to know about the Blockchain ===&lt;br /&gt;
First, the [[Introduction to ICP]].&lt;br /&gt;
&lt;br /&gt;
Second, it&#039;s worth repeating that a node in the terminology of the IC refers to a computer executing canisters (i.e. the smart contract / WASM runtime). Custody providers do not interact with these nodes. Instead, they integrate with Rosetta (see below) or so-called [[Boundary Nodes|boundary nodes]]. API boundary nodes provide a public endpoint for the IC and route all incoming requests to the right subnet, load-balance requests across replica nodes, and cache responses for improved performance.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
Parties that send requests to the Internet Computer authenticate themselves via a digital signature on a 32-byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256.)&lt;br /&gt;
&lt;br /&gt;
Custodians also need to support verification of BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
=== Balances and Transactions ===&lt;br /&gt;
Balance and transaction information needs to be polled from Rosetta API or a boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY’s Financial Integration team provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker image] for custody providers and other infrastructure providers building on the IC. [https://www.rosetta-api.org/ Rosetta is an open standard] designed by Coinbase to simplify blockchain deployment and interaction; this allows custody providers to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then custody providers interact with the network directly through a [[Boundary Nodes|boundary node]].&lt;br /&gt;
&lt;br /&gt;
To integrate tokens on the ICP blockchain (including the native ICP token) providers need to interact with the smart contracts that maintain the tokens. This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* Candid, the language used to specify the interfaces of smart contracts running on the IC&lt;br /&gt;
&lt;br /&gt;
* API and execution model of the IC &lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* API of the ICP Ledger (in particular how to fetch and verify the transaction chain)&lt;br /&gt;
* API of the Governance smart contract (for implementing staking and staking related operations)&lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is kind of like delegated PoS, but also different in key areas. Staking assets participate in on-chain governance instead of transaction validation, and this governance runs in NNS, i.e. does not require a stand-alone validator infrastructure. &lt;br /&gt;
&lt;br /&gt;
The main custody-related workflows are: 1. stake neuron (-&amp;gt; start staking), 2. follow another neuron (-&amp;gt; delegation), 3. spawn a neuron (-&amp;gt; claim rewards), 4. dissolve a neuron (-&amp;gt; stop staking), 5. disburse a neuron (-&amp;gt; move claimed rewards or dissolved staking assets back to a normal address). Additionally, the actual voting process could be implemented. &lt;br /&gt;
&lt;br /&gt;
Main facts of relevance for custody integration:&lt;br /&gt;
&lt;br /&gt;
* Staking rewards are earned through ICP lock-up (6m-8y) and participation in on-chain governance (~10 votes/day), not through validation of blocks. &lt;br /&gt;
* There is no separate validator infrastructure, things happen on-chain.&lt;br /&gt;
* Every staking entry creates a so-called Neuron. A private key (and principal ID) can have many neurons.&lt;br /&gt;
* Staking properties (timing, unlock, rewards, voting) are managed at the Neuron level&lt;br /&gt;
* Most Neuron metadata incl. amounts, staking timelines, etc. are not public on-chain, instead need to be queried using signed transactions &lt;br /&gt;
* Voting can be delegated to other staking participants, it is called to “follow a neuron”. This is the recommended setup, as we don’t expect custodians to vote 10 times daily (average # daily votes in 2023)…&lt;br /&gt;
* Leaving staking starts with “dissolving” a neuron, at which time the unlock timer starts (e.g. 8 years) and the rewards are reduced&lt;br /&gt;
* Getting maximum rewards requires (i) maximum lock-up (8y), (ii) that the neuron is not in dissolving state, and (iii) that all votes are voted on (yes or no - pass does not count)&lt;br /&gt;
* Accumulated rewards can be (i) restaked automatically -- this is the default, (ii) automatically participate in the on-chain social fundraising activities (“Neuron’s Fund”) on SNS, or (iii) be liquidated after a 7-day waiting period, which starts with “spawning” of rewards ICP&lt;br /&gt;
* Staking does not require a validator infrastructure or any other on-line infrastructure as all the on-line operations are facilitated by the Internet Computer&lt;br /&gt;
* Staking support is implemented in the Rosetta container using a documented but unofficial API extension, as the main standard is tailored for D-PoS&lt;br /&gt;
&lt;br /&gt;
=== ICRC-1 Token Standard ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1 token standard] was created to facilitate handling of tokens on the IC through a common interface, similar to ERC-20. This standard is a key enabler for DAPPs developed on the IC launch their own token, i.e. tokenize and hand over control over the DAPP to a community of users, hence functioning and being governed as a DAO (“decentralized autonomous organization”). It is expected that, going forward, all tokens will support it.&lt;br /&gt;
&lt;br /&gt;
ICRC-1 tokens may use the SNS for on-chain governance similar to how ICP uses the NNS. We expect to provide a Rosetta API container for SNS and ICRC-1 tokens in about 6 months with 100% API compatibility to the main ICP Rosetta API (pending roadmap confirmation). &lt;br /&gt;
&lt;br /&gt;
SNS and NNS have close but not 100% API compatibility, which needs to be considered when using native integration via boundary nodes.&lt;br /&gt;
&lt;br /&gt;
=== Integration with the NNS Front-end ===&lt;br /&gt;
Mentioned for completeness sake: the IC operates an on-chain online wallet for rapid on-boarding of end-users with negligible amounts of assets. It is not recommended for institutional use or a significant amount of assets.&lt;br /&gt;
&lt;br /&gt;
Users create an identity on the Internet Identity service, which under the hood creates a private key and distributes it on-chain using threshold secret sharing and chain-key cryptography. Users then use the NNS Front-end to manage their assets, including staking. Access to these websites is protected using Passkeys or a seed phrase.&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to interact with boundary nodes.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Zondax and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5931</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5931"/>
		<updated>2023-07-14T07:17:16Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: Section added about Support and more detailed documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer Integration for Custody Providers ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers who’d like to get an overview of the integration tasks ahead, before diving deeper into implementation details.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP and what You need to know about the Blockchain ===&lt;br /&gt;
First, the [[Introduction to ICP]].&lt;br /&gt;
&lt;br /&gt;
Second, it&#039;s worth repeating that a node in the terminology of the IC refers to a computer executing canisters (i.e. the smart contract / WASM runtime). Custody providers do not interact with these nodes. Instead, they integrate with Rosetta (see below) or so-called [[Boundary Nodes|boundary nodes]]. API boundary nodes provide a public endpoint for the IC and route all incoming requests to the right subnet, load-balance requests across replica nodes, and cache responses for improved performance.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
Parties that send requests to the Internet Computer authenticate themselves via a digital signature on a 32 byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256.)&lt;br /&gt;
&lt;br /&gt;
Custodians also need to support (threshold) BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
=== Balances and Transactions ===&lt;br /&gt;
Balance and transaction information needs to be polled from Rosetta API or a boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY’s Financial Integration team provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker image] for custody providers and other infrastructure providers building on the IC. [https://www.rosetta-api.org/ Rosetta is an open standard] designed by Coinbase to simplify blockchain deployment and interaction; this allows custody providers to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then custody providers interact with the network directly through a [[Boundary Nodes|boundary node]].&lt;br /&gt;
&lt;br /&gt;
To integrate tokens on the ICP blockchain (including the native ICP token) providers need to interact with the smart contracts that maintain the tokens.  This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* the execution model of the IC &lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* Candid, the service description language &lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is kind of like delegated PoS, but also different in key areas. &lt;br /&gt;
&lt;br /&gt;
Main facts of relevance for custody integration:&lt;br /&gt;
&lt;br /&gt;
* Staking rewards are earned through ICP lock-up (6m-8y) and participation in on-chain governance (~10 votes/day), not through validation of blocks. &lt;br /&gt;
* There is no separate validator infrastructure, things happen on-chain.&lt;br /&gt;
* Every staking entry creates a so-called Neuron. A private key (and principal ID) can have many neurons.&lt;br /&gt;
* Staking properties (timing, unlock, rewards, voting) are managed at the Neuron level&lt;br /&gt;
* Most Neuron metadata incl. amounts, staking timelines, etc. are not public on-chain, instead need to be queried using signed transactions &lt;br /&gt;
* Voting can be delegated to other staking participants, it is called to “follow a neuron”. This is the recommended setup, we don’t expect custodians to vote 10 times daily…&lt;br /&gt;
* Leaving staking starts with “dissolving” a neuron, at which time the unlock timer starts (e.g. 8 years) and the rewards are reduced&lt;br /&gt;
* Getting maximum rewards requires (i) maximum lock-up (8y), (ii) that the neuron is not in dissolving state, and (iii) that all votes are voted on (yes or no - pass does not count)&lt;br /&gt;
* Accumulated rewards can be (i, the default) restaked automatically, (ii) automatically participate in the on-chain social fundraising activities (“Neuron’s Fund”) on SNS, or (iii) be liquidated after a 7 day waiting period, which starts with manual “spawning” of rewards  ICP staking does not require a validator infrastructure or any other on-line infrastructure as all the on-line operations are facilitated by the Internet Computer&lt;br /&gt;
* Staking support is implemented in the Rosetta container using a documented but unofficial API extension, as the main standard is tailored for D-PoS&lt;br /&gt;
&lt;br /&gt;
=== ICRC-1 Token Standard ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1 token standard] was created to facilitate handling of tokens on the IC through a common interface, similar to ERC-20. This standard is a key enabler for DAPPs developed on the IC launch their own token, i.e. tokenize and hand over control over the DAPP to a community of users, hence functioning and being governed as a DAO (“decentralized autonomous organization”). It is expected that all tokens support it going forward.&lt;br /&gt;
&lt;br /&gt;
ICRC-1 tokens may use the SNS for on-chain governance similar to how ICP uses the NNS. We expect to provide a Rosetta API container for SNS and ICRC-1 tokens in about 6 months with 100% API compatibility to the main ICP Rosetta API (pending roadmap confirmation). &lt;br /&gt;
&lt;br /&gt;
SNS and NNS have close but not 100% API compatibility, which needs to be considered when using native integration on a Boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with the NNS Front-end ===&lt;br /&gt;
Mentioned for completeness sake: the IC operates an on-chain online wallet for rapid on-boarding of end-users with negligible amounts of assets. It is not recommended for institutional use or a significant amount of assets.&lt;br /&gt;
&lt;br /&gt;
Users create an identity on the Internet Identity service, which under the hood creates a private key and distributes it on-chain using TSS and chain-key cryptography. Users then use the NNS Front-end to manage their assets, including staking. Access to these websites is protected using Passkeys or a seed phrase.&lt;br /&gt;
&lt;br /&gt;
=== Support and more detailed documentation ===&lt;br /&gt;
More detailed documentation is available throughout this Wiki. And the [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API documentation is really a great resource for custody related ICP integrations]. Even when not using the Rosetta API, its source code can be used as an example of how to interact with boundary nodes.&lt;br /&gt;
&lt;br /&gt;
The [https://forum.dfinity.org/ Developer Forum] is the place to get support at any time, and is also frequently visited by the Dfinity team members who supported Coinbase, Sygnum, Zondax and other custody related ICP-integrations in the past.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5921</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5921"/>
		<updated>2023-07-13T16:55:55Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: Clarified usage of signature schemes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer Integration for Custody Providers ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers who’d like to get an overview of the integration tasks ahead, before diving deeper into implementation details.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP and what You need to know about the Blockchain ===&lt;br /&gt;
First, the [[Introduction to ICP]].&lt;br /&gt;
&lt;br /&gt;
Second, it&#039;s worth repeating that a node in the terminology of the IC refers to a computer executing canisters (i.e. the smart contract / WASM runtime). Custody providers do not interact with these nodes. Instead, they integrate with Rosetta (see below) or so-called [[Boundary Nodes|boundary nodes]]. API boundary nodes provide a public endpoint for the IC and route all incoming requests to the right subnet, load-balance requests across replica nodes, and cache responses for improved performance.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
Parties that send requests to the Internet Computer authenticate themselves via a digital signature on a 32 byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. Either one can be used. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256.)&lt;br /&gt;
&lt;br /&gt;
Custodians also need to support (threshold) BLS signatures to authenticate on-chain information such as balances, transactions. They are verifiable with the global master public key ([[chain key cryptography]]). &lt;br /&gt;
&lt;br /&gt;
=== Balances and Transactions ===&lt;br /&gt;
Balance and transaction information needs to be polled from Rosetta API or a boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY’s Financial Integration team provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker image] for custody providers and other infrastructure providers building on the IC. [https://www.rosetta-api.org/ Rosetta is an open standard] designed by Coinbase to simplify blockchain deployment and interaction; this allows custody providers to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then custody providers interact with the network directly through a [[Boundary Nodes|boundary node]].&lt;br /&gt;
&lt;br /&gt;
To integrate tokens on the ICP blockchain (including the native ICP token) providers need to interact with the smart contracts that maintain the tokens.  This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* the execution model of the IC &lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* Candid, the service description language &lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is kind of like delegated PoS, but also different in key areas. &lt;br /&gt;
&lt;br /&gt;
Main facts of relevance for custody integration:&lt;br /&gt;
&lt;br /&gt;
* Staking rewards are earned through ICP lock-up (6m-8y) and participation in on-chain governance (~10 votes/day), not through validation of blocks. &lt;br /&gt;
* There is no separate validator infrastructure, things happen on-chain.&lt;br /&gt;
* Every staking entry creates a so-called Neuron. A private key (and principal ID) can have many neurons.&lt;br /&gt;
* Staking properties (timing, unlock, rewards, voting) are managed at the Neuron level&lt;br /&gt;
* Most Neuron metadata incl. amounts, staking timelines, etc. are not public on-chain, instead need to be queried using signed transactions &lt;br /&gt;
* Voting can be delegated to other staking participants, it is called to “follow a neuron”. This is the recommended setup, we don’t expect custodians to vote 10 times daily…&lt;br /&gt;
* Leaving staking starts with “dissolving” a neuron, at which time the unlock timer starts (e.g. 8 years) and the rewards are reduced&lt;br /&gt;
* Getting maximum rewards requires (i) maximum lock-up (8y), (ii) that the neuron is not in dissolving state, and (iii) that all votes are voted on (yes or no - pass does not count)&lt;br /&gt;
* Accumulated rewards can be (i, the default) restaked automatically, (ii) automatically participate in the on-chain social fundraising activities (“Neuron’s Fund”) on SNS, or (iii) be liquidated after a 7 day waiting period, which starts with manual “spawning” of rewards  ICP staking does not require a validator infrastructure or any other on-line infrastructure as all the on-line operations are facilitated by the Internet Computer&lt;br /&gt;
* Staking support is implemented in the Rosetta container using a documented but unofficial API extension, as the main standard is tailored for D-PoS&lt;br /&gt;
&lt;br /&gt;
=== ICRC-1 Token Standard ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1 token standard] was created to facilitate handling of tokens on the IC through a common interface, similar to ERC-20. This standard is a key enabler for DAPPs developed on the IC launch their own token, i.e. tokenize and hand over control over the DAPP to a community of users, hence functioning and being governed as a DAO (“decentralized autonomous organization”). It is expected that all tokens support it going forward.&lt;br /&gt;
&lt;br /&gt;
ICRC-1 tokens may use the SNS for on-chain governance similar to how ICP uses the NNS. We expect to provide a Rosetta API container for SNS and ICRC-1 tokens in about 6 months with 100% API compatibility to the main ICP Rosetta API (pending roadmap confirmation). &lt;br /&gt;
&lt;br /&gt;
SNS and NNS have close but not 100% API compatibility, which needs to be considered when using native integration on a Boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with the NNS Front-end ===&lt;br /&gt;
Mentioned for completeness sake: the IC operates an on-chain online wallet for rapid on-boarding of end-users with negligible amounts of assets. It is not recommended for institutional use or a significant amount of assets.&lt;br /&gt;
&lt;br /&gt;
Users create an identity on the Internet Identity service, which under the hood creates a private key and distributes it on-chain using TSS and chain-key cryptography. Users then use the NNS Front-end to manage their assets, including staking. Access to these websites is protected using Passkeys or a seed phrase.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5920</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5920"/>
		<updated>2023-07-13T16:43:18Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer Integration for Custody Providers ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers who’d like to get an overview of the integration tasks ahead, before diving deeper into implementation details.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP and what You need to know about the Blockchain ===&lt;br /&gt;
First, the [[Introduction to ICP]].&lt;br /&gt;
&lt;br /&gt;
Second, it&#039;s worth repeating that a node in the terminology of the IC refers to a computer executing canisters (i.e. the smart contract / WASM runtime). Custody providers do not interact with these nodes. Instead, they integrate with Rosetta (see below) or so-called [[Boundary Nodes|boundary nodes]]. API boundary nodes provide a public endpoint for the IC and route all incoming requests to the right subnet, load-balance requests across replica nodes, and cache responses for improved performance.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
Parties that send requests to the Internet Computer authenticate themselves via a digital signature on a 32 byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256.)&lt;br /&gt;
&lt;br /&gt;
Outgoing information is authenticated by (threshold) BLS signatures, verifiable wrt to a global master public key. &lt;br /&gt;
&lt;br /&gt;
=== Balances and Transactions ===&lt;br /&gt;
Balance and transaction information needs to be polled from Rosetta API or a boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY’s Financial Integration team provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker image] for custody providers and other infrastructure providers building on the IC. [https://www.rosetta-api.org/ Rosetta is an open standard] designed by Coinbase to simplify blockchain deployment and interaction; this allows custody providers to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then custody providers interact with the network directly through a [[Boundary Nodes|boundary node]].&lt;br /&gt;
&lt;br /&gt;
To integrate tokens on the ICP blockchain (including the native ICP token) providers need to interact with the smart contracts that maintain the tokens.  This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* the execution model of the IC &lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* Candid, the service description language &lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is kind of like delegated PoS, but also different in key areas. &lt;br /&gt;
&lt;br /&gt;
Main facts of relevance for custody integration:&lt;br /&gt;
&lt;br /&gt;
* Staking rewards are earned through ICP lock-up (6m-8y) and participation in on-chain governance (~10 votes/day), not through validation of blocks. &lt;br /&gt;
* There is no separate validator infrastructure, things happen on-chain.&lt;br /&gt;
* Every staking entry creates a so-called Neuron. A private key (and principal ID) can have many neurons.&lt;br /&gt;
* Staking properties (timing, unlock, rewards, voting) are managed at the Neuron level&lt;br /&gt;
* Most Neuron metadata incl. amounts, staking timelines, etc. are not public on-chain, instead need to be queried using signed transactions &lt;br /&gt;
* Voting can be delegated to other staking participants, it is called to “follow a neuron”. This is the recommended setup, we don’t expect custodians to vote 10 times daily…&lt;br /&gt;
* Leaving staking starts with “dissolving” a neuron, at which time the unlock timer starts (e.g. 8 years) and the rewards are reduced&lt;br /&gt;
* Getting maximum rewards requires (i) maximum lock-up (8y), (ii) that the neuron is not in dissolving state, and (iii) that all votes are voted on (yes or no - pass does not count)&lt;br /&gt;
* Accumulated rewards can be (i, the default) restaked automatically, (ii) automatically participate in the on-chain social fundraising activities (“Neuron’s Fund”) on SNS, or (iii) be liquidated after a 7 day waiting period, which starts with manual “spawning” of rewards  ICP staking does not require a validator infrastructure or any other on-line infrastructure as all the on-line operations are facilitated by the Internet Computer&lt;br /&gt;
* Staking support is implemented in the Rosetta container using a documented but unofficial API extension, as the main standard is tailored for D-PoS&lt;br /&gt;
&lt;br /&gt;
=== ICRC-1 Token Standard ===&lt;br /&gt;
The [https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/ ICRC-1 token standard] was created to facilitate handling of tokens on the IC through a common interface, similar to ERC-20. This standard is a key enabler for DAPPs developed on the IC launch their own token, i.e. tokenize and hand over control over the DAPP to a community of users, hence functioning and being governed as a DAO (“decentralized autonomous organization”). It is expected that all tokens support it going forward.&lt;br /&gt;
&lt;br /&gt;
ICRC-1 tokens may use the SNS for on-chain governance similar to how ICP uses the NNS. We expect to provide a Rosetta API container for SNS and ICRC-1 tokens in about 6 months with 100% API compatibility to the main ICP Rosetta API (pending roadmap confirmation). &lt;br /&gt;
&lt;br /&gt;
SNS and NNS have close but not 100% API compatibility, which needs to be considered when using native integration on a Boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with the NNS Front-end ===&lt;br /&gt;
Mentioned for completeness sake: the IC operates an on-chain online wallet for rapid on-boarding of end-users with negligible amounts of assets. It is not recommended for institutional use or a significant amount of assets.&lt;br /&gt;
&lt;br /&gt;
Users create an identity on the Internet Identity service, which under the hood creates a private key and distributes it on-chain using TSS and chain-key cryptography. Users then use the NNS Front-end to manage their assets, including staking. Access to these websites is protected using Passkeys or a seed phrase.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
	<entry>
		<id>https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5919</id>
		<title>Custody Providers</title>
		<link rel="alternate" type="text/html" href="https://wiki.internetcomputer.org/w/index.php?title=Custody_Providers&amp;diff=5919"/>
		<updated>2023-07-13T14:56:07Z</updated>

		<summary type="html">&lt;p&gt;Markus.perdrizat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Internet Computer Integration for Custody Providers ===&lt;br /&gt;
This document is aimed at product owners and architects at custody providers who’d like to get an overview of the integration tasks ahead, before diving deeper into implementation details.&lt;br /&gt;
&lt;br /&gt;
=== Introduction to ICP and what You need to know about the Blockchain ===&lt;br /&gt;
First, the [[Introduction to ICP]].&lt;br /&gt;
&lt;br /&gt;
Second, it&#039;s worth repeating that a node in the terminology of the IC refers to a computer executing canisters (i.e. the smart contract / WASM runtime). Custody providers do not interact with these nodes. Instead, they integrate with Rosetta (see below) or so-called [[Boundary Nodes|boundary nodes]]. API boundary nodes provide a public endpoint for the IC and route all incoming requests to the right subnet, load-balance requests across replica nodes, and cache responses for improved performance.&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
Parties that send requests to the Internet Computer authenticate themselves via a digital signature on a 32 byte digest of the request. Currently supported signatures are vanilla Ed25519 and ECDSA (over secp256r1 and secp256k1) digital signature schemes. In addition, authentication can also use WebAuth signatures (either ECDSA on secp256r1 or RSA PKCS#1v1.5, both using SHA-256.)&lt;br /&gt;
&lt;br /&gt;
Outgoing information is authenticated by (threshold) BLS signatures, verifiable wrt to a global master public key. &lt;br /&gt;
&lt;br /&gt;
=== Balances and Transactions ===&lt;br /&gt;
Balance and transaction information needs to be polled from Rosetta API or a boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Rosetta ===&lt;br /&gt;
DFINTY’s Financial Integration team provides a [https://internetcomputer.org/docs/current/developer-docs/integrations/rosetta/ Rosetta API docker image] for custody providers and other infrastructure providers building on the IC. [https://www.rosetta-api.org/ Rosetta is an open standard] designed by Coinbase to simplify blockchain deployment and interaction; this allows custody providers to spend less time on integration and more time on novel blockchain advancements.&lt;br /&gt;
&lt;br /&gt;
=== Native Integration ===&lt;br /&gt;
If using the Rosetta API is not feasible for whatever reason, then custody providers interact with the network directly through a [[Boundary Nodes|boundary node]].&lt;br /&gt;
&lt;br /&gt;
To integrate tokens on the ICP blockchain (including the native ICP token) providers need to interact with the smart contracts that maintain the tokens.  This requires familiarity with:&lt;br /&gt;
&lt;br /&gt;
* the execution model of the IC &lt;br /&gt;
** requests are submitted, and replies need to be polled&lt;br /&gt;
** different types of requests yield different levels of trust in the response&lt;br /&gt;
* Candid, the service description language &lt;br /&gt;
&lt;br /&gt;
=== Staking ===&lt;br /&gt;
ICP [[Staking, voting and rewards|staking]] is kind of like delegated PoS, but also different in key areas. &lt;br /&gt;
&lt;br /&gt;
Main facts of relevance for custody integration:&lt;br /&gt;
&lt;br /&gt;
* Staking rewards are earned through ICP lock-up (6m-8y) and participation in on-chain governance (~10 votes/day), not through validation of blocks. &lt;br /&gt;
* There is no separate validator infrastructure, things happen on-chain.&lt;br /&gt;
* Every staking entry creates a so-called Neuron. A private key (and principal ID) can have many neurons.&lt;br /&gt;
* Staking properties (timing, unlock, rewards, voting) are managed at the Neuron level&lt;br /&gt;
* Most Neuron metadata incl. amounts, staking timelines, etc. are not public on-chain, instead need to be queried using signed transactions &lt;br /&gt;
* Voting can be delegated to other staking participants, it is called to “follow a neuron”. This is the recommended setup, we don’t expect custodians to vote 10 times daily…&lt;br /&gt;
* Leaving staking starts with “dissolving” a neuron, at which time the unlock timer starts (e.g. 8 years) and the rewards are reduced&lt;br /&gt;
* Getting maximum rewards requires (i) maximum lock-up (8y), (ii) that the neuron is not in dissolving state, and (iii) that all votes are voted on (yes or no - pass does not count)&lt;br /&gt;
* Accumulated rewards can be (i, the default) restaked automatically, (ii) automatically participate in the on-chain social fundraising activities (“Neuron’s Fund”) on SNS, or (iii) be liquidated after a 7 day waiting period, which starts with manual “spawning” of rewards  ICP staking does not require a validator infrastructure or any other on-line infrastructure as all the on-line operations are facilitated by the Internet Computer&lt;br /&gt;
* Staking support is implemented in the Rosetta container using a documented but unofficial API extension, as the main standard is tailored for D-PoS&lt;br /&gt;
&lt;br /&gt;
=== Token Standard ===&lt;br /&gt;
The ICRC-1 standard was created to facilitate handling of tokens on the IC through a common interface, similar to ERC-20. This standard is a key enabler for DAPPs developed on the IC launch their own token, i.e. tokenize and hand over control over the DAPP to a community of users, hence functioning and being governed as a DAO (“decentralized autonomous organization”). It is expected that all tokens support it going forward.&lt;br /&gt;
&lt;br /&gt;
ICRC-1 tokens may use the SNS for on-chain governance similar to how ICP uses the NNS. We expect to provide a Rosetta API container for SNS and ICRC-1 tokens in about 6 months with 100% API compatibility to the main ICP Rosetta API (pending roadmap confirmation). &lt;br /&gt;
&lt;br /&gt;
SNS and NNS have close but not 100% API compatibility, which needs to be considered when using native integration on a Boundary node.&lt;br /&gt;
&lt;br /&gt;
=== Integration with the NNS Front-end ===&lt;br /&gt;
Mentioned for completeness sake: the IC operates an on-chain online wallet for rapid on-boarding of end-users with negligible amounts of assets. It is not recommended for institutional use or a significant amount of assets.&lt;br /&gt;
&lt;br /&gt;
Users create an identity on the Internet Identity service, which under the hood creates a private key and distributes it on-chain using TSS and chain-key cryptography. Users then use the NNS Front-end to manage their assets, including staking. Access to these websites is protected using Passkeys or a seed phrase.&lt;/div&gt;</summary>
		<author><name>Markus.perdrizat</name></author>
	</entry>
</feed>