Skip to content

Commit 6721a2c

Browse files
feat: Inherit all Assets from Cosmos Chain Registry (#2584)
* Revert "Revert "Inherit all Assets from Cosmos Chain Registry (#2582)" (#2583)" This reverts commit e09013b. * fix syntax * update query from twitter to also x * Workflow run * Workflow run --------- Co-authored-by: JohnnyWyles <[email protected]>
1 parent 139c1d1 commit 6721a2c

File tree

615 files changed

+70101
-2174
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

615 files changed

+70101
-2174
lines changed

.github/workflows/utility/generate_assetlist.mjs

Lines changed: 109 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,108 @@ async function asyncForEach(array, callback) {
2626
}
2727
}
2828

29+
async function getAssetsFromChainRegistry(localChainName, asset_datas) {
30+
31+
//get network_type (mainnet vs testnet)
32+
const localNetworkType = chain_reg.getFileProperty(localChainName, "chain", "network_type");
33+
if (localNetworkType !== "mainnet" && localNetworkType !== "testnet" && localNetworkType !== "devnet") return;
34+
35+
//try each chain of that network_type
36+
let chains = chain_reg.getChains() || [];
37+
38+
await asyncForEach(chains, async (chainName) => {
39+
40+
if (chainName === localChainName) return; //we'll check assets under this chain separately
41+
42+
const networkType = chain_reg.getFileProperty(chainName, "chain", "network_type");
43+
if (networkType !== localNetworkType) return; // must match the local chain's network type
44+
45+
const chainType = chain_reg.getFileProperty(chainName, "chain", "chain_type");
46+
if (chainType !== "cosmos") return; // must be a cosmos chain
47+
48+
// Checkpoint: the chain now qualifies, but we still need to check that there exists an ibc connection
49+
50+
//get IBC channels
51+
const channels = chain_reg.getIBCFileProperty(chainName, localChainName, "channels") || [];
52+
if (channels.length <= 0) return;
53+
54+
//find the transfer/transfer channel
55+
const defaultChannel = channels.find(channel => (
56+
channel.chain_1.port_id === "transfer" && channel.chain_2.port_id === "transfer"
57+
));
58+
59+
//find the only cw20 channel
60+
const cw20Channels = channels.filter(channel => (
61+
channel.chain_1.port_id.startsWith("cw20:") || channel.chain_2.port_id.startsWith("cw20:")
62+
));
63+
let cw20Channel;
64+
if (cw20Channels.length === 1) cw20Channel = cw20Channels[0];
65+
66+
if (!defaultChannel && !cw20Channel) return;
67+
const isChain1 = chainName === [chainName, localChainName].sort()?.[0] ? true : false;
68+
69+
// Checkpoint: now that we know there exists an ibc connection, we can iterate the assets
70+
71+
//get the chain's assets
72+
const assets = chain_reg.getFileProperty(chainName, "assetlist", "assets") || [];
73+
74+
//iterate the assets
75+
await asyncForEach(assets, async (asset) => {
76+
//assets.forEach((asset) => {
77+
78+
//get asset type
79+
const typeAsset = asset.type_asset;
80+
if (typeAsset !== "sdk.coin" && typeAsset !== "cw20") return;
81+
82+
//set base_denom
83+
const baseDenom = asset.base;
84+
85+
//--Establish Asset Data--
86+
let asset_data = {
87+
chainName: localChainName, //osmosis vs osmosistestnet vs osmosistestnet4 vs ...
88+
zone_config: {},
89+
zone_asset: {},
90+
frontend: {},
91+
chain_reg: {},
92+
asset_detail: {},
93+
}
94+
95+
//we should check to make sure it's not already in the zone_assets
96+
let existingAsset = asset_datas.find((asset_data) => {
97+
asset_data.zone_asset.chain_name === chainName && asset_data.zone_asset.base_denom === baseDenom
98+
});
99+
// but this doesn't check cases where it's registered directly under osmosis
100+
if (existingAsset) return;
101+
102+
asset_data.zone_asset.chain_name = chainName;
103+
asset_data.zone_asset.base_denom = baseDenom;
104+
105+
//source_asset (the most recent ibc transfer source (not necessarily the origin))
106+
assetlist.setSourceAsset(asset_data);
107+
108+
const channel = typeAsset === "cw20" ? cw20Channel : defaultChannel;
109+
if (typeAsset === "cw20" && !cw20Channel) return;
110+
const channel_id = isChain1 ? channel.chain_2.channel_id : channel.chain_1.channel_id;
111+
const path = "transfer" + "/" + channel_id + "/" + baseDenom;
112+
113+
asset_data.zone_asset.path = path;
114+
115+
await assetlist.setLocalAsset(asset_data);
116+
117+
existingAsset = asset_datas.find((existingAssetData) => (
118+
existingAssetData.local_asset.base_denom === asset_data.local_asset.base_denom
119+
));
120+
if (existingAsset) return;
121+
122+
//add to asset_datas array
123+
asset_datas.push(asset_data);
124+
125+
});
126+
127+
});
128+
129+
}
130+
29131
const generateAssets = async (
30132
chainName,
31133
zoneConfig,
@@ -66,7 +168,7 @@ const generateAssets = async (
66168
//source_asset (the most recent ibc transfer source (not necessarily the origin))
67169
assetlist.setSourceAsset(asset_data);
68170

69-
//make usre it exists
171+
//make sure it exists
70172
if (!chain_reg.getAssetProperty(asset_data.source_asset.chain_name, asset_data.source_asset.base_denom, "base")) {
71173
console.log(`Asset does not exist! ${asset_data.source_asset.chain_name}, ${asset_data.source_asset.base_denom}`);
72174
return;
@@ -86,6 +188,9 @@ const generateAssets = async (
86188

87189
});
88190

191+
//get assets from chain registry
192+
await getAssetsFromChainRegistry(chainName, asset_datas);
193+
89194
assetlist.setCanonicalAssets(asset_datas);
90195
assetlist.setIdentityAssets(asset_datas);
91196

@@ -185,9 +290,9 @@ async function generateAssetlist(chainName) {
185290
chainName,
186291
zoneConfig,
187292
zoneAssetlist,
188-
frontend_assets,
189-
chain_reg_assets,
190-
asset_detail_assets
293+
frontend_assets, //saves to generated/frontend/assetlist.json
294+
chain_reg_assets, //saves to generated/chain_registry/assetlist.json
295+
asset_detail_assets //saves to generated/asset_detail/assetlist.json
191296
);
192297

193298
let frontend_assetlist = {

.github/workflows/utility/generate_assetlist_functions.mjs

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,8 @@ export function setIdentityAsset(asset_data) {
479479
) { break; }
480480

481481
let provider = null;
482-
if ( traceTypesNeedingProvider.includes(traces[i].type) ) {
483-
provider = asset_data.zone_config?.providers.find(
482+
if (traceTypesNeedingProvider.includes(traces[i].type)) {
483+
provider = asset_data.zone_config?.providers?.find(
484484
provider => //where...
485485
provider.provider === traces[i].provider
486486
)
@@ -1572,32 +1572,35 @@ export function setTransferMethods(asset_data) {
15721572
});
15731573

15741574
if (asset_data.source_asset.chain_name !== asset_data.chainName) {
1575-
const traces = getAssetProperty(asset_data.local_asset, "traces");
1576-
const trace = traces?.[traces.length - 1];
1577-
1578-
// Only add IBC transfer method if we have a valid trace with required fields
1579-
if (trace?.counterparty?.chain_name && trace?.chain?.channel_id) {
1580-
const ibcTransferMethod = {
1581-
name: "Osmosis IBC Transfer",
1582-
type: "ibc",
1583-
counterparty: {
1584-
chainName: trace.counterparty.chain_name,
1585-
chainId: chain_reg.getFileProperty(
1586-
trace.counterparty.chain_name,
1587-
"chain",
1588-
"chain_id"
1589-
),
1590-
sourceDenom: trace.counterparty.base_denom,
1591-
port: trace.counterparty.port ?? "transfer",
1592-
channelId: trace.counterparty.channel_id
1593-
},
1594-
chain: {
1595-
port: trace.chain.port ?? "transfer",
1596-
channelId: trace.chain.channel_id,
1597-
path: trace.chain.path
1575+
const live = chain_reg.getFileProperty(asset_data.source_asset.chain_name, "chain", "status");
1576+
if (live === "live") {
1577+
const traces = getAssetProperty(asset_data.local_asset, "traces");
1578+
const trace = traces?.[traces.length - 1];
1579+
1580+
// Only add IBC transfer method if we have a valid trace with required fields
1581+
if (trace?.counterparty?.chain_name && trace?.chain?.channel_id) {
1582+
const ibcTransferMethod = {
1583+
name: "Osmosis IBC Transfer",
1584+
type: "ibc",
1585+
counterparty: {
1586+
chainName: trace.counterparty.chain_name,
1587+
chainId: chain_reg.getFileProperty(
1588+
trace.counterparty.chain_name,
1589+
"chain",
1590+
"chain_id"
1591+
),
1592+
sourceDenom: trace.counterparty.base_denom,
1593+
port: trace.counterparty.port ?? "transfer",
1594+
channelId: trace.counterparty.channel_id
1595+
},
1596+
chain: {
1597+
port: trace.chain.port ?? "transfer",
1598+
channelId: trace.chain.channel_id,
1599+
path: trace.chain.path
1600+
}
15981601
}
1602+
transferMethods.push(ibcTransferMethod);
15991603
}
1600-
transferMethods.push(ibcTransferMethod);
16011604
}
16021605
}
16031606

@@ -1709,7 +1712,7 @@ export function setSocials(asset_data) {
17091712

17101713
let socials = getAssetProperty(asset_data.canonical_asset, "socials");
17111714
asset_data.asset_detail.websiteURL = socials?.website;
1712-
asset_data.asset_detail.twitterURL = socials?.twitter;
1715+
asset_data.asset_detail.twitterURL = socials?.twitter || socials?.x;
17131716
if (socials) { return; }
17141717

17151718
if (getAssetProperty(asset_data.canonical_asset, "is_staking")) {
@@ -1720,7 +1723,7 @@ export function setSocials(asset_data) {
17201723
)
17211724
}
17221725
asset_data.asset_detail.websiteURL = socials?.website;
1723-
asset_data.asset_detail.twitterURL = socials?.twitter;
1726+
asset_data.asset_detail.twitterURL = socials?.twitter || socials?.x;
17241727
if (socials) { return; }
17251728

17261729
socials = chain_reg.getAssetPropertyWithTraceCustom(
@@ -1730,7 +1733,7 @@ export function setSocials(asset_data) {
17301733
originTraceTypes
17311734
);
17321735
asset_data.asset_detail.websiteURL = socials?.website;
1733-
asset_data.asset_detail.twitterURL = socials?.twitter;
1736+
asset_data.asset_detail.twitterURL = socials?.twitter || socials?.x;
17341737

17351738
}
17361739

0 commit comments

Comments
 (0)