From 5e917c32a4fcc2951c7dafe3e210a6f244fff8a4 Mon Sep 17 00:00:00 2001 From: beer-1 <147697694+beer-1@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:32:28 +0900 Subject: [PATCH] devnet infos (#1) * devnet infos --- .github/workflows/check-broken-links.yml | 28 ++ .github/workflows/sync_images.yml | 50 +++ .github/workflows/update_chainjson.yml | 54 +++ .github/workflows/utility/chain_registry.mjs | 382 ++++++++++++++++++ .github/workflows/utility/sync_images.mjs | 293 ++++++++++++++ .github/workflows/utility/test_ibcdata.py | 81 ++++ .github/workflows/utility/update_chaindata.py | 32 ++ .github/workflows/utility/validate_data.py | 209 ++++++++++ .github/workflows/validate_assetlistjson.yml | 20 + .github/workflows/validate_chainjson.yml | 20 + .github/workflows/validate_data.yml | 27 ++ .github/workflows/validate_ibcdatajson.yml | 35 ++ .github/workflows/validate_memokeysjson.yml | 20 + .vscode/settings.json | 5 + _IBC/.gitignore | 0 assetlist.schema.json | 8 +- chain.schema.json | 8 +- devnets/_IBC/mahalo-minimove.json | 32 ++ devnets/_IBC/mahalo-miniwasm.json | 31 ++ devnets/mahalo/assetlist.json | 126 ++++++ devnets/mahalo/chain.json | 93 +++++ devnets/mahalo/images/ETH-INIT.png | Bin 0 -> 24592 bytes devnets/mahalo/images/ETH-INIT.svg | 18 + devnets/mahalo/images/ETH.png | Bin 0 -> 11309 bytes devnets/mahalo/images/ETH.svg | 15 + devnets/mahalo/images/INIT.png | Bin 0 -> 9597 bytes devnets/mahalo/images/INIT.svg | 11 + devnets/mahalo/images/USDC-INIT.png | Bin 0 -> 28192 bytes devnets/mahalo/images/USDC-INIT.svg | 19 + devnets/mahalo/images/USDC.png | Bin 0 -> 21274 bytes devnets/mahalo/images/USDC.svg | 12 + devnets/minimove/assetlist.json | 54 +++ devnets/minimove/chain.json | 90 +++++ devnets/minimove/images/INIT.png | Bin 0 -> 9597 bytes devnets/minimove/images/INIT.svg | 11 + devnets/minimove/images/USDC.png | Bin 0 -> 21274 bytes devnets/minimove/images/USDC.svg | 12 + devnets/miniwasm/assetlist.json | 54 +++ devnets/miniwasm/chain.json | 90 +++++ devnets/miniwasm/images/INIT.png | Bin 0 -> 9597 bytes devnets/miniwasm/images/INIT.svg | 11 + devnets/miniwasm/images/USDC.png | Bin 0 -> 21274 bytes devnets/miniwasm/images/USDC.svg | 12 + ibc_data.schema.json | 114 ++++++ initia/assetlist.json | 28 -- initia/chain.json | 107 ----- minimove/assetlist.json | 28 -- minimove/chain.json | 95 ----- testnets/_IBC/.gitignore | 0 49 files changed, 2069 insertions(+), 266 deletions(-) create mode 100644 .github/workflows/check-broken-links.yml create mode 100644 .github/workflows/sync_images.yml create mode 100644 .github/workflows/update_chainjson.yml create mode 100644 .github/workflows/utility/chain_registry.mjs create mode 100644 .github/workflows/utility/sync_images.mjs create mode 100644 .github/workflows/utility/test_ibcdata.py create mode 100644 .github/workflows/utility/update_chaindata.py create mode 100644 .github/workflows/utility/validate_data.py create mode 100644 .github/workflows/validate_assetlistjson.yml create mode 100644 .github/workflows/validate_chainjson.yml create mode 100644 .github/workflows/validate_data.yml create mode 100644 .github/workflows/validate_ibcdatajson.yml create mode 100644 .github/workflows/validate_memokeysjson.yml create mode 100644 .vscode/settings.json create mode 100644 _IBC/.gitignore create mode 100644 devnets/_IBC/mahalo-minimove.json create mode 100644 devnets/_IBC/mahalo-miniwasm.json create mode 100644 devnets/mahalo/assetlist.json create mode 100644 devnets/mahalo/chain.json create mode 100644 devnets/mahalo/images/ETH-INIT.png create mode 100644 devnets/mahalo/images/ETH-INIT.svg create mode 100644 devnets/mahalo/images/ETH.png create mode 100644 devnets/mahalo/images/ETH.svg create mode 100644 devnets/mahalo/images/INIT.png create mode 100644 devnets/mahalo/images/INIT.svg create mode 100644 devnets/mahalo/images/USDC-INIT.png create mode 100644 devnets/mahalo/images/USDC-INIT.svg create mode 100644 devnets/mahalo/images/USDC.png create mode 100644 devnets/mahalo/images/USDC.svg create mode 100644 devnets/minimove/assetlist.json create mode 100644 devnets/minimove/chain.json create mode 100644 devnets/minimove/images/INIT.png create mode 100644 devnets/minimove/images/INIT.svg create mode 100644 devnets/minimove/images/USDC.png create mode 100644 devnets/minimove/images/USDC.svg create mode 100644 devnets/miniwasm/assetlist.json create mode 100644 devnets/miniwasm/chain.json create mode 100644 devnets/miniwasm/images/INIT.png create mode 100644 devnets/miniwasm/images/INIT.svg create mode 100644 devnets/miniwasm/images/USDC.png create mode 100644 devnets/miniwasm/images/USDC.svg create mode 100644 ibc_data.schema.json delete mode 100644 initia/assetlist.json delete mode 100644 initia/chain.json delete mode 100644 minimove/assetlist.json delete mode 100644 minimove/chain.json create mode 100644 testnets/_IBC/.gitignore diff --git a/.github/workflows/check-broken-links.yml b/.github/workflows/check-broken-links.yml new file mode 100644 index 0000000..2dc5f3f --- /dev/null +++ b/.github/workflows/check-broken-links.yml @@ -0,0 +1,28 @@ +name: Check Broken Links + +on: + schedule: + - cron: '0 10 1,15 * *' # Run on 1st and 15th days of every month at 10:00 UTC + workflow_dispatch: # Allow manual triggering of the workflow + +jobs: + check_links: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Link Checker + id: lychee + uses: lycheeverse/lychee-action@v1.6.1 + with: + args: --accept 501 --exclude-loopback --verbose --no-progress --exclude '^.*(%7D)$' './**/*.json' './**/*.md' + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Create Issue From File + if: env.lychee_exit_code != 0 + uses: peter-evans/create-issue-from-file@v4 + with: + title: Link Checker Report + content-filepath: ./lychee/out.md + labels: report, automated issue diff --git a/.github/workflows/sync_images.yml b/.github/workflows/sync_images.yml new file mode 100644 index 0000000..cd4260e --- /dev/null +++ b/.github/workflows/sync_images.yml @@ -0,0 +1,50 @@ +on: [workflow_dispatch] +name: Sync Images +jobs: + sync_images: + name: Sync Images + runs-on: ubuntu-latest + + defaults: + run: + shell: bash + + steps: + + - name: Checkout repository + uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + submodules: true + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 19.6.0 + + - name: Run code to Sync Images + working-directory: ./.github/workflows/utility + run: node sync_images.mjs + + - name: Add Commit Push + uses: devops-infra/action-commit-push@master + with: + github_token: "${{ secrets.GITHUB_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Sync Images" + force: false + target_branch: update/images + + - name: Create A PR + uses: devops-infra/action-pull-request@v0.4.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_branch: update/images + target_branch: master + title: Sync Images + body: "**Automated pull request**" + old_string: "**THIS IS AN AUTOMATED UPDATE OF IMAGES**" + new_string: "** Automatic pull request**" + get_diff: true + ignore_users: "dependabot" diff --git a/.github/workflows/update_chainjson.yml b/.github/workflows/update_chainjson.yml new file mode 100644 index 0000000..b37c818 --- /dev/null +++ b/.github/workflows/update_chainjson.yml @@ -0,0 +1,54 @@ +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" +name: Update chain.json +jobs: + update_chainjson: + name: Update chains' chain.json + runs-on: ubuntu-latest + steps: + - name: checkout registry + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: 3.9 + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + cd .github/workflows/utility + python -m pip install requests + + - name: Check chain JSON Update + shell: python + run: | + import sys + sys.path.insert(1, '.github/workflows/utility') + import update_chaindata + update_chaindata.checkUpdate() + + - name: Add Commit Push + uses: devops-infra/action-commit-push@master + with: + github_token: "${{ secrets.GITHUB_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Chain.json automatic update" + force: false + target_branch: update/chainjsonv2 + + - name: Create A PR + uses: devops-infra/action-pull-request@v0.4.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_branch: update/chainjsonv2 + target_branch: master + title: Chain.json automatic update + body: "**Automated pull request**" + old_string: "**THIS IS AN AUTOMATED UPDATE OF CHAIN.JSON**" + new_string: "** Automatic pull request**" + get_diff: true + ignore_users: "dependabot" diff --git a/.github/workflows/utility/chain_registry.mjs b/.github/workflows/utility/chain_registry.mjs new file mode 100644 index 0000000..1908b61 --- /dev/null +++ b/.github/workflows/utility/chain_registry.mjs @@ -0,0 +1,382 @@ +// Purpose: +// to provide chain registry lookup functionality to other programs + + +// -- IMPORTS -- + +import * as fs from 'fs'; +import * as path from 'path'; + +// -- VARIABLES -- + +export let chainNameToDirectoryMap = new Map(); + +export const chainRegistryRoot = "../../.."; + +const networkTypeToDirectoryNameMap = new Map(); +networkTypeToDirectoryNameMap.set("mainnet", ""); +networkTypeToDirectoryNameMap.set("testnet", "testnets"); +networkTypeToDirectoryNameMap.set("devnet", "devnets"); +const networkTypes = Array.from(networkTypeToDirectoryNameMap.keys()); + +const domainToDirectoryNameMap = new Map(); +domainToDirectoryNameMap.set("cosmos", ""); +domainToDirectoryNameMap.set("non-cosmos", "_non-cosmos"); +const domains = Array.from(domainToDirectoryNameMap.keys()); + +const fileToFileNameMap = new Map(); +fileToFileNameMap.set("chain", "chain.json"); +fileToFileNameMap.set("assetlist", "assetlist.json"); +const files = Array.from(domainToDirectoryNameMap.keys()); + +export const nonChainDirectories = [ + ".git", + ".github", + ".vs", + "_IBC", + "_memo_keys", + "_template", + "testnets", + "devnets", + ".gitignore", + "assetlist.schema.json", + "chain.schema.json", + "ibc_data.schema.json", + "memo_keys.schema.json", + "README.md", + "LICENSE" +] + +export const assetSchema = { + description: "string", + denom_units: [], + type_asset: "string", + address: "string", + base: "string", + name: "string", + display: "string", + symbol: "string", + traces: [], + logo_URIs: { + png: "string", + svg: "string" + }, + coingecko_id: "string", + keywords: [] +} + +export const bech32ConfigSuffixMap = new Map([ + ["bech32PrefixAccAddr", ""], + ["bech32PrefixAccPub", "pub"], + ["bech32PrefixValAddr", "valoper"], + ["bech32PrefixValPub", "valoperpub"], + ["bech32PrefixConsAddr", "valcons"], + ["bech32PrefixConsPub", "valconspub"] +]); + + +const networkTypeToDirectoryMap = new Map(); +networkTypeToDirectoryMap.set("mainnet", ""); +networkTypeToDirectoryMap.set("testnet", "testnets"); +networkTypeToDirectoryMap.set("devnet", "devnets"); +for (const [networkType, directory] of networkTypeToDirectoryMap.entries()) { + networkTypeToDirectoryMap.set(networkType, path.join(chainRegistryRoot, directory)); +} + +const fileNames = { + chain: "chain.json", + assetlist: "assetlist.json", +}; + +let paths = {}; +let chains = []; +export const chain__FileName = "chain.json"; +export const assetlist__FileName = "assetlist.json"; + +export let debug = 1; + + +export let allChains = ""; + +// -- GENERAL UTILITY FUNCTIONS -- + +export function readJsonFile(file) { + try { + return JSON.parse(fs.readFileSync(file)); + } catch (err) { + console.log(err); + } +} + +export function writeJsonFile(file, object) { + try { + fs.writeFileSync((file), JSON.stringify(object,null,2), (err) => { + if (err) throw err; + }); + } catch (err) { + console.log(err); + } +} + +export function getDirectoryContents(directory) { + let array = []; + try { + array = fs.readdirSync(directory, (err, list) => { + if (err) throw err; + return list; + }); + } catch (err) { + console.log(err); + } + return array; +} + +export function setDifferenceArray(a, b) { + let c = []; + a.forEach((item) => { + if(!b.includes(item)) { + c.push(item); + } + }); + return c; +} + + +export async function calculateIbcHash(ibcHashInput) { + const textAsBuffer = new TextEncoder().encode(ibcHashInput); + const hashBuffer = await crypto.subtle.digest('SHA-256', textAsBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)) + const digest = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + const ibcHashOutput = "ibc/" + digest.toUpperCase(); + return ibcHashOutput; +} + + +// -- CHAIN REGISTRY MODULES -- + + +export function populateChainDirectories() { + for (let [networkType, networkTypeDirectoryName] of networkTypeToDirectoryNameMap) { + for (let [domain, domainDirectoryName] of domainToDirectoryNameMap) { + chains = setDifferenceArray( + getDirectoryContents(path.join(chainRegistryRoot, networkTypeDirectoryName, domainDirectoryName)), + nonChainDirectories + ); + chains.forEach((chainName) => { + chainNameToDirectoryMap.set( + chainName, + path.join(chainRegistryRoot, networkTypeDirectoryName, domainDirectoryName, chainName) + ); + }); + } + } +} + +export function getFileProperty(chainName, file, property) { + const chainDirectory = chainNameToDirectoryMap.get(chainName); + if(chainDirectory) { + const filePath = path.join(chainDirectory,fileToFileNameMap.get(file)); + const FILE_EXISTS = fs.existsSync(filePath); + if(FILE_EXISTS) { + return readJsonFile(filePath)[property]; + } + } +} + +export function setFileProperty(chainName, file, property, value) { + const chainDirectory = chainNameToDirectoryMap.get(chainName); + if(chainDirectory) { + const filePath = path.join(chainDirectory,fileToFileNameMap.get(file)); + const FILE_EXISTS = fs.existsSync(filePath); + if(FILE_EXISTS) { + let json = readJsonFile(filePath); + json[property] = value; + writeJsonFile(filePath, json); + return; + } + } +} + +export function getIBCFileProperty(chainName1, chainName2, property) { + const chain1Directory = chainNameToDirectoryMap.get(chainName1); + const chain2Directory = chainNameToDirectoryMap.get(chainName2); + if(chain1Directory && chain2Directory) { + if(path.join(chain1Directory, "..") == path.join(chain2Directory, "..")) { + const ibcDirectory = path.join(chain1Directory, "..", "_IBC"); + let list = [chainName1, chainName2]; + list = list.sort(); + const fileName = list[0] + '-' + list[1] + '.json'; + const filePath = path.join(ibcDirectory, fileName); + const FILE_EXISTS = fs.existsSync(filePath); + if(FILE_EXISTS) { + return readJsonFile(filePath)[property]; + } + } + } +} + +export function getAssetProperty(chainName, baseDenom, property) { + const assets = getFileProperty(chainName, "assetlist", "assets"); + if(assets) { + let selectedAsset; + assets.forEach((asset) => { + if(asset.base == baseDenom) { + selectedAsset = asset; + return; + } + }); + if(selectedAsset) { + return selectedAsset[property]; + } + } +} + +export function setAssetProperty(chainName, baseDenom, property, value) { + const assets = getFileProperty(chainName, "assetlist", "assets"); + if(assets) { + assets.forEach((asset) => { + if(asset.base == baseDenom) { + asset[property] = value; + setFileProperty(chainName, "assetlist", "assets", assets); + return; + } + }); + } +} + +export function getAssetPropertyWithTrace(chainName, baseDenom, property) { + let value = getAssetProperty(chainName, baseDenom, property); + if (!value) { + if (property != "traces") { + let traces = getAssetProperty(chainName, baseDenom, "traces"); + if (traces) { + let originAsset = { + chainName: traces[traces.length - 1].counterparty.chain_name, + baseDenom: traces[traces.length - 1].counterparty.base_denom + } + return getAssetPropertyWithTrace(originAsset.chainName, originAsset.baseDenom, property); + } + } + } + return value; +} + +export function getAssetTraces(chainName, baseDenom) { + let traces = getAssetProperty(chainName, baseDenom, "traces"); + let fullTrace; + if (traces) { + fullTrace = []; + fullTrace.push(traces[traces.length - 1]); + let originAsset = { + chainName: traces[traces.length - 1].counterparty.chain_name, + baseDenom: traces[traces.length - 1].counterparty.base_denom + } + let previousTraces = getAssetTraces(originAsset.chainName, originAsset.baseDenom); + if (previousTraces) { + fullTrace = previousTraces.concat(fullTrace); + } + } + return fullTrace; +} + +export function getAssetPointersByChain(chainName) { + let assetPointers = []; + const assets = getFileProperty(chainName, "assetlist", "assets"); + if(assets) { + assets.forEach((asset) => { + if(asset.base) { + assetPointers.push({ + chain_name: chainName, + base_denom: asset.base + }); + } + }); + } + return assetPointers; +} + +export function getAssetPointersByNetworkType(networkType) { + let assetPointers = []; + const assets = getFileProperty(chainName, "assetlist", "assets"); + if(assets) { + assets.forEach((asset) => { + if(asset.base) { + assetPointers.push({ + chain_name: chainName, + base_denom: asset.base + }); + } + }); + } + return assetPointers; +} + +export function getAssetPointers() { + let assetPointers = []; + Array.from(chainNameToDirectoryMap.keys()).forEach((chainName) => { + assetPointers = assetPointers.concat(getAssetPointersByChain(chainName)); + }); + return assetPointers; +} + +export function getChains() { + chains = Array.from(chainNameToDirectoryMap.keys()); + return chains; +} + +export function filterChainsByFileProperty(chains, file, property, value) { + let filtered = []; + chains.forEach((chain) => { + let propertyValue = getFileProperty(chain, file, property); + if(value == "*") { + if(propertyValue && propertyValue != "") { + filtered.push(pointer); + } + } else { + if(propertyValue == value) { + filtered.push(pointer); + } + } + }); + return filtered; +} + +export function filterAssetPointersByFileProperty(pointers, file, property, value) { + let filtered = []; + pointers.forEach((pointer) => { + let propertyValue = getFileProperty(pointer.chain_name, file, property); + if(value == "*") { + if(propertyValue && propertyValue != "") { + filtered.push(pointer); + } + } else { + if(propertyValue == value) { + filtered.push(pointer); + } + } + }); + return filtered; +} + +export function filterAssetPointersByAssetProperty(pointers, property, value) { + let filtered = []; + pointers.forEach((pointer) => { + let propertyValue = getAssetProperty(pointer.chain_name, pointer.base_denom, property); + if(value == "*") { + if(propertyValue && propertyValue != "") { + filtered.push(pointer); + } + } else { + if(propertyValue == value) { + filtered.push(pointer); + } + } + }); + return filtered; +} + +function main() { + populateChainDirectories(); +} + +main(); \ No newline at end of file diff --git a/.github/workflows/utility/sync_images.mjs b/.github/workflows/utility/sync_images.mjs new file mode 100644 index 0000000..2f001a0 --- /dev/null +++ b/.github/workflows/utility/sync_images.mjs @@ -0,0 +1,293 @@ +// Purpose: +// to synchronize the `logo_URIs` and `images` proprties, +// and to synchronize linked iamges, where an image for one chain or asset is to be the same as another + + +// -- THE PLAN -- +// +// Step 1: create `images` array where possible +// +// iterate through every object where images could exist (chains and assets) +// get list of chains, iterate each chain +// get list of assets, iterate each asset +// record the logo_URIs and images properties +// if logo_URIs +// if images +// if logo_URIs::png/svg NOT in images +// create new image object +// add png and svg into object +// else (no images) +// create images array +// create new image object +// add png and svg into object +// if !logo_URIs AND !images +// create images array +// create image object +// add link to origin asset +// +// Step 2: pull image data from referenced images +// +// iterate chains +// iterate assets +// iterate images +// if image_sync, +// (start recursive function) +// go to origin +// if origin.images +// if origin.images[0].image_sync +// return go to origin (recursive call) +// if origin.images[0].png||svg +// set first [0] image png&&svg&&theme +// return +// (end recursive function) +// +// Step 3: Set logo_URIs to first image in images array +// +// iterate chains +// iterate assets +// if images +// logo_URIs::png&&svg = images[0].png&&svg +// +// Finish: +// +// write changes to chain_reg + + +import * as fs from 'fs'; +import * as path from 'path'; +import * as chain_reg from './chain_registry.mjs'; + +function createImagesArray(){ + + // get list of chains, iterate each chain +// get list of assets, iterate each asset +// record the logo_URIs and images properties + + let chainFiles = []; + let newImageContainingObject; + + let chains = chain_reg.getChains(); + chains.forEach((chainName) => { + //console.log(chainName); + + let logo_URIs = chain_reg.getFileProperty(chainName, "chain", "logo_URIs"); + //console.log(logo_URIs); + let images = chain_reg.getFileProperty(chainName, "chain", "images"); + //console.log(images); + + let imageContainingObject = { + chain_name: chainName, + logo_URIs: logo_URIs, + images: images, + hasUpdated: false + } + + //console.log(imageContainingObject); + newImageContainingObject = compareImages(imageContainingObject); + + if(newImageContainingObject.hasUpdated){ + //console.log(newImageContainingObject); + chain_reg.setFileProperty(chainName, "chain", "images", newImageContainingObject.images); + } + + }); + + let assets = chain_reg.getAssetPointers(); + assets.forEach((assetPointer) => { + //console.log(assetPointer.base_denom); + + let logo_URIs = chain_reg.getAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "logo_URIs"); + //console.log(logo_URIs); + let images = chain_reg.getAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "images"); + //console.log(images); + + let imageContainingObject = { + chain_name: assetPointer.chain_name, + base_denom: assetPointer.base_denom, + logo_URIs: logo_URIs, + images: images, + hasUpdated: false + } + + //console.log(imageContainingObject); + newImageContainingObject = compareImages(imageContainingObject); + + //if(!logo_URIs && !images){ + //newImageContainingObject = createOriginLink(imageContainingObject); + //} + + //console.log(newImageContainingObject) + if(newImageContainingObject.hasUpdated){ + chain_reg.setAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "images", newImageContainingObject.images); + } + + }); + +} + +function compareImages(imageContainingObject) { + let newImageContainingObject = imageContainingObject; + if(imageContainingObject.logo_URIs){ + if(imageContainingObject.images){ + let match = false; + imageContainingObject.images.forEach((image) => { + if(imageContainingObject.logo_URIs.png == image.png && + imageContainingObject.logo_URIs.svg == image.svg) { + match = true; + return newImageContainingObject; + } + }); + if(!match){ + newImageContainingObject.images.push({ + png: imageContainingObject.logo_URIs.png, + svg: imageContainingObject.logo_URIs.svg + }); + newImageContainingObject.hasUpdated = true; + return newImageContainingObject; + } + } else { + newImageContainingObject.images = [{ + png: imageContainingObject.logo_URIs.png, + svg: imageContainingObject.logo_URIs.svg + }]; + newImageContainingObject.hasUpdated = true; + } + } else { + if(!imageContainingObject.images && imageContainingObject.base_denom){ + //console.log(imageContainingObject); + newImageContainingObject = createOriginLink(imageContainingObject); + } + } + return newImageContainingObject; +} + +function createOriginLink(imageContainingObject){ + let newImageContainingObject = imageContainingObject; + let traces = chain_reg.getAssetProperty( + imageContainingObject.chain_name, + imageContainingObject.base_denom, + "traces"); + if(traces){ + newImageContainingObject.images = [ + { + image_sync: { + chain_name: traces[0].counterparty.chain_name, + base_denom: traces[0].counterparty.base_denom + } + } + ]; + newImageContainingObject.hasUpdated = true; + //console.log(newImageContainingObject); + } + return newImageContainingObject; +} + + +function getLinkedImages(){ + +// get list of chains, iterate each chain +// iterate images +// pull from origin + + let chains = chain_reg.getChains(); + chains.forEach((chainName) => { + let images = chain_reg.getFileProperty(chainName, "chain", "images"); + if(images) { + let replacementImage; + images?.forEach((image) => { + replacementImage = getLinkedImage(image?.image_sync?.chain_name, image?.image_sync?.base_denom); + if(replacementImage){ + image.png = replacementImage?.png; + image.svg = replacementImage?.svg; + image.theme = replacementImage?.theme; + } + }); + chain_reg.setFileProperty(chainName, "chain", "images", images); + } + }); + +// get list of assets, iterate each asset +// iterate images +// pull from origin + + let assets = chain_reg.getAssetPointers(); + assets.forEach((assetPointer) => { + let images = chain_reg.getAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "images"); + if(images) { + images?.forEach((image) => { + let replacementImage; + replacementImage = getLinkedImage(image?.image_sync?.chain_name, image?.image_sync?.base_denom); + if(replacementImage){ + image.png = replacementImage?.png; + image.svg = replacementImage?.svg; + image.theme = replacementImage?.theme; + } + }); + chain_reg.setAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "images", images); + } + }); + +} + +function getLinkedImage(chain_name, base_denom){ + let images; + if (base_denom) { + images = chain_reg.getAssetProperty(chain_name, base_denom, "images"); + } else { + images = chain_reg.getFileProperty(chain_name, "chain", "images") + } + if(!images){return;} + let image = images[0]; + if(image.image_sync){ + return getLinkedImage(image.image_sync.chain_name, image.image_sync.base_denom); + } else { + return image; + } +} + +function overwriteLogoURIs(chain_name, base_denom){ + +// iterate chains +// iterate assets +// if images +// logo_URIs::png&&svg = images[0].png&&svg + + + + let chains = chain_reg.getChains(); + chains.forEach((chainName) => { + let images = chain_reg.getFileProperty(chainName, "chain", "images"); + let logo_URIs = { + png: images?.[0]?.png, + svg: images?.[0]?.svg + } + if(images) { + if(images[0].png || images[0].svg) { + chain_reg.setFileProperty(chainName, "chain", "logo_URIs", logo_URIs); + } + } + }); + + let assets = chain_reg.getAssetPointers(); + assets.forEach((assetPointer) => { + let images = chain_reg.getAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "images"); + let logo_URIs = { + png: images?.[0]?.png, + svg: images?.[0]?.svg + } + if(images) { + if(images[0].png || images[0].svg) { + chain_reg.setAssetProperty(assetPointer.chain_name, assetPointer.base_denom, "logo_URIs", logo_URIs); + } + } + }); + +} + +function main(){ + createImagesArray(); + getLinkedImages(); + overwriteLogoURIs(); +} + +main() \ No newline at end of file diff --git a/.github/workflows/utility/test_ibcdata.py b/.github/workflows/utility/test_ibcdata.py new file mode 100644 index 0000000..05d0a2f --- /dev/null +++ b/.github/workflows/utility/test_ibcdata.py @@ -0,0 +1,81 @@ +import re +import json +from os import getcwd, listdir +from os.path import isfile, isdir, join + +import pytest + +mypathMainnets = join(getcwd(),"_IBC") +mypathTestnets = join(getcwd(),"testnets","_IBC") +mypathDevnets = join(getcwd(),"devnets","_IBC") +ibcData_files_mainnet = [f for f in listdir(mypathMainnets) if isfile(join(mypathMainnets, f)) and f != ".gitignore"] +ibcData_files_testnet = [f for f in listdir(mypathTestnets) if isfile(join(mypathTestnets, f)) and f != ".gitignore"] +ibcData_files_devnet = [f for f in listdir(mypathDevnets) if isfile(join(mypathDevnets, f)) and f != ".gitignore"] +ibcData_files = ibcData_files_mainnet + ibcData_files_testnet + ibcData_files_devnet + +@pytest.mark.parametrize("input", ibcData_files) +def test_fileName(input): + # validates that the json file name has two "strings" separated by a hyphen (-) and ends with ".json" + pattern = re.compile(r'.*-.*.json$') + result = re.match(pattern, input) + assert result + +@pytest.mark.parametrize("input", ibcData_files) +def test_alphabeticalOrder(input): + # validates that chain_1 and chain_2 in file name are in alphabetical order + pattern = re.compile(r'(.*)-(.*).json$') + m = pattern.match(input) + toSort = [(m.group(1)), (m.group(2))] + toSort.sort(key=str.lower) + assert (m.group(1) == toSort[0]) and (m.group(2) == toSort[1]) + +@pytest.mark.parametrize("input", ibcData_files_mainnet) +def test_chainNameMatchFileNameMainnets(input): + # validates for mainnet connections that the chain-name for chain-1 and chain-2 inside the json file match the order used in the file name. + pattern = re.compile(r'(.*)-(.*).json$') + m = pattern.match(input) + fileName_chain1 = m.group(1).lower() + fileName_chain2 = m.group(2).lower() + with open(join(mypathMainnets,input), "r") as read_file: + json_file = json.load(read_file) + chain_1 = str(json_file["chain_1"]["chain_name"]).lower() + chain_2 = str(json_file["chain_2"]["chain_name"]).lower() + assert fileName_chain1 == chain_1 and fileName_chain2 == chain_2 + +@pytest.mark.parametrize("input", ibcData_files_testnet) +def test_chainNameMatchFileNameTestnets(input): + # validates for testnet connections that the chain-name for chain-1 and chain-2 inside the json file match the order used in the file name. + pattern = re.compile(r'(.*)-(.*).json$') + m = pattern.match(input) + fileName_chain1 = m.group(1).lower() + fileName_chain2 = m.group(2).lower() + with open(join(mypathTestnets,input), "r") as read_file: + json_file = json.load(read_file) + chain_1 = str(json_file["chain_1"]["chain_name"]).lower() + chain_2 = str(json_file["chain_2"]["chain_name"]).lower() + assert fileName_chain1 == chain_1 and fileName_chain2 == chain_2 + +@pytest.mark.parametrize("input", ibcData_files_devnet) +def test_chainNameMatchFileNameDevnets(input): + # validates for testnet connections that the chain-name for chain-1 and chain-2 inside the json file match the order used in the file name. + pattern = re.compile(r'(.*)-(.*).json$') + m = pattern.match(input) + fileName_chain1 = m.group(1).lower() + fileName_chain2 = m.group(2).lower() + with open(join(mypathDevnets,input), "r") as read_file: + json_file = json.load(read_file) + chain_1 = str(json_file["chain_1"]["chain_name"]).lower() + chain_2 = str(json_file["chain_2"]["chain_name"]).lower() + assert fileName_chain1 == chain_1 and fileName_chain2 == chain_2 + +@pytest.mark.parametrize("input", ibcData_files) + # validates that the chain-name's used exist as root folders on the chain-registry +def test_existstsOnChainReg(input): + pattern = re.compile(r'(.*)-(.*).json$') + m = pattern.match(input) + chain1 = m.group(1).lower() + chain2 = m.group(2).lower() + testnets = join('testnets') + devnets = join('devnets') + assert ((isdir(join(getcwd(),chain1)) or isdir(join(getcwd(),testnets,chain1)) or isdir(join(getcwd(), devnets,chain1))) and + (isdir(join(getcwd(),chain2)) or isdir(join(getcwd(),testnets,chain2)) or isdir(join(getcwd(),devnets,chain2)))) diff --git a/.github/workflows/utility/update_chaindata.py b/.github/workflows/utility/update_chaindata.py new file mode 100644 index 0000000..108eb42 --- /dev/null +++ b/.github/workflows/utility/update_chaindata.py @@ -0,0 +1,32 @@ +import requests, json +import os +from os import getcwd + +rootdir = getcwd() + +def checkUpdate(): + for chainfolder in os.listdir(rootdir): + chainjson = os.path.join(chainfolder, "chain.json") + # The following line is commented out: it will be used when everyone adopts the chainjson on their chain repo. + # if os.path.isfile(chainjson): + if chainjson == "osmosis/chain.json": + current = json.load(open(os.path.join(rootdir, chainjson))) + + #Safeguard for updatelink being 0 + if current['update_link'] == None: + continue + + URL = current["update_link"] + chain_data_holder = requests.get("" + URL + "") + response = json.loads(chain_data_holder.text) + chaindata = response["codebase"] + + #If what's on the chain repo doesn't match what's here + if chaindata != current["codebase"]: + #Add conditional checkers for if various fields that are non-modifiable have been modified. + current["codebase"] = chaindata + with open(os.path.join(rootdir, chainjson), 'w', encoding='utf-8') as f: + json.dump(current, f, ensure_ascii=False, indent=2) + return True + else: + print("No update needed for " + chainjson) diff --git a/.github/workflows/utility/validate_data.py b/.github/workflows/utility/validate_data.py new file mode 100644 index 0000000..b620243 --- /dev/null +++ b/.github/workflows/utility/validate_data.py @@ -0,0 +1,209 @@ +import json +import urllib.request +import os +from os import getcwd + +rootdir = getcwd() + +checkSlip173 = 0 +slipWebsites = {} +slipMainnetPrefixes = {} +slipTestnetPrefixes = {} + +def readSLIP173(): + slip173URL = "https://raw.githubusercontent.com/satoshilabs/slips/master/slip-0173.md" + lines = [] + for line in urllib.request.urlopen(slip173URL): + line = line.decode('utf-8') + if (len(line) > 2): + if (line[0] == "|" and line[2] == "["): + lines.append(line) + if lines: + for line in lines: + pretty = line[3:line.find("]")] + website = line[line.find("(")+1:line.find(")")] + slipWebsites[pretty] = website + secondPipe = line.find("|", 1) + thirdPipe = line.find("|", secondPipe + 1) + mainnetArea = line[secondPipe:thirdPipe] + firstQuote = mainnetArea.find("`") + if(firstQuote > 0): + secondQuote = mainnetArea.find("`", firstQuote + 1) + if(secondQuote > 0): + mainnetPrefix = mainnetArea[firstQuote + 1:secondQuote] + slipMainnetPrefixes[pretty] = mainnetPrefix + else: + print("Mainnet Bech32 Prefix undefined - missing second quote") + else: + print("Mainnet Bech32 Prefix undefined") + fourthPipe = line.find("|", thirdPipe + 1) + testnetArea = line[thirdPipe:fourthPipe] + firstQuote = testnetArea.find("`") + if(firstQuote > 0): + secondQuote = testnetArea.find("`", firstQuote + 1) + if(secondQuote > 0): + testnetPrefix = testnetArea[firstQuote + 1:testnetArea.find("`", firstQuote + 1)] + slipTestnetPrefixes[pretty] = testnetPrefix + else: + print("Mainnet Bech32 Prefix undefined - missing second quote") + else: + raise Exception("no SLIP-0173 entries recorded") + +checkSlip44 = 1 +slipCoinTypesByNum = {} +slipCoinTypesByName = {} +slip44Websites = {} + +def readSLIP44(): + slip44URL = "https://raw.githubusercontent.com/satoshilabs/slips/master/slip-0044.md" + lines = [] + for line in urllib.request.urlopen(slip44URL): + line = line.decode('utf-8') + if(len(line) > 20): + if(line[0] == "|" and line[2] != "C" and line[2] != "-"): + lines.append(line) + if lines: + for line in lines: + coinNumber = int(line[2:line.find(" ", 2)]) + if(line.find("[") > 0): + pretty = line[line.find("[")+1:line.find("]")] + website = line[line.find("(")+1:line.find(")")] + slip44Websites[pretty] = website + else: + firstPipe = line.find("|") + secondPipe = line.find("|", firstPipe + 1) + thirdPipe = line.find("|", secondPipe + 1) + pretty = line[thirdPipe+2:len(line)-1] + slipCoinTypesByNum[coinNumber] = pretty + slipCoinTypesByName[pretty] = coinNumber + else: + raise Exception("no SLIP-0044 entries recorded") + +# -----FOR EACH CHAIN----- +def checkChains(): + for chainfolder in os.listdir(rootdir): + chainjson = os.path.join(chainfolder, "chain.json") + print(chainjson + " - " + str(os.path.exists(chainjson))) + if not os.path.exists(chainjson): + continue + chainSchema = json.load(open(os.path.join(rootdir, chainjson))) + assetlistjson = os.path.join(chainfolder, "assetlist.json") + print(assetlistjson + " - " + str(os.path.exists(assetlistjson))) + if not os.path.exists(assetlistjson): + continue + assetlistSchema = json.load(open(os.path.join(rootdir, assetlistjson))) + bases = [] + if "assets" in assetlistSchema: + if assetlistSchema["assets"]: + for asset in assetlistSchema["assets"]: + assetDenoms = [] + if "denom_units" in asset: + if asset["denom_units"]: + for unit in asset["denom_units"]: + if "denom" in unit: + assetDenoms.append(unit["denom"]) + else: + raise Exception("unit doesn't contain 'denom' string") + if "aliases" in unit: + for alias in unit["aliases"]: + assetDenoms.append(alias) + else: + raise Exception("'denon_units' array doesn't contain any units") + else: + raise Exception("asset doesn't contain 'denom_units' array") + if "base" in asset: + if asset["base"] in assetDenoms: + bases.append(asset["base"]) + else: + raise Exception("base not in denom_units") + else: + raise Exception("asset doesn't contain 'base' string") + if "display" in asset: + if asset["display"] not in assetDenoms: + raise Exception("display " + asset["display"] + " not in denom_units") + else: + raise Exception("asset doesn't contain 'display' string") + else: + raise Exception("'assets' array doesn't contain any tokens") + else: + raise Exception("assetlist schema doesn't contain 'assets' array") + if "fees" in chainSchema: + if "fee_tokens" in chainSchema["fees"]: + if chainSchema["fees"]["fee_tokens"]: + for token in chainSchema["fees"]["fee_tokens"]: + if "denom" in token: + if token["denom"] not in bases: + raise Exception(token["denom"] + " is not in bases") + else: + raise Exception("token doesn't contain 'denom' string") + else: + raise Exception("'fee_tokens' array doesn't contain any tokens") + else: + raise Exception("'fees' object doesn't contain 'fee_tokens' array") + else: + print("[OPTIONAL - Keplr Compliance] chain schema doesn't contain 'fees' object") + if "staking" in chainSchema: + if "staking_tokens" in chainSchema["staking"]: + if chainSchema["staking"]["staking_tokens"]: + for token in chainSchema["staking"]["staking_tokens"]: + if "denom" in token: + if token["denom"] not in bases: + raise Exception(token["denom"] + " is not in bases") + else: + raise Exception("token doesn't contain 'denom' string") + else: + raise Exception("'staking_tokens' array doesn't contain any tokens") + else: + raise Exception("'fees' object doesn't contain 'staking_tokens' array") + else: + print("[OPTIONAL - Keplr Compliance] chain schema doesn't contain 'staking' object") + if "network_type" in chainSchema: + networkType = chainSchema["network_type"] + if networkType == "mainnet": + slipPrefixes = slipMainnetPrefixes + elif networkType == "testnet": + slipPrefixes = slipTestnetPrefixes + else: + raise Exception("network type unknown (not Mainnet nor Testnet)") + else: + raise Exception("chain schema doesn't contain 'network_type'") + if "pretty_name" in chainSchema: + prettyName = chainSchema["pretty_name"] + if checkSlip173: + if "bech32_prefix" in chainSchema: + if prettyName == "Terra Classic" or prettyName == "Terra 2.0": + prettyName = "Terra" + if prettyName in slipWebsites: + if prettyName in slipPrefixes: + if chainSchema["bech32_prefix"] != slipPrefixes[prettyName]: + raise Exception("chain.json bech32 prefix " + chainSchema["bech32_prefix"] + " does not match SLIP-0173 prefix " + slipPrefixes[prettyName]) + else: + raise Exception(prettyName + " SLIP-0173 registeration does not have prefix") + else: + raise Exception(prettyName + " not registered to SLIP-0173") + else: + raise Exception(prettyName + " missing 'bech32_prefix'") + if checkSlip44: + if "slip44" in chainSchema: + coinType = chainSchema["slip44"] + if prettyName in slipCoinTypesByName: + if coinType != slipCoinTypesByName[prettyName]: + raise Exception("Chain schema Coin Type " + str(coinType) + " does not equal slip44 registration " + str(slipCoinTypesByName[prettyName])) + else: + if coinType in slipCoinTypesByNum: + if slipCoinTypesByNum[coinType] == "": + raise Exception("Coin Type " + str(coinType) + " is unregistered in SLIP44") + else: + raise Exception("Coin Type " + str(coinType) + " is unreserved in SLIP44") + else: + print("[OPTIONAL - Keplr Compliance] chain schema doesn't contain 'slip44' string") + else: + raise Exception("chainSchema does not contain 'pretty_name'") + print("Done") + +def runAll(): + if checkSlip173: + readSLIP173() + if checkSlip44: + readSLIP44() + checkChains() diff --git a/.github/workflows/validate_assetlistjson.yml b/.github/workflows/validate_assetlistjson.yml new file mode 100644 index 0000000..03acaa8 --- /dev/null +++ b/.github/workflows/validate_assetlistjson.yml @@ -0,0 +1,20 @@ +on: [pull_request, workflow_dispatch] +name: PR workflow +jobs: + validate_chainjson: + name: Validate edited assetlist.json + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Install JSON-Schema-Validator + run: npm install -g jsonschema + + - name: Validate Assetlist.json schema + run: | + for file in $(find . -name 'assetlist.json' | grep -v '_template/'); do + if ! jsonschema -i "$file" ./assetlist.schema.json; then + exit 1 + fi + done diff --git a/.github/workflows/validate_chainjson.yml b/.github/workflows/validate_chainjson.yml new file mode 100644 index 0000000..c397e08 --- /dev/null +++ b/.github/workflows/validate_chainjson.yml @@ -0,0 +1,20 @@ +on: [pull_request, workflow_dispatch] +name: PR workflow +jobs: + validate_chainjson: + name: Validate edited chains.json + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Install JSON-Schema-Validator + run: npm install -g jsonschema + + - name: Validate Chain.json schema + run: | + for file in $(find . -name 'chain.json' | grep -v '_template/'); do + if ! jsonschema -i "$file" ./chain.schema.json; then + exit 1 + fi + done diff --git a/.github/workflows/validate_data.yml b/.github/workflows/validate_data.yml new file mode 100644 index 0000000..07f2e9c --- /dev/null +++ b/.github/workflows/validate_data.yml @@ -0,0 +1,27 @@ +on: [pull_request, workflow_dispatch] +name: PR Workflow +jobs: + jobname: + name: Validate Data + runs-on: ubuntu-latest + steps: + - name: checkout the repo + uses: actions/checkout@v3 #Checks out the registry; sets up python + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: 3.9 + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + cd .github/workflows/utility + + - name: Run Data Validation python script + shell: python + run: | + import sys + sys.path.insert(1, '.github/workflows/utility') + import validate_data + validate_data.runAll() diff --git a/.github/workflows/validate_ibcdatajson.yml b/.github/workflows/validate_ibcdatajson.yml new file mode 100644 index 0000000..e9272dd --- /dev/null +++ b/.github/workflows/validate_ibcdatajson.yml @@ -0,0 +1,35 @@ +on: [pull_request, workflow_dispatch] +name: PR workflow +jobs: + validate_ibcdatajson: + name: Validate ibc data schemas + runs-on: ubuntu-latest + steps: + - name: checkout registry + uses: actions/checkout@v3 + + - name: Install JSON-Schema-Validator + run: npm install -g jsonschema + + - name: Validate IBC data schemas + run: | + for file in $(find . -name '*/_IBC/*.json'); do + if ! jsonschema -i "$file" ./ibc-data.schema.json; then + exit 1 + fi + done + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: 3.9 + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + cd .github/workflows/utility + pip install pytest==7.1.2 + + - name: Chain Name Validation + run: | + python -m pytest --import-mode=append .github/workflows/utility diff --git a/.github/workflows/validate_memokeysjson.yml b/.github/workflows/validate_memokeysjson.yml new file mode 100644 index 0000000..4d9821e --- /dev/null +++ b/.github/workflows/validate_memokeysjson.yml @@ -0,0 +1,20 @@ +on: [pull_request, workflow_dispatch] +name: PR workflow +jobs: + validate_ibcdatajson: + name: Validate memo keys schemas + runs-on: ubuntu-latest + steps: + - name: checkout registry + uses: actions/checkout@v3 + + - name: Install JSON-Schema-Validator + run: npm install -g jsonschema + + - name: Validate Memo Keys schemas + run: | + for file in $(find . -name '*/_memo_keys/*.json'); do + if ! jsonschema -i "$file" ./memo_keys.schema.json; then + exit 1 + fi + done diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f910ed --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "devnets" + ] +} \ No newline at end of file diff --git a/_IBC/.gitignore b/_IBC/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/assetlist.schema.json b/assetlist.schema.json index 5a58f42..cf5551d 100644 --- a/assetlist.schema.json +++ b/assetlist.schema.json @@ -119,12 +119,12 @@ "png": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.png$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.png$" }, "svg": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.svg$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.svg$" } }, "additionalProperties": false @@ -140,12 +140,12 @@ "png": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.png$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.png$" }, "svg": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.svg$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.svg$" }, "theme": { "type": "object", diff --git a/chain.schema.json b/chain.schema.json index e2640c1..15e019e 100644 --- a/chain.schema.json +++ b/chain.schema.json @@ -425,12 +425,12 @@ "png": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.png$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.png$" }, "svg": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.svg$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.svg$" }, "theme": { "type": "object", @@ -486,12 +486,12 @@ "png": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.png$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.png$" }, "svg": { "type": "string", "format": "uri-reference", - "pattern": "^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.svg$" + "pattern": "^https://raw\\.githubusercontent\\.com/initia/initia-registry/master/(|testnets/|devnets/)[a-z0-9]+/images/.+\\.svg$" } }, "additionalProperties": false diff --git a/devnets/_IBC/mahalo-minimove.json b/devnets/_IBC/mahalo-minimove.json new file mode 100644 index 0000000..7bb2fe3 --- /dev/null +++ b/devnets/_IBC/mahalo-minimove.json @@ -0,0 +1,32 @@ +{ + "$schema": "../../ibc_data.schema.json", + "chain_1": { + "chain_name": "mahalo", + "client_id": "07-tendermint-0", + "connection_id": "connection-0" + }, + "chain_2": { + "chain_name": "minimove", + "client_id": "07-tendermint-0", + "connection_id": "connection-0" + }, + "channels": [ + { + "chain_1": { + "channel_id": "channel-0", + "port_id": "transfer" + }, + "chain_2": { + "channel_id": "channel-0", + "port_id": "transfer" + }, + "ordering": "unordered", + "version": "ics20-1", + "tags": { + "status": "live", + "preferred": true + } + } + ] + } + \ No newline at end of file diff --git a/devnets/_IBC/mahalo-miniwasm.json b/devnets/_IBC/mahalo-miniwasm.json new file mode 100644 index 0000000..44be39d --- /dev/null +++ b/devnets/_IBC/mahalo-miniwasm.json @@ -0,0 +1,31 @@ +{ + "$schema": "../../ibc_data.schema.json", + "chain_1": { + "chain_name": "mahalo", + "client_id": "07-tendermint-1", + "connection_id": "connection-1" + }, + "chain_2": { + "chain_name": "miniwasm", + "client_id": "07-tendermint-0", + "connection_id": "connection-0" + }, + "channels": [ + { + "chain_1": { + "channel_id": "channel-1", + "port_id": "transfer" + }, + "chain_2": { + "channel_id": "channel-0", + "port_id": "transfer" + }, + "ordering": "unordered", + "version": "ics20-1", + "tags": { + "status": "live", + "preferred": true + } + } + ] +} diff --git a/devnets/mahalo/assetlist.json b/devnets/mahalo/assetlist.json new file mode 100644 index 0000000..47da9d5 --- /dev/null +++ b/devnets/mahalo/assetlist.json @@ -0,0 +1,126 @@ +{ + "$schema": "../../assetlist.schema.json", + "chain_name": "initia", + "assets": [ + { + "description": "The native token of Initia", + "denom_units": [ + { + "denom": "uinit", + "exponent": 0 + }, + { + "denom": "INIT", + "exponent": 6 + } + ], + "base": "uinit", + "display": "INIT", + "name": "Initia Native Token", + "symbol": "INIT", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/INIT.svg" + } + ] + }, + { + "description": "The fake ETH", + "denom_units": [ + { + "denom": "ueth", + "exponent": 0 + }, + { + "denom": "ETH", + "exponent": 6 + } + ], + "base": "ueth", + "display": "ETH", + "name": "Fake ETH Token", + "symbol": "ETH", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/ETH.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/ETH.svg" + } + ] + }, + { + "description": "The fake USDC", + "denom_units": [ + { + "denom": "uusdc", + "exponent": 0 + }, + { + "denom": "USDC", + "exponent": 6 + } + ], + "base": "uusdc", + "display": "USDC", + "name": "Fake USDC Token", + "symbol": "USDC", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/USDC.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/USDC.svg" + } + ] + }, + { + "description": "The LP token of USDC-INIT", + "denom_units": [ + { + "denom": "move/dbf06c48af3984ec6d9ae8a9aa7dbb0bb1e784aa9b8c4a5681af660cf8558d7d", + "exponent": 0 + }, + { + "denom": "USDC-INIT LP", + "exponent": 6 + } + ], + "base": "move/dbf06c48af3984ec6d9ae8a9aa7dbb0bb1e784aa9b8c4a5681af660cf8558d7d", + "display": "USDC-INIT LP", + "name": "USDC-INIT LP Token", + "symbol": "USDC-INIT LP", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/USDC-INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/USDC-INIT.svg" + } + ] + }, + { + "description": "The LP token of ETH-INIT", + "denom_units": [ + { + "denom": "move/a2b0d3c8e53e379ede31f3a361ff02716d50ec53c6b65b8c48a81d5b06548200", + "exponent": 0 + }, + { + "denom": "ETH-INIT LP", + "exponent": 6 + } + ], + "base": "move/a2b0d3c8e53e379ede31f3a361ff02716d50ec53c6b65b8c48a81d5b06548200", + "display": "ETH-INIT LP", + "name": "ETH-INIT LP Token", + "symbol": "ETH-INIT LP", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/ETH-INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/ETH-INIT.svg" + } + ] + } + ] +} diff --git a/devnets/mahalo/chain.json b/devnets/mahalo/chain.json new file mode 100644 index 0000000..c6d9c56 --- /dev/null +++ b/devnets/mahalo/chain.json @@ -0,0 +1,93 @@ +{ + "$schema": "../../chain.schema.json", + "chain_name": "initia", + "chain_id": "mahalo-1", + "website": "https://initia.xyz", + "pretty_name": "Initia L1", + "status": "live", + "network_type": "devnet", + "bech32_prefix": "init", + "daemon_name": "initiad", + "node_home": "$HOME/.initia", + "key_algos": ["secp256k1"], + "slip44": 118, + "fees": { + "fee_tokens": [ + { + "denom": "uinit", + "fixed_min_gas_price": 0.15, + "low_gas_price": 0.15, + "average_gas_price": 0.15, + "high_gas_price": 0.4 + } + ] + }, + "staking": { + "staking_tokens": [ + { + "denom": "uinit" + }, + { + "denom": "move/dbf06c48af3984ec6d9ae8a9aa7dbb0bb1e784aa9b8c4a5681af660cf8558d7d" + }, + { + "denom": "move/a2b0d3c8e53e379ede31f3a361ff02716d50ec53c6b65b8c48a81d5b06548200" + } + ] + }, + "codebase": { + "git_repo": "https://github.com/initia-labs/initia", + "recommended_version": "v0.2.0-beta.5", + "compatible_versions": ["v0.2.0-beta.5", "main"], + "binaries": { + "linux/amd64": "https://initia.s3.ap-southeast-1.amazonaws.com/mahalo-1/initia_v0.2.0-beta.5_Linux_x86_64.tar.gz", + "linux/arm64": "https://initia.s3.ap-southeast-1.amazonaws.com/mahalo-1/initia_v0.2.0-beta.5_Linux_aarch64.tar.gz", + "darwin/amd64": "https://initia.s3.ap-southeast-1.amazonaws.com/mahalo-1/initia_v0.2.0-beta.5_Darwin_x86_64.tar.gz", + "darwin/arm64": "https://initia.s3.ap-southeast-1.amazonaws.com/mahalo-1/initia_v0.2.0-beta.5_Darwin_aarch64.tar.gz" + }, + "genesis": { + "genesis_url": "https://initia.s3.ap-southeast-1.amazonaws.com/mahalo-1/genesis.json" + }, + "versions": [] + }, + "description": "Initia Closed Devnet", + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "apis": { + "rpc": [ + { + "address": "https://rpc.mahalo-1.initia.xyz", + "provider": "Foundation" + } + ], + "rest": [ + { + "address": "https://lcd.mahalo-1.initia.xyz", + "provider": "Foundation" + } + ], + "grpc": [] + }, + "explorers": [ + { + "kind": "explorer", + "url": "https://explorer.mahalo-1.initia.xyz/?layer=l1%2520testnet", + "tx_page": "https://explorer.mahalo-1.initia.xyz/tx/${txHash}?layer=l1%20testnet", + "account_page": "https://explorer.mahalo-1.initia.xyz/address/${accountAddress}?layer=l1%20testnet" + }, + { + "kind": "initia scan", + "url": "https://scan.initia.xyz/mahalo-1", + "tx_page": "https://scan.initia.xyz/mahalo-1/txs/${txHash}", + "account_page": "https://scan.initia.xyz/mahalo-1/accounts/${accountAddress}" + } + ], + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/mahalo/images/INIT.svg" + } + ] +} diff --git a/devnets/mahalo/images/ETH-INIT.png b/devnets/mahalo/images/ETH-INIT.png new file mode 100644 index 0000000000000000000000000000000000000000..aa524602ab7f77472bba0742041e3c321d37f297 GIT binary patch literal 24592 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�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 DiBE+E literal 0 HcmV?d00001 diff --git a/devnets/mahalo/images/ETH-INIT.svg b/devnets/mahalo/images/ETH-INIT.svg new file mode 100644 index 0000000..1320b5a --- /dev/null +++ b/devnets/mahalo/images/ETH-INIT.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/devnets/mahalo/images/ETH.png b/devnets/mahalo/images/ETH.png new file mode 100644 index 0000000000000000000000000000000000000000..1831a01aad9148091486c3f12cb5574da9f86e36 GIT binary patch literal 11309 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 GNBkd;fa^*C literal 0 HcmV?d00001 diff --git a/devnets/mahalo/images/ETH.svg b/devnets/mahalo/images/ETH.svg new file mode 100644 index 0000000..edbbf00 --- /dev/null +++ b/devnets/mahalo/images/ETH.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/devnets/mahalo/images/INIT.png b/devnets/mahalo/images/INIT.png new file mode 100644 index 0000000000000000000000000000000000000000..289a6dc7df402d51493fd037a3c6dfa50aadb98f GIT binary patch literal 9597 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 TaP5J&r2q{z?S~~QmSO(`)7{j= literal 0 HcmV?d00001 diff --git a/devnets/mahalo/images/INIT.svg b/devnets/mahalo/images/INIT.svg new file mode 100644 index 0000000..1563f2f --- /dev/null +++ b/devnets/mahalo/images/INIT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/devnets/mahalo/images/USDC-INIT.png b/devnets/mahalo/images/USDC-INIT.png new file mode 100644 index 0000000000000000000000000000000000000000..0483bebac8089a7532268abd7287ab49b2c08466 GIT binary patch literal 28192 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 O^i)mjQK^bq(EkG + + + + + + + + + + + + + + + + + + diff --git a/devnets/mahalo/images/USDC.png b/devnets/mahalo/images/USDC.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d98cd646f3093753beccfe4900fa520ffc2df6 GIT binary patch literal 21274 zcmX`SWmsF!7cC6M-Q7wl?he7FrMR|0afjmWQe1;O!L`NR9fEstcXtnR^ZVcXz8~@= znX_k-GjnF|wbxz~p`s*%fl7)B0|SF0`%PL61_t)_zZWthv}JUDBNFixC10j9Qhfw1kES?Ae-k-1oZ% z_Giw8<9z~ZjD*s-I7BL*-)cU*)IEhwxes&euE-vLZ#CBB_^(Xq1vQ;QJ~xMm23LL-TWnAf(DVc~ahyyU|FsulZ0 z-1P+UbE|2Sz*DSh@G}8kk#$`;2Zzs<>NJ$hztgR#Gm|X5i{`NVBuC#6_&Aa`ebp@) zeCL+=h4ezSTQmr%BV`O_1|?kiA#~mOU3}}>h;qSy6I$zfdVh?bjd$k)rDv_Ak2Zsr z&W|S=6*b+EamqH4alTZ#{mag9{KWgj+44lfZ?J=8#V!u%(aw6JMKHE)M}l35#}r0? z#DZOi3rKVX3V9yz!oQuL9|M8VAy9F?M8bj?J|i#x`?uDh9seYFk@~Rp+`jqu#B914 z@uWJJbaP1GaaD<*zKVJ!wSCqRpxKbxlg&Vmeke^Vxk<@Qx3Jm#ROLZ(%7CZOKXu@x<5eazSTwX#E0F%AI;1e9FORT zevRfwTr*A)OpkrzyY*rkT=)2H@as$BcH%mt9s~{reugNa;&HRZU5Fb z%wd{z?E~Ct+t!$;#YS;Oil9A;LjC83R=CAd9aGK7pZMetd7?4xGtE*3(&^XRFEY*~ zlW@@wO?lw2YW}S$t~ZS?_J1{7-UFnwj;#;7K(A!A=CrTIO^!5?FEAHH@gS>yYajEi zYGSb4S{F(WhXqAX5%mw~^{4>`3j5Gbl|2laIGPhth^J&(5gpZndq8t0;`HB9`}Dl* zECfOLCzpP+b{&Ut}%vrr1Thfi!b#CVk>Pf^?j4rP4_mZ~j6~COW&za6+@a}fxN=}CE z73kctMz8Ss5M59)MvtWjOa!xg2LqG{+D_@&S)I8i&U(d_G%&l!-}ikN>XB6uh^NX} zUJ<*?yX`~5nFhL*2#mx_5^fQk&SUYugn-veSxM|!Rga6%Z} z0ZKjMX<;GY$#8}KZY5Dfmng?tGSxq)(22Zo@?X{PN!vnH*5bPT6Dm{HI?!y9WZ$P#aLsi=o%LmUO?D%A@&?Y!I zFS(j_CF!6V^c*|%L&pAV08UJR*<+HixH69Ep2=V6V|dPj_bDHz8a+ppBu^u)qxkN= z=KInw*9KYE?hr^rPyPwTP2WAo#E=xf+x zBM}UCe)K+k?pSrM+#I=No3%o2?9SIuVS*n+!*Qq10qNczc6wrnE(0&ldnR7zxC>@S zQQ--D&1917YJ$W($YuWxITeePRinI z%KCQQk3SHdKgp3KZRT{I0#g?kGhq;K)AZcHqwXyv4<-}7a-LFocYKb5Ine--j_d9g1j$7nFC-;;56Xe*{y;Fr5pAqpE89LTE z9ngXH({<4EUz?ODLO3t!DeUd$CsrFjnork?=5@OD&0&i(p)7qBIMOZ3K#9Qo-X$6UT zi!WcLHJB)^(NN&LLWsvA!kGqhDL=TiXm*R4WRG4itAENLd9?V)t~WcvI*Q66#h&Qj z6S-rzQ^WHqe~NrEO80#}^tnTl)+AIP5j}bffmvEQFY^?kNV8@TH94BZE8_C&4bmVs zj;e<4!m!W7IHb}Fhl!N?7I#d4)=MZz5Jz>F+`husZciSjs7*E)0hQX`~P<(K1|HxBWX zOt)dS67sflvEpUmqlPwD)gZ+8Uz|VH2gtI_O3~e>Y~HS7j_}tE`)t}fB4zUHsvO}p z8X^6QBnk*{bi$V$D_au%xWG`H3Xya(*n7WB)drhNZYRhV{TTIB*V}Vi=aWP-g0_%B zn}*}S@cU!8uffi;Fg)Td^`+%cuUz3ak8{(OqvacU)a_Sl0hX2K$x#?*$ze-fm*3?& z0I8AR3s~up`2(>{LOH0rk_oBnC;U{u~AdOd9jP7wV4P^{NqqH-H{T!(pEaY@cPc+XJmHJXEbleGvRj;2CL_R@FyaF zY%r`28fg8@WvL^t%)XHSXO zwz>fYW5E=q<_TMWWM;Sk?y^6|_4}HP20tjr5#K=L>Xa&L~LyWfAi%oCU6J1px zjkHsQ7VycrPu>rfxaR=ij+L-=wy-Iyj=#zQyPGQT>a!f_`o>9$-;%$>mw=Lf1n`nt z&Qy`;7gC|(12#vJvBW^%>tueVRJy8uB~v_jx1>$g&Eo?K0oRJruNYNKWDra;gD}aNn2Ewtx0Q_!;ZT2nagx7a|kYc zJ+w53`Ujjm`O^q%mo^#l{k!#i!$oYl5Jd;{{ThkcmE|Jt#SSHn{9G&GlGn>K?{Jaa zpAXNcycJD#C~TrbBdYpMMMp8}+YG2<^NGLdTA=1yXlcDZnXyZ{3U zBsL3I2Yw0g#{eGb?)wn8?Pr|0odBZW!^tAfaBDTX7 z-Zfh%c6_YHr1kA1qoL36+6F(-(r0`Uo=)BkF7=c#5DQ=Lx}e?90@K{pw_A{=mb%*o z)Z z{r+F^UvM(Fh-Zu4{lNfV;-Ka*bYt!99%a>Q*Wbm#u(!ApDm)E#y~UdNKb;{NGnl{u z?uBbf9uO{cfO?V0a;L~d>g za`4EW9_XSU8o}AZpYdCV?bxCUY!;#I4P{^FzJ9m zGP}n*PHUM5h%KxAm8H&Ow9tsTg7|~{859^@Y^3R(QTO->wl3O|;0M{fT&0SooVCS{ z_)$v9)0&=n2sE5M>t}1mMynRNn|x?Z1(|HLOEBQ`@pd7Y-K8A7O>{WQ!)rqlJbCAD zgEu>WH^fpTfgpeo$-A-N7%vOB0mm9H8JaLq4YZ)8K+t7kyU)mF$DiK9ivV zMcrnZ@v;2HFE{|wP_V_>3`tpg7dfb7XsAU-DfyeXAsFt$ozlic1q*z|z4osTz^7MM zd!ur;$D&T?=byMEfFViHqj3Lz+rTcDk*ogNG}+E>O?4Kxu>PtM&h)!L--AKer(Awt zAt$bNG`v`;JjFjBEZ6 zQPr4P76#WH=Q&dFyZf%ZqPa(KF~R-kC(e4+yq7p$G2GKitPIh~)*0-qPKAtAuoT-g zy}IOdj`Z|~Uu%W*J4d}owCFTa>Jgkxx82{n{1f-ZI!C{R8;69+j6LS?h%!5?U3*?% z{K(-?-+LHQoG^E?5PciHaEti#hwFCzYqMKkZ6Rw~UAxjxmTaA!4bQj~E@AFFl~SS1 zY@9EvKIR1~OEb7*K?B84v0=nxvIx=Y0~q#JB=c&`fsGSXu!?4A6UBe?=%g%Ybj@aF zV8Rgav<2gTAcsD-7j31HaolW&_uagn;@{Op$j(B(k8TOdOpn=aAb%+i*uej`KGCf_F`(-qK2q7b3 zlZ^WG>SX&KIbKWIg4KDVHOxQoRxW!uc`rtp^76OF4r$(tlm>s4ky5GP!-uc@T#qlv zslBSuMc!Z0oJ@Y=o=7ZxOzdwD3u%oKrJtmD3|3S#lLQO=p|DKJ6dh>K1=4uZi;j+3 zhj~1yM*Ql!ywk}Mc~0GM|Mmel3Vof+F;!(6dn`U(ncQMsQKk8>&zZ>?Ij(x10DW>^ z(tCJb@<-N}$T=z7LGxDYRKKMv9u-;g1zEdAg-;}2_HLb$r3^!3l&{m8G0YoA5;{xQ zjW6$26nKBo_tE=1*rTlZYnZ`<10$OUVU!{E6P58b|MoQ&s;Rs?G%KF$t9-{M9%kmU zx(<;jpgX0jla5nz%TAXA96)@U%1s;$C#8@OfT$p>qGqPz$6tf?cC%AA z(~DD6C27-zi~lg+Q`Ts~wfZZ>EO|~lungDlupa{V{5+cpW#*>! zS$Kw21stTYS5%76{<2?EGF%Wdw=2Pcbrj zy{Wfa)3S)lVzVRtCPvKdaz;D(Xd#h=-YJwi;xcaM&F83jsz#GDg+Mpc9pbGKBTnf7 zDV45@JytPmegweAfv)Kr!MJ0DkbEp_F1HZ7eik^9DZ~)?dTm?ffQ_PBHpTJ)3R{jo z;+Hsp*#FS&rEA$9$S4BiPNjp0uoNANbwiH%pKN@Bpn2B!j{-Qxaw-;yx>nm`GbSj9 zV-r#8{I>0!iVoyEa`=?9qRKW2%(6DxUc0cMB~M3{Ua#CEHBQ(dLDk2=$z(Ii|YK;r4Y!GK5p;pZGL}3kqqUO=edtd z@o6S^8r~Nyy^CUaSA~QfKQG7ap&1&C!z@&Ofbd#Iwf%&l5CXuP`VWbz zWWh^M)tC4yKBEfL=y;pZ6w*apg@5a2sKDlnRVm~M4FmW0w+~+H!&TU%DJTz_H_z&y z^b|_d@@_ld_S0E9V#gdor<0#QI9N@{E?~RDO4^IMbSH&xT+53pIq_n+JT5MTbjs0k9f!Ua zQ*@SB&;9qYn)j$P)wQVeC%Ae_;Ufd>asv5_f+*uDg;H2wUDpS$i{$9DbIn9cs*gdq z-ZxZOC^+e`nuOMVFcwF?8oVZdC(7fnp@VvA*m`6j4dKgq*rVa3Bj}i}xKR;QKz}!0 zb7~?OU`baWFj4TU&sw*zX>MZ2O4?lKU8X~^oS|dGd?bo z$hzSz!X3H@=%GM&jm3IDpx}wGbRMM<8g1@P>GCCyLDX^TiT<=sB~AYJ$24oZgf`n@ z9=;)rD(dq6W(Tg@UeEy#a;jXJME7Kq{0hX%bG3HRUC&@o->GKwO>^URZwna`E^x_;wNZ!tc1 zM9w&c+j+7|I|rEYDG^F7xyd3h zMfNWaQR%Gt>RQ6E_>qPUZCZ}jDnf!2LXbN57L<~o(-Td5Xb(KQsvcVaZUX1c@0S*S z4l-h2PlV`6c9VM?mt5s7!uc*JglI-PT*EI?oyo;!^+f)f%qD}>iX(sEDug&1;zPN9()Mb%_NOX3$i zg*fZhb4k9vZ00obCfN}URq=;FLFfwRyS6h=W`fy=`cr*eYY8Bm5&=l<3omCNcO{Pv zcNAI^sQ>4(_y_O0BCzo^h%j@#iZnKZ)VteUq$VNG-nI*@JFpY|`><*9Ar5q*>m6bl z^vdK@%}6=aOXRIRt+7#9yW}*zhY{ zt0PyK$jzb>;PQaSa~!iRxghx{*N0L5sg;y=tM@ym+%4Qx?|bfTh3I=#0!sUCd7?kV zhHU=B#LG1M7UE*1H+3H=Imsyf`2Ndc|7fM&2s@3%VOZ-RaoCtw^cHs%3IcBw8P&C6 zUuSqLZbB?3k*1p6&r<<{%e-73;U*v1Dej%GxTPGxlX3ZB1vaEIeT4h2mm(bBq*^Ry zMo|yb+smE$rXE4f+nnml_;-RioGi5u{%02HnU-Rv^dEHDZI z)66{_dg1Vi9uIlMo+@)Htben-3PrKu1O8^!ddtFs_U?bzn;qB$qY>S^K@;X+?>&@m zI1MB3APEsvE#`XOA=WOhKN}8mzH)4BsrXaecAXMKC7ePB={J|Tr=#a5rU>8_;<XW3XEk7}}P{{~&THWkVBE-AHTnWskU8^4G-C;Brw=Z_JJfe%_*kWH3 z0J!eR^?H#KmOS@}$L@?(VkZD*MEtC6&pvr|UR4^ba?`LN&7$lOb4Epv#GiYY8C+>6 zp}BA3vqdb!p{F8d7*4Y#(R=0Zb%D&^qtrCSFBG51f?xPEichn^b4+1|6Nm!bxe#B9 z$+EEX-zC6O!NEZZ?t?S~o28D@08zS?e;;?%7nUYWei8HtLPK5MCimhH_h=qq3&B}Y z8*u*3FlD{OT=(Bm{_{d4bBj=|!nZY5Uh{+Go|6{4qtuYGpoJJTzh(}$pXw=o9kqiy z@PdN$I&I*Gz@H{KXQ)=E=S%;dq>5C>UD{kyI^!#4z~P^Ppm_S}2Jy1tY{(+7;|=-H zxj5#b4ScYfO0;{z_MDXlU-V!`_TVW-FOnLQh7MbAH66m`=ySbyo+}8%vJvQ{TYRo$ z$rY;P3E#uf)8StIVV262CcUDPyY(?#?Cly{3#B~R!~OT)MgRB%#aPQX0wZ#;2vuLo zt8;&a`5Pz@t-Q<`<&9X4%mnQVAi4}iFOTvWmkyr&TBn0h){qnODd5b)kSt$A-Md^E z68Bk*12n_`293^MOOGY-2v=&4kU4&Z8@RUp9J0Wv?fr$cqA+;(*^BlYR08d1`Vyzw z&2!C={yV09&5njVzY7QdzHmjycD)LiwUnPWzCeiV-b@yVCXQcpasL&tX|@Mq3KYz( zkChF6e3;3CrGaro^zh(uZCB2S+rt^qFBsUxfonZ6Ef=c{Emx9Xis%26ti0pe6wuxA zHZ0}WJ*WGl-y16?Eh_W-)AjEGv(ps(S4bgU~R;3eNm6Hq+-i!|ZC^5>auUkK&_sV>W_zxG46J zjTqV4$XbzszvewL7?%rO$IyZ~zf&5=~)#~qWezfI?z`gEjQ+KK0l|w4V zhh?%DF!6fRtDcuq4h%9KDY3mEucEEhWrghS^+IY?m!wc?UD#f>rd_L*IE-#&vw5zMZ=)H!B((p?u29Xpng`?TyPR`4eO^*6rJ}CEBs2F=*%e0t5Mqf#9Ef zgI>qmwUT&vi{QUwVd#fh88TwScoe!X@rn>Hu5(7y`RH;>vR6ln&@sl;DnZB>L%>1 zPl7?^rQ2#u)76@E2_cd)_wZpAW@xk5tfoWI{Iguy+S+DxnFAu5Vzm#y85KmWMBiPy z8QJ8Wy96xjnoVDd|K#^=SMjK(vtnptH}Z$iww_p$5p%~{yAEw0kOMHdGYHZdGqI*G z`5{nj$WC+cC4tVjBvalVnWp*Zg3 zYi+X?37OoM=TC{+-?vF6#1j;gq91c1vlc9N;ZoRBPIjK}kb84Cqp50tzelaqMLV5d z&@`XsxBUE~(}`l4E>1h~c1r9iu$lL%Xl3#4D%a>)@@!mQj*6Rs2X6IcR}yq#p?*tp zYevm&!R1Iz4N*Co40}qC-s0)W88cBfN_OYZXDchvivFJplyTUmyCFkzo}{(c9qYy% zkdE*GT%l$E{)#Y=Qlr?hOXIEjzdM@mZ~hN&-ha} z42)91#>zMAsMov&0j2KUrHuVfEfll)$(dU5l^H(kx@G_=5Mv>|% z+;#I$4<&{r`HIZJQ3-~Qd;d6}5+TYA+fJ&rsKXqr&dFPd6kk7WX$%dMRFM%6t>xkP z$4J!sX}l^H0H9GJaU1=+Q`3_gAqG*c!@IEV&sP0ZhL(<42Gm8FjrTXP&$6Y0I-(05 ze2;@zhm8g!`T5j9$U)u=mkh<8cy@9TkGFQuvYDs&MO)zj)?tV3#ScmDtk6(_byNa2 z#Z;&AcB5A8qVLw;*RUY0aVNf9iyL6aQcEC;Bl5nmKP4NhqGJFh2Ae?Ak3|_}uc*=c z!R8th@0VgXv0P{(n-QvpF?zNorJhxMq&hakIL^Z}=sUbklmFCyvO%kZd|25*(i%!* zed-W9_}1q&ay~ReMx@6eZMDNc$f(tKT&&|QJ?E&~M7V+9x(fOYw{DxC*9U?XAq^8! zj-rE>XtW6@%@%};CVvMnaJaNi{-{o&A9Q@ldrt3tn9%H3BL%EFHgSX~@BH|BGhR2h zdMblY$O>m}v-hpjU|8>zrN#Qt;o!~Fg-2<*KGch!;{W`vq(Yb;#$?U^~t?^h*iktro>Bq;%`un3^$uebx$SgchY%baIY- zCn2-Lx-$6Wcnwcnh0EW)e{r|?%&*f}qh{~d>wZdr&M*I#Mf*!enSP^R2-RYGO=1KO zIUcAm_c)_4dR%>*2j0c4S?1zOQxsSIV>OM*M(3}}cab_bu7NG(gz+g`u~xpyV;9@+ z`q#X`_k!xlLX=_AaYsLIVHG!fuJXU+c$K9O2%vLWIypXz zLnxTjNgm#{)~&e-7{Rn zi8YMHgBd$!WQm~CI}wSp+gm;s;4UAZ;zdv1if`~p?@ZN4fq!nb`tH}_H{9-w)o2JS z-F=a>#J#9q#&e6HNSd15XI#Rh!)`vUl3@gPdYP$BrR4LWytFP2qu|-5uCuol>%kR` z`PP@gXFEd7OeO6o5!FBfkUw{mOj(B}T!R!Q@@iAz3u1Lt;b@{NCb z|CIqZax7D2QM#aHT4E5wL1RkOUOd%Y*3M(9};A+u%-l6ABz zRf3nn%db`FELUhF*U)PFU^%Fii1pNfkzd0=&dP@>=J%$_2JI880+>`P*;- zB28J1@ZyDLgkm0{2_bSQa6+m_f-LztmN4@e7Vk zMIcH%K(_b0uJhz!g*{CCeGisL(<{if)%jlNLZK2jWaRx(zO$XqR$Sy$hCXhclIg|O zy@>!N9(45gp3Y~etRcOExyJ@%=>gTb6)fJ5sCL0mh6+-|{kGNNRVJL=gQduSBc6(g z3=S29cf-t=rKEcinQ~#2zm$IE$i+*BDRR%!wlG|PrS(8`&HsStlFx;Xc}l*QNe=xQ z7~MR>D6Nt5v6_A55i#=sw?9|uGw8eiw~O0AK%0CxQ-FBqSu(dDoZf4B#G4BK7(>$& zvf?WC-0$%y(=sLND&>Lr!ib$ZN&Lq7Ao^E>?oCQ|_`7*`rQ6q+2peNtaj~s4Pp(|` zIYgv~0cZNrK>3Np|44iMm~q9_k!!`On|Z!kU<0g()!6*$tXT8T9kg1jpW*@QH*tG~ zeo5UM-?*P?A-f}GD|wYU=*^X|oxG}dblF)(@F^05km6;zrD`gX6#ns9JJEEa9>p&% zM*ujvve!!}17)9IA^#%EH-EN=K_QN2zBU(;^|8G}Kp23%+N7T`$j9@AvjzgJxmB7k zb?V?*!--t^e7-Tuunf$)_P@irh9+d~3Z2-e;OF0dGr{Qc_fm#OB7Wht!v>1B7jRjc zPVQnj;LbSxMT>L>S)<}Fd)+XZZ{An0M$})viusPDt>eDIKP5bLjQ3C$x%1G}o`{I* zt|V*$W_ogbB-8TL7XxcM$b}!Os7tB4k&3)C1BDSMIOJoo78-Z)GqzdETXMd6XwcU( zI&m!Ak+gVp4rwQ+V9)*p1Ua3jbtex)( zRmXAB%#A&Qw}pz=T!?J!rh#ugzE`WHR@ZWi$meuDQYc@npAQm!7o|Se-7%TaFWks} z{o@7bmn4<5cU>2yjkj`Oqtx5!(Yq|(L=c>wtxhhb)|Qu?71Cn7viN0GTQ;do#kp|F2t)8J1yGTg_G5rUzMZS??d=Wj#3$Z@( zA&C&&vo{re+X5FK7XGqv`a-%gOoWDDBlZ5&)ZJOyp_f$%arxWNPo4g|iGB8^h`%wcrhGXM; z@xq$k+V3hq@ry+lvyzTJvjmY=L}xZ*m6BVjlu9!edZ_K+37x)#bBCr!bgvSsKH5Vk zqSHS@6vosT3A;Q?M>v+rDE!=n>)f#`h3zFMT)|$iL@_63L_dJZemtc^lhsXT1`3 zl8cpZP(5cy<)UUNDqt z343`!1#65aDHGwsXgYr58cWZ8fNV7e)tM%8wPv2voF;A3u`QR$X6MZ9a?#e}&E`HR z;T^)%bRBBtmm7n|B$TPCyPf(_CO}W1U|Hy3_}=a}|5-Mp0&*~OF+_@9TD#)qq9|3C zN#eB!)#dFV+#ccb!@Fw0huiSbZ<#b%h6@>5i&MGWJ$2hU%g0t)5yM7_bUbUHx>ZT< zxDtI+Qz0-+QEKdYYYC+Z$Y6VqP+yOS<@6R8$3kph`PP?p^c?1CIF%q*xn=+$P+v91KVmq38I|+mfj4a5Lw!T`uP+?WM%x-F?wi6E%LPtL2 zb8oe75eSsX^O23c`jWd1w{)0LSqLM4o-Fl+^XTTlG8~$F)a(SKA3B6Nn-4bwPjTgs z7}}hvI&?|xCUm%}zFL~PqE4J~OI5Aj$*rH*$|Q8f(%=LER=2VO&Ug3hjTtfE%onx3 zixRBR`FtdcPZ7nD2M32DLJmmHEl$OJMwY|sdMM5v?8GN`7mu<(QW`Mlghq)GdPk9u zp7+gi+4szI<{9;jArXN8o%&L&DGV<0K4MK$Y-HCo@1A!Ex||kpk21?RT*)L{iVxO8 zE;USD3Hen+_Ph|P3cCC&KcdLXiC$!@D~i$QHoY1fg;m5jA|sNDo{m-t8k7pNGd>2e zcRiy?9!UNu$ve8?7(FAHRy|A}%>J^C@fYr$TJ9QjAeVen~P?RPcd> zO^OpmMc0K}BF0>-Smt~eIavR&k))7r+qDEg5Y|Uy>k7xFHY7<3C$O7tK{YV@B44X>B)l<;(<8WOx@-E)A7O&(9muAvXtn%7lOMN6uu| z)3LkXo|F*&%>|<`{jXmp{owDETA|U#J2!5#9L~rX@E@N!GSDT6g10Ap%;JXBUT(GoYXWZ9Rt0f{#K-T?t;x%U1pr zwhwHl#K-KWp%CR}&j;Rw{0hDdatWx{Ju^C5FXT{h?!`;wu3pDJ!3vWi8lj3#BR3izBx|4V$+ zZHh);6RWp73Lsf5D?A0NrjyhD1SI|7jE&u$ny-pRnOGtu?N-5<2Jv0s>naogYu_s?hZ(3#;T1l2)3SA-Z5@ zF=P9caM(3RD6oRgvmF$536iyw3#|)O77Mb)?dJmJX6B)=o%~PTQyGoq-qq-t<_Tky zPF7yq`g=0fl4v1W-{X#ZR-SKCuG)ZHRZNOaD`K3eon++w4ARZ# z|Cn{tgC<68Z!J42&v){#=!b?kq5!B%2jg*NLeC2D%7;NQU-}z6UY)B(jEb=Vlwf&S zFUO5Z18FMByV-fR=zU!g3sZ$_J%b!(08Ez1H7QMxGKgGFkDyvjBLzcn7tNcVs?n5| zG1expg_}MJEB9m1wG$-#U=pqX>9$$>p@wB> z=<33<_Xn((VHzk^dGrfQw^JKYIrmxt-2xEb=$@kDY+bqj2TMriWW54Ja>1ky^E$ysxV)U9Pt4}&*B0xX8A+}-k{=4({cHlsF zClA-wN3ubYbx4N+^5t7S%LSyGz4X%lsqIm?tnJX*Zzo$;qP=Sn2@5${dDc{5@huXF zCnI~sgx?nV1c^jF1nxGrB{cBm7MMmYZ7N13Z1fH0lCWGZhZd*7Xs_6}hf(u5rX#Dv zUH$cMA$!lnq&m62c(U_;r}Fg=-H4rA6Z4fbs-lD?>vG`1^)GH{slYEau9?#(xs|nC z`XSM>c6~SD$~A#E@DlUI*Gu_e@QmWbWk>G2HGP&LUvp>xrT};hdP^0P{)e&EJY~0{ z2_HYgas65$Al=gH`4e1R@GF3lZiQ+J^JRNE|HE^sqT`geSZhO5)$ih^O|5Q0kxCzi z4(=d%s`g@*22CX$H#=|ctOu#Z@249-HN@FpQum|0B)@U9TFgkuH*`yDJuZkYvn8>e z#JDsW@_OF^~}; zLH30U)x%Kd zj@-6}q<3*ySP_~hJ!3(|amN4_(CiLV5S<{R>&+%_pS4W#Y#K;s1D(ET!{eu#xIJXA zS8ttpgF0n43Fo8yLG;52XK7|gkFf4?tutTW6X0u`o^5r)2SBr6(;={}UNWWfNKR?O z0}JT`{AklNXIhxNjvHp9a%fQdw_*BGIm|*7?wiIjh)Oi_ zr40)*d-!0h4G10IY?ViqaX=_(MB>kcYCyJPod*=1@hf}RTPn2)o7vK^ruULp^2!6w zQ`cCjxZs%TZgtFSCD=@%qT7?$$UR9ss#SzoT%kZg|MTfbV3%UaftRjyjm+aEy4nBw zVUlyHPvw`R51H6ZcjJ)46Pce(Oa17y*&$=8kvWu41bdwHBjls(dppei6;s&XC{i#( zx~*JIQoZ^cNF-_+IW(^ty1=8$z?zl}Mgq@4>%ruo)i*U-R{rbYGT|m> zUDr#8$v5-`+*N#&$Ct7tHFv!l=JfjfK2R=<*zBdfGGvLFaI`m4sb=1U^}`MN4EK2! zF&U~Zq!blMRK{zTe?>*Zu60GczuuBFenHQC_ZXU-V)QymqEI)n@Xkr7l%tUQ0=w3w z_K!fMDfu(9c59>aC`$*J2Fi4`O{n=eVh@o~*(4^j+TR#4d=251P%fiL1Lgetmt4Uh zTUkocdNUBFq^$Q?MHE3}fHw*f1|`<~1E!KF%lUIGXiTANe5U~^6HnIDX z2LiwECkpo(Dn6GE@6bwdK1%J4caD$d^7=uI^o2#u9>_rN zrc@($``=*vs+(qQ6WSBSg`$4C_qK-!crb7V^25ynj7Va^k?jIKYhZTOPWru1Xgjph zHH&>P2y^s!_&*#x9lGR6#lN#J*UIF|01P(#pBvu!QW0k`^Rw(UKL~IAM>mv6;HHtA z>UaFEuTpgt1o?15jn<`Hms=Gq6YnzB%tkF_f8D6}_;%SqwWwm?Nbk(>7xilofaHLU zI$0Ya*LCP6W5GuYmtJN7ycqw=F>POy+Q8nt`#-;$fH>6u3N!Js5*4b%f)*%a126D$ zPN3(ZKEvmk9{yJwimo^pW!vp@EnWu5!eWt)Lj%eT!qRh=)sDB!gHi(YGz(dL4-J|O zW5?O6zlVXCk)R&6Ldhckf8up(7!lkTf6 zUM<%QU9)IVSz-OQvtuHxd z4|$9q@k=0*B%<>xhwxVuj)RsPSV^l;v|z$1N290*$z)y?(U|H(E8)aw7Uh*`f={TL zMjN^dioamtol}+}F7;~{25y9rP|cKp-TJfl3`FN|ePKVNlk`z2%`eiXmvtexL8=@1 z&Z&&84|#|#Nu}Cl#%!^6R-X)^TDMJ{M&~>UCF>&!8J+r+qi{SNe%>YqmIkgO;=WSsOoRZmw8qT6a5yMU?xhSL`Jzez=F^fmwlBQ~pFHB0Gk*Ln`n zp8C*p!2m(O+PObDY`b95_k#ZJKo4p~*yzif!cw%efP%~sB|+P|n+W=_dJVI1nUaApcv?(1eI$BIg;_yKsWI+-?ah?NjT|jkW?WoMOqOSMv;33oW+MU zz&|LArOw~YGY*wd$p{jxo)awuDilMsBebAOOYP^&m%j|jm|5}q88WiCOYkd(rCC<@ zbDcXZ4Ol&nYZa>K2_!7n0hnVmVI`iM3NQz{By$l7L2~K$hCo=Z2hpd>DZyph;`qZF zco*}dJ}IkXeq{>6Gh(RGZ$qG5x;gnr?)K(d=WyCwxVqb|Jn5n*2Au#25Q9D)ymNQC z8)h7dn$416KjBn*QLF+)wGk!=pen3@vJcgx^}%xWg>wsqEq(xS$W!S%Bq>7t034-w zUq+J*DRrZ~p!jY|(0F`;dOl!+#n)6|#JtxJ@Uisf8<}de1J8JpAtrR+Z+AXTy*M8@ znjc_WizAsI(QuoIQB)t=*tI9&?S)GQOyU5G({abBHhhz0=0b^{G@A4JDW~F#gp}+W zrmE{VM&>u5Ck);`^`q&9LuJyjCGe67 zTEUH6rFhA-#0S6RIKY;g=b5n#@u%dtD2JQ7&Km@zg!e^u)}HbTIIA;*x!Fpq^f6!8 z>aUJ1>K?-An)m6~_aH_d5oQN*TK^ANr0Plb{Sxs|du@Mst7iDW{Bi{j>cU%alVN=< z1K;%Z-;#Sf&2*eGSn#aJx(|HisT`9~SpNrrhqjloGFLH2nJgw<47={f9uwQGwZ*B^3Iy+DK z0ajMre}wKczH|2O341mJ9$0hO+8?6P>ZO}Ek|hkfdC;=(b!_j)7+1Ev$eb>;3T%+K z7v(gtBp-eneWQ$O}ck70ktR2_I{t-koVcsIXPAGTOAi}$+PFpq>7wEvj4#9MTbl2- zuCskm)rMGxk-ygKl=`H-+$Z|K)xHc(A*!M`Kc7`TgnSJ)`Sn-q?Z)3%5#K>N{{M?j zF{sL~P{s-ykNQMslKx#KPluEqoyoD6`N%nkhrFknI1yNQ2i1iE@25R=aIv~t@dq6b-wPkb6^=YC@g8wqxwb*9v14P}M6=7XXuIAR=)kW!?1^7f6V-e;x^LSv9Ueltj# zykP%BTrUO%wX(@KHTw;A4Jf_UKh2&~nZX-faoIFi$eeK=;}oJ@{XCltgNpa0=jM}R zsAE@iYw8QjqF*z}h&SSl_QHKB91OZ+XRT=ml({Q2AK zV5umZ?5TUa+x9CjTxOj83G*-!z-y2z{7NHC+Az-4yBhL}EQsE^C6}EwsPQ6ViJ7v1 zv1C%{9>8s=?}eWW6{T0SLrNE3{xa7m5?8vaOMZ45HPd2B=Lc&!M_FAByuGt@yCVQG zf6L3#FGILg{nO0fbIr>6jPR)oMS0&l)?MQalLSelO?vaVkqDBYM54hRrMNMGdQDcd zP-lsOu-Yo`o3F#hU!uZ4x+_74$TpQCdvZ|x7$L6V9 z;)jDf)D?)Ic#rMIqfVCLp_O&&^FY#ln}3Ts%1)svmZ4IGTlDMkF?5$iCY+g=lwfi* zmMWfNC{6)=oSu0U`l_?V2&VdC=?c5kb7NcXq=UH)vQwKrdIwU7IMfu72`^so`~8oZ z}pAEnyU8qt+m-XZc7c4_<^9*VC@9an%&IW`k5qTB7aFpF$?&#~Zz0E8q+bn3Qm;bkBG(k0T%^ADjiG5t~q^x1%^hyBinKls-y zU5L8tPsM>;Xhpk=tH)?CKT&60@qBRPTKHlQN|}v`5aKk*h9v3M5d$ijA#%Tx7nDTK zCktPmf>x&kgIXFb6fj>ct$R=wy&*;RUMB9!i)-sfbQC8y*ZNsn|Jiwl^j+bB~>T~)if0T+Z3 zlk``F9JhJaCpx^XY#F)I-_afD7cHvc{p#z}qKz_AgnqNFwq8^g0a9aw1oBM!FJ`c& z2W`C-@!s%k4MG*(f3#QFj(F^pBaahN=-xLqAc@~>f7+HWVxD$4E5hojc$2ADRQMS{ z(n*@2@Ag)xm3UFE`E|_;^;Q3<=P!#L3_36hKAl3GJ_b3z^qsVrxr9WFR7QNf*!s|I z6(}B2Zx>$!+!0H8;`_O~h(P11Q9fdM}3kj2xX5kc)-@xi~0+uF7bY zg(1$TNcZu7;632-2mP*a$d*4kaxkDM@%&eSMz(}Kkf~a5tW(7oEnKYey6z-0eq87s ztnn^sqh1<$_r3ad)i@?hxFZa5WbI+a|G(9-{vS>9eKIYqWz?@gpv3ZPvP+k&c(P5Z_bQ`on&c*NnbAk^eORFqn@v?c!3Eep0qLb&*_P`T%co}MdjD@ z4eBty_o}L3BrbBg6osk{P_08F!tfYh|F@n>6c;FxMo zO>uf61XtErBovZer3j*n-aL3Cnw-E zV0(emElT2KlrirOX;U=^VAk&w{fQz6efG3zKy0%Ed^8Xg(61+AH?PNFnB-1Px?5UG-jndyONhwk2!$ zKapBNCSp|6nF!j+VG=G6{bEY4E=hCOirsALjSs6`(0NvnwMTQnpSOuZ?KAQ)(G)tp z)2)HU2GU~hbUbpGNNOE5iP(5*#(#}qScvC<;;xKkHbJ)oXc{0t7G_q%da7L4#@X51 zs%QKIG?)@OWT`lOZ7|Q9Tly+up1-0mlo5NEu;aRb{zEt1`HeNvo1MwWVFMcG=TFQe zkyqkUZ(QH)1_pAxgDa@(Rzzqy`Z;%EpjO)0xg-R@pp(FZ976}ra_?tyxx6x<_>ean zgP%7@kADRJpzay8xpnKZCPMyQZI9?$P(rr~B~7@+`Ev>SQEr6a@pq?%F4d_HJOI zjOAAL-3QlO|Z6l10 z+lIjEG;(9Sla&yMII%emvPkuBJT^9}4Z3X1c052NFd5h55D!Qc{*;j zXc9?-shs}1dZii+!3#u_XTr_4OT#7W6=jG*FViVDS;%Ug?903`qFSJ}Z-^C?1vdik z+0LXwN`xf?5dZPNu+;^DFHf&?8?V@QYqiXMH~&Z2GrHZ=Q-~O+T+6Np{WVu$ zw*nyOYEp|#s3F>ZsmU5`7fz7SMgPpHKqqM_I-=0D&=~A!tcIKuvDMvZD6WToC}O!D za`DxZdsVvg3wR$t$X;s5Vk?#2P+xd}=?!kVBCqwwu?!n_ESX0mbsO!;BYk>-2H{of zs@tWLfmgiYt-*bhMMxaJj-$Vqn)@#Q^_JA?Ut5*istqy{SV>bjo_d(eGXyITHEg+| z@yM@F9{!M8CfoBBX*B>JG2k$@Uwl+aj%B5VKSbSEQ=?g+6*v7zedbQvk@IUSX8gkY z*;Y7$nlmQELpnPvfuP(7Xku-gD>q=>(LzdA!t#PC-yLZzDu7^k&GgXZ82uRc>-I0P zVtt$g64z#qTEMV!5B`dKvIOgop3l+Lu0CYvl2RYli25D0Cg+p%g+S8Uzlr%pp65Bs zZ!z=W4az#7k@nwl_w(O;Rc#@ZCkAcuf=z|^MA>5?4?^ax$qsaXvX3*)@oNJXptmk_&dz1wY9su$h+-vkg&8+UQFQdjVkC(AEwD3qgmo zi~8PTfT3=Nyn_(3nA0sO4!LkFd>^4xr7cMk>*F{y*lhs|1c5fmm)lfmOF)<*`d+n@ zSkNDf4M-rLEGuS+5gZTe*ez^B803Kr4#L#l^xyg4rW{AtbEB9TNH#h16i8Xb3Iq#a zeY{@$mFNP7-$JeMiF&aE*h(kJjyH2D;emujO41tIA;FHD1XN-fEyU+ys=NzMu#?JM z_~6K_N-MHr4;iFu_5mbGrVXe#MwqjVUCNvaZO@Qcbu%lb*%#TcM9w>vUBv#$ySq!m zE1SPKyAg?3TLsRsj?#)maxc68QN2h%XGL2I757&i{sK&7B-`HE7cm&`m;?FS#RoiM zi|a1y4FM~;5Ec-q*DL>xW_QH`5afz?syEhVbbMMs2f88BX&k~Q%36D5?r?2_+Bq*6 zwo3u%N_!hVHZI);AB_n$)b#)B)=CJOaSV>Ym;BFzZQ(5u_%1uma=78f3HNT@utGrhuR zjKj=$#-YjiGM3JIZtZ8#`yH05gLbt^4$&f`6%oKe(mM75;`s#4EUn2G7Ix(GYd6>J zUAUo%Yut`fa#x4(dsUJEwwpvM$#0_ag&hEa!EKV4qJy70o{5E_X>^jJ@(h0Jo&SBT_!o9mCq{kmZCVlJle zJ1qGrvTN1Rz3H=8kL^JB+;J4 zKBVyaY^8C+vZFzQ!?dx;GCFyK(|w?+Q7Ak4@gu~mM=RL9IwuM{Ej0IWtNx#Jfk1RV zmKf8kPbB&A3x&avkK_el37L-*fQ**~+b`e>#mh4kY{m5};jr`LOP_L|!8be|GZc&P z_ix+6{nIWbGbi=MBvYMZd86+h;0(#SXA1RZY<|n1%^R=XYsbi`#UPFio33$Hs_f4(vuW#h^Os$zdf+p3q@p>h3$w*CFqM1(C$&tc#9aE6z**+uZ! z{qWi$=-4x-8$!AM%Y57G_7{KhbI`7NzAoCZgRY)1*F%rIUu`;PC{D<)f#%Vm_1@hT zE+sPpW|3lAo+R{u#ndhOwWz`(zeZf!vEc^9|0?stg6FtIGXnqcj;f@tw!o3ws6~DO zT4he`2uaa{V&9)GmG;z1dPLO5a6wt07oO+TNbw_zE zV(5blw^7cM=C)6J;W%Q}VBI6ANubFlcuA0glt{%4M6)YoUa0vAe%}?{wD0Vn$BHDa znhq=>v42g5C6Fk59GtCjYOp#xAJhuodzrYyHK=r+5~e+$n?(#{m~u+tbLEZ z_)JmO + + + + + + + + + + + diff --git a/devnets/minimove/assetlist.json b/devnets/minimove/assetlist.json new file mode 100644 index 0000000..44e9429 --- /dev/null +++ b/devnets/minimove/assetlist.json @@ -0,0 +1,54 @@ +{ + "$schema": "../../assetlist.schema.json", + "chain_name": "minimove", + "assets": [ + { + "description": "The native token of Initia", + "denom_units": [ + { + "denom": "l2/771d639f30fbe45e3fbca954ffbe2fcc26f915f5513c67a4a2d0bc1d635bdefd", + "exponent": 0 + }, + { + "denom": "INIT", + "exponent": 6 + } + ], + "base": "l2/771d639f30fbe45e3fbca954ffbe2fcc26f915f5513c67a4a2d0bc1d635bdefd", + "display": "INIT", + "name": "Initia Native Token", + "symbol": "INIT", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/INIT.svg" + } + ] + }, + { + "description": "The fake USDC", + "denom_units": [ + { + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "exponent": 0 + }, + { + "denom": "USDC", + "exponent": 6 + } + ], + "base": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "display": "USDC", + "name": "USDC", + "symbol": "USDC", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/USDC.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/USDC.svg" + } + ] + } + ] +} diff --git a/devnets/minimove/chain.json b/devnets/minimove/chain.json new file mode 100644 index 0000000..f93ffff --- /dev/null +++ b/devnets/minimove/chain.json @@ -0,0 +1,90 @@ +{ + "$schema": "../../chain.schema.json", + "chain_name": "minimove", + "chain_id": "minimove-1", + "website": "https://initia.xyz", + "pretty_name": "Initia MoveVM L2", + "status": "live", + "network_type": "devnet", + "bech32_prefix": "init", + "daemon_name": "minitiad", + "node_home": "$HOME/.minitia", + "key_algos": ["secp256k1"], + "slip44": 118, + "fees": { + "fee_tokens": [ + { + "denom": "l2/771d639f30fbe45e3fbca954ffbe2fcc26f915f5513c67a4a2d0bc1d635bdefd", + "fixed_min_gas_price": 0.15, + "low_gas_price": 0.15, + "average_gas_price": 0.15, + "high_gas_price": 0.4 + }, + { + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "fixed_min_gas_price": 0.15, + "low_gas_price": 0.15, + "average_gas_price": 0.15, + "high_gas_price": 0.4 + } + ] + }, + "staking": { + "staking_tokens": [] + }, + "codebase": { + "git_repo": "https://github.com/initia-labs/minimove", + "recommended_version": "v0.2.0-beta.5", + "compatible_versions": ["v0.2.0-beta.5", "main"], + "binaries": { + "linux/amd64": "https://initia.s3.ap-southeast-1.amazonaws.com/minimove-1/minimove_v0.2.0-beta.5_Linux_x86_64.tar.gz", + "linux/arm64": "https://initia.s3.ap-southeast-1.amazonaws.com/minimove-1/minimove_v0.2.0-beta.5_Linux_aarch64.tar.gz", + "darwin/amd64": "https://initia.s3.ap-southeast-1.amazonaws.com/minimove-1/minimove_v0.2.0-beta.5_Darwin_x86_64.tar.gz", + "darwin/arm64": "https://initia.s3.ap-southeast-1.amazonaws.com/minimove-1/minimove_v0.2.0-beta.5_Darwin_aarch64.tar.gz" + }, + "genesis": { + "genesis_url": "https://initia.s3.ap-southeast-1.amazonaws.com/minimove-1/genesis.json" + }, + "versions": [] + }, + "description": "Minimove Closed Devnet", + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "apis": { + "rpc": [ + { + "address": "https://rpc.minimove-1.initia.xyz", + "provider": "Foundation" + } + ], + "rest": [ + { + "address": "https://lcd.minimove-1.initia.xyz", + "provider": "Foundation" + } + ], + "grpc": [] + }, + "explorers": [ + { + "kind": "explorer", + "url": "https://explorer.minimove-1.initia.xyz/?layer=minimove", + "tx_page": "https://explorer.minimove-1.initia.xyz/tx/${txHash}?layer=minimove", + "account_page": "https://explorer.minimove-1.initia.xyz/address/${accountAddress}?layer=minimove" + }, + { + "kind": "initia scan", + "url": "https://scan.initia.xyz/minimove-1", + "tx_page": "https://scan.initia.xyz/minimove-1/txs/${txHash}", + "account_page": "https://scan.initia.xyz/minimove-1/accounts/${accountAddress}" + } + ], + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/INIT.svg" + } + ] +} diff --git a/devnets/minimove/images/INIT.png b/devnets/minimove/images/INIT.png new file mode 100644 index 0000000000000000000000000000000000000000..289a6dc7df402d51493fd037a3c6dfa50aadb98f GIT binary patch literal 9597 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 TaP5J&r2q{z?S~~QmSO(`)7{j= literal 0 HcmV?d00001 diff --git a/devnets/minimove/images/INIT.svg b/devnets/minimove/images/INIT.svg new file mode 100644 index 0000000..1563f2f --- /dev/null +++ b/devnets/minimove/images/INIT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/devnets/minimove/images/USDC.png b/devnets/minimove/images/USDC.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d98cd646f3093753beccfe4900fa520ffc2df6 GIT binary patch literal 21274 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 + + + + + + + + + + + diff --git a/devnets/miniwasm/assetlist.json b/devnets/miniwasm/assetlist.json new file mode 100644 index 0000000..c96c720 --- /dev/null +++ b/devnets/miniwasm/assetlist.json @@ -0,0 +1,54 @@ +{ + "$schema": "../../assetlist.schema.json", + "chain_name": "miniwasm", + "assets": [ + { + "description": "The native token of Initia", + "denom_units": [ + { + "denom": "l2/2588fd87a8e081f6a557f43ff14f05dddf5e34cb27afcefd6eaf81f1daea30d0", + "exponent": 0 + }, + { + "denom": "INIT", + "exponent": 6 + } + ], + "base": "l2/2588fd87a8e081f6a557f43ff14f05dddf5e34cb27afcefd6eaf81f1daea30d0", + "display": "INIT", + "name": "Initia Native Token", + "symbol": "INIT", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/INIT.svg" + } + ] + }, + { + "description": "The fake USDC", + "denom_units": [ + { + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "exponent": 0 + }, + { + "denom": "USDC", + "exponent": 6 + } + ], + "base": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "display": "USDC", + "name": "USDC", + "symbol": "USDC", + "coingecko_id": "", + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/USDC.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/minimove/images/USDC.svg" + } + ] + } + ] +} diff --git a/devnets/miniwasm/chain.json b/devnets/miniwasm/chain.json new file mode 100644 index 0000000..faa4d44 --- /dev/null +++ b/devnets/miniwasm/chain.json @@ -0,0 +1,90 @@ +{ + "$schema": "../../chain.schema.json", + "chain_name": "miniwasm", + "chain_id": "miniwasm-1", + "website": "https://initia.xyz", + "pretty_name": "Initia MoveVM L2", + "status": "live", + "network_type": "devnet", + "bech32_prefix": "init", + "daemon_name": "minitiad", + "node_home": "$HOME/.minitia", + "key_algos": ["secp256k1"], + "slip44": 118, + "fees": { + "fee_tokens": [ + { + "denom": "l2/2588fd87a8e081f6a557f43ff14f05dddf5e34cb27afcefd6eaf81f1daea30d0", + "fixed_min_gas_price": 0.15, + "low_gas_price": 0.15, + "average_gas_price": 0.15, + "high_gas_price": 0.4 + }, + { + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "fixed_min_gas_price": 0.15, + "low_gas_price": 0.15, + "average_gas_price": 0.15, + "high_gas_price": 0.4 + } + ] + }, + "staking": { + "staking_tokens": [] + }, + "codebase": { + "git_repo": "https://github.com/initia-labs/miniwasm", + "recommended_version": "v0.2.0-beta.2", + "compatible_versions": ["v0.2.0-beta.2", "main"], + "binaries": { + "linux/amd64": "https://initia.s3.ap-southeast-1.amazonaws.com/miniwasm-1/miniwasm_v0.2.0-beta.2_Linux_x86_64.tar.gz", + "linux/arm64": "https://initia.s3.ap-southeast-1.amazonaws.com/miniwasm-1/miniwasm_v0.2.0-beta.2_Linux_aarch64.tar.gz", + "darwin/amd64": "https://initia.s3.ap-southeast-1.amazonaws.com/miniwasm-1/miniwasm_v0.2.0-beta.2_Darwin_x86_64.tar.gz", + "darwin/arm64": "https://initia.s3.ap-southeast-1.amazonaws.com/miniwasm-1/miniwasm_v0.2.0-beta.2_Darwin_aarch64.tar.gz" + }, + "genesis": { + "genesis_url": "https://initia.s3.ap-southeast-1.amazonaws.com/miniwasm-1/genesis.json" + }, + "versions": [] + }, + "description": "miniwasm Closed Devnet", + "peers": { + "seeds": [], + "persistent_peers": [] + }, + "apis": { + "rpc": [ + { + "address": "https://rpc.miniwasm-1.initia.xyz", + "provider": "Foundation" + } + ], + "rest": [ + { + "address": "https://lcd.miniwasm-1.initia.xyz", + "provider": "Foundation" + } + ], + "grpc": [] + }, + "explorers": [ + { + "kind": "explorer", + "url": "https://explorer.miniwasm-1.initia.xyz/?layer=miniwasm", + "tx_page": "https://explorer.miniwasm-1.initia.xyz/tx/${txHash}?layer=miniwasm", + "account_page": "https://explorer.miniwasm-1.initia.xyz/address/${accountAddress}?layer=miniwasm" + }, + { + "kind": "initia scan", + "url": "https://scan.initia.xyz/miniwasm-1", + "tx_page": "https://scan.initia.xyz/miniwasm-1/txs/${txHash}", + "account_page": "https://scan.initia.xyz/miniwasm-1/accounts/${accountAddress}" + } + ], + "images": [ + { + "png": "https://raw.githubusercontent.com/initia/initia-registry/master/miniwasm/images/INIT.png", + "svg": "https://raw.githubusercontent.com/initia/initia-registry/master/miniwasm/images/INIT.svg" + } + ] +} diff --git a/devnets/miniwasm/images/INIT.png b/devnets/miniwasm/images/INIT.png new file mode 100644 index 0000000000000000000000000000000000000000..289a6dc7df402d51493fd037a3c6dfa50aadb98f GIT binary patch literal 9597 zcmYLvXH-*LuF8Z(+8sQ^y*)565{z(T?HuV%z%FOc~c;9X`z zUR3~~=gwYdZ~o2UW^Ml{{WGEhaq{rt_o)5GDivd7XNNvV)5O85=gd<&+1c54eAZT* zo_}`ah*AOpK3}!}!m*QJHmB-eOxvssJo5h2E_A+RDf{sU#jEM(Zi=M4tLYjl2M_}V zvi*^ULWTsHq{xHT6~g?=>f#$xa9qfDCa*k=i(^@L*w_4ytZDMixErm+X$I+bFzN^`Mn~N@G3SmO_9r&_!j9~hkk(A?Kt4^=fpP5U5$r7JN>_0d%2*saE zzI(mI&{1$b4yJI4)QL8Z#1DR`bmoU~;;D+|`NB*T~$8hzA1F8m%cY=g3}Ntu`1K^?@?w$$Mz#rXrw=Dh+MP7b)M_7 z?60hisho8TL+0KaTQ0439Ei!aqf1GNciwHgL+A?q!7tXL%?gt>sZeCAD(~&phRO1s znXtl9MlWWDHJm zja+H-Oco_kAI7R0JVzY=x8|aMQ;dPYxTOcGEY$d7Frnm+TiuuPa!QSw~wdYh5lTt-!f4 z>|9oY?NyIZirT;mUpCdzb6T`KSEbKr^MlmhJ9U(cj!bEx7B1W)eS5{eX~>Pd2jRrpnS6&b^K}*<%d|{-q1+yPh$r8=}rkaUG^I?I<8}NAYpjeS}>N->l?^JM2B~#^dZAeO0jc*Fv;X;iG+aI%6zlb z*LoUdcxXIpeoE?~8)Db}uf;fF>PG04aNkY%{?~d;8w{h$e;(@gO4l{^?hXT&m7+G= zTgZcA-h_s@yc8tCnCcdv*TdQbN#<_zIB}+H45A}Gn!mFc2W$3!UN-^@{85xK@>%}- zkeqhNF7`%A`?n<8?AKlxhV_jU-rAJ?95C*Oj-ZW1r7-RYybtKHCQek}37PyVyy+Y; zRAbMIeSBtoAVQ{j-GytUZ=M)0kw>br#LFP9S5edNkkheJaED~w=`iGU2na>%PRAlG z;y@@xcRB=V5iSKE<;!Rk4Gn@=v6cF&U|H#o_*?nYZ%5GRVKinC@{FL#z-XKxR1raA zraR)YVk7yhV3|T2k%>^7D=J5i?VC=%8?R??DU0`kj5}I}?kF7`3E#?6k>sA{+WaiU zj)rt}uViYTNN1?9&u{lc${>SWxF~wb~f0Cv8$&(Ly=o(atnv9Y1%5!94BX%6soi_1T)@wBU~J-_LQ z6E6hMtyRkcJA(&zrn3~apwfAFcOt{BBV>@lW*XZH%UO4X!}CeqZSYKKArat}@H({y z=aDoKi`W@`p{NP4e2bpp?eVErhGFXB|7g=$ICZ`P?X!Gp)fR_&=BPVoc}s^5KQskBGz!%=jK96zjkM8Hl<+lK5%1XfJ;4) z2WtivLURKR%*1^afgI}jyMR&72UQOuvzMwHP?Yc6-nJ)7N`b+fUrlBE=TT;^)+rWe zwAWLwL7FioIf5xyN8TbO+425~faPuXcczkCR}K;a>RgU*LYjRrWvQv&k>(|znw|iq z#AWwFV|M+;DUTW#Hl)CFg(Jds>tEFqYxm*lc4bOOeQGO5YF)Ysp^a|Z2iG7-Y`K|E zU)8)|JSYlD1j%#XXROi@<#VygK>Ed5{+e>zA&(k0){q375lo*1=}M0}laq9cw*5#; zi*kL?B$VdCWzobgq}Wrk>6e`Ti0~G9B5gb4d;OekA@+UxqqxqilTE=VgZL{yuS^ik z8t$FJ^*dZ8%UuqWYczMA`l8WvOj}vK8&u-q=XZ^iKOTKKAm)v(lIF#Z%cO3D1HG_U zYX3wq#s~!;ZVvXT>*`+;GK^6C@rKYcUgK&{a95*e3-~*7IozBp<5<+&^d@)x;P25w zgnmIRzTjx#$ET&<6uE-dq=!{l507`|U;J(bSc^0-y*5gU$*1(zOvwq6(Q96MFl|$g zzx@e#-IL`)f*qufHlsCAXh=|ueBh;jzL=s7uQ!mBdEK?OzwhUR`V+Jtmog( zmr<|+`MCf1KaF;?RLllV(W}^}{AuJtu}RIqP@&;qg?*nQ-vnrKok^NoSuk#dWA&DX(pO8o)8Xc9d&OD26wi!J$skB2ed>c6Cd}o6 zJ;uET-wn3QKMREMCw+R+d~R7{&yni{Gi;BOq4-YLXW3lb^L=r|P@_R%STcnCa)sy_ zYF<6IAwn*5QjkIHDOS$V%RoJII||&F6K@)TcC$RvU#%mQwSTP_wzsqk7;G5EZ0M(t zd-m#n<2{JxyKjebxtZC0R{8kvA64bvvt|+{+N>SkqNFt$d-7$jtgh(T)vZh7o6{E` z)0f#;J{E*hK1esnW<2Jm>CxF;x;RA3Qpd|0QVrI2jSxWnUEz@^q~z3}ul^qy{#dre ziRsw2Ohr2G`&n~v*X_wB-&*eqF*QW&2ywbS(qG~Dd|+xq8152ahCcolGC|3Q?g^5$ zBf{UJUaUA1jMc}LrgZbV{+Nz5xP?uaLnou$N*fE%uGUBO=yrUyl3Rv$vT)4?^O5q? zl(wYP;+az?Vc@LBeu=pKf-0l`W^^1R#!Ii|cH_cF`{&Rg%ZI@Nq=v)j|l zDD2IE3>j2-(_!NJ=#isBznlTCxJ7VRR4Ys{0Eq)DaQbS8MuYy3USo*RF#*> zt4|Idl0Dl z4Bnd4!0fFWKM%hArRiwTl((QiVQ0&B_2J7kX*TYcO z&FX!1R0~}Cp9WL6Y%#Q*d@1{DY|FCK#1iKh>n~X}Bee9F!*T_0t?sq4EA_Na$jU&U zjXxXpajD~bWlhdx6+$(%)UBB|1t};5A5ZXIc~z9~r&boR(*}bYpjOHjy6v8yLF>=A zCWjWz2U27aUTto=Z=79xH>U0~HNA2uQwkjIxQ!52mt${V<05On3a_}_<2qR{^3(A3 z?v_KDi8!urHPBc! zQF}q$I>0CM#AMXzT8SU!tjW-KrqK>Co7my41;WTrzJ8=Mf3L=9)4qqU=NXPp;n;-+ zzABdC;Pg!Jofr%zH3V%| z=aJ3xVyVD0&#WkG8VrUwZ$J7}Ed6SRu`jekk@JoAobWTIK zD9VGvDgQOnYl>Rr@qxFZdoeSSaoe49f%H1jugQPgt_!8V(8|y2scZK)a@e^Je~y%x zJib1=`2Z3frA_lo(J{SG+LjO!hL-utjkFg|HTX(GqG=Rw#idqcjTvhak5#Jmxa`;( z!pmU--S>|LSjvc{yUUbho$++|5xKEH!sIo0lN83^wpmCRp3;N9lpO9SnC)n+!0LBB z9h55xp5xtX6F#T3seP+zk&%YcW zKuY%gJLG{==&&7qlHO)+YT;dSP{0gUFUb26Kgg(1upUD4ICGJQ`ylB7&!t?JWa|^; zfH_;oeyk`-;2IQ2xre@Yp{7U$+%2Ye_f}4Rpa)F>%zSotbZ(sSg1Q4Fv&Zn+$_a?D zlKq>FKDtRJcOW+McDQ@4xR(_h;D15l7?}=5rYd%?4u*m|Oyo$4|NG@79wH7-m3`=8Dc{pXf20&>y45Wx5?@>I^$BRWuRF%l%5z36mk*WP3fdU8*n48%4m<$?3?%Or(FdSJ^( zEs_nO9$0|%m}W&#Xj-@}kj@S|EFBI5H|im$?%p_c(J|ZqpG3k#1kaK|6;79(BH0bt}Acwh)aFE4L$p0;gZ8Gl0CIKPI#;WiTMX7mk#o5qf0t}dY zS#UbAyv7D>QP{apMKgmo?AoKt~r&y21Wt8cod^d}(d=AF;Be zV2}r!;O4(!!xLD$HqjC-Vs0>bb@=;UWPP~MN3h=AHJt8ttF$=3eWDEPN7 zgaKZ^KEewm&g_6@*CRwH#Bzf@jMH^aNd^a%+(k*O-yz6ct+z#~smGn&;)=g4`2nxN zaa*N2#Q&o1gMowq-&1Nf)Lj|$gL#784j6&(*$COy7BD|QW%HnJM5M}is+i7i$(+3N z_8NtTvL##FmSO!r1v5GHddX@5kH6BWodp*1k|Z%E2b4ByDp zesnl-*(6;R_a*2^_J2vn6-mWestr?(*iRlD-1P_nwC6g_zcx>W9h7Ps1EDU*-{N!V zoXgZP5+m&nrPG5Y%>1Kq0kr%2@pf1CnG-|BAo*+NQ)20QzUvbjVq*Sxzp}Bh4IEHh z*h!^~JJST&ttt9) z6s48Gf%;HI4WxCdQgEur?p$Xa?2g_1cArjz8|%^F$xJ)GOxGti1pUqC^fUFW*Ss zOc5Vv^L;WS)PYyLo<8v0Hl`6hY{6B@m4u^|P zh=H|HQNDRgq)7(~k%Nr(3_S_O#_lP}0}ff7&wEB>}wa^GcweB}9cHba77(R5E3KK`qAQt)00 zscOp@wceA$y1%^mBu4h-%R--k(b{>% zgUQNCt1BEX{Z2xee&@D-w}iurY)^3rl6_N_s-2|-b}F;_rpYf$XFdVZ3WxE80P;rS z&7Thw`@Uf?Ue`lBohMz`8}!NjKEWU4pK>Q~E~MS2vhlphUX|?nvmNbhmhqt}10j%b zcESGJ*MP&1c|WbPdB$J)k7k3yf1LY!(W()>Yd?syZ&v-0IeA=D8JaVcq>Mv5>BB%XFj09egU(H_l*MXoeauHQ0 zMX*2>w|^3;U}X7P86(AB1;cc@@e@(>{t-X=`~S;*eRp+#->CF9SDbzv8ol1)#*gJf z`4!=n0`{J~-sn$}^Bo`tQ0xe#D^)CQD5o7-_RPKg3JU zVB8(~_O{8`<`SJLUyTqOJNw{ZuFg4|88eOri_g46GF*n6&F9NEkBMdM>E3!NBSC*v z&V>dgzqEpepq$1Fs`K`ck~%RJk*q+%r_T&`^fGW_r!~vi+H^L<9Zs@syo-bYpy+El z(zrdCR6uHTrvnhtsKtyjq$FinixW7jom9}P8pnwk1@@Q@}x6ajo<3s9d73RhbQh`CiHpw7TP=AS($+-DJ(xTVAZF93s{a=*^ zbYZXRi%?M2F;CeZ@l8(^0rVi+TX3w16pj$!tw!{;wY0S4o|h-(85C}loYD&iGK?1^ zsiI(sxvKSP$lswsg}uPbp;=T};%A1QUP^ErdKhy`6*La>3S3_qAr$AU9+}_4f)*X* zoicSQe_SQ-VtI38s?JjkQZ@S6TX2sPtaW+#o?EHUZu%M6ZVbp080PsEp;Zp6{);@n z3?l_&-mIw7Rd0cTXY4HyYKqIsx{|@x;J9;&Hc9`mVabbq&%ZOou5=iiD)0Yp`Fw_p z3E#`L1}tjPDvcZSTJ9Y}U|65ETp@5@>aNJ}pjLC+_bKiX_pvM@17=fOv~?nczbFGO z>1vH2M&D;6U8zvD*)vYTVGYR~%X-;O8qJ#h&k3I3fzM{Zw~d3Hr9p#Wiw;udnyO90 zuYmLqf+D~F&HGL-&1I ziYFgh|1<-4&>6xXh!)33ZI?u8D<9TOp6<2}CUbny_H>i??!78OSFF>nXlJ4E_J!?Z z^%{N*>kU};R*B`Ok%C}HBFWM+lX$#7*-(_zW$mnR{7K+Z83D)Y9B_cYIknok%_a|K6PFHiob|FeX7{cQ0xW4zMwCcXk7sJz-k4F!m(C=5?b zH)7=)W@h(g9E=uC*5V&uzoM3RqTon;mcL$Ic_FgWu)buXw!&=Zb3Nz$kG55t6NZ1eHSP0fs z_}RdWRpw_s0NdK8Hm$)qsmsohf^QHorG!H&;dJ3-7ONl#c*c_fp7FE>veIE$RRk9r6Ui@C&t%9DL#x}!8sBOHVD6b8?%)+En(;}!Yr-xattq0$_XJO5v zmwSS5Y-FtdlRol!|CPMvw(dzHQ2Wn>xDXGeS3L@Cq)IR@D>*LpqbgD>=#4~L5A`?} zlti7bc=75+&{AgRb7$(`0Y*E0Gc-?*1p;RkCz-X(P~bO9Ko6e{EAi5qfT3xT5UaxK zY^H4nrX7a(>Dsd5HGjGbIlrnaulDeXk@yVOQ74|#5Ox-wyPZMPg4+wms;+u6kdqM` zBQ|mq#Zj^I_(nf-=#+GuM>FtsRrg7GlSbvEZlbN=D&3Az<)}pt6;mhW`Vl!D&bYh9 z;FnLMDPS5)x8jnU5+fM>!BEO}E zC7*OV2Mu@P1k?F5>X<5OD_f;6(McdrxhP&8b(}5L_lcP(cD`WOZ`Ygt=JPP3y*^o? zOt&~VWkE~^QpAa(-WMG`P!kzZwXHgKcAtFQ_`TUR6A}F10;=xzXu$U$jqSc=&zc_@~1&a^`-=?s(4D4%lg*hI4NCrjKgqsP64oSyGpmM4T6Ua@IaT`}d};fa5L zp=IPLA8ZhUJ|Z2zK7NvttH29X8?0S9`6O&_=+gMp?$W5M=*nuTW`tkz!h+3xr}E)JFwLU_UIrW#)Uv(X(5f$H-n`%@rx!g)?~>%D$+60@a0_Wz zH5b0|tp2w(RrY#G6ZgoOp$BF&k2LJ#C8+M4>#KdwU#DFi|3Q|zuU;-Z;rQQKvBxg2 zZPaTAL!7ka*@8G`Y&x}Ki{f9b&)yNrsc28p(!X?^S$k~Zt`+e>#&b5yu*;EJd#sQ@ zMV)vqeiS?)-z>(2X^oDVLhBLX)08${`u#gU#>uX6onDxp=;#(BqkyK5us|URhW)EY z29Y}FSVH(NhNBn`ckd8>6XJ#7!IJeGv#ss7I`$Ah#N8mhmUZsR`7is`^YCw1rn~U! z^O6S*Jl~@NO=s`0Q}_32t-1Sh`UKRUqZiVVY>OVZ!&oKs zxB7F0vZu#(;b+noHioGQ^u7^$<6E=&e_#EmT|#P|4{O96)kNaiwXvA#lXa~8?yMti z?RP@(=V=vFH&rc|Y~^RhL&T{1{4Q>5*Yc0|$C5*ZquQB8@M6#K(2CN)BIH=vL3JA@ z>-CTEJRZCrQ}{yvcuS~jq`$T4DYmyjC~Z;IUn1!ywJJE7R^_-`7Ue;XIbm<^%r2pg TaP5J&r2q{z?S~~QmSO(`)7{j= literal 0 HcmV?d00001 diff --git a/devnets/miniwasm/images/INIT.svg b/devnets/miniwasm/images/INIT.svg new file mode 100644 index 0000000..1563f2f --- /dev/null +++ b/devnets/miniwasm/images/INIT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/devnets/miniwasm/images/USDC.png b/devnets/miniwasm/images/USDC.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d98cd646f3093753beccfe4900fa520ffc2df6 GIT binary patch literal 21274 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 + + + + + + + + + + + diff --git a/ibc_data.schema.json b/ibc_data.schema.json new file mode 100644 index 0000000..f1625d7 --- /dev/null +++ b/ibc_data.schema.json @@ -0,0 +1,114 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "required": ["chain_1", "chain_2", "channels"], + "properties": { + "$schema": { + "type": "string", + "pattern": "^(\\.\\./)+ibc_data\\.schema\\.json$" + }, + "chain_1": { + "type": "object", + "$ref": "#/$defs/chain_info" + }, + "chain_2": { + "type": "object", + "$ref": "#/$defs/chain_info" + }, + "channels": { + "type": "array", + "items": { + "type": "object", + "required": ["chain_1", "chain_2", "ordering", "version"], + "properties": { + "chain_1": { + "type": "object", + "$ref": "#/$defs/channel_info" + }, + "chain_2": { + "type": "object", + "$ref": "#/$defs/channel_info" + }, + "ordering": { + "enum": ["ordered", "unordered"], + "description": "Determines if packets from a sending module must be 'ordered' or 'unordered'." + }, + "version": { + "type": "string", + "description": "IBC Version" + }, + "description": { + "type": "string", + "description": "Human readable description of the channel." + }, + "tags": { + "type": "object", + "description": "Human readable key:value pairs that help describe and distinguish channels.", + "properties": { + "status": { + "enum": ["live", "upcoming", "killed"] + }, + "preferred": { + "type": "boolean" + }, + "dex": { + "type": "string" + }, + "properties": { + "type": "string", + "description": "String that helps describe non-dex use cases ex: interchain accounts(ICA)." + } + }, + "additionalProperties": true + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "$defs": { + "chain_info": { + "type": "object", + "description": "Top level IBC data pertaining to the chain. `chain_1` and `chain_2` should be in alphabetical order.", + "required": ["chain_name", "client_id", "connection_id"], + "properties": { + "chain_name": { + "type": "string" + }, + "client_id": { + "type": "string", + "description": "The client ID on the corresponding chain representing the other chain's light client." + }, + "connection_id": { + "type": "string", + "description": "The connection ID on the corresponding chain representing a connection to the other chain." + } + }, + "additionalProperties": false + }, + "channel_info": { + "type": "object", + "required": ["channel_id", "port_id"], + "properties": { + "channel_id": { + "type": "string", + "description": "The channel ID on the corresponding chain's connection representing a channel on the other chain." + }, + "port_id": { + "type": "string", + "description": "The IBC port ID which a relevant module binds to on the corresponding chain." + }, + "client_id": { + "type": "string", + "description": "Optional. The client ID on the corresponding chain representing the other chain's light client." + }, + "connection_id": { + "type": "string", + "description": "Optional. The connection ID on the corresponding chain representing a connection to the other chain." + } + }, + "additionalProperties": false + } + } +} diff --git a/initia/assetlist.json b/initia/assetlist.json deleted file mode 100644 index 6cea324..0000000 --- a/initia/assetlist.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "../assetlist.schema.json", - "chain_name": "initia", - "assets": [ - { - "description": "", - "denom_units": [ - { - "denom": "uinit", - "exponent": 0 - } - ], - "base": "uinit", - "name": "Init", - "display": "init", - "symbol": "INIT", - "logo_URIs": { - "png": "https://list.initia.xyz/images/0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9.webp" - }, - "coingecko_id": "", - "images": [ - { - "png": "https://list.initia.xyz/images/0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9.webp" - } - ] - } - ] -} diff --git a/initia/chain.json b/initia/chain.json deleted file mode 100644 index 6cec632..0000000 --- a/initia/chain.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "$schema": "../chain.schema.json", - "chain_name": "initia", - "chain_id": "stone-13", - "website": "https://initia.xyz", - "pretty_name": "Initia L1", - "status": "live", - "network_type": "devnet", - "bech32_prefix": "init", - "daemon_name": "initiad", - "node_home": "$HOME/.initia", - "key_algos": [ - "secp256k1" - ], - "slip44": 1, - "fees": { - "fee_tokens": [ - { - "denom": "uinit", - "fixed_min_gas_price": 0.015, - "low_gas_price": 0.015, - "average_gas_price": 0.015, - "high_gas_price": 0.04 - } - ] - }, - "staking": { - "staking_tokens": [ - { - "denom": "uinit" - }, - { - "denom": "move/8266545287889db3ded9096208c014d67c2ebf64968816d04b5d58344a8fb8bd" - }, - { - "denom": "move/b9d795966ffd06125f71307f73b8ca22c5af5026fae64d6110af610735e999df" - }, - { - "denom": "move/c9c9cb27844944ed08a8441a2dec30a46366c6f8c0a9b8fed028fcdd8a6ea273" - }, - { - "denom": "move/dbf06c48af3984ec6d9ae8a9aa7dbb0bb1e784aa9b8c4a5681af660cf8558d7d" - } - ] - }, - "codebase": { - "git_repo": "https://github.com/initia-labs/initia", - "recommended_version": "v0.2.0-beta.4", - "compatible_versions": [ - "v0.2.0-beta.4" - ], - "binaries": { - "linux/amd64": "", - "linux/arm64": "", - "darwin/amd64": "", - "darwin/arm64": "", - "windows/amd64": "", - "windows/arm64": "" - }, - "genesis": { - "genesis_url": "https://initia.s3.ap-southeast-1.amazonaws.com/stone-13/genesis.json" - }, - "versions": [] - }, - "logo_URIs": { - "png": "https://list.initia.xyz/images/layers/Mainnet.webp" - }, - "description": "", - "peers": { - "seeds": [], - "persistent_peers": [] - }, - "apis": { - "rpc": [ - { - "address": "https://rpc.stone-13.initia.xyz", - "provider": "" - } - ], - "rest": [ - { - "address": "https://lcd.stone-13.initia.xyz", - "provider": "" - } - ], - "grpc": [] - }, - "explorers": [ - { - "kind": "explorer", - "url": "https://explorer.stone-13.initia.xyz/?layer=l1%2520testnet", - "tx_page": "https://explorer.stone-13.initia.xyz/tx/${txHash}?layer=l1%20testnet", - "account_page": "https://explorer.stone-13.initia.xyz/address/${accountAddress}?layer=l1%20testnet" - }, - { - "kind": "initia scan", - "url": "https://scan.initia.xyz/stone-13", - "tx_page": "https://scan.initia.xyz/stone-13/txs/${txHash}", - "account_page": "https://scan.initia.xyz/stone-13/accounts/${accountAddress}" - } - ], - "images": [ - { - "png": "https://list.initia.xyz/images/layers/Mainnet.webp" - } - ] -} diff --git a/minimove/assetlist.json b/minimove/assetlist.json deleted file mode 100644 index 00b8330..0000000 --- a/minimove/assetlist.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "../assetlist.schema.json", - "chain_name": "minimove", - "assets": [ - { - "description": "", - "denom_units": [ - { - "denom": "l2/1a518a264b58213e41fe36d0453b345c23f5f228f8ab9789ffa5763031a183ae", - "exponent": 0 - } - ], - "base": "l2/1a518a264b58213e41fe36d0453b345c23f5f228f8ab9789ffa5763031a183ae", - "name": "", - "display": "init", - "symbol": "INIT", - "logo_URIs": { - "png": "https://list.initia.xyz/images/0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9.webp" - }, - "coingecko_id": "", - "images": [ - { - "png": "https://list.initia.xyz/images/0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9.webp" - } - ] - } - ] -} diff --git a/minimove/chain.json b/minimove/chain.json deleted file mode 100644 index e2de302..0000000 --- a/minimove/chain.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "$schema": "../chain.schema.json", - "chain_name": "minimove", - "chain_id": "game-4", - "website": "https://initia.xyz", - "pretty_name": "Minimove", - "status": "live", - "network_type": "devnet", - "bech32_prefix": "init", - "daemon_name": "minitiad", - "node_home": "$HOME/.minitia", - "key_algos": [ - "secp256k1" - ], - "slip44": 1, - "fees": { - "fee_tokens": [ - { - "denom": "umin", - "fixed_min_gas_price": 0.015, - "low_gas_price": 0.015, - "average_gas_price": 0.015, - "high_gas_price": 0.04 - } - ] - }, - "staking": { - "staking_tokens": [ - { - "denom": "umin" - } - ] - }, - "codebase": { - "git_repo": "https://github.com/initia-labs/minimove", - "recommended_version": "v0.2.0-beta.2", - "compatible_versions": [ - "v0.2.0-beta.2" - ], - "binaries": { - "linux/amd64": "", - "linux/arm64": "", - "darwin/amd64": "", - "darwin/arm64": "", - "windows/amd64": "", - "windows/arm64": "" - }, - "genesis": { - "genesis_url": "https://initia.s3.ap-southeast-1.amazonaws.com/game-4/genesis.json" - }, - "versions": [] - }, - "logo_URIs": { - "png": "https://list.initia.xyz/images/layers/Minimove.webp" - }, - "description": "", - "peers": { - "seeds": [], - "persistent_peers": [] - }, - "apis": { - "rpc": [ - { - "address": "https://rpc.game-4.initia.xyz", - "provider": "" - } - ], - "rest": [ - { - "address": "https://lcd.game-4.initia.xyz", - "provider": "" - } - ], - "grpc": [] - }, - "explorers": [ - { - "kind": "explorer", - "url": "https://explorer.initia.xyz/?layer=minimove", - "tx_page": "https://explorer.initia.xyz/tx/${txHash}?layer=minimove", - "account_page": "https://explorer.initia.xyz/address/${accountAddress}?layer=minimove" - }, - { - "kind": "initia scan", - "url": "https://scan.initia.xyz/minimove-1", - "tx_page": "https://scan.initia.xyz/minimove-1/txs/${txHash}", - "account_page": "https://scan.initia.xyz/minimove-1/accounts/${accountAddress}" - } - ], - "images": [ - { - "png": "https://list.initia.xyz/images/layers/Minimove.webp" - } - ] -} diff --git a/testnets/_IBC/.gitignore b/testnets/_IBC/.gitignore new file mode 100644 index 0000000..e69de29