Vince Chain Documentation
  • Vince Chain x Users
    • Getting Started
      • What is Vince Chain?
      • Vince Chain dApps
      • Vince Chain Features and Offerings.
    • Connecting Wallet
      • Blithe Wallet
        • Install Blithe Wallet
        • Set up Blithe Wallet account
        • Secure Blithe Wallet.
      • Metamask
        • Install Metamask
        • Set up Metamask account
        • Adding Vince Chain account manually on Metamask
        • Importing wallet on Metamask
        • Resetting Account​
        • Downloading Account State​
        • Registering for Vince Chain Domains​
      • Keplr
      • Ledger
      • Transferring Tokens on Vince Chain
      • View Balances
      • Vince Chain Onramp
      • Sending and receiving assets on Vince Chain
      • Deposit and Withdraw Assets across Chains​
    • Using dApp on Vince Chain
      • Queries and Transactions​
      • Vince Chain dApps
        • Staking​
        • Governance​
    • Frequently Asked Questions (FAQs)
  • 2. Vince Chain x Developers
    • Overview
      • Why build on Vince Chain?
      • Building dApps on Vince Chain
      • Contributing to Vince Chain Ecosystem
    • Building DApps & Smart Contracts
      • Deploying EVM Smart Contracts on Vince Chain
      • What are EVM Smart Contracts?
      • Smart Contracts & Solidity​
      • Smart Contracts & EVM Extensions
      • Smart Contracts & Oracles
      • Smart Contracts & JSON-RPC
      • Vince Explorers
      • Contract Verification
      • Post-project features on Vince Chain
    • Building a dApp front-end
      • Indexers
      • Wallet Integration
    • Building a dApp backend
    • Testnet
      • Security Audits
    • Mainnet
      • Deployment
      • Token distribution
      • Revenue
      • Vince Chain Community
    • Developer Kit
      • Block Explorers
      • Oracles
        • Oracle features
        • How do oracles work?
        • Vince Chain oracles
        • DIA
        • SEDA Network
        • Adrastia
      • Vince Client Integrations
        • Ethereum Client Integrations​
      • Contract Verification
      • Tools x Plugins x IDE
      • Indexers
        • Covalent: Indexer
    • Tools
      • Vince Chain Explorers
      • Oracles
      • Contract Verification
      • Tools & Plugins
      • Indexers
      • Vince Chain Client Integrations
    • API
      • Networks
      • Vince Clients
      • Ethereum JSON-RPC
      • Cosmos gRPC and REST Routes
      • Tendermint RPC
      • Snapshots & Archive Nodes
    • Frequently Asked Questions
  • 3. Vince Chain Protocols
    • Technical Architecture
      • Cosmos SDK
      • What is CometBFT?
      • Is Vince Chain compatible with EVM?
      • Contributing to Vince Chain
    • Vince Chain CLI
      • Configuration
      • Working with Docker
      • Single Node
      • Multi Node
      • CLI Commands
    • Concepts
      • Accounts
      • Vince Chain Accounts
        • Addresses and Public Keys
        • Address conversion
        • Key output
      • Querying an Account
        • Cosmos gRPC and REST
        • JSON-RPC
      • Chain ID
      • Vince Chain’s Identifiers
      • The Chain ID
      • Vince Chain ID Structure/Format
      • Encoding
        • Ethereum’s Recursive-Length Prefix (RLP) Encoding
        • Cosmos SDK Encoding
      • IBC Relayers
        • IBC layers
        • Restore & Manage Keys
      • Restore & Manage Keys
      • Keyring
        • Operating Systems (OS) Backends
        • File
        • Password Store
        • KDE Wallet Manager​
      • Transactions
        • Ethereum transactions
        • Cosmos Transactions
        • Vince Chain Transaction
      • Tokens
        • Overview
        • Vince Chain (VCE)
        • Ethereum (ETH)
        • Cosmos (ATOM)
      • Gas and Fees
        • What is Gas?
        • Why transaction fees are important.
        • Calculating Network Gas
        • Are Gas also fees? —What’s the relationship?
    • Modules
    • Module Accounts
    • Bugs
    • IBC Channels
    • Security
    • Metrics
    • Frequently Asked Questions
  • 4. Technical Documentation
    • Quick Start
    • Vince Tokenomics
    • Staking/Delegation
    • Set Up Validators
    • Keys and Wallets
    • JSON RPC & WebSockets
    • Node Requirements
    • Vince Chain Validators
      • Disk Space Optimization
      • Rewards Management
      • Validator Concepts
      • FAQ
    • Vince Chain Governance
    • Grants & Bounties
    • Resources
Powered by GitBook
On this page
  1. 3. Vince Chain Protocols
  2. Concepts
  3. Encoding

Cosmos SDK Encoding

PreviousEthereum’s Recursive-Length Prefix (RLP) EncodingNextIBC Relayers

Last updated 2 years ago

The Cosmos SDK utilizes two binary wire encoding protocols, which is an object encoding specification, and , a subset of Proto3 with an extension for interface support.

Due to Amino having significant performance drawbacks, being reflection-based, and not having any meaningful cross-language/client support, Protocol Buffers, specifically , are being used in place of Amino. Note that this process of using Protocol Buffers over Amino is still an ongoing process.

Binary wire encoding of types in the Cosmos SDK can be broken down into two main categories, client encoding and store encoding. Client encoding mainly revolves around transaction processing and signing, whereas store encoding revolves around types used in state-machine transitions and what is ultimately stored in the Merkle tree.

For store encoding, protobuf definitions can exist for any type and will typically have an Amino-based "intermediary" type. Specifically, the protobuf-based type definition is used for serialization and persistence, whereas the Amino-based type is used for business logic in the state-machine where they may convert back-n-forth. You must take note of the Amino-based types, which may slowly be phased out in the future, so developers should take note to use the protobuf message definitions where possible.

More reading at:

Amino
Protocol Buffers
gogoprotobuf
Cosmos SDK encoding