Skip to content

Commit 60bea48

Browse files
committed
whitelist polaris tokens for mainnet
1 parent cc10022 commit 60bea48

8 files changed

Lines changed: 181 additions & 136 deletions

File tree

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ jobs:
2828
id: update-params
2929
- path: proposals/template/update-wasm
3030
id: update-wasm
31-
- path: proposals/testnet/test-polaris-whitelist
32-
id: test-polaris-whitelist
31+
- path: proposals/mainnet/manual-whitelist-polaris
32+
id: manual-whitelist-polaris
3333
env:
3434
GIT_LFS_SKIP_SMUDGE: 1
3535
REGISTRY_URL: ghcr.io

Cargo.lock

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ members = [
1111
"proposals/mainnet_phases/phase5a",
1212
"proposals/mainnet_phases/phase5b",
1313
"proposals/mainnet/update-staking-inflation-parameters",
14-
"proposals/testnet/add-uusdc-gas-token", "proposals/testnet/test-polaris-whitelist",
14+
"proposals/testnet/add-uusdc-gas-token", "proposals/mainnet/manual-whitelist-polaris",
1515
]
1616

1717
[workspace.package]

proposals/testnet/test-polaris-whitelist/Cargo.toml renamed to proposals/mainnet/manual-whitelist-polaris/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "test-polaris-whitelist"
2+
name = "manual-whitelist-polaris"
33
authors.workspace = true
44
edition.workspace = true
55
license.workspace = true
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"rust-version": "1.85.1",
3+
"proposal": {
4+
"title": "Whitelist tokens over the Osmosis IBC channel for Polaris integration.",
5+
"authors": "Bob The Builer <bob@thebuilder.rock>",
6+
"discussions-to": "www.forum.namada.net/future-polaris-post",
7+
"abstract": "OPTIONAL: You can put an abstract here if you'd like.",
8+
"motivation": "OPTIONAL: You can put a motivation here if you'd like.",
9+
"details": "This proposal aims to unblock further development of the Polaris integration from the future mainnet upgrade to v201.0.6. This is accomplished by manually whitelisting many tokens over the Osmosis IBC channel in a manner that makes interacting with these tokens and Namada nearly-permissionless.\n\nThe code used to generate the attached wasm can be found here: <insert-final-link>",
10+
"author": "tnam1qxfj3sf6a0meahdu9t6znp05g8zx4dkjtgyn9gfu",
11+
"voting_start_epoch": 1310,
12+
"voting_end_epoch": 1330,
13+
"activation_epoch": 1331
14+
}
15+
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
use namada_tx_prelude::*;
2+
use namada_tx_prelude_01502 as namada_tx_prelude;
3+
4+
pub type ChannelId = &'static str;
5+
pub type BaseToken = &'static str;
6+
pub type Precision = u32;
7+
8+
pub type MintTokenLimit = token::Amount;
9+
pub type ThroughtputTokenLimit = token::Amount;
10+
11+
const OSMO_CHANNEL_ID: &str = "channel-1";
12+
const MINT_LIMIT: u128 = 1_000_000_000; // 1B whole tokens
13+
const THROUGHPUT_LIMIT: u128 = 1_000_000_000; // 1B whole tokens
14+
15+
const OSMO_TOKENS: [(BaseToken, Precision); 116] = [
16+
("transfer/channel-208/wbtc-satoshi", 8), // Wrapped Bitcoin (Ethereum via Axelar)
17+
("transfer/channel-208/uusdt", 6), // Tether USD (Ethereum via Axelar)
18+
("transfer/channel-208/dai-wei", 18), // Dai Stablecoin
19+
("transfer/channel-208/busd-wei", 18), // Binance USD
20+
("transfer/channel-5/basecro", 8), // Cronos POS Chain
21+
("transfer/channel-208/wbnb-wei", 18), // Binance Coin (Axelar)
22+
("transfer/channel-208/wmatic-wei", 18), // Polygon (ex-MATIC) (Axelar)
23+
("transfer/channel-208/wavax-wei", 18), // Avalanche
24+
("transfer/channel-72/uluna", 6), // Terra Classic
25+
("transfer/channel-208/dot-planck", 10), // Polkadot (Moonbeam via Axelar)
26+
("transfer/channel-88/uscrt", 6), // Secret Network
27+
("transfer/channel-72/uusd", 6), // TerraClassicUSD
28+
("transfer/channel-75/ustars", 6), // Stargaze
29+
("transfer/channel-113/uhuahua", 6), // Chihuahua
30+
("transfer/channel-4/uxprt", 6), // Persistence
31+
("transfer/channel-1/uakt", 6), // Akash
32+
("transfer/channel-2/udvpn", 6), // Sentinel
33+
("transfer/channel-95/boot", 0), // bostrom
34+
("transfer/channel-165/usomm", 6), // Sommelier
35+
("transfer/channel-229/afet", 18), // Fetch.ai (Fetch.ai)
36+
("transfer/channel-122/inj", 18), // Injective
37+
("transfer/channel-222/nhash", 9), // Provenance
38+
("transfer/channel-251/uluna", 6), // Terra
39+
("transfer/channel-208/link-wei", 18), // Chainlink (Axelar)
40+
("transfer/channel-208/aave-wei", 18), // Aave
41+
("transfer/channel-208/shib-wei", 18), // Shiba Inu (Axelar)
42+
("transfer/channel-326/stuatom", 6), // Stride Staked ATOM
43+
("transfer/channel-208/uaxl", 6), // Axelar
44+
("transfer/channel-326/stuosmo", 6), // Stride Staked OSMO
45+
("transfer/channel-557/umars", 6), // Mars Protocol (Mars Hub)
46+
("transfer/channel-208/cbeth-wei", 18), // Coinbase Wrapped Staked ETH
47+
("transfer/channel-208/reth-wei", 18), // Rocket Pool Ether
48+
("transfer/channel-208/wsteth-wei", 18), // Wrapped Lido Staked Ether (Axelar)
49+
("transfer/channel-874/untrn", 6), // Neutron
50+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA", 8), // Solana (Wormhole)
51+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/95mnwzvJZJ3fKz77xfGN2nR5to9pZmH8YNvaxgLgw5AR", 5), // Bonk
52+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi", 6), // Tether USD (Ethereum via Wormhole)
53+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/46YEtoSN1AcwgGSRoWruoS6bnVh8XpMp5aQTpKohCJYh", 8), // Sui (Wormhole)
54+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5wS2fGojbL9RhGEAeQBdkHPUAciYDxjDTMYvdf9aDn2r", 8), // Aptos Coin (Wormhole)
55+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt", 6), // USDC (Ethereum via Wormhole)
56+
("transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp", 8), // Ethereum (Wormhole)
57+
("transfer/channel-750/uusdc", 6), // USDC
58+
("factory/osmo1s794h9rxggytja3a4pmwul53u98k06zy2qtrdvjnfuxruh7s8yjs6cyxgd/ucdt", 6), // CDT Stablecoin
59+
("transfer/channel-6994/utia", 6), // Celestia
60+
("transfer/channel-6787/adydx", 18), // dYdX Protocol (dYdX Protocol)
61+
("transfer/channel-2716/FX", 18), // Function X
62+
("transfer/channel-6897/usat", 14), // Nomic Bitcoin
63+
("transfer/channel-874/factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH", 18), // Wrapped Lido Staked Ether
64+
("factory/osmo1f5vfcph2dvfeqcqkhetwv75fda69z7e5c2dldm3kvgj23crkv6wqcn47a0/umilkTIA", 6), // milkTIA
65+
("factory/osmo1z0qrq605sjgcqpylfl4aa6s90x738j7m58wyatt0tdzflg2ha26q67k743/wbtc", 8), // Wrapped Bitcoin
66+
("factory/osmo17fel472lgzs87ekt9dvk0zqyh5gl80sqp4sk4n/LAB", 6), // LAB
67+
("factory/osmo1s3l0lcqc7tu0vpj6wdjz9wqpxv8nk6eraevje4fuwkyjnwuy82qsx3lduv/boneOsmo", 6), // BackBone Labs Liquid Staked OSMO
68+
("factory/osmo1em6xs47hd82806f5cxgyufguxrrc7l0aqx7nzzptjuqgswczk8csavdxek/alloyed/allUSDT", 6), // Tether USD
69+
("factory/osmo1z6r6qdknhgsc0zeracktgpcxf43j6sekq07nw8sxduc9lg0qjjlqfu25e3/alloyed/allBTC", 8), // Bitcoin
70+
("transfer/channel-208/arbitrum-weth-wei", 18), // Ethereum (Arbitrum via Axelar)
71+
("transfer/channel-208/base-weth-wei", 18), // Ethereum (Base via Axelar)
72+
("transfer/channel-208/polygon-weth-wei", 18), // Ethereum (Polygon via Axelar)
73+
("factory/osmo1k6c8jln7ejuqwtqmay3yvzrg3kueaczl96pk067ldg8u835w0yhsw27twm/alloyed/allETH", 18), // Ethereum
74+
("factory/osmo1n3n75av8awcnw4jl62n3l48e6e4sxqmaf97w5ua6ddu4s475q5qq9udvx4/alloyed/allSOL", 9), // Solana
75+
("ibc/0FA9232B262B89E77D1335D54FB1E1F506A92A7E4B51524B400DC69C68D28372", 6), // Penumbra
76+
("factory/osmo14mafhhp337yjj2aujplawz0tks6jd2lel4hkwz4agyzhvvztzaqsqzjq8x/alloyed/allTRX", 6), // Tron
77+
("factory/osmo1nufyzqlm8qhu2w7lm0l4rrax0ec8rsk69mga4tel8eare7c7ljaqpk2lyg/alloyed/allOP", 12), // Optimism
78+
("transfer/channel-208/op-wei", 18), // Optimism (Axelar)
79+
("factory/osmo1f588gk9dazpsueevdl2w6wfkmfmhg5gdvg2uerdlzl0atkasqhsq59qc6a/alloyed/allSHIB", 12), // Shiba Inu
80+
("factory/osmo1p7x454ex08s4f9ztmm7wfv7lvtgdkfztj2u7v7fezfcauy85q35qmqrdpk/alloyed/allARB", 12), // Arbitrum
81+
("factory/osmo18zdw5yvs6gfp95rp74qqwug9yduw2fyr8kplk2xgs726s9axc5usa2vpgw/alloyed/allLINK", 12), // Chainlink
82+
("factory/osmo1nnlxegt0scm9qkzys9c874t0ntapv4epfjy2w49c0xdrp3dr0v4ssmelzx/alloyed/allPEPE", 12), // Pepe
83+
("factory/osmo1r53fx9fvcdzncrs7zkn4gw5vfelx5gk8k5wc6wqha2jpkh992rusr5tk02/alloyed/allDOT", 10), // Polkadot
84+
("transfer/channel-874/factory/neutron1ndu2wvkrxtane8se2tr48gv7nsm46y5gcqjhux/MARS", 6), // Mars Protocol
85+
("factory/osmo12lnwf54yd30p6amzaged2atln8k0l32n7ncxf04ctg7u7ymnsy7qkqgsw4/alloyed/allTON", 9), // Toncoin
86+
("transfer/channel-79840/stBTC", 18), // Lorenzo stBTC
87+
("factory/osmo1myv2g72h8dan7n4hx7stt3mmust6ws03zh6gxc7vz4hpmgp5z3lq9aunm9/AVAIL.rt", 18), // Avail (Ethereum via Router)
88+
("factory/osmo10c4y9csfs8q7mtvfg4p9gd8d0acx0hpc2mte9xqzthd7rd3348tsfhaesm/sICP-icrc-ckBTC", 8), // Chain-key Bitcoin
89+
("transfer/channel-208/uni-wei", 18), // Uniswap (Axelar)
90+
("factory/osmo1eqjda4pc6e09jtxzxggf6jl3jye2yn453ja58we5gxwzmf5ah28qvlnaz8/alloyed/allUNI", 12), // Uniswap
91+
("transfer/channel-82819/uint3", 6), // Int3face
92+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/dogecoin-doge", 8), // Dogecoin (Int3)
93+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/bitcoin-btc", 8), // Bitcoin (Int3)
94+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/bitcoin-cash-bch", 8), // Bitcoin Cash (Int3)
95+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/litecoin-ltc", 8), // Litecoin (Int3)
96+
("transfer/channel-208/arbitrum-uusdt", 6), // Tether USD (Ethereum) (Arbitrum via Axelar)
97+
("transfer/channel-208/polygon-uusdt", 6), // Tether USD (Ethereum) (Polygon via Axelar)
98+
("transfer/channel-208/cbbtc-satoshi", 8), // Coinbase Wrapped BTC (Axelar)
99+
("transfer/channel-208/lbtc-satoshi", 8), // Lombard Staked Bitcoin (Ethereum via Axelar)
100+
("factory/osmo10pk4crey8fpdyqd62rsau0y02e3rk055w5u005ah6ly7k849k5tsf72x40/alloyed/allDOGE", 8), // Dogecoin
101+
("factory/osmo1csp8fk353hnq2tmulklecxpex43qmjvrkxjcsh4c3eqcw2vjcslq5jls9v/alloyed/allLTC", 8), // Litecoin
102+
("factory/osmo1cranx3twqxfrgeqvgsu262gy54vafpc9xap6scye99v244zl970s7kw2sz/alloyed/allBCH", 8), // Bitcoin Cash
103+
("transfer/channel-85077/uom", 6), // MANTRA
104+
("transfer/channel-94814/uatone", 6), // AtomOne
105+
("factory/osmo1n6asrjy9754q8y9jsxqf557zmsv3s3xa5m9eg5/uspice", 6), // Spice
106+
("factory/osmo1qnglc04tmhg32uc4kxlxh55a5cmhj88cpa3rmtly484xqu82t79sfv94w0/alloyed/allXRP", 6), // Ripple
107+
("transfer/channel-89321/uxion", 6), // Xion
108+
("factory/osmo1ss0n3ghv5rr4z4y54fnkprc69tegmdm3ejlkgr2z4utnyg7eljgs9pztvs/alloyed/allFIL", 12), // Filecoin
109+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/ton-ton", 9), // Toncoin (Int3)
110+
("factory/osmo10c4y9csfs8q7mtvfg4p9gd8d0acx0hpc2mte9xqzthd7rd3348tsfhaesm/sICP-native-ICP", 8), // Internet Computer
111+
("transfer/channel-91017/uelys", 6), // Elys Network
112+
("transfer/channel-113/factory/chihuahua1mzcfzh4ufk2cta59pm9a6wdyvv8c4v5epqzj46/Chihuahua", 6), // Chihuahua
113+
("transfer/channel-874/factory/neutron1ut4c6pv4u6vyu97yw48y8g7mle0cat54848v6m97k977022lzxtsaqsgmq/udtia", 6), // dTIA
114+
("factory/osmo1nqu7rc5mj5p2cgyfp7gl3lw7kw99cltple3xtzl2cs5fyw0r2tasr7xv48/alloyed/allSUI", 8), // Sui
115+
("factory/osmo1zynnzvwdu72zc4mxqnnp348ksfmayldqyfs8khdud3myr7m5h8nsqwta2v/alloyed/allAPT", 8), // Aptos Coin
116+
("factory/osmo1zetxzc5nka4jm203ljjtjf933jwjh45ge6spfeef447rnnhqxc4qrazrcz/alloyed/allBNB", 12), // Binance Coin
117+
("factory/osmo1zem8r6dv6u38f6qpg546zy30946av8h5srgug0s4gcyy6cfecf3seac083/alloyed/allDYDX", 12), // dYdX Protocol
118+
("factory/osmo1mdvn6lmykp2z345ncpf647dztslyll8cyhwj9pltrc0lf7nva3cqvrp6qs/alloyed/allFET", 12), // Fetch.ai
119+
("transfer/channel-98416/unil", 6), // Nillion
120+
("transfer/channel-101635/ubbn", 6), // Babylon
121+
("transfer/channel-0/transfer/channel-1340/uclbtc", 8), // Lombard Staked Bitcoin
122+
("transfer/channel-0/transfer/08-wasm-1369/0x7a56e1c57c7475ccf742a1832b028f0456652f97", 18), // SolvBTC
123+
("transfer/channel-102122/uinit", 6), // Initia
124+
("transfer/channel-89298/umilk", 6), // MilkyWay
125+
("transfer/channel-0/transfer/08-wasm-1369/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", 8), // Wrapped Bitcoin (Ethereum via Eureka)
126+
("transfer/channel-0/transfer/08-wasm-1369/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", 18), // Ethereum (Eureka)
127+
("transfer/channel-0/transfer/08-wasm-1369/0xdac17f958d2ee523a2206206994597c13d831ec7", 6), // Tether USD (Ethereum via Eureka)
128+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/solana-sol", 9), // Solana (Int3)
129+
("transfer/channel-94814/uphoton", 6), // Photon
130+
("transfer/channel-82819/factory/int31zlefkpe3g0vvm9a4h0jf9000lmqutlh99h7fsd/xrpl-xrp", 6), // Ripple (xrpl via Int3)
131+
("transfer/channel-750/uusdn", 6), // Noble Dollar
132+
];
133+
134+
#[transaction]
135+
fn apply_tx(ctx: &mut Ctx, _tx_data: BatchedTx) -> TxResult {
136+
// Enable IBC deposit/withdraws limits
137+
for (base_token, precision) in OSMO_TOKENS {
138+
let ibc_denom = format!("transfer/{OSMO_CHANNEL_ID}/{base_token}");
139+
let token_address = ibc::ibc_token(&ibc_denom).clone();
140+
141+
let factor = 10u128.pow(precision);
142+
let mint_limit = MintTokenLimit::from_u128(MINT_LIMIT * factor);
143+
let throughput_limit = ThroughtputTokenLimit::from_u128(THROUGHPUT_LIMIT * factor);
144+
145+
let mint_limit_token_key = ibc::mint_limit_key(&token_address);
146+
ctx.write(&mint_limit_token_key, mint_limit)?;
147+
148+
let throughput_limit_token_key = ibc::throughput_limit_key(&token_address);
149+
ctx.write(&throughput_limit_token_key, throughput_limit)?;
150+
}
151+
152+
Ok(())
153+
}

proposals/testnet/test-polaris-whitelist/data.json

Lines changed: 0 additions & 15 deletions
This file was deleted.

proposals/testnet/test-polaris-whitelist/src/lib.rs

Lines changed: 0 additions & 108 deletions
This file was deleted.

0 commit comments

Comments
 (0)