Table of contents Welcome Networks Release Notes v1.1.4 v1.2.0 MainNet Adding the COTI Mainnet to MetaMask Contracts Addresses TestNet Faucet Adding the COTI TestNet to Metamask Contracts Addresses How COTI Works Introduction EVM Introduction Conceptual Overview Use Cases COTI Architecture Advanced Topics Garbled Circuits AES Keys Precompiles Whitepaper COTI vs others Build on COTI Core Concepts Account Onboarding Procedure Private Data Types Supported Operations on Private Data Types Quickstart Guides Setting up COTI Snap with your MetaMask wallet Basic Private Smart Contract Account Onboard Sending a Transaction with Encrypted Inputs Resolving a Transaction's Encrypted Outputs Writing a Private Smart Contract Dos and Don'ts Proper Use of Types No Constant/Immutable Secret Types No Public Contract Variables Best Practices Careful Onboarding Careful Decrypting Don't loop over an array without an index Check Overflow Tools TypeScript SDK Ethers.js Python SDK Web3.py Contracts Library MPC Core Data Privacy Framework Tokens Private ERC20 Private ERC721 Onboard Hardhat Remix Plugin COTI MetaMask Snap Snap Integration Developer Sandbox Private Messaging TypeScript SDK Sending and Reading Messages Rewards Starter Grant Skills COTI Private Messaging COTI Rewards Management COTI Starter Grant Running a COTI Node COTI Node Ecosystem Litepaper Node Ecosystem Features Installation UI Guide Backend Services Glossary COTI Bridge Swap COTI V1 Funds to COTI V2 Support and Community Glossary Telegram Discord GitHub X YouTube COTI Builders Program COTI Privacy Portal User guide Prerequisites Setup Portal Account MetaMask Snap Setup Convert to Private Tokens Convert to Public Tokens Private Tokens on MetaMask Transfer Private Tokens Developer Guide PrivateERC20.sol Architecture Creating a New PrivateERC20 Token Minting Tokens Burning Tokens Reading Balances Contract Addresses Frontend Integration Troubleshooting Security Audit Reports