Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
2769a6b
test: pin on-chain decimals against cyclo.site stores.ts claims
thedavidmeister May 5, 2026
86deaf5
test: pivot to JSON-canonical token registry shared with cyclo.site
thedavidmeister May 5, 2026
7463abe
style: forge fmt LibCycloSiteTokens
thedavidmeister May 5, 2026
e511224
test: bump Arbitrum pin to 459580000
thedavidmeister May 5, 2026
ed9f0f4
test: assert StalePrice→Panic(0x12) chain for stale-Pyth vaults at pin
thedavidmeister May 5, 2026
6e00168
test: bump Arbitrum pin to 459885576 (head-2000)
thedavidmeister May 6, 2026
d1d88dc
test: pin swallow chain via mocked-stale oracle
thedavidmeister May 7, 2026
28dae6a
test: loose-assert oracle price (fresh or known-stale)
thedavidmeister May 7, 2026
073ad43
test: refresh oracle prices for pin 459885576
thedavidmeister May 7, 2026
af70af9
test: bump pin to 460280886 and refresh oracle prices
thedavidmeister May 7, 2026
6798919
test: also pin symbol fields and JSON name=symbol invariant
thedavidmeister May 7, 2026
94fa099
test: pin chainId and networkName fields
thedavidmeister May 7, 2026
56306ed
test: assert JSON name matches on-chain vault.name()
thedavidmeister May 7, 2026
4fd4095
test: directly check vaultAddress is non-zero and has bytecode
thedavidmeister May 7, 2026
207ef7c
test: pin JSON vaultAddress to known prod constants
thedavidmeister May 8, 2026
f097964
test: rename vault_/oracle_ params to vaultAddress/oracleAddress
thedavidmeister May 9, 2026
46e32dc
test: assert receiptAddress for every entry except cysFLR
thedavidmeister May 9, 2026
6dca4ea
test: verify cysFLR receiptAddress via inverse receipt.manager()
thedavidmeister May 9, 2026
bffe578
test: pin per-entry impl/codehash, priceOracle, ERC1155, no-duplicate
thedavidmeister May 9, 2026
b90b553
test: pin active flag per entry against expected mapping
thedavidmeister May 9, 2026
8418a93
test: directly check underlyingAddress and receiptAddress
thedavidmeister May 9, 2026
7838975
test: assert every prod vault constant appears in the JSON
thedavidmeister May 9, 2026
78f355d
test: assert vault and receipt are already initialized
thedavidmeister May 9, 2026
fca8d12
test: assert symbol starts with 'cy' + underlyingSymbol
thedavidmeister May 9, 2026
d7b07c2
test: pin per-chain JSON entry count
thedavidmeister May 9, 2026
c233bde
fix(ci): rainix-sol-test/static empty-commit retrigger (2026-05-09 Gi…
thedavidmeister Jul 5, 2026
437b0ee
fix(ci): rainix-sol-static [3b-attempt]: forge fmt CycloSiteTokens.pr…
thedavidmeister Jul 5, 2026
592b2a7
fix(ci): rainix-sol-test/static empty-commit retrigger (2026-07-05 ou…
thedavidmeister Jul 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ path = [
"slither.config.json",
"REUSE.toml",
"audit/**/",
"canonical/**/",
"foundry.lock",
]
SPDX-FileCopyrightText = "Copyright (c) 2020 Rain Open Source Software Ltd"
Expand Down
199 changes: 199 additions & 0 deletions canonical/cyclo-site-tokens.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
{
"tokens": [
{
"active": true,
"chainId": 14,
"decimals": 18,
"name": "cysFLR",
"networkName": "Flare",
"receiptAddress": "0xd387fc43e19a63036d8fced559e81f5ddef7ef09",
"symbol": "cysFLR",
"underlyingAddress": "0x12e605bc104e93b45e1ad99f9e555f659051c2bb",
"underlyingDecimals": 18,
"underlyingSymbol": "sFLR",
"vaultAddress": "0x19831cfb53a0dbead9866c43557c1d48dff76567"
},
{
"active": true,
"chainId": 14,
"decimals": 18,
"name": "Cyclo cyWETH",
"networkName": "Flare",
"receiptAddress": "0xbe2615a0fcb54a49a1eb472be30d992599fe0968",
"symbol": "cyWETH",
"underlyingAddress": "0x1502fa4be69d526124d453619276faccab275d3d",
"underlyingDecimals": 18,
"underlyingSymbol": "WETH",
"vaultAddress": "0xd8bf1d2720e9ffd01a2f9a2efc3e101a05b852b4"
},
{
"active": true,
"chainId": 14,
"decimals": 6,
"name": "Cyclo cyFXRP.ftso (FTSO oracle)",
"networkName": "Flare",
"receiptAddress": "0xc46600cebd84ed2fe60ec525df13e341d24642f2",
"symbol": "cyFXRP.ftso",
"underlyingAddress": "0xad552a648c74d49e10027ab8a618a3ad4901c5be",
"underlyingDecimals": 6,
"underlyingSymbol": "FXRP",
"vaultAddress": "0xf23595ede14b54817397b1dab899ba061bdce7b5"
},
{
"active": true,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyWETH.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x0e67a81b967c189cf50353b0fe6fef572dc55319",
"symbol": "cyWETH.pyth",
"underlyingAddress": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1",
"underlyingDecimals": 18,
"underlyingSymbol": "WETH",
"vaultAddress": "0x28c7747d7ea25ed3ddcd075c6ccc3634313a0f59"
},
{
"active": true,
"chainId": 42161,
"decimals": 8,
"name": "Cyclo cyWBTC.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x922a293d4d0af30d67a51e5510a487916a2bb494",
"symbol": "cyWBTC.pyth",
"underlyingAddress": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
"underlyingDecimals": 8,
"underlyingSymbol": "WBTC",
"vaultAddress": "0x229917ac2842eaab42060a1a9213ca78e01b572a"
},
{
"active": false,
"chainId": 42161,
"decimals": 8,
"name": "Cyclo cycbBTC.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x3a5ede5ae4ec55f61c4aff2cdfc920b5029abf05",
"symbol": "cycbBTC.pyth",
"underlyingAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"underlyingDecimals": 8,
"underlyingSymbol": "cbBTC",
"vaultAddress": "0x9fc9da918552df0dad6c00051351e335656da100"
},
{
"active": false,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyLINK.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0xdf66e921c8c29e1b1ca729848790a4d0bd6cbde9",
"symbol": "cyLINK.pyth",
"underlyingAddress": "0xf97f4df75117a78c1a5a0dbb814af92458539fb4",
"underlyingDecimals": 18,
"underlyingSymbol": "LINK",
"vaultAddress": "0x715aa5f9a5b3c2b51c432c9028c8692029bce609"
},
{
"active": false,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyDOT.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x3b22b5ce7f9901fe6a676e57e079873775aaa331",
"symbol": "cyDOT.pyth",
"underlyingAddress": "0x8d010bf9c26881788b4e6bf5fd1bdc358c8f90b8",
"underlyingDecimals": 18,
"underlyingSymbol": "DOT",
"vaultAddress": "0xee6a7019679f96ced1ea861aae0c88d4481c7226"
},
{
"active": false,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyUNI.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0xbf979c720c730738e25d766748f7063f223f1d27",
"symbol": "cyUNI.pyth",
"underlyingAddress": "0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0",
"underlyingDecimals": 18,
"underlyingSymbol": "UNI",
"vaultAddress": "0x7cad3f864639738f9cc25952433cd844c07d16a4"
},
{
"active": false,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyPEPE.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0xdb2c91313aaaae40aedf6e91a1e78443241a64c0",
"symbol": "cyPEPE.pyth",
"underlyingAddress": "0x25d887ce7a35172c62febfd67a1856f20faebb00",
"underlyingDecimals": 18,
"underlyingSymbol": "PEPE",
"vaultAddress": "0x4dd4230f3b4d6118d905ed0b6f5f20a3b2472166"
},
{
"active": false,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyENA.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x7426ddc75b522e40552ea24d647898face0e2360",
"symbol": "cyENA.pyth",
"underlyingAddress": "0x58538e6a46e07434d7e7375bc268d3cb839c0133",
"underlyingDecimals": 18,
"underlyingSymbol": "ENA",
"vaultAddress": "0x5d938caf878bd56accf2b27fad9f697aa206df40"
},
{
"active": true,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cyARB.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x3fee841c184dcf93f15cd28144b6e5514fffc18e",
"symbol": "cyARB.pyth",
"underlyingAddress": "0x912ce59144191c1204e64559fe8253a0e49e6548",
"underlyingDecimals": 18,
"underlyingSymbol": "ARB",
"vaultAddress": "0xc83563177290bdd391db56553ed828413b7689bc"
},
{
"active": false,
"chainId": 42161,
"decimals": 18,
"name": "Cyclo cywstETH.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x8c1843a9f3278c94f6d79ceba9828596f524e898",
"symbol": "cywstETH.pyth",
"underlyingAddress": "0x5979d7b546e38e414f7e9822514be443a4800529",
"underlyingDecimals": 18,
"underlyingSymbol": "wstETH",
"vaultAddress": "0xc43ee790dc819db728e2c5bb6285359bbde7e016"
},
{
"active": false,
"chainId": 42161,
"decimals": 6,
"name": "Cyclo cyXAUt0.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x45d63e1c4cb7201ed45d75af771bcfa9116a99be",
"symbol": "cyXAUt0.pyth",
"underlyingAddress": "0x40461291347e1ecbb09499f3371d3f17f10d7159",
"underlyingDecimals": 6,
"underlyingSymbol": "XAUt0",
"vaultAddress": "0x6ddc84f2fc195ae372501b01bb1ca25ca3221776"
},
{
"active": false,
"chainId": 42161,
"decimals": 6,
"name": "Cyclo cyPYTH.pyth (Pyth oracle)",
"networkName": "Arbitrum One",
"receiptAddress": "0x93ac50b43aff21add1ad2a626cf6e88c5e00ea39",
"symbol": "cyPYTH.pyth",
"underlyingAddress": "0xe4d5c6ae46adfaf04313081e8c0052a30b6dd724",
"underlyingDecimals": 6,
"underlyingSymbol": "PYTH",
"vaultAddress": "0x87f7b55d7ccc9be93b0a8ae601801d79fa96fd4f"
}
]
}
4 changes: 4 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ optimizer_runs = 100000
# pre push0 for maximum compatibility
evm_version = "paris"

# Canonical token registry shared with cyclofinance/cyclo.site. Tests in
# test/prod/CycloSiteTokens.prod.*.t.sol read it via vm.readFile.
fs_permissions = [{ access = "read", path = "./canonical" }]

remappings = [
"ethgild/=lib/ethgild/src/",
"rain.factory/=lib/ethgild/lib/rain.factory/src/",
Expand Down
Loading
Loading