Contract Addresses
Canonical on-chain addresses for every Catpound vault and the supporting contracts they interact with. Verify any contract on-chain via the OPNet JSON-RPC method btc_getCode.
OPNet uses two parallel address encodings — bech32m (starts with op1 on mainnet, opt1 on testnet) and 0x-prefixed hex (32-byte ML-DSA key hash). Both refer to the same contract. Wallets, explorers, and the Catpound UI handle the translation.
Mainnet
Vaults
| Vault | Bech32 address | Hex address |
|---|---|---|
| cpMOTO | op1sqz2tfud8mg0fqy3sx2kxezsarzqm8mx2rs6rmlc0 | 0x88a647a8989a0bf3ab9f91459fd04771fb9678efd7ac4359c33ff48759877ee6 |
| PILL (v2 simplified) | op1sqrhg6h6kc62tfxv5m0p7ek5axlzh0yj295uug9kr | 0x992c64896d845c5b5c3b77160e81f696b649af197a5272804d02e6fc85676b26 |
| MCHAD (v2 simplified) | op1sqrkhh27y5j86te465a95ngyaa6l4xafdtv6r3qra | 0x9981cfa44f63f195f569454110b81564b9cba289c4d6266ae74351e3b7b4f6cb |
| OrangePill MOTO (v2 simplified) | op1sqq8kcm93ze2y0xaf05uca8nmkp7mzf05lg3klvnt | 0xf8e6b1e211d749830975ba403d5967e575e423ba66d9dbecfb52cff27667a677 |
| OrangePill MOTO/PILL LP (v2 simplified) | op1sqqtk705df5ev5nzcdw8dzaral3yxd6ldky7p0ne8 | 0x2acb6853ff1a71c3ee3ec1757038ae48382566723d16bf2d6c6307ce95d0ab5c |
The four v2 vaults above replace the tier/NFT/surcharge v1 versions deployed through March 2026. V1 addresses are retained in decommissioned-contracts.md for historical reference; all v1 user balances have been migrated or withdrawn. The v2 design is a flat 10% protocol fee on compound rewards — no NFT tier system, no whale-detection surcharge, no compounder ACL. Simpler math, no overflow risk.
Underlying tokens
| Token | Hex address | Decimals |
|---|---|---|
| MOTO | 0xc3d18f9d7db3f26ed107a9f4a4c65eef14c1ca73db5684ef9789fdd4fbb3ea9a | 18 |
| PILL | 0xc6c3674b1c6c4ca3d4b3652d1d6fc2b197f45c4ad1eda90d37952472719d1c05 | 18 |
| MCHAD | 0x8d325ab5516f23dce15d650f58a160a2c1c2515bda3f0212ca0b8b2b5705b4ab | 8 |
| MOTO/PILL LP | 0xf8bf27905acd0d440048d78c1512b468d3139495f6e72c14733813a065302031 | 18 |
Supporting infrastructure
| Contract | Hex address |
|---|---|
| MotoChef | 0xab99e31ebb30b8e596d5be1bd1e501ee8e7b7e5ec9dc7ee880f4937b0c929dcb |
| Catpound NFT | op1sqqfa70lnq5ysufna060pp02uaurxslpq05kfp2pw |
Testnet (OPNet Testnet — bech32 HRP opt)
| Vault | Bech32 address |
|---|---|
| cpMOTO | opt1sqplm4d7sh08vllp99fmmsytcn264uuznuu2a9cqr |
| PILL | opt1sqphgq2zjumvsrstqtfsncgmhfp97zdy43yycmely |
| MCHAD | opt1sqzqxhc9q0f3rkjjdhfjccanvvyf4gae8scnm3slg |
| OrangePill MOTO | opt1sqqftzu0ykfmzeksx720rklxcylew5wrpgvg6uv7n |
| OrangePill MOTO/PILL LP | opt1sqzkn5nvcuhqg3057a32h9rz0rq73cv0cwgfpgfhn |
| Catpound NFT | opt1sqz853ql5jnh58a957hdjw00x3a8lq3clhg2mzuen |
| Supporting | Hex |
|---|---|
| MOTO | 0xfd4473840751d58d9f8b73bdd57d6c5260453d5518bd7cd02d0a4cf3df9bf4dd |
| MotoChef | 0x831ca1f8ebcc1925be9aa3a22fd3c5c4bf7d03a86c66c39194fef698acb886ae |
| MotoSwap Router | 0x0e6ff1f2d7db7556cb37729e3738f4dae82659b984b2621fab08e1111b1b937a |
RPC endpoints
| Network | URL | Network constant (@btc-vision/bitcoin) |
|---|---|---|
| Mainnet | https://mainnet.opnet.org | networks.bitcoin |
| Testnet | https://testnet.opnet.org | networks.opnetTestnet |
Do not use networks.testnet — that's Testnet4, which OPNet does not support.
Address format notes
op1.../opt1...are bech32m-encoded witness-v16 addresses (OP-NET contract addresses).0x...is the 32-byte ML-DSA key hash used internally by the VM.- Wallets display bech32; on-chain calldata uses the hex form. Converting between them requires
provider.getPublicKeyInfo(bech32Addr, true)— simplefromBech32(addr).datagives the wrong 20-byte witness hash and should not be used for cross-contract lookups.
Verification
curl -s -X POST https://mainnet.opnet.org \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"btc_getCode","params":["0x88a647a8989a0bf3ab9f91459fd04771fb9678efd7ac4359c33ff48759877ee6"]}'
Returns the deployed WASM bytecode for the cpMOTO vault. Every vault is a single canonical deployment — no proxies, no upgradeable-contract shims.