Skip to content

Commit

Permalink
Update how canonical is determined (#2232)
Browse files Browse the repository at this point in the history
  • Loading branch information
JeremyParish69 authored Feb 18, 2025
1 parent a8585e0 commit 3f76a70
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 14 deletions.
11 changes: 7 additions & 4 deletions .github/workflows/utility/generate_assetlist.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import * as state from "./update_assetlist_state.mjs";


//-- Flags --
const getPools = true;
const getPools = false; //turn back to true!!!!
const getRelatedAssets = false; //not implemented


Expand Down Expand Up @@ -55,7 +55,7 @@ const generateAssets = async (

//--Establish Asset Data--
let asset_data = {
chainName: chainName,
chainName: chainName, //osmosis vs osmosistestnet vs osmosistestnet4 vs ...
zone_config: zoneConfig,
zone_asset: zone_asset,
frontend: {},
Expand All @@ -76,16 +76,19 @@ const generateAssets = async (
await assetlist.setLocalAsset(asset_data);

//canonical_asset (e.g., pstake on Ethereum, usdc on ethereum)
assetlist.setCanonicalAsset(asset_data);
//assetlist.setCanonicalAsset(asset_data);

//Identity Asset (e.g., WBTC.axl originates from WBTC on Ethereum--NOT BTC)
assetlist.setIdentityAsset(asset_data);
//assetlist.setIdentityAsset(asset_data);

//Add to array of Asset data
asset_datas.push(asset_data);

});

assetlist.setCanonicalAssets(asset_datas);
assetlist.setIdentityAssets(asset_datas);

asset_datas.forEach((asset_data) => {
assetlist.setSourceDenom(asset_data);
assetlist.setCoinMinimalDenom(asset_data);
Expand Down
62 changes: 52 additions & 10 deletions .github/workflows/utility/generate_assetlist_functions.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,13 @@ export function createKey(obj) {
return JSON.stringify(obj);
}

export function createAssetKey(assetObject) {
if (!assetObject?.chain_name || !assetObject?.base_denom) {
console.log("Argument is not an asset object. Cannot create asset key.");
}
return `${assetObject.chain_name}:${assetObject.base_denom}`;
}

export function createCombinedKey(obj, additionalProperty) {
return `${createKey(obj)}:${additionalProperty}`;
}
Expand All @@ -118,21 +125,22 @@ export function deepCopy(obj) {
}


export async function setSourceAsset(asset_data) {

if (
!asset_data.zone_asset
) { return; }

export function setSourceAsset(asset_data) {
asset_data.source_asset = {
chain_name: asset_data.zone_asset.chain_name,
base_denom: asset_data.zone_asset.base_denom
chain_name: asset_data?.zone_asset?.chain_name,
base_denom: asset_data?.zone_asset?.base_denom
}
}

return;

function getZoneAssetKey(asset_data) {
return { chain_name: asset_data?.zone_asset?.chain_name, base_denom: asset_data?.zone_asset?.base_denom }
}

//which is source asset? ibc source...
//export function getIbcSourceAsset(asset_data) {

//}


export function getAssetTrace(asset_data) {

Expand Down Expand Up @@ -356,6 +364,40 @@ export function setCanonicalAsset(asset_data) {

}

export function setCanonicalAssets(asset_datas) {

//Create a Set of hardcoded Canonical Assets--will be used to make sure there is no conflict
const hardcodedCanonicalAssets = new Set();
asset_datas.forEach((asset_data) => {
if (!asset_data.zone_asset?.canonical) { return; }
const assetKey = createAssetKey(asset_data.zone_asset?.canonical);
if (hardcodedCanonicalAssets.has(assetKey)) {
throw error(`Error: Canonical Asset already exists: ${assetKey}. Overwriting...`);
}
hardcodedCanonicalAssets.add(assetKey);
});

asset_datas.forEach((asset_data) => {
if (asset_data.zone_asset?.canonical) { //when canonical is hardcoded for this asset...
asset_data.canonical_asset = asset_data.zone_asset.canonical;
return;
}
if (hardcodedCanonicalAssets.has(createAssetKey(asset_data.source_asset))) { //when another asset already has hardcoded claim the source asset...
console.log(`${createAssetKey(asset_data.source_asset)} is already used as canonical asset. Using local asset instead.`);
asset_data.canonical_asset = asset_data.local_asset;
return;
}
asset_data.canonical_asset = asset_data.source_asset; //otherwise default to using source asset
});
}

export function setIdentityAssets(asset_datas) {
asset_datas.forEach((asset_data) => {
setIdentityAsset(asset_data);
});
}



export function setIdentityAsset(asset_data) {

Expand Down

0 comments on commit 3f76a70

Please sign in to comment.