diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index cd3ae9bc..00000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,99 +0,0 @@ -## Description - - -## Contract Details -Please append all the required information below for the contract(s) being added to `contracts.json`. - -Required fields and their descriptions: -- `name`: Contract name (required) -- `description`: Brief description of the contract's purpose -- `code_id`: Contract code ID on mainnet -- `hash`: Contract hash in UPPERCASE -- `release`: - - `url`: URL to the release/commit (e.g., https://github.com/org/repo/releases/tag/v1.0.0) - - `version`: Version tag or first 7 chars of commit hash -- `author`: - - `name`: Organization name - - `url`: Organization website URL -- `governance`: "Genesis" or proposal number -- `deprecated`: true if contract is deprecated (mixed inline with active contracts) - -Example JSON structure: -```json -{ - "name": "", - "description": "", - "code_id": "", - "hash": "", - "release": { - "url": "", - "version": "" - }, - "author": { - "name": "", - "url": "" - }, - "governance": "", - "deprecated": false -} -``` - -### Finding Code ID and Hash -To find the latest code ID and hash: -1. Run the verification tool which will show all code IDs on chain: - ```bash - node scripts/verify-code-ids.js - ``` -2. The new code ID will be shown in the mismatches as "exists on chain but not in contracts.json" -3. You can also query the code hash via the chain's RPC endpoint: - ```bash - xiond query wasm code-info --node https://rpc.xion-mainnet-1.burnt.com - ``` - -### Documentation Updates -The README.md is automatically generated from `contracts.json`. After making changes: - -1. Ensure you have the required dependencies: - - Node.js: https://nodejs.org/ - - jq: `brew install jq` (macOS) or `apt-get install jq` (Ubuntu/Debian) - -2. Run the convert script to validate and update the README: - ```bash - ./convert.sh - ``` - -3. Commit both the `contracts.json` and generated `README.md` changes - -āš ļø Important Notes: -- Do not edit README.md manually. All changes must be made through `contracts.json` -- Pull requests with manual README edits will be automatically rejected by CI -- If you forget to run `./convert.sh` locally, the CI will fail with a "README out of sync" error - -### Validation -The `convert.sh` script automatically performs these validations: -- All required fields are present and properly formatted -- Hash is 64 characters and uppercase hex -- URLs are valid HTTPS links -- Code IDs are unique -- Contracts are ordered by code_id (both active and deprecated contracts follow the same ordering) -- README.md stays in sync with contracts.json - -If any validation fails, the script will show specific error messages to help you fix the issues. - -### Checklist -- [ ] Added entry to `contracts.json` with all required fields -- [ ] Contract name is clear and descriptive -- [ ] Description explains the contract's purpose -- [ ] Code ID matches the mainnet deployed code -- [ ] Hash is in uppercase and matches the stored code -- [ ] Release URL points to the correct tag/commit -- [ ] Version matches the release tag or commit hash -- [ ] Author information is correct with valid URL -- [ ] Governance field correctly references proposal or "Genesis" -- [ ] Deprecated flag is set appropriately -- [ ] Entry is placed in code_id order (regardless of deprecated status) -- [ ] Ran `./convert.sh` and fixed any validation errors -- [ ] Both `contracts.json` and generated `README.md` are included in the commit - -### Additional Notes - diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml deleted file mode 100644 index bb2ad749..00000000 --- a/.github/workflows/validate.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Validate contracts.json - -on: - pull_request: - paths: - - 'contracts.json' - - 'README.md' - -jobs: - validate: - runs-on: ubuntu-latest - env: - CI: true - steps: - - uses: actions/checkout@v3 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' - - - name: Install jq - run: sudo apt-get install -y jq - - - name: Validate contracts.json and verify README.md - run: bash convert.sh \ No newline at end of file diff --git a/.github/workflows/verify-contracts.yml b/.github/workflows/verify-contracts.yml deleted file mode 100644 index 3fbaea2b..00000000 --- a/.github/workflows/verify-contracts.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Verify Contracts - -on: - schedule: - - cron: '0 0 * * *' # Run daily at midnight UTC - workflow_dispatch: # Allow manual trigger - push: - branches: - - main - paths: - - 'contracts.json' - - 'scripts/verify-contracts.js' - - '.github/workflows/verify-contracts.yml' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - -jobs: - verify: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' - - - name: Verify Contracts - run: node scripts/verify-contracts.js \ No newline at end of file diff --git a/README.md b/README.md index 04f84bcf..df9b6cfb 100644 --- a/README.md +++ b/README.md @@ -1,129 +1,46 @@ +# XION Contracts (Move) - +Smart contract implementations for XION blockchain. -# XION Mainnet Contracts +## Contract Registry Notice -Contract information for XION mainnet +**The XION deployed contracts registry has been moved to a dedicated repository:** -## Development +šŸ”— **[burnt-labs/deployed-contract-listings](https://github.com/burnt-labs/deployed-contract-listings)** -### Updating Documentation +The new repository provides: +- Complete registry of all deployed XION contracts (mainnet and testnet) +- Interactive web interface at [https://burnt-labs.github.io/deployed-contract-listings/](https://burnt-labs.github.io/deployed-contract-listings/) +- Contract verification utilities +- Automated GitHub Pages deployment -The README is automatically generated from `contracts.json`. To update it: +Please update your bookmarks and references to use the new location. -1. Ensure you have Node.js installed: https://nodejs.org/ +## About This Repository -2. Modify `contracts.json` with your changes - - The script will validate the JSON format and required fields - - Each contract must include: name, description, code_id, hash, release info, and author details +This repository contains the source code for smart contracts that can be deployed on XION, including: -3. Run the convert script: -```bash -node scripts/convert.js -``` +### Contracts -4. Commit both the `contracts.json` and generated `README.md` changes - - The CI will validate both files are in sync during pull requests - - Pull requests with manual README edits will be rejected +- **Account**: MetaAccount implementation +- **Treasury**: Treasury management contract +- **User Map**: User mapping functionality ### Compiling -```bash +To compile the contracts, use the CosmWasm optimizer: +```bash docker run --rm -v "$(pwd)":/code \ --mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ cosmwasm/optimizer:0.16.1 - ``` -## Active Contracts -| Name | Description | Release | Author | Code ID | Code ID (Testnet) | Hash | Governance Proposal | -|:-----|:------------|:--------|:-------|:--------|:------------------|:-----|:-------------------| -| Polytone Proxy | ICA Proxy, allows controlled execution of messages. | [v1.1.0](https://github.com/DA0-DA0/polytone/releases/tag/v1.1.0) | [DAO DAO](https://daodao.zone/) | `2` | `501` | `54E909B7F9AB191A0A0DB2040E09C8CFAB45DB75CA22852098531EC301878FC2` | Genesis | -| Polytone Voice | Receiver of messages over IBC, executes on the destination chain. Maintains access control through the proxy (see above). | [v1.1.0](https://github.com/DA0-DA0/polytone/releases/tag/v1.1.0) | [DAO DAO](https://daodao.zone/) | `3` | `502` | `3AA8F962BADEB899DB4BC6E5931C852473B5719DBA5AFF5DC26C66CDE1ED250E` | Genesis | -| Polytone Note | Sends messages to be executed on other chains over IBC. Handles channel management and packet routing. | [v1.1.0](https://github.com/DA0-DA0/polytone/releases/tag/v1.1.0) | [DAO DAO](https://daodao.zone/) | `4` | `503` | `CD13C487B820CE79BC7932F41497274635477845C2DCAF5CD4B06332175F53EC` | Genesis | -| MetaAccount (v2) | Second version of Xion's MetaAccount implementation | [pr40](https://github.com/burnt-labs/contracts/pull/40) | [Burnt Labs](https://burnt.com) | `5` | `504` | `FEFA4D0C57F6CA47A5D89C6F077A176D26027DB4EEFA758A929DD4C4AAF17D1B` | Genesis | -| cw1 Subkeys | A Proxy contract that extends the functionality of cw1-whitelist. Allows admins to grant allowances and set permissions to 'subkeys' | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `6` | `505` | `0DEE80010FB15A7A03FC1153389DC1EEC36482B8D872B0640B8762C14E5C3CF8` | Genesis | -| cw1 Whitelist | Proxy contract maintaining a list of admin addresses that can execute messages through it. Admin list defined at contract creation. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `7` | `506` | `86C0008909BEB14147FA99F66CA1AFB674FDCD737CCAD89C47EA2C95966F747E` | Genesis | -| cw3 Fixed Multisig | Implements a multisig wallet with a fixed set of voters defined at instantiation, each voter can have different voting weights. Allows voters to create, vote on, and execute proposals containing arbitrary messages. Supports different voting thresholds & configurable voting periods. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `8` | `685` | `734A8B5B958D9F3A9D97CAAEA93AAE409BD7FF21648B35B3F9A40F6DF0C39C00` | Genesis | -| cw3 Flex Multisig | An advanced multisig using a separate cw4 (group) contract to manage its voter set, allowing multiple multisigs to share the same group of voters with different voting thresholds. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `9` | `507` | `8047BC30ED7129F24D4A89E7527C4926D3363A6BA038830A592A2041301553CF` | Genesis | -| cw4 Group | Manages group membership with weighted voting power. Maintains a list of members, controlled by an admin with rights to add or remove members. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `10` | `508` | `4604A284E209C2FE320F223B9FD29805A0E8F2CF8EA7B01FAC28C3EFC4EE63F0` | Genesis | -| cw4 Stake | Determines group membership and voting weights based on the amount of tokens (native or cw20) that users have staked, with configurable parameters like minimum bond amount and tokens-per-weight ratio. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `12` | `509` | `DCA8257AD67CCB15B4A61A882131B9D3FDD0DD178B121BB51BBDA35B682C6653` | Genesis | -| cw20 Base | Implementation of the CW20 token standard in CosmWasm. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `13` | `510` | `4D8E90DD340993033F1B9E8E3A3EE7F8673C582CA9BCDD8C8CF3C7470D6537D5` | Genesis | -| cw20 ics20 | Enables CW20 tokens to be sent over IBC using the ICS20 protocol, allowing custom CW20 tokens from one chain to be used like native tokens on other chains. | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `14` | `511` | `A63BA1554095B6AC04D2F08246ABCCFA7F1C2276BF19F52A943EE5B85FD7749B` | Genesis | -| Treasury | Treasury | [v0.1.0](https://github.com/burnt-labs/contracts/commit/8224140b66da51fcdef25227a195d2dee16cc422) | [Burnt Labs](https://burnt.com) | `15` | `512` | `6A30325831651208E07F9A9F6FE5B29ADD99D6EDBDF5601C4AF9856D287E56E6` | Genesis | -| Abstract Account | Abstract Account | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `16` | `513` | `D3D18E16A185FD5D82A510D2D51E8849E1135A1EF23090738ED90CE1F2E377DA` | Genesis | -| Abstract Acccount (XION) | Abstract Acccount (XION) | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `17` | `514` | `A46BECDFECDECF94837B3D424826E78A483AF4F1E248EA378BFD5D702C5761AD` | Genesis | -| Abstract ANS Host | Abstract ANS Host | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `18` | `515` | `B34F0DF05BAC1D769A87389B7856554751B5608D485943E98BC526A4C3322ADB` | Genesis | -| Abstract IBC Client | Abstract IBC Client | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `19` | `516` | `919A489D744E4384FDC9E3706AA7C37E80A25D39083FF028956BA300AD9AC2E8` | Genesis | -| Abstract IBC Host | Abstract IBC Host | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `20` | `517` | `1FA61DFAE0CF886FEB9EA6A5AFFAA84F478781B243D57B2CBFBDB01F9395AF5B` | Genesis | -| Abstract ICA Client | Abstract ICA Client | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `21` | `518` | `E23F28815FB7673BA3C78AA81E2C738F648A7A610111341E60A1B29E2306B8E3` | Genesis | -| Abstract Module Factory | Abstract Module Factory | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `22` | `519` | `9B287AFE1380CB886B161C66582255BF03DAD5EACFD27DF24FE89ADB81D2436D` | Genesis | -| Abstract Registry | Abstract Registry | [v0.25.0](https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0) | [Abstract Money](https://abstract.money/) | `23` | `520` | `647047E79FEAF28D36A49372877703555C80F5B45B18C9ADB8BBBCFBCA421CD5` | Genesis | -| Multiquery | Multiquery | [ae6b422](https://github.com/AbstractSDK/multiquery/commit/ae6b4225c9a3086a4f353522f5b03343138b16e1) | [Abstract Money](https://abstract.money/) | `24` | `521` | `C3282C016874B7FE7F4127F0695D42003C92EBA1C1BB10CC16BC584BAB186205` | Genesis | -| cw721 Base | cw721 Base | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `25` | `522` | `E13AA30E0D70EA895B294AD1BC809950E60FE081B322B1657F75B67BE6021B1C` | Genesis | -| cw721 Expiration | cw721 Expiration | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `26` | `523` | `EC8FE99C35618D786C6DC5F83293FC37CD98C4A297CF6AA9D150F64941E6442D` | Genesis | -| cw721 Fixed Price | cw721 Fixed Price | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `27` | `524` | `A58EE79215200778768FE3862F7C995B1BE35FBF3AB34C2DE715E5B9D77DCCBB` | Genesis | -| cw721 Metadata Onchain | cw721 Metadata Onchain | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `28` | `525` | `51A70227FF5DC29C38DC514B0F32BB474ECB82FFFA3C029C6789578A55925143` | Genesis | -| cw721 Non-Transferable | cw721 Non-Transferable | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `29` | `526` | `68D5DB29833B0C25A1DD4C8D837038528E521EF3622D9945FFCB0B70676FCABE` | Genesis | -| cw721 Receiver Tester | cw721 Receiver Tester | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `30` | `527` | `FEBB507E5FDA85C8C450CF28DCFBCBFB1BF17DECE43B7B7ECAD14D2FAD20C828` | Genesis | -| cw2981 Royalties | cw2981 Royalties | [v0.19.0](https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0) | [CosmWasm](https://cosmwasm.com/) | `31` | `528` | `5BC7CE4A04A747FAFD1A139F2DB73E7EAC094C6D3882AF8E055D15FFD3EE67E8` | Genesis | -| Mercle Mint with Claim | Mercle Mint with Claim | [18ceaf7](https://github.com/mercledao/MercleCosmwasmContracts/commit/18ceaf7e1a57a1dbf189da6e3a173618d4ea64fa) | [Mercle](https://mercle.xyz/) | `32` | `529` | `E1472FCB9275B908A931A1EA789AA8232EDF275D2EFEA05736BB786180CA91A1` | Genesis | -| Mercle NFT Membership | Mercle NFT Membership | [18ceaf7](https://github.com/mercledao/MercleCosmwasmContracts/commit/18ceaf7e1a57a1dbf189da6e3a173618d4ea64fa) | [Mercle](https://mercle.xyz/) | `33` | `530` | `B8998FEF98FBC7DE80437E41D4F2372CC471237F2D3F0A94F151B195C3418A33` | Genesis | -| BonusBlock Badge Minter | BonusBlock Badge Minter | [202538d](https://github.com/BBlockLabs/BonusBlock-Minter-SC-Rust/commit/202538de73d52f0ff66a8e2abb9baaad4ee98053) | [BonusBlock](https://www.bonusblock.io/) | `34` | `531` | `933AF6AB10A1024CBC0627C4E31DD87FC37F4C70A76C6C4DE9DB06FBFE229DEF` | Genesis | -| Talis Collection Offer | Talis Collection Offer | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `35` | `532` | `8524BEE102B7E1B6C85D0ED1DE7C47EA9B7AA2B51845D5DFDAB1EA645599B4DD` | Genesis | -| Talis English Auction | Talis English Auction | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `36` | `533` | `36FABE3758D19F4285C0B503579FABB06D702B09BCE74CD0FF8AB8987152EE36` | Genesis | -| Talis Marketplace | Talis Marketplace | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `37` | `534` | `0B9D0EF7D459A86062A77924EE440ECAC9A0BF21F6A201126032A353C1E19CCF` | Genesis | -| Talis Multi-Flavor | Talis Multi-Flavor | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `38` | `535` | `5D6EB094E88C8BE613570C612D74951BA9D5BDBD0D772B8987E68AE62D30B9DD` | Genesis | -| Talis PoC Candy Mint | Talis PoC Candy Mint | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `40` | `536` | `811E37F714B7229BB6731A98EDA48CF4A2438E3CEA4B8BFC31B7F7CAF277B0FD` | Genesis | -| Talis Xion Proxy | Talis Xion Proxy | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `41` | `537` | `21C147C2EC45190437367407B22D18717E137722EA3C8C4F410C05E55C403A57` | Genesis | -| Astroport Factory | Astroport Factory | [v5.7.0](https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0) | [Astroport](https://astroport.fi/) | `42` | `538` | `56EA99FB759B2DF28D18A0B1CFCCD4A0CACBADA3E7254DC2842D188277727CFB` | Genesis | -| Astroport Maker | Astroport Maker | [v5.7.0](https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0) | [Astroport](https://astroport.fi/) | `43` | `539` | `ADEFC4EE995B783BC45B0C338A6299A03FDEADB1F69CED4C2B6F22AF07B9EC1A` | Genesis | -| Astroport Native Coin Registry | Astroport Native Coin Registry | [v5.7.0](https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0) | [Astroport](https://astroport.fi/) | `44` | `540` | `2958D95914D24E4856D10877C38740B955C760F86D2B082EDCF19691809D378E` | Genesis | -| Astroport Pair | Astroport Pair | [v5.7.0](https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0) | [Astroport](https://astroport.fi/) | `45` | `541` | `88C14F95C3BCBB0B8AABC433DC28F49373FD25EAB7141A881AC310BE4B04979D` | Genesis | -| Astroport Router | Astroport Router | [v5.7.0](https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0) | [Astroport](https://astroport.fi/) | `46` | `542` | `6FEF673B1318C84AC8AB2CA81B2CDCA96B8C8C9D0995B8038D919F539AE7C3CC` | Genesis | -| Astroport TokenFactory Tracker | Astroport TokenFactory Tracker | [v5.7.0](https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0) | [Astroport](https://astroport.fi/) | `47` | `543` | `B0C14C860F1473B007A734DCC4ADBA1D3B52CECC660465670033F6E875014318` | Genesis | -| Talis Whitelist | Talis Whitelist | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `48` | `544` | `37360FDE0EE1384AA56781B0D05D4B0187843AE96335158DFEAD7806106DE779` | 18 | -| Talis Staking | Talis Staking | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `49` | `545` | `9C9047420A5B870D490585C753FFB46C97E310A55E9FCF50EA784BAFC2A701FD` | 18 | -| Talis Frens Proxy | Talis Frens Proxy | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `50` | `546` | `919FF797B7F35A40B5D32B506C2C05918DAA1C42B89C6864425F2047B5BC19F7` | 18 | -| Talis Trading Escrow | Talis Trading Escrow | [f084f5b](https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8) | [Talis](https://talis.art/) | `51` | `547` | `01AA4D93B63871DE8E94B35FECAA0E586C8B4824A8B0EE833416303796B256E2` | 18 | -| Fractit | A protocol for the fractional ownership of NFTs | [b62e2bc8aa7646e73bceb07af67137c48c5a7488](https://github.com/Fractit/fractible_xion) | [Fractit](https://fractit.com) | `52` | `548` | `F6D5ADDC062B5B45BCA207EAF49B8D2736A2D7F86956FCE4D5176E3D07C91980` | 21 | -| Fractit Inception Pass | Protocol for managing Fractit Inception Pass NFTs | [2eb952db4592ea3965070c1199117927319f433b](https://github.com/Fractit/fractible_xion) | [Fractit](https://fractit.com) | `53` | `549` | `D45A22411A5C430A2C74248A20391618F5E0ECDD1BDC579C87493823E242663F` | 22 | -| Thrive Protocol | First Thrive Protocol contract implementation on XION, enabling to distribute rewards achieved in Thrive XION | [cd3f0e36d50f06b4f6a04511ff67bfb7b515829b](https://github.com/ThriveCoin/tp-xion-reward-contract-rs) | [Thrive Protocol](https://thriveprotocol.com) | `54` | `550` | `BB2FAC1091B93026A0CD57AE40E814A916D9CFC4A7B4F23F1E49A28D7ABEF286` | 24 | -| MetaAccount (v3) | Third version of Xion's MetaAccount implementation | [98fb64c9c4d917ba9e4b223b64558a2fd4c09ac7](https://github.com/burnt-labs/contracts) | [Burnt Labs](https://burnt.com) | `55` | `551` | `6FD7AA76AA9ED8E6F55D16093EE64611CCFB9743AC5A07B71AD4ACB342AF0EBF` | 26 | -| XION Markets Factory Contract | Protocol's proxy/deployer contract for all the markets. Responsible for enumerables and indexing of data and statistics across the XIONMarkets protocol. | [v1.0.0](https://github.com/XIONMarkets/xionmarkets-smart-contracts) | [XION Markets](https://x.com/xionmarkets) | `56` | `686` | `C877A97EDEA41408088644E7CE205C141C472C822EA7033E0439274928CC1D99` | 27 | -| XION Markets Market Contract | Model for the markets (events) that facilitates trading of shares (Yes or No), provision of liquidity, removal of liquidity and all core functionality of the protocol. | [v1.0.0](https://github.com/XIONMarkets/xionmarkets-smart-contracts) | [XION Markets](https://x.com/xionmarkets) | `57` | `687` | `4CFC7E3BB774D3528749A10582652218910CF9344514F59C88A1EC15C128BAA7` | 27 | -| Pyth Oracle Contract | Pyth Network price feeds contract providing real-time financial market data to smart contract applications | [v1.0.0](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/cosmwasm) | [Pyth Network](https://www.pyth.network/) | `58` | `688` | `CA4DEAD04CFFC986BB05B9FA792327AC4EA2609EC928EF44DD7F48D3E16995F5` | 28 | -| Pyth Oracle Wormhole Dependency | Wormhole dependency for the Pyth Network oracle implementation | [v1.0.0](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/cosmwasm) | [Pyth Network](https://www.pyth.network/) | `59` | `689` | `42133359E82BF07E446F6E75D360A0E1F4E164C66138AA4A5D2EDA3A75005026` | 28 | - - -## Deprecated Contracts -| Name | Description | Release | Author | Code ID | Code ID (Testnet) | Hash | Governance Proposal | -|:-----|:------------|:--------|:-------|:--------|:------------------|:-----|:-------------------| -| MetaAccount (v1.0.0) | Initial version of MetaAccount implementation, superseded by v2 | [v1.0.0](https://github.com/burnt-labs/contracts/releases/tag/v1.0.0) | [Burnt Labs](https://burnt.com) | `1` | - | `5E0F49F9686FAD66C132031EC6A43EC63AD84A2B6C8A35C555542AC84FC03708` | Genesis | -| cw4 Stake | cw4 Stake | [v2.0.0](https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0) | [CosmWasm](https://cosmwasm.com/) | `11` | - | `DCA8257AD67CCB15B4A61A882131B9D3FDD0DD178B121BB51BBDA35B682C6653` | Genesis | - - -## Utilities - -### Code ID Verification - -The repository includes a utility to verify that the code IDs and their corresponding hashes in the local `contracts.json` file match those deployed on the Xion mainnet. - -#### Prerequisites -- Node.js 18 or higher: https://nodejs.org/ - -#### Usage -To verify code IDs: -```bash -node scripts/verify-contracts.js -``` +## Development + +For contract development and deployment information, please refer to the individual contract directories. -The utility will: -1. Read the local contracts.json file -2. Fetch current contract data from Xion mainnet -3. Compare code IDs and hashes -4. Report any mismatches or discrepancies +## License -This helps ensure that the contract information in this repository accurately reflects what's deployed on the Xion mainnet. +See LICENSE file for details. \ No newline at end of file diff --git a/contracts.json b/contracts.json deleted file mode 100644 index 8cf6ebc2..00000000 --- a/contracts.json +++ /dev/null @@ -1,1322 +0,0 @@ -[ - { - "name": "MetaAccount (v1.0.0)", - "description": "Initial version of MetaAccount implementation, superseded by v2", - "code_id": "1", - "hash": "5E0F49F9686FAD66C132031EC6A43EC63AD84A2B6C8A35C555542AC84FC03708", - "governance": "Genesis", - "release": { - "url": "https://github.com/burnt-labs/contracts/releases/tag/v1.0.0", - "version": "v1.0.0" - }, - "author": { - "name": "Burnt Labs", - "url": "https://burnt.com" - }, - "deprecated": true - }, - { - "name": "Polytone Proxy", - "description": "ICA Proxy, allows controlled execution of messages.", - "code_id": "2", - "hash": "54E909B7F9AB191A0A0DB2040E09C8CFAB45DB75CA22852098531EC301878FC2", - "release": { - "url": "https://github.com/DA0-DA0/polytone/releases/tag/v1.1.0", - "version": "v1.1.0" - }, - "author": { - "name": "DAO DAO", - "url": "https://daodao.zone/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "501", - "hash": "18DBF6EA062583B2EB5F266537B410F1D0C9FBC4C5DE8400E4B22BE0F7A16291", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:22:41.924Z" - } - }, - { - "name": "Polytone Voice", - "description": "Receiver of messages over IBC, executes on the destination chain. Maintains access control through the proxy (see above).", - "code_id": "3", - "hash": "3AA8F962BADEB899DB4BC6E5931C852473B5719DBA5AFF5DC26C66CDE1ED250E", - "release": { - "url": "https://github.com/DA0-DA0/polytone/releases/tag/v1.1.0", - "version": "v1.1.0" - }, - "author": { - "name": "DAO DAO", - "url": "https://daodao.zone/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "502", - "hash": "50C2FEC0FD4872BC2A53B184F58AB9DC81BA9BF32EC505D958283B96631C9D61", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:22:46.827Z" - } - }, - { - "name": "Polytone Note", - "description": "Sends messages to be executed on other chains over IBC. Handles channel management and packet routing.", - "code_id": "4", - "hash": "CD13C487B820CE79BC7932F41497274635477845C2DCAF5CD4B06332175F53EC", - "release": { - "url": "https://github.com/DA0-DA0/polytone/releases/tag/v1.1.0", - "version": "v1.1.0" - }, - "author": { - "name": "DAO DAO", - "url": "https://daodao.zone/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "503", - "hash": "1CB5BFE7E6D09D3DB32AF7E10889B65C87DE7EAE5ABC9B2B1E2BEE47C6FF9D9D", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:22:51.430Z" - } - }, - { - "name": "MetaAccount (v2)", - "description": "Second version of Xion's MetaAccount implementation", - "code_id": "5", - "hash": "FEFA4D0C57F6CA47A5D89C6F077A176D26027DB4EEFA758A929DD4C4AAF17D1B", - "release": { - "url": "https://github.com/burnt-labs/contracts/pull/40", - "version": "pr40" - }, - "author": { - "name": "Burnt Labs", - "url": "https://burnt.com" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "504", - "hash": "BBE0520BBFB05F7378195C8E2B5FC203B3ED517196FAB3B80A977FCDD96E9A3D", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:22:56.009Z" - } - }, - { - "name": "cw1 Subkeys", - "description": "A Proxy contract that extends the functionality of cw1-whitelist. Allows admins to grant allowances and set permissions to 'subkeys'", - "code_id": "6", - "hash": "0DEE80010FB15A7A03FC1153389DC1EEC36482B8D872B0640B8762C14E5C3CF8", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "505", - "hash": "5C7AFB8287E2A3512A9C68433ECE40507A7D2C214806A723625F83C76D85D38D", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:00.598Z" - } - }, - { - "name": "cw1 Whitelist", - "description": "Proxy contract maintaining a list of admin addresses that can execute messages through it. Admin list defined at contract creation.", - "code_id": "7", - "hash": "86C0008909BEB14147FA99F66CA1AFB674FDCD737CCAD89C47EA2C95966F747E", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "506", - "hash": "185D4973B9ABC91E918A35EA696D10FFF9DE352B4E31AFB09016F14445AD75B5", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:05.239Z" - } - }, - { - "name": "cw3 Fixed Multisig", - "description": "Implements a multisig wallet with a fixed set of voters defined at instantiation, each voter can have different voting weights. Allows voters to create, vote on, and execute proposals containing arbitrary messages. Supports different voting thresholds & configurable voting periods.", - "code_id": "8", - "hash": "734A8B5B958D9F3A9D97CAAEA93AAE409BD7FF21648B35B3F9A40F6DF0C39C00", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "685", - "hash": "AB82C1BAF5692B2F809DBEC059A88621234389756EA56DF3F51288EC0379630F", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-09T20:42:29.982Z" - } - }, - { - "name": "cw3 Flex Multisig", - "description": "An advanced multisig using a separate cw4 (group) contract to manage its voter set, allowing multiple multisigs to share the same group of voters with different voting thresholds.", - "code_id": "9", - "hash": "8047BC30ED7129F24D4A89E7527C4926D3363A6BA038830A592A2041301553CF", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "507", - "hash": "7C5ABBEF1A27287F82C90BE9FA4306211DA3C3936F89485FC8D1F9729CE16068", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:10.888Z" - } - }, - { - "name": "cw4 Group", - "description": "Manages group membership with weighted voting power. Maintains a list of members, controlled by an admin with rights to add or remove members.", - "code_id": "10", - "hash": "4604A284E209C2FE320F223B9FD29805A0E8F2CF8EA7B01FAC28C3EFC4EE63F0", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "508", - "hash": "0C37B2630095F85B4B0A0532BBBA0B539BF9F7C96CA6BF109A0654477EB99B68", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:15.346Z" - } - }, - { - "name": "cw4 Stake", - "description": "cw4 Stake", - "code_id": "11", - "hash": "DCA8257AD67CCB15B4A61A882131B9D3FDD0DD178B121BB51BBDA35B682C6653", - "governance": "Genesis", - "deprecated": true, - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - } - }, - { - "name": "cw4 Stake", - "description": "Determines group membership and voting weights based on the amount of tokens (native or cw20) that users have staked, with configurable parameters like minimum bond amount and tokens-per-weight ratio.", - "code_id": "12", - "hash": "DCA8257AD67CCB15B4A61A882131B9D3FDD0DD178B121BB51BBDA35B682C6653", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "509", - "hash": "D259DB8D657BCBDFD6FE8FBC0623342811E1F04AB8571FE66091E1F384222B7F", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:19.899Z" - } - }, - { - "name": "cw20 Base", - "description": "Implementation of the CW20 token standard in CosmWasm.", - "code_id": "13", - "hash": "4D8E90DD340993033F1B9E8E3A3EE7F8673C582CA9BCDD8C8CF3C7470D6537D5", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "510", - "hash": "76AFC2BCEB57EF7F1D43E4B6F421AD3862659D5E34FA41142895E433BB0AFCC0", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:24.559Z" - } - }, - { - "name": "cw20 ics20", - "description": "Enables CW20 tokens to be sent over IBC using the ICS20 protocol, allowing custom CW20 tokens from one chain to be used like native tokens on other chains.", - "code_id": "14", - "hash": "A63BA1554095B6AC04D2F08246ABCCFA7F1C2276BF19F52A943EE5B85FD7749B", - "release": { - "url": "https://github.com/CosmWasm/cw-plus/releases/tag/v2.0.0", - "version": "v2.0.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "511", - "hash": "CF596F891EAB32FE56BF4C2F8C74C9705C83CEC372B72D4033E623CD1A020059", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:29.188Z" - } - }, - { - "name": "Treasury", - "description": "Treasury", - "code_id": "15", - "hash": "6A30325831651208E07F9A9F6FE5B29ADD99D6EDBDF5601C4AF9856D287E56E6", - "release": { - "url": "https://github.com/burnt-labs/contracts/commit/8224140b66da51fcdef25227a195d2dee16cc422", - "version": "v0.1.0" - }, - "author": { - "name": "Burnt Labs", - "url": "https://burnt.com" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "512", - "hash": "02E3DD204A237AB5DAFCCB5FCFFF531778489E70D9D728635833289F64DC7CD3", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:34.021Z" - } - }, - { - "name": "Abstract Account", - "description": "Abstract Account", - "code_id": "16", - "hash": "D3D18E16A185FD5D82A510D2D51E8849E1135A1EF23090738ED90CE1F2E377DA", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "513", - "hash": "A904B5147A056FC2F90479394120F4779D07912B4BCC7E53A30E3AB683090DBA", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:38.998Z" - } - }, - { - "name": "Abstract Acccount (XION)", - "description": "Abstract Acccount (XION)", - "code_id": "17", - "hash": "A46BECDFECDECF94837B3D424826E78A483AF4F1E248EA378BFD5D702C5761AD", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "governance": "Genesis", - "deprecated": false, - "testnet": { - "code_id": "514", - "hash": "FF8E4B696F5E7EA28FDB4C69762A9FE4BDB2BE23F92BA8E98438967A1AF8FB93", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:44.110Z" - } - }, - { - "name": "Abstract ANS Host", - "description": "Abstract ANS Host", - "code_id": "18", - "hash": "B34F0DF05BAC1D769A87389B7856554751B5608D485943E98BC526A4C3322ADB", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "515", - "hash": "CA56E88DF3F5E1B5E8B0AEF0FB23F74498546EE92F060E1A72B0E06658EDAD44", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:48.716Z" - } - }, - { - "name": "Abstract IBC Client", - "description": "Abstract IBC Client", - "code_id": "19", - "hash": "919A489D744E4384FDC9E3706AA7C37E80A25D39083FF028956BA300AD9AC2E8", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "516", - "hash": "FD92C1C3B573B8FD741AD1B71AE0B04D9CD4D2DE1BB7527F0E89A13FACE22C5B", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:53.582Z" - } - }, - { - "name": "Abstract IBC Host", - "description": "Abstract IBC Host", - "code_id": "20", - "hash": "1FA61DFAE0CF886FEB9EA6A5AFFAA84F478781B243D57B2CBFBDB01F9395AF5B", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "517", - "hash": "56811522D6A167DDDD9E9793BAFB3B3EB295E4E8C7212D3ED6141A9E69332120", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:23:58.327Z" - } - }, - { - "name": "Abstract ICA Client", - "description": "Abstract ICA Client", - "code_id": "21", - "hash": "E23F28815FB7673BA3C78AA81E2C738F648A7A610111341E60A1B29E2306B8E3", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "518", - "hash": "78B83A492FCFEFCD41BA4435B4962877B8B32093FB3733816DEED6655D31A1F0", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:03.897Z" - } - }, - { - "name": "Abstract Module Factory", - "description": "Abstract Module Factory", - "code_id": "22", - "hash": "9B287AFE1380CB886B161C66582255BF03DAD5EACFD27DF24FE89ADB81D2436D", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "519", - "hash": "4E82ADE0089C6001A7B1B6A21287A71C4905C907FA5AAABFB2356F8C8B340DDA", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:08.645Z" - } - }, - { - "name": "Abstract Registry", - "description": "Abstract Registry", - "code_id": "23", - "hash": "647047E79FEAF28D36A49372877703555C80F5B45B18C9ADB8BBBCFBCA421CD5", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/abstract/releases/tag/v0.25.0", - "version": "v0.25.0" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "520", - "hash": "3B6869F3369E4C515E301A44A67A32DD9EE3193290309ABFDE929F4AC54BA164", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:13.464Z" - } - }, - { - "name": "Multiquery", - "description": "Multiquery", - "code_id": "24", - "hash": "C3282C016874B7FE7F4127F0695D42003C92EBA1C1BB10CC16BC584BAB186205", - "governance": "Genesis", - "release": { - "url": "https://github.com/AbstractSDK/multiquery/commit/ae6b4225c9a3086a4f353522f5b03343138b16e1", - "version": "ae6b422" - }, - "author": { - "name": "Abstract Money", - "url": "https://abstract.money/" - }, - "deprecated": false, - "testnet": { - "code_id": "521", - "hash": "7808C63B8FD0A6A6D9E310146F3EA6481EA81996C201473EC84BE845C86236E0", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:17.980Z" - } - }, - { - "name": "cw721 Base", - "description": "cw721 Base", - "code_id": "25", - "hash": "E13AA30E0D70EA895B294AD1BC809950E60FE081B322B1657F75B67BE6021B1C", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "522", - "hash": "25D2FFCCE6A84341D7802C9B1DB157497C86FB9A65950B89976A5F8692637261", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:22.855Z" - } - }, - { - "name": "cw721 Expiration", - "description": "cw721 Expiration", - "code_id": "26", - "hash": "EC8FE99C35618D786C6DC5F83293FC37CD98C4A297CF6AA9D150F64941E6442D", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "523", - "hash": "E42F310ACDDBDA112D806F31B70D98A8A95398308BE8568DF1C21EDBCEB3126E", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:27.767Z" - } - }, - { - "name": "cw721 Fixed Price", - "description": "cw721 Fixed Price", - "code_id": "27", - "hash": "A58EE79215200778768FE3862F7C995B1BE35FBF3AB34C2DE715E5B9D77DCCBB", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "524", - "hash": "25EB8888D1F05895262120A00322EFCA98BF458CF1FEC5D2EBF11BAEC40A1CE8", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:32.167Z" - } - }, - { - "name": "cw721 Metadata Onchain", - "description": "cw721 Metadata Onchain", - "code_id": "28", - "hash": "51A70227FF5DC29C38DC514B0F32BB474ECB82FFFA3C029C6789578A55925143", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "525", - "hash": "C07A46AD3EFD8042E23CE4A0C6ECF61930C6FF73C2C3612A05B0C7AB0E7F2E4F", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:37.064Z" - } - }, - { - "name": "cw721 Non-Transferable", - "description": "cw721 Non-Transferable", - "code_id": "29", - "hash": "68D5DB29833B0C25A1DD4C8D837038528E521EF3622D9945FFCB0B70676FCABE", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "526", - "hash": "F14B77376FCDCE6C4179704C5087C459B435EAB74C050C3A49AEA6BE1AC55F95", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:41.918Z" - } - }, - { - "name": "cw721 Receiver Tester", - "description": "cw721 Receiver Tester", - "code_id": "30", - "hash": "FEBB507E5FDA85C8C450CF28DCFBCBFB1BF17DECE43B7B7ECAD14D2FAD20C828", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "527", - "hash": "EE16CAC8AA5922F42EBA12BE249C75B3EC9D050CE043EC64B3BD034BE3DF749E", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:46.268Z" - } - }, - { - "name": "cw2981 Royalties", - "description": "cw2981 Royalties", - "code_id": "31", - "hash": "5BC7CE4A04A747FAFD1A139F2DB73E7EAC094C6D3882AF8E055D15FFD3EE67E8", - "governance": "Genesis", - "release": { - "url": "https://github.com/public-awesome/cw-nfts/releases/tag/v0.19.0", - "version": "v0.19.0" - }, - "author": { - "name": "CosmWasm", - "url": "https://cosmwasm.com/" - }, - "deprecated": false, - "testnet": { - "code_id": "528", - "hash": "48F57C70C92255046E21A0BE2125A6D03C1918CAFCD37099277BB8128B94F116", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:51.072Z" - } - }, - { - "name": "Mercle Mint with Claim", - "description": "Mercle Mint with Claim", - "code_id": "32", - "hash": "E1472FCB9275B908A931A1EA789AA8232EDF275D2EFEA05736BB786180CA91A1", - "governance": "Genesis", - "release": { - "url": "https://github.com/mercledao/MercleCosmwasmContracts/commit/18ceaf7e1a57a1dbf189da6e3a173618d4ea64fa", - "version": "18ceaf7" - }, - "author": { - "name": "Mercle", - "url": "https://mercle.xyz/" - }, - "deprecated": false, - "testnet": { - "code_id": "529", - "hash": "0D7B50D4AF3416A7EBE6E0D9B27D65C7231034E693C74B12D815559156B62248", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:55.424Z" - } - }, - { - "name": "Mercle NFT Membership", - "description": "Mercle NFT Membership", - "code_id": "33", - "hash": "B8998FEF98FBC7DE80437E41D4F2372CC471237F2D3F0A94F151B195C3418A33", - "governance": "Genesis", - "release": { - "url": "https://github.com/mercledao/MercleCosmwasmContracts/commit/18ceaf7e1a57a1dbf189da6e3a173618d4ea64fa", - "version": "18ceaf7" - }, - "author": { - "name": "Mercle", - "url": "https://mercle.xyz/" - }, - "deprecated": false, - "testnet": { - "code_id": "530", - "hash": "BAFDA4C124EB2F208A45CC661E3404F0A6329FC3E70611C57EAEA6D2AB9F6404", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:24:59.970Z" - } - }, - { - "name": "BonusBlock Badge Minter", - "description": "BonusBlock Badge Minter", - "code_id": "34", - "hash": "933AF6AB10A1024CBC0627C4E31DD87FC37F4C70A76C6C4DE9DB06FBFE229DEF", - "governance": "Genesis", - "release": { - "url": "https://github.com/BBlockLabs/BonusBlock-Minter-SC-Rust/commit/202538de73d52f0ff66a8e2abb9baaad4ee98053", - "version": "202538d" - }, - "author": { - "name": "BonusBlock", - "url": "https://www.bonusblock.io/" - }, - "deprecated": false, - "testnet": { - "code_id": "531", - "hash": "5BAE92138B8B808BF803687E7531CE8EEF56B0629B67AF04B881FBD2B46E99DC", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:04.423Z" - } - }, - { - "name": "Talis Collection Offer", - "description": "Talis Collection Offer", - "code_id": "35", - "hash": "8524BEE102B7E1B6C85D0ED1DE7C47EA9B7AA2B51845D5DFDAB1EA645599B4DD", - "governance": "Genesis", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "532", - "hash": "E7D24B887773C2F1A1DA1B250BC830F9DC51B1F4813ECD5CBD504D1A1436FDC1", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:08.965Z" - } - }, - { - "name": "Talis English Auction", - "description": "Talis English Auction", - "code_id": "36", - "hash": "36FABE3758D19F4285C0B503579FABB06D702B09BCE74CD0FF8AB8987152EE36", - "governance": "Genesis", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "533", - "hash": "130D729455C320B46B019F0428FF3782F1569DC440CC89D238FC997765BA5FF3", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:13.633Z" - } - }, - { - "name": "Talis Marketplace", - "description": "Talis Marketplace", - "code_id": "37", - "hash": "0B9D0EF7D459A86062A77924EE440ECAC9A0BF21F6A201126032A353C1E19CCF", - "governance": "Genesis", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "534", - "hash": "7A302275E507D13C4F3824CDAE49F4A9A46A8A58FDB66BC4937E632C0BEC46E3", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:18.129Z" - } - }, - { - "name": "Talis Multi-Flavor", - "description": "Talis Multi-Flavor", - "code_id": "38", - "hash": "5D6EB094E88C8BE613570C612D74951BA9D5BDBD0D772B8987E68AE62D30B9DD", - "governance": "Genesis", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "535", - "hash": "E9FD4354F5F58F9643C380137B1CBC1ABD28ED70C7D0A98987B97E05CB6E1ABD", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:22.772Z" - } - }, - { - "name": "Talis PoC Candy Mint", - "description": "Talis PoC Candy Mint", - "code_id": "40", - "hash": "811E37F714B7229BB6731A98EDA48CF4A2438E3CEA4B8BFC31B7F7CAF277B0FD", - "governance": "Genesis", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "536", - "hash": "AED48320C5404C11017828BA897F8358C63E8CCB36E222B7C1FCE0FD92541285", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:27.357Z" - } - }, - { - "name": "Talis Xion Proxy", - "description": "Talis Xion Proxy", - "code_id": "41", - "hash": "21C147C2EC45190437367407B22D18717E137722EA3C8C4F410C05E55C403A57", - "governance": "Genesis", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "537", - "hash": "F7EBA4CAACA11BBBC9E3975B9725F8D8891D52BE19EBA9150330BA1816DFEF2D", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:31.797Z" - } - }, - { - "name": "Astroport Factory", - "description": "Astroport Factory", - "code_id": "42", - "hash": "56EA99FB759B2DF28D18A0B1CFCCD4A0CACBADA3E7254DC2842D188277727CFB", - "governance": "Genesis", - "release": { - "url": "https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0", - "version": "v5.7.0" - }, - "author": { - "name": "Astroport", - "url": "https://astroport.fi/" - }, - "deprecated": false, - "testnet": { - "code_id": "538", - "hash": "709CE2092C5F6F3CDB50FE74B6AB99BE18EF90BD1E3795BE5DF070BBA0CC9B22", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:36.488Z" - } - }, - { - "name": "Astroport Maker", - "description": "Astroport Maker", - "code_id": "43", - "hash": "ADEFC4EE995B783BC45B0C338A6299A03FDEADB1F69CED4C2B6F22AF07B9EC1A", - "governance": "Genesis", - "release": { - "url": "https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0", - "version": "v5.7.0" - }, - "author": { - "name": "Astroport", - "url": "https://astroport.fi/" - }, - "deprecated": false, - "testnet": { - "code_id": "539", - "hash": "095C41C1F684BFAF4EBE7D00671148D9D2E9DF22CAD3A83947864CF8C379AF87", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:43.771Z" - } - }, - { - "name": "Astroport Native Coin Registry", - "description": "Astroport Native Coin Registry", - "code_id": "44", - "hash": "2958D95914D24E4856D10877C38740B955C760F86D2B082EDCF19691809D378E", - "governance": "Genesis", - "release": { - "url": "https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0", - "version": "v5.7.0" - }, - "author": { - "name": "Astroport", - "url": "https://astroport.fi/" - }, - "deprecated": false, - "testnet": { - "code_id": "540", - "hash": "1DA258B5E8E3187D1CE3071870B7DB6BE4265D69C088C82909C0DCB7E77C7181", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:48.147Z" - } - }, - { - "name": "Astroport Pair", - "description": "Astroport Pair", - "code_id": "45", - "hash": "88C14F95C3BCBB0B8AABC433DC28F49373FD25EAB7141A881AC310BE4B04979D", - "governance": "Genesis", - "release": { - "url": "https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0", - "version": "v5.7.0" - }, - "author": { - "name": "Astroport", - "url": "https://astroport.fi/" - }, - "deprecated": false, - "testnet": { - "code_id": "541", - "hash": "54CEFD7B3BD8BCBAA61A3AB433FB7A906BF2688D292F858A336B9F56433CC1D3", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:52.766Z" - } - }, - { - "name": "Astroport Router", - "description": "Astroport Router", - "code_id": "46", - "hash": "6FEF673B1318C84AC8AB2CA81B2CDCA96B8C8C9D0995B8038D919F539AE7C3CC", - "governance": "Genesis", - "release": { - "url": "https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0", - "version": "v5.7.0" - }, - "author": { - "name": "Astroport", - "url": "https://astroport.fi/" - }, - "deprecated": false, - "testnet": { - "code_id": "542", - "hash": "7228F454351E1862711E0F7EECCA86AD015EDADBC61FDCD868AEFE36DE43B80A", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:25:57.157Z" - } - }, - { - "name": "Astroport TokenFactory Tracker", - "description": "Astroport TokenFactory Tracker", - "code_id": "47", - "hash": "B0C14C860F1473B007A734DCC4ADBA1D3B52CECC660465670033F6E875014318", - "governance": "Genesis", - "release": { - "url": "https://github.com/astroport-fi/astroport-core/releases/tag/v5.7.0", - "version": "v5.7.0" - }, - "author": { - "name": "Astroport", - "url": "https://astroport.fi/" - }, - "deprecated": false, - "testnet": { - "code_id": "543", - "hash": "EAD1E14D45B3DBD9328048CB3255A8F371677729A8AB0BB49274E51655818547", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:01.549Z" - } - }, - { - "name": "Talis Whitelist", - "description": "Talis Whitelist", - "code_id": "48", - "hash": "37360FDE0EE1384AA56781B0D05D4B0187843AE96335158DFEAD7806106DE779", - "governance": "18", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "544", - "hash": "6A25BA7E664ECCD600798D241FEC6FB5FEDD57280C3DF2FB6B75CAFF5DFB71A4", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:05.977Z" - } - }, - { - "name": "Talis Staking", - "description": "Talis Staking", - "code_id": "49", - "hash": "9C9047420A5B870D490585C753FFB46C97E310A55E9FCF50EA784BAFC2A701FD", - "governance": "18", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "545", - "hash": "A0A2794CD78C6FAFEF211A8AB1DF2F45AFFCBB27C79083D73A24BC55F6CF0A03", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:10.441Z" - } - }, - { - "name": "Talis Frens Proxy", - "description": "Talis Frens Proxy", - "code_id": "50", - "hash": "919FF797B7F35A40B5D32B506C2C05918DAA1C42B89C6864425F2047B5BC19F7", - "governance": "18", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "546", - "hash": "770FD07E71F37BE2A11A66FF39A2BD0AA47C73B8C3718017B00B275535B08EEE", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:15.107Z" - } - }, - { - "name": "Talis Trading Escrow", - "description": "Talis Trading Escrow", - "code_id": "51", - "hash": "01AA4D93B63871DE8E94B35FECAA0E586C8B4824A8B0EE833416303796B256E2", - "governance": "18", - "release": { - "url": "https://github.com/Talis-Art/talis_contracts_v2/commit/f084f5b7950f911b16090dfd38e1c06a177a1da8", - "version": "f084f5b" - }, - "author": { - "name": "Talis", - "url": "https://talis.art/" - }, - "deprecated": false, - "testnet": { - "code_id": "547", - "hash": "4313A57CEEB3F5C6EB6FE701038B755A8AE0AAFF284D691CEC1A46E8F0DDB06E", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:20.503Z" - } - }, - { - "name": "Fractit", - "description": "A protocol for the fractional ownership of NFTs", - "code_id": "52", - "hash": "F6D5ADDC062B5B45BCA207EAF49B8D2736A2D7F86956FCE4D5176E3D07C91980", - "release": { - "url": "https://github.com/Fractit/fractible_xion", - "version": "b62e2bc8aa7646e73bceb07af67137c48c5a7488" - }, - "author": { - "name": "Fractit", - "url": "https://fractit.com" - }, - "governance": "21", - "deprecated": false, - "testnet": { - "code_id": "548", - "hash": "9AC92E5BB14964E92596B6B21951E72B3ED6DFA75CEE5764889B2C262623018D", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:24.937Z" - } - }, - { - "name": "Fractit Inception Pass", - "description": "Protocol for managing Fractit Inception Pass NFTs", - "code_id": "53", - "hash": "D45A22411A5C430A2C74248A20391618F5E0ECDD1BDC579C87493823E242663F", - "release": { - "url": "https://github.com/Fractit/fractible_xion", - "version": "2eb952db4592ea3965070c1199117927319f433b" - }, - "author": { - "name": "Fractit", - "url": "https://fractit.com" - }, - "governance": "22", - "deprecated": false, - "testnet": { - "code_id": "549", - "hash": "1085E9745A58626FA030283098649EB7F79828B3516658A1C607FB84687058F1", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:29.362Z" - } - }, - { - "name": "Thrive Protocol", - "description": "First Thrive Protocol contract implementation on XION, enabling to distribute rewards achieved in Thrive XION", - "code_id": "54", - "hash": "BB2FAC1091B93026A0CD57AE40E814A916D9CFC4A7B4F23F1E49A28D7ABEF286", - "release": { - "url": "https://github.com/ThriveCoin/tp-xion-reward-contract-rs", - "version": "cd3f0e36d50f06b4f6a04511ff67bfb7b515829b" - }, - "author": { - "name": "Thrive Protocol", - "url": "https://thriveprotocol.com" - }, - "governance": "24", - "deprecated": false, - "testnet": { - "code_id": "550", - "hash": "D73F0B0675208C01E6CEA48C7FBF877DF535E7B8733CAEEAEDE1E12B840C5449", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:33.706Z" - } - }, - { - "name": "MetaAccount (v3)", - "description": "Third version of Xion's MetaAccount implementation", - "code_id": "55", - "hash": "6FD7AA76AA9ED8E6F55D16093EE64611CCFB9743AC5A07B71AD4ACB342AF0EBF", - "governance": "26", - "release": { - "url": "https://github.com/burnt-labs/contracts", - "version": "98fb64c9c4d917ba9e4b223b64558a2fd4c09ac7" - }, - "author": { - "name": "Burnt Labs", - "url": "https://burnt.com" - }, - "deprecated": false, - "testnet": { - "code_id": "551", - "hash": "09857627D9BD3E361BC41EEA6B53A5A8EC5AD3F5EE61B565C81386F512094FFC", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-08T18:26:38.357Z" - } - }, - { - "name": "XION Markets Factory Contract", - "description": "Protocol's proxy/deployer contract for all the markets. Responsible for enumerables and indexing of data and statistics across the XIONMarkets protocol.", - "code_id": "56", - "hash": "C877A97EDEA41408088644E7CE205C141C472C822EA7033E0439274928CC1D99", - "release": { - "url": "https://github.com/XIONMarkets/xionmarkets-smart-contracts", - "version": "v1.0.0" - }, - "author": { - "name": "XION Markets", - "url": "https://x.com/xionmarkets" - }, - "governance": "27", - "deprecated": false, - "testnet": { - "code_id": "686", - "hash": "4F307BBA545B806243B3698C2A6B3B3F110406AEA506D30F82745DC45F4BCA28", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-09T20:42:38.376Z" - } - }, - { - "name": "XION Markets Market Contract", - "description": "Model for the markets (events) that facilitates trading of shares (Yes or No), provision of liquidity, removal of liquidity and all core functionality of the protocol.", - "code_id": "57", - "hash": "4CFC7E3BB774D3528749A10582652218910CF9344514F59C88A1EC15C128BAA7", - "release": { - "url": "https://github.com/XIONMarkets/xionmarkets-smart-contracts", - "version": "v1.0.0" - }, - "author": { - "name": "XION Markets", - "url": "https://x.com/xionmarkets" - }, - "governance": "27", - "deprecated": false, - "testnet": { - "code_id": "687", - "hash": "768FC939D65F3F0CE7ECDDBEE1CE523144D418652F04BED7F041AC7AB19CB495", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-09T20:42:43.181Z" - } - }, - { - "name": "Pyth Oracle Contract", - "description": "Pyth Network price feeds contract providing real-time financial market data to smart contract applications", - "code_id": "58", - "hash": "CA4DEAD04CFFC986BB05B9FA792327AC4EA2609EC928EF44DD7F48D3E16995F5", - "release": { - "url": "https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/cosmwasm", - "version": "v1.0.0" - }, - "author": { - "name": "Pyth Network", - "url": "https://www.pyth.network/" - }, - "governance": "28", - "deprecated": false, - "testnet": { - "code_id": "688", - "hash": "F02A5159C8FE050BA6C59BA65BAC1DEA3E344D5EBCAA2332F75D01EC41F06FD9", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-09T20:42:47.931Z" - } - }, - { - "name": "Pyth Oracle Wormhole Dependency", - "description": "Wormhole dependency for the Pyth Network oracle implementation", - "code_id": "59", - "hash": "42133359E82BF07E446F6E75D360A0E1F4E164C66138AA4A5D2EDA3A75005026", - "release": { - "url": "https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/cosmwasm", - "version": "v1.0.0" - }, - "author": { - "name": "Pyth Network", - "url": "https://www.pyth.network/" - }, - "governance": "28", - "deprecated": false, - "testnet": { - "code_id": "689", - "hash": "E20591A2DE1423E7EB528453F4A52B4C089F5FE0316F73E1BEEE13DFAD8527EF", - "network": "xion-testnet-2", - "deployed_by": "xion1q9lqzpc73fewqva98pwaqvezaf9vqqulw3hmmx", - "deployed_at": "2025-04-09T20:42:52.745Z" - } - } -] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7adcf849..00000000 --- a/package-lock.json +++ /dev/null @@ -1,738 +0,0 @@ -{ - "name": "contracts", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@cosmjs/cosmwasm-stargate": "^0.33.1", - "@cosmjs/proto-signing": "^0.33.1", - "axios": "^1.8.4", - "dotenv": "^16.4.7" - }, - "devDependencies": { - "@types/node": "^22.14.0" - } - }, - "node_modules/@cosmjs/amino": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.33.1.tgz", - "integrity": "sha512-WfWiBf2EbIWpwKG9AOcsIIkR717SY+JdlXM/SL/bI66BdrhniAF+/ZNis9Vo9HF6lP2UU5XrSmFA4snAvEgdrg==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/crypto": "^0.33.1", - "@cosmjs/encoding": "^0.33.1", - "@cosmjs/math": "^0.33.1", - "@cosmjs/utils": "^0.33.1" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.33.1.tgz", - "integrity": "sha512-bsEH8FmDHE0zc9WmJuyYEruV/HP7DU98FLP/BMxb1Egk/weH304m1AuIdibdVfFZKYVNq6PkD8+Xvg23qnecIg==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/amino": "^0.33.1", - "@cosmjs/crypto": "^0.33.1", - "@cosmjs/encoding": "^0.33.1", - "@cosmjs/math": "^0.33.1", - "@cosmjs/proto-signing": "^0.33.1", - "@cosmjs/stargate": "^0.33.1", - "@cosmjs/tendermint-rpc": "^0.33.1", - "@cosmjs/utils": "^0.33.1", - "cosmjs-types": "^0.9.0", - "pako": "^2.0.2" - } - }, - "node_modules/@cosmjs/crypto": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.33.1.tgz", - "integrity": "sha512-U4kGIj/SNBzlb2FGgA0sMR0MapVgJUg8N+oIAiN5+vl4GZ3aefmoL1RDyTrFS/7HrB+M+MtHsxC0tvEu4ic/zA==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/encoding": "^0.33.1", - "@cosmjs/math": "^0.33.1", - "@cosmjs/utils": "^0.33.1", - "@noble/hashes": "^1", - "bn.js": "^5.2.0", - "elliptic": "^6.6.1", - "libsodium-wrappers-sumo": "^0.7.11" - } - }, - "node_modules/@cosmjs/encoding": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.33.1.tgz", - "integrity": "sha512-nuNxf29fUcQE14+1p//VVQDwd1iau5lhaW/7uMz7V2AH3GJbFJoJVaKvVyZvdFk+Cnu+s3wCqgq4gJkhRCJfKw==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, - "node_modules/@cosmjs/json-rpc": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.33.1.tgz", - "integrity": "sha512-T6VtWzecpmuTuMRGZWuBYHsMF/aznWCYUt/cGMWNSz7DBPipVd0w774PKpxXzpEbyt5sr61NiuLXc+Az15S/Cw==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/stream": "^0.33.1", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/math": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.33.1.tgz", - "integrity": "sha512-ytGkWdKFCPiiBU5eqjHNd59djPpIsOjbr2CkNjlnI1Zmdj+HDkSoD9MUGpz9/RJvRir5IvsXqdE05x8EtoQkJA==", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.2.0" - } - }, - "node_modules/@cosmjs/proto-signing": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.33.1.tgz", - "integrity": "sha512-Sv4W+MxX+0LVnd+2rU4Fw1HRsmMwSVSYULj7pRkij3wnPwUlTVoJjmKFgKz13ooIlfzPrz/dnNjGp/xnmXChFQ==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/amino": "^0.33.1", - "@cosmjs/crypto": "^0.33.1", - "@cosmjs/encoding": "^0.33.1", - "@cosmjs/math": "^0.33.1", - "@cosmjs/utils": "^0.33.1", - "cosmjs-types": "^0.9.0" - } - }, - "node_modules/@cosmjs/socket": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.33.1.tgz", - "integrity": "sha512-KzAeorten6Vn20sMiM6NNWfgc7jbyVo4Zmxev1FXa5EaoLCZy48cmT3hJxUJQvJP/lAy8wPGEjZ/u4rmF11x9A==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/stream": "^0.33.1", - "isomorphic-ws": "^4.0.1", - "ws": "^7", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/stargate": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.33.1.tgz", - "integrity": "sha512-CnJ1zpSiaZgkvhk+9aTp5IPmgWn2uo+cNEBN8VuD9sD6BA0V4DMjqe251cNFLiMhkGtiE5I/WXFERbLPww3k8g==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/amino": "^0.33.1", - "@cosmjs/encoding": "^0.33.1", - "@cosmjs/math": "^0.33.1", - "@cosmjs/proto-signing": "^0.33.1", - "@cosmjs/stream": "^0.33.1", - "@cosmjs/tendermint-rpc": "^0.33.1", - "@cosmjs/utils": "^0.33.1", - "cosmjs-types": "^0.9.0" - } - }, - "node_modules/@cosmjs/stream": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.33.1.tgz", - "integrity": "sha512-bMUvEENjeQPSTx+YRzVsWT1uFIdHRcf4brsc14SOoRQ/j5rOJM/aHfsf/BmdSAnYbdOQ3CMKj/8nGAQ7xUdn7w==", - "license": "Apache-2.0", - "dependencies": { - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/tendermint-rpc": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.33.1.tgz", - "integrity": "sha512-22klDFq2MWnf//C8+rZ5/dYatr6jeGT+BmVbutXYfAK9fmODbtFcumyvB6uWaEORWfNukl8YK1OLuaWezoQvxA==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/crypto": "^0.33.1", - "@cosmjs/encoding": "^0.33.1", - "@cosmjs/json-rpc": "^0.33.1", - "@cosmjs/math": "^0.33.1", - "@cosmjs/socket": "^0.33.1", - "@cosmjs/stream": "^0.33.1", - "@cosmjs/utils": "^0.33.1", - "axios": "^1.6.0", - "readonly-date": "^1.0.0", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/utils": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.33.1.tgz", - "integrity": "sha512-UnLHDY6KMmC+UXf3Ufyh+onE19xzEXjT4VZ504Acmk4PXxqyvG4cCPprlKUFnGUX7f0z8Or9MAOHXBx41uHBcg==", - "license": "Apache-2.0" - }, - "node_modules/@noble/hashes": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", - "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@types/node": { - "version": "22.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", - "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cosmjs-types": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.9.0.tgz", - "integrity": "sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ==", - "license": "Apache-2.0" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/libsodium-sumo": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", - "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", - "license": "ISC" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", - "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", - "license": "ISC", - "dependencies": { - "libsodium-sumo": "^0.7.15" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/readonly-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/readonly-date/-/readonly-date-1.0.0.tgz", - "integrity": "sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ==", - "license": "Apache-2.0" - }, - "node_modules/symbol-observable": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", - "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xstream": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/xstream/-/xstream-11.14.0.tgz", - "integrity": "sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==", - "license": "MIT", - "dependencies": { - "globalthis": "^1.0.1", - "symbol-observable": "^2.0.3" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 2c6e39bf..00000000 --- a/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "dependencies": { - "@cosmjs/cosmwasm-stargate": "^0.33.1", - "@cosmjs/proto-signing": "^0.33.1", - "axios": "^1.8.4", - "dotenv": "^16.4.7" - }, - "devDependencies": { - "@types/node": "^22.14.0" - } -} diff --git a/scripts/convert.js b/scripts/convert.js deleted file mode 100644 index ff22033c..00000000 --- a/scripts/convert.js +++ /dev/null @@ -1,107 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -// Generate README -function generateReadme() { - const contractsFile = path.join(__dirname, '../contracts.json'); - const readmePath = path.join(__dirname, '../README.md'); - - const contractsData = JSON.parse(fs.readFileSync(contractsFile, 'utf8')); - - let readmeContent = ` - - -# XION Mainnet Contracts - -Contract information for XION mainnet - -## Development - -### Updating Documentation - -The README is automatically generated from \`contracts.json\`. To update it: - -1. Ensure you have Node.js installed: https://nodejs.org/ - -2. Modify \`contracts.json\` with your changes - - The script will validate the JSON format and required fields - - Each contract must include: name, description, code_id, hash, release info, and author details - -3. Run the convert script: -\`\`\`bash -node scripts/convert.js -\`\`\` - -4. Commit both the \`contracts.json\` and generated \`README.md\` changes - - The CI will validate both files are in sync during pull requests - - Pull requests with manual README edits will be rejected - -### Compiling - -\`\`\`bash - -docker run --rm -v "\$(pwd)":/code \\ - --mount type=volume,source="\$(basename "\$(pwd)")_cache",target=/target \\ - --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \\ - cosmwasm/optimizer:0.16.1 - -\`\`\` - -## Active Contracts -| Name | Description | Release | Author | Code ID | Code ID (Testnet) | Hash | Governance Proposal | -|:-----|:------------|:--------|:-------|:--------|:------------------|:-----|:-------------------| -`; - - contractsData.forEach(contract => { - if (!contract.deprecated) { - const testnetCodeId = contract.testnet ? `\`${contract.testnet.code_id}\`` : '-'; - readmeContent += `| ${contract.name} | ${contract.description || ""} | ${contract.release ? `[${contract.release.version}](${contract.release.url})` : ""} | ${contract.author ? `[${contract.author.name}](${contract.author.url})` : ""} | \`${contract.code_id || ""}\` | ${testnetCodeId} | \`${contract.hash}\` | ${contract.governance || ""} |\n`; - } - }); - - readmeContent += ` - -## Deprecated Contracts -| Name | Description | Release | Author | Code ID | Code ID (Testnet) | Hash | Governance Proposal | -|:-----|:------------|:--------|:-------|:--------|:------------------|:-----|:-------------------| -`; - - contractsData.forEach(contract => { - if (contract.deprecated) { - const testnetCodeId = contract.testnet ? `\`${contract.testnet.code_id}\`` : '-'; - readmeContent += `| ${contract.name} | ${contract.description || ""} | ${contract.release ? `[${contract.release.version}](${contract.release.url})` : ""} | ${contract.author ? `[${contract.author.name}](${contract.author.url})` : ""} | \`${contract.code_id || ""}\` | ${testnetCodeId} | \`${contract.hash}\` | ${contract.governance || ""} |\n`; - } - }); - - readmeContent += ` - -## Utilities - -### Code ID Verification - -The repository includes a utility to verify that the code IDs and their corresponding hashes in the local \`contracts.json\` file match those deployed on the Xion mainnet. - -#### Prerequisites -- Node.js 18 or higher: https://nodejs.org/ - -#### Usage -To verify code IDs: -\`\`\`bash -node scripts/verify-contracts.js -\`\`\` - -The utility will: -1. Read the local contracts.json file -2. Fetch current contract data from Xion mainnet -3. Compare code IDs and hashes -4. Report any mismatches or discrepancies - -This helps ensure that the contract information in this repository accurately reflects what's deployed on the Xion mainnet. -`; - - fs.writeFileSync(readmePath, readmeContent); - console.log('README.md has been generated successfully.'); -} - -// Main execution -generateReadme(); \ No newline at end of file diff --git a/scripts/migrate-to-testnet.ts b/scripts/migrate-to-testnet.ts deleted file mode 100644 index 6541237d..00000000 --- a/scripts/migrate-to-testnet.ts +++ /dev/null @@ -1,149 +0,0 @@ -require('dotenv').config(); -const { DirectSecp256k1HdWallet } = require("@cosmjs/proto-signing"); -const { SigningCosmWasmClient } = require("@cosmjs/cosmwasm-stargate"); -const { GasPrice } = require("@cosmjs/stargate"); -const fs = require('fs'); -const axios = require('axios'); -const path = require('path'); - -// Configuration -const MAINNET_API = "https://api.xion-mainnet-1.burnt.com"; -const MAINNET_RPC = "https://rpc.xion-mainnet-1.burnt.com:443"; -const TESTNET_RPC = "https://rpc.xion-testnet-2.burnt.com:443"; -const CONTRACTS_FILE = path.join(__dirname, '../contracts.json'); - -interface ContractInfo { - name: string; - description: string; - code_id: string; - hash: string; - release: { - url: string; - version: string; - }; - author: { - name: string; - url: string; - }; - governance: string; - deprecated: boolean; - testnet?: { - code_id: string; - hash: string; - network: string; - deployed_by: string; - deployed_at: string; - }; -} - -async function downloadWasm(codeId: number, contractName: string): Promise { - try { - const response = await axios.get( - `${MAINNET_API}/cosmwasm/wasm/v1/code/${codeId}`, - { - headers: { - 'Accept': 'application/json' - } - } - ); - - console.log(`Retrieved code info for ${contractName} (ID: ${codeId})`); - - // The data field contains the base64-encoded WASM - const base64Wasm = response.data.data; - if (!base64Wasm) { - throw new Error(`No WASM data found for code ID ${codeId}`); - } - - // Convert base64 to Uint8Array - const binaryString = Buffer.from(base64Wasm, 'base64'); - return new Uint8Array(binaryString); - - } catch (error) { - console.error('Error downloading WASM:', error.response?.data || error.message); - throw error; - } -} - -async function main() { - // Read contracts.json - const contractsData: ContractInfo[] = JSON.parse(fs.readFileSync(CONTRACTS_FILE, 'utf8')); - - // Process only non-deprecated contracts that don't have testnet information - const contractsToProcess = contractsData.filter(contract => !contract.testnet && !contract.deprecated); - console.log(`Processing non-deprecated contracts without testnet deployments: ${contractsToProcess.map(c => c.name).join(', ')}`); - - if (contractsToProcess.length === 0) { - console.log('All contracts have already been migrated to testnet.'); - return; - } - - // Get wallet from mnemonic - const mnemonic = process.env.MNEMONIC; - if (!mnemonic) { - throw new Error("Please set MNEMONIC environment variable"); - } - - const wallet = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { - prefix: "xion", - }); - const [account] = await wallet.getAccounts(); - - // Connect to mainnet to get code IDs - const mainnetClient = await SigningCosmWasmClient.connect(MAINNET_RPC); - - // Connect to testnet for deployment with gas price - const gasPrice = GasPrice.fromString('0.025uxion'); - const testnetClient = await SigningCosmWasmClient.connectWithSigner( - TESTNET_RPC, - wallet, - { gasPrice } - ); - - console.log(`Starting migration with address: ${account.address}`); - - // Process each contract - for (const contract of contractsToProcess) { - try { - console.log(`Processing contract: ${contract.name}`); - const codeId = parseInt(contract.code_id); - - console.log(`Downloading WASM for code ID: ${codeId}`); - const wasmBinary = await downloadWasm(codeId, contract.name); - - // Store code on testnet - console.log('Storing code on testnet...'); - const storeResult = await testnetClient.upload( - account.address, - wasmBinary, - 'auto', - `Upload ${contract.name}` - ); - - // Update contract with testnet information - contract.testnet = { - code_id: storeResult.codeId.toString(), - hash: storeResult.transactionHash, - network: "xion-testnet-2", - deployed_by: account.address, - deployed_at: new Date().toISOString() - }; - - // Save updated contracts - fs.writeFileSync( - CONTRACTS_FILE, - JSON.stringify(contractsData, null, 2) - ); - - console.log(`Code stored on testnet with ID: ${storeResult.codeId}`); - console.log(`Transaction hash: ${storeResult.transactionHash}`); - console.log(`Migration completed for ${contract.name}`); - console.log('------------------------'); - - } catch (error) { - console.error(`Error processing contract ${contract.name}:`, error); - } - } -} - -main().catch(console.error); \ No newline at end of file diff --git a/scripts/validate.js b/scripts/validate.js deleted file mode 100644 index 77177b33..00000000 --- a/scripts/validate.js +++ /dev/null @@ -1,162 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -const testnetSchema = { - type: 'object', - required: ['code_id', 'hash', 'network', 'deployed_by', 'deployed_at'], - properties: { - code_id: { type: 'string', pattern: '^[0-9]+$' }, - hash: { - type: 'string', - pattern: '^[a-fA-F0-9]{64}$', - message: 'Testnet hash must be 64 hex characters long' - }, - network: { type: 'string', minLength: 1 }, - deployed_by: { type: 'string', pattern: '^xion[a-z0-9]+$' }, // Basic validation for xion address - deployed_at: { type: 'string', pattern: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$' } // ISO 8601 format - } -}; - -const schema = { - type: 'array', - items: { - type: 'object', - required: ['name', 'description', 'code_id', 'hash', 'release', 'author', 'governance', 'deprecated'], - properties: { - name: { type: 'string', minLength: 1 }, - description: { type: 'string' }, - code_id: { type: 'string', pattern: '^[0-9]+$' }, - hash: { - type: 'string', - pattern: '^[A-F0-9]{64}$', - message: 'Mainnet hash must be 64 characters long and contain only uppercase hex characters' - }, - release: { - type: 'object', - required: ['url', 'version'], - properties: { - url: { - type: 'string', - pattern: '^https://' - }, - version: { type: 'string', minLength: 1 } - } - }, - author: { - type: 'object', - required: ['name', 'url'], - properties: { - name: { type: 'string', minLength: 1 }, - url: { - type: 'string', - pattern: '^https://' - } - } - }, - governance: { - type: 'string', - pattern: '^(Genesis|[0-9]+)$' - }, - deprecated: { type: 'boolean' }, - testnet: { ...testnetSchema, optional: true } // Mark testnet as optional - } - } -}; - -function validateJson(data, schema, path = '') { - if (schema.type === 'array') { - if (!Array.isArray(data)) { - throw new Error(`${path} must be an array`); - } - - // Check for duplicate code IDs - const codeIds = new Set(); - data.forEach((item, index) => { - if (item.code_id && codeIds.has(item.code_id)) { - throw new Error(`Duplicate code_id ${item.code_id} found`); - } - if (item.code_id) codeIds.add(item.code_id); - validateJson(item, schema.items, `${path}[${index}]`); - }); - - // Check code_id ordering for all contracts - for (let i = 1; i < data.length; i++) { - if (data[i-1].code_id && data[i].code_id) { - const prevCodeId = parseInt(data[i-1].code_id); - const currentCodeId = parseInt(data[i].code_id); - if (currentCodeId < prevCodeId) { - throw new Error(`Contracts not in code_id order: ${data[i-1].name} (${prevCodeId}) comes before ${data[i].name} (${currentCodeId})`); - } - } - } - return; - } - - if (schema.type === 'object') { - if (typeof data !== 'object' || data === null) { - throw new Error(`${path} must be an object`); - } - - // Check required properties - for (const required of schema.required || []) { - if (!(required in data)) { - throw new Error(`${path} missing required property: ${required}`); - } - } - - // Validate each property - for (const [key, value] of Object.entries(data)) { - const propertySchema = schema.properties[key]; - if (!propertySchema) { - throw new Error(`${path} has unknown property: ${key}`); - } - if (!propertySchema.optional || (key in data)) { - validateJson(value, propertySchema, `${path}.${key}`); - } - } - return; - } - - if (schema.type === 'string') { - if (typeof data !== 'string') { - throw new Error(`${path} must be a string`); - } - if (schema.minLength && data.length < schema.minLength) { - throw new Error(`${path} must be at least ${schema.minLength} characters`); - } - if (schema.pattern) { - if (path.endsWith('.hash')) { - console.log(`DEBUG: Validating ${path} with pattern ${schema.pattern}. Value: "${data}" Length: ${data.length}`); - } - const regex = new RegExp(schema.pattern); - if (!regex.test(data)) { - throw new Error(`${path} ${schema.message || `must match pattern: ${schema.pattern}`}`); - } - } - return; - } - - if (schema.type === 'boolean') { - if (typeof data !== 'boolean') { - throw new Error(`${path} must be a boolean`); - } - return; - } - - throw new Error(`Unknown schema type: ${schema.type}`); -} - -try { - const contractsPath = path.join(__dirname, '../contracts.json'); - const data = JSON.parse(fs.readFileSync(contractsPath, 'utf8')); - validateJson(data, schema); - console.log('āœ… contracts.json is valid'); - process.exit(0); -} catch (error) { - if (error.code === 'ENOENT') { - console.error(`āŒ Error: Could not find contracts.json at ${contractsPath}. Make sure the file exists.`); - } else { - console.error('āŒ Validation Error:', error.message); - } - process.exit(1); -} \ No newline at end of file diff --git a/scripts/verify-contracts.js b/scripts/verify-contracts.js deleted file mode 100644 index fa6da55e..00000000 --- a/scripts/verify-contracts.js +++ /dev/null @@ -1,344 +0,0 @@ -/** - * verify-contracts.js - * - * This utility verifies: - * 1. Code IDs and their corresponding hashes in the local contracts.json file - * match those deployed on the Xion mainnet - * 2. All governance proposals with store code messages have corresponding entries - * in contracts.json - * 3. Cross-references missing code IDs with their originating proposals - * 4. Verifies Genesis contracts were not deployed through proposals - * - * Usage: - * node scripts/verify-contracts.js - */ - -const fs = require('fs'); -const path = require('path'); -const crypto = require('crypto'); -const zlib = require('zlib'); - -// Function to calculate SHA256 hash of wasm byte code -function calculateWasmHash(base64WasmCode) { - try { - const wasmBuffer = Buffer.from(base64WasmCode, 'base64'); - - // Try to gunzip the buffer - try { - const unzippedBuffer = zlib.gunzipSync(wasmBuffer); - // If successful, calculate hash from unzipped data - const hash = crypto.createHash('sha256') - .update(unzippedBuffer) - .digest('hex') - .toUpperCase(); - return hash; - } catch (gzipError) { - // If gunzip fails, assume it's regular base64 encoded wasm - const hash = crypto.createHash('sha256') - .update(wasmBuffer) - .digest('hex') - .toUpperCase(); - return hash; - } - } catch (error) { - console.error('Error calculating wasm hash:', error); - return null; - } -} - -// Helper function to get human readable status -function getStatusString(status) { - const statusMap = { - 'PROPOSAL_STATUS_UNSPECIFIED': 'Unspecified', - 'PROPOSAL_STATUS_DEPOSIT_PERIOD': 'Deposit Period', - 'PROPOSAL_STATUS_VOTING_PERIOD': 'Voting Period', - 'PROPOSAL_STATUS_PASSED': 'Passed', - 'PROPOSAL_STATUS_REJECTED': 'Rejected', - 'PROPOSAL_STATUS_FAILED': 'Failed' - }; - return statusMap[status] || status; -} - -async function fetchAllProposals() { - const response = await fetch('https://api.xion-mainnet-1.burnt.com/cosmos/gov/v1/proposals?proposal_status=0'); - if (!response.ok) { - console.error('Failed to fetch proposals:', response.status, response.statusText); - return []; - } - const proposalsData = await response.json(); - return proposalsData.proposals || []; -} - -async function verifyContracts() { - try { - // Read local contracts.json - const contractsPath = path.join(__dirname, '..', 'contracts.json'); - const localContracts = JSON.parse(fs.readFileSync(contractsPath, 'utf8')); - - // Create maps for local contracts - const localCodeIds = new Map(); - const localHashes = new Map(); - const genesisContracts = new Map(); // Track Genesis contracts - localContracts.forEach(contract => { - const isGenesis = contract.governance === 'Genesis'; - localCodeIds.set(contract.code_id, { - name: contract.name, - hash: contract.hash, - governance: contract.governance, - isGenesis - }); - localHashes.set(contract.hash, { - name: contract.name, - code_id: contract.code_id, - governance: contract.governance, - isGenesis - }); - if (isGenesis) { - genesisContracts.set(contract.code_id, { - name: contract.name, - governance: contract.governance - }); - } - }); - - // Fetch all proposals - const proposals = await fetchAllProposals(); - - // Create a map of proposal hashes to their details - const proposalHashMap = new Map(); - let analyzedProposals = 0; - let storeCodeProposals = 0; - let totalStoreCodeMessages = 0; - - // Track which contracts were uploaded by which proposals - const uploadedByProposal = new Map(); // code_id -> proposal info - - proposals.forEach(proposal => { - analyzedProposals++; - if (proposal.messages) { - const storeCodeMessages = proposal.messages.filter((msg, idx) => { - if (msg['@type'] === '/cosmwasm.wasm.v1.MsgStoreCode') { - const hash = calculateWasmHash(msg.wasm_byte_code); - if (hash) { - const proposalInfo = { - proposalId: proposal.id, - proposalTitle: proposal.title, - status: getStatusString(proposal.status), - messageIndex: idx + 1, - totalMessages: proposal.messages.length, - hash - }; - proposalHashMap.set(hash, proposalInfo); - - // Find if this hash matches any code ID in contracts.json - for (const [codeId, info] of localCodeIds) { - if (info.hash === hash) { - uploadedByProposal.set(codeId, proposalInfo); - break; - } - } - - totalStoreCodeMessages++; - return true; - } - } - return false; - }); - if (storeCodeMessages.length > 0) { - storeCodeProposals++; - } - } - }); - - // Fetch chain data - const response = await fetch('https://api.xion-mainnet-1.burnt.com/cosmwasm/wasm/v1/code'); - if (!response.ok) { - console.error('Failed to fetch chain data:', response.statusText); - process.exit(1); // Exit the process with an error code - } - const chainData = await response.json(); - - // Analyze discrepancies - const discrepancies = { - missingFromJson: [], // Exists on chain but not in contracts.json - missingFromChain: [], // Exists in contracts.json but not on chain - hashMismatches: [], // Hash mismatches between chain and contracts.json - missingFromBoth: [], // Found in proposals but not in chain or contracts.json - genesisWithProposal: [] // Genesis contracts that have an associated proposal - }; - - // Check each contract in contracts.json - localCodeIds.forEach((info, codeId) => { - // If this is a Genesis contract (based on governance field) - if (info.isGenesis) { - const proposalInfo = uploadedByProposal.get(codeId); - if (proposalInfo) { - discrepancies.genesisWithProposal.push({ - codeId, - name: info.name, - governance: info.governance, - hash: info.hash, - proposal: proposalInfo - }); - } - } - }); - - // Check chain codes against contracts.json - chainData.code_infos.forEach(info => { - const codeId = info.code_id; - const chainHash = info.data_hash.toUpperCase(); - const localInfo = localCodeIds.get(codeId); - const proposalInfo = proposalHashMap.get(chainHash); - - if (!localInfo) { - discrepancies.missingFromJson.push({ - codeId, - chainHash, - proposal: proposalInfo - }); - } else if (localInfo.hash !== chainHash) { - discrepancies.hashMismatches.push({ - codeId, - name: localInfo.name, - localHash: localInfo.hash, - chainHash, - proposal: proposalInfo - }); - } - }); - - // Check contracts.json codes against chain - localCodeIds.forEach((info, codeId) => { - const exists = chainData.code_infos.some(remote => remote.code_id === codeId); - if (!exists) { - discrepancies.missingFromChain.push({ - codeId, - name: info.name, - hash: info.hash, - proposal: proposalHashMap.get(info.hash) - }); - } - }); - - // Check for proposals with hashes missing from both chain and contracts.json - proposalHashMap.forEach((info, hash) => { - const existsInChain = chainData.code_infos.some(code => code.data_hash.toUpperCase() === hash); - const existsInJson = localHashes.has(hash); - - if (!existsInChain && !existsInJson) { - discrepancies.missingFromBoth.push({ - hash, - proposal: info - }); - } - }); - - // Print unified report - console.log('\nšŸ“Š Analysis Summary:'); - console.log(` Total contracts in contracts.json: ${localContracts.length}`); - console.log(` Genesis contracts: ${genesisContracts.size}`); - console.log(` Total code IDs on chain: ${chainData.code_infos.length}`); - console.log(` Total proposals analyzed: ${analyzedProposals}`); - console.log(` Proposals with store code: ${storeCodeProposals}`); - console.log(` Total store code messages: ${totalStoreCodeMessages}\n`); - - const hasDiscrepancies = Object.values(discrepancies).some(arr => arr.length > 0); - - if (!hasDiscrepancies) { - console.log('āœ… All verifications passed successfully!'); - return false; - } - - console.log('āŒ Found the following discrepancies:\n'); - - if (discrepancies.missingFromJson.length > 0) { - console.log('šŸ“ Codes that exist on chain but not in contracts.json:'); - discrepancies.missingFromJson.forEach(({codeId, chainHash, proposal}) => { - console.log(` Code ID ${codeId}:`); - console.log(` Hash: ${chainHash}`); - if (proposal) { - console.log(` Found in Proposal ${proposal.proposalId}: ${proposal.proposalTitle}`); - console.log(` Status: ${proposal.status}`); - console.log(` Message ${proposal.messageIndex} of ${proposal.totalMessages}`); - } else { - console.log(' No matching proposal found'); - } - console.log(''); - }); - } - - if (discrepancies.missingFromChain.length > 0) { - console.log('šŸ” Codes that exist in contracts.json but not on chain:'); - discrepancies.missingFromChain.forEach(({codeId, name, hash, proposal}) => { - console.log(` Code ID ${codeId} (${name})`); - console.log(` Hash: ${hash}`); - if (proposal) { - console.log(` Found in Proposal ${proposal.proposalId}: ${proposal.proposalTitle}`); - console.log(` Status: ${proposal.status}`); - console.log(` Message ${proposal.messageIndex} of ${proposal.totalMessages}`); - } - console.log(''); - }); - } - - if (discrepancies.hashMismatches.length > 0) { - console.log('āš ļø Hash mismatches between chain and contracts.json:'); - discrepancies.hashMismatches.forEach(({codeId, name, localHash, chainHash, proposal}) => { - console.log(` Code ID ${codeId} (${name}):`); - console.log(` contracts.json: ${localHash}`); - console.log(` chain: ${chainHash}`); - if (proposal) { - console.log(` Found in Proposal ${proposal.proposalId}: ${proposal.proposalTitle}`); - console.log(` Status: ${proposal.status}`); - console.log(` Message ${proposal.messageIndex} of ${proposal.totalMessages}`); - } - console.log(''); - }); - } - - if (discrepancies.missingFromBoth.length > 0) { - console.log('ā— Store code messages found in proposals but missing from both chain and contracts.json:'); - discrepancies.missingFromBoth.forEach(({hash, proposal}) => { - console.log(` Hash: ${hash}`); - console.log(` Found in Proposal ${proposal.proposalId}: ${proposal.proposalTitle}`); - console.log(` Status: ${proposal.status}`); - console.log(` Message ${proposal.messageIndex} of ${proposal.totalMessages}`); - console.log(''); - }); - } - - if (discrepancies.genesisWithProposal.length > 0) { - console.log('āš ļø Contracts marked as "Genesis" but were uploaded via governance proposal:'); - discrepancies.genesisWithProposal.forEach(({codeId, name, governance, hash, proposal}) => { - console.log(` Code ID ${codeId} (${name}):`); - console.log(` Governance: ${governance}`); - console.log(` Hash: ${hash}`); - console.log(` Found in Proposal ${proposal.proposalId}: ${proposal.proposalTitle}`); - console.log(` Status: ${proposal.status}`); - console.log(` Message ${proposal.messageIndex} of ${proposal.totalMessages}`); - console.log(''); - }); - } - - return true; - } catch (error) { - console.error('Error during verification:', error); - return true; - } -} - -// Main function -async function main() { - try { - const hasErrors = await verifyContracts(); - if (hasErrors) { - process.exit(1); - } - } catch (error) { - console.error('Fatal error:', error); - process.exit(1); - } -} - -main(); \ No newline at end of file