@straton/blockchain 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -22,6 +22,65 @@ declare function getMockUSDCAddress(chainId?: number): Address;
22
22
  declare function getMockUSDTAddress(chainId?: number): Address;
23
23
  declare function getSafeMultisigAddress(chainId?: number): Address;
24
24
 
25
+ /**
26
+ * KAN-17 / OpenAssets vault deliverables — separate product line from the Midas
27
+ * multi-vault (sTBILL/sGLOBAL/sBASIS) which lives in `addresses.ts`. Kept as a
28
+ * parallel structure on purpose: KAN-17 is a non-custodial testnet demo for the
29
+ * OpenAssets vetting, with its own deploy script and its own role topology
30
+ * (dedicated-deployer mode — deployer EOA holds zero operational role).
31
+ *
32
+ * If/when the package converges on a unified multi-vault schema, this file
33
+ * folds into `addresses.ts`. For now they coexist to avoid churning Bruno's
34
+ * in-flight single-vault repoint (PR #8).
35
+ */
36
+ declare const OPENASSETS_VAULT_SLUGS: readonly ["susdt", "sweth"];
37
+ type OpenAssetsVaultSlug = (typeof OPENASSETS_VAULT_SLUGS)[number];
38
+ interface OpenAssetsVaultDeployment {
39
+ /** Per-product Vault proxy (TransparentUpgradeableProxy). */
40
+ vault: Address;
41
+ /** ERC-3643 receipt token proxy. */
42
+ receiptToken: Address;
43
+ /** ModularCompliance proxy bound 1:1 to the receipt token. */
44
+ modularCompliance: Address;
45
+ /** ERC-20 the vault accepts on deposit (USDT mock or canonical WETH). */
46
+ depositAsset: Address;
47
+ }
48
+ interface OpenAssetsChainDeployment {
49
+ chainId: number;
50
+ /** EOA that ran the deploy. Holds **zero** operational role post-deploy
51
+ * (dedicated-deployer mode). The only remaining authority is `approveBind`
52
+ * on the 4 compliance modules (no `transferOwnership` on AbstractModule
53
+ * yet — mainnet hardening item). */
54
+ deployer: Address;
55
+ /** Cold Safe — DEFAULT_ADMIN on receipts/vaults/compliance + AGENT on receipts. */
56
+ safe: Address;
57
+ /** Backend hot key — MINTER + WHITELIST_AGENT + PAUSER on receipts; PAUSER on vault.
58
+ * On Eth Sepolia this is the same EOA as the existing WHITELISTER_PRIVATE_KEY
59
+ * in Vercel `straton-api`/Production. */
60
+ backendHotKey: Address;
61
+ infra: {
62
+ rwaTokenImpl: Address;
63
+ tokenFactory: Address;
64
+ vaultImpl: Address;
65
+ vaultFactory: Address;
66
+ claimTopicsRegistry: Address;
67
+ trustedIssuersRegistry: Address;
68
+ identityRegistry: Address;
69
+ };
70
+ /** Shared singleton modules; per-token config is on the ModularCompliance. */
71
+ complianceModules: {
72
+ globalRateLimit: Address;
73
+ perInvestorRateLimit: Address;
74
+ maxBalance: Address;
75
+ countryRestrict: Address;
76
+ };
77
+ vaults: Record<OpenAssetsVaultSlug, OpenAssetsVaultDeployment>;
78
+ }
79
+ declare const OPENASSETS_DEPLOYMENTS: Partial<Record<number, OpenAssetsChainDeployment>>;
80
+ declare function getOpenAssetsDeployment(chainId: number): OpenAssetsChainDeployment | undefined;
81
+ declare function getOpenAssetsVault(chainId: number, slug: OpenAssetsVaultSlug): OpenAssetsVaultDeployment | undefined;
82
+ declare function hasOpenAssetsDeployment(chainId: number): boolean;
83
+
25
84
  declare const STABLECOIN_DECIMALS = 6;
26
85
  declare const RECEIPT_TOKEN_DECIMALS = 18;
27
86
  declare const DECIMAL_CONVERSION_FACTOR: bigint;
@@ -2485,4 +2544,4 @@ declare const feeCollectorAbi: ({
2485
2544
  anonymous?: undefined;
2486
2545
  })[];
2487
2546
 
2488
- export { CONTRACT_ADDRESSES, type ChainContracts, DECIMAL_CONVERSION_FACTOR, ERROR_MESSAGE_MAX_LENGTH, RECEIPT_TOKEN_DECIMALS, STABLECOINS, STABLECOINS_BY_CHAIN, STABLECOIN_DECIMALS, type StablecoinConfig, erc20Abi, feeCollectorAbi, getActiveChainId, getContractAddresses, getMockUSDCAddress, getMockUSDTAddress, getSafeMultisigAddress, getStablecoinsForChain, getStfTokenAddress, getTbillTokenAddress, getTokenFactoryAddress, getVaultAddress, hasContractAddresses, rwaTokenAbi, stfTokenAbi, stfVestingAbi, tokenFactoryAbi, vaultAbi, xstfAbi };
2547
+ export { CONTRACT_ADDRESSES, type ChainContracts, DECIMAL_CONVERSION_FACTOR, ERROR_MESSAGE_MAX_LENGTH, OPENASSETS_DEPLOYMENTS, OPENASSETS_VAULT_SLUGS, type OpenAssetsChainDeployment, type OpenAssetsVaultDeployment, type OpenAssetsVaultSlug, RECEIPT_TOKEN_DECIMALS, STABLECOINS, STABLECOINS_BY_CHAIN, STABLECOIN_DECIMALS, type StablecoinConfig, erc20Abi, feeCollectorAbi, getActiveChainId, getContractAddresses, getMockUSDCAddress, getMockUSDTAddress, getOpenAssetsDeployment, getOpenAssetsVault, getSafeMultisigAddress, getStablecoinsForChain, getStfTokenAddress, getTbillTokenAddress, getTokenFactoryAddress, getVaultAddress, hasContractAddresses, hasOpenAssetsDeployment, rwaTokenAbi, stfTokenAbi, stfVestingAbi, tokenFactoryAbi, vaultAbi, xstfAbi };
package/dist/index.d.ts CHANGED
@@ -22,6 +22,65 @@ declare function getMockUSDCAddress(chainId?: number): Address;
22
22
  declare function getMockUSDTAddress(chainId?: number): Address;
23
23
  declare function getSafeMultisigAddress(chainId?: number): Address;
24
24
 
25
+ /**
26
+ * KAN-17 / OpenAssets vault deliverables — separate product line from the Midas
27
+ * multi-vault (sTBILL/sGLOBAL/sBASIS) which lives in `addresses.ts`. Kept as a
28
+ * parallel structure on purpose: KAN-17 is a non-custodial testnet demo for the
29
+ * OpenAssets vetting, with its own deploy script and its own role topology
30
+ * (dedicated-deployer mode — deployer EOA holds zero operational role).
31
+ *
32
+ * If/when the package converges on a unified multi-vault schema, this file
33
+ * folds into `addresses.ts`. For now they coexist to avoid churning Bruno's
34
+ * in-flight single-vault repoint (PR #8).
35
+ */
36
+ declare const OPENASSETS_VAULT_SLUGS: readonly ["susdt", "sweth"];
37
+ type OpenAssetsVaultSlug = (typeof OPENASSETS_VAULT_SLUGS)[number];
38
+ interface OpenAssetsVaultDeployment {
39
+ /** Per-product Vault proxy (TransparentUpgradeableProxy). */
40
+ vault: Address;
41
+ /** ERC-3643 receipt token proxy. */
42
+ receiptToken: Address;
43
+ /** ModularCompliance proxy bound 1:1 to the receipt token. */
44
+ modularCompliance: Address;
45
+ /** ERC-20 the vault accepts on deposit (USDT mock or canonical WETH). */
46
+ depositAsset: Address;
47
+ }
48
+ interface OpenAssetsChainDeployment {
49
+ chainId: number;
50
+ /** EOA that ran the deploy. Holds **zero** operational role post-deploy
51
+ * (dedicated-deployer mode). The only remaining authority is `approveBind`
52
+ * on the 4 compliance modules (no `transferOwnership` on AbstractModule
53
+ * yet — mainnet hardening item). */
54
+ deployer: Address;
55
+ /** Cold Safe — DEFAULT_ADMIN on receipts/vaults/compliance + AGENT on receipts. */
56
+ safe: Address;
57
+ /** Backend hot key — MINTER + WHITELIST_AGENT + PAUSER on receipts; PAUSER on vault.
58
+ * On Eth Sepolia this is the same EOA as the existing WHITELISTER_PRIVATE_KEY
59
+ * in Vercel `straton-api`/Production. */
60
+ backendHotKey: Address;
61
+ infra: {
62
+ rwaTokenImpl: Address;
63
+ tokenFactory: Address;
64
+ vaultImpl: Address;
65
+ vaultFactory: Address;
66
+ claimTopicsRegistry: Address;
67
+ trustedIssuersRegistry: Address;
68
+ identityRegistry: Address;
69
+ };
70
+ /** Shared singleton modules; per-token config is on the ModularCompliance. */
71
+ complianceModules: {
72
+ globalRateLimit: Address;
73
+ perInvestorRateLimit: Address;
74
+ maxBalance: Address;
75
+ countryRestrict: Address;
76
+ };
77
+ vaults: Record<OpenAssetsVaultSlug, OpenAssetsVaultDeployment>;
78
+ }
79
+ declare const OPENASSETS_DEPLOYMENTS: Partial<Record<number, OpenAssetsChainDeployment>>;
80
+ declare function getOpenAssetsDeployment(chainId: number): OpenAssetsChainDeployment | undefined;
81
+ declare function getOpenAssetsVault(chainId: number, slug: OpenAssetsVaultSlug): OpenAssetsVaultDeployment | undefined;
82
+ declare function hasOpenAssetsDeployment(chainId: number): boolean;
83
+
25
84
  declare const STABLECOIN_DECIMALS = 6;
26
85
  declare const RECEIPT_TOKEN_DECIMALS = 18;
27
86
  declare const DECIMAL_CONVERSION_FACTOR: bigint;
@@ -2485,4 +2544,4 @@ declare const feeCollectorAbi: ({
2485
2544
  anonymous?: undefined;
2486
2545
  })[];
2487
2546
 
2488
- export { CONTRACT_ADDRESSES, type ChainContracts, DECIMAL_CONVERSION_FACTOR, ERROR_MESSAGE_MAX_LENGTH, RECEIPT_TOKEN_DECIMALS, STABLECOINS, STABLECOINS_BY_CHAIN, STABLECOIN_DECIMALS, type StablecoinConfig, erc20Abi, feeCollectorAbi, getActiveChainId, getContractAddresses, getMockUSDCAddress, getMockUSDTAddress, getSafeMultisigAddress, getStablecoinsForChain, getStfTokenAddress, getTbillTokenAddress, getTokenFactoryAddress, getVaultAddress, hasContractAddresses, rwaTokenAbi, stfTokenAbi, stfVestingAbi, tokenFactoryAbi, vaultAbi, xstfAbi };
2547
+ export { CONTRACT_ADDRESSES, type ChainContracts, DECIMAL_CONVERSION_FACTOR, ERROR_MESSAGE_MAX_LENGTH, OPENASSETS_DEPLOYMENTS, OPENASSETS_VAULT_SLUGS, type OpenAssetsChainDeployment, type OpenAssetsVaultDeployment, type OpenAssetsVaultSlug, RECEIPT_TOKEN_DECIMALS, STABLECOINS, STABLECOINS_BY_CHAIN, STABLECOIN_DECIMALS, type StablecoinConfig, erc20Abi, feeCollectorAbi, getActiveChainId, getContractAddresses, getMockUSDCAddress, getMockUSDTAddress, getOpenAssetsDeployment, getOpenAssetsVault, getSafeMultisigAddress, getStablecoinsForChain, getStfTokenAddress, getTbillTokenAddress, getTokenFactoryAddress, getVaultAddress, hasContractAddresses, hasOpenAssetsDeployment, rwaTokenAbi, stfTokenAbi, stfVestingAbi, tokenFactoryAbi, vaultAbi, xstfAbi };
package/dist/index.js CHANGED
@@ -23,6 +23,8 @@ __export(index_exports, {
23
23
  CONTRACT_ADDRESSES: () => CONTRACT_ADDRESSES,
24
24
  DECIMAL_CONVERSION_FACTOR: () => DECIMAL_CONVERSION_FACTOR,
25
25
  ERROR_MESSAGE_MAX_LENGTH: () => ERROR_MESSAGE_MAX_LENGTH,
26
+ OPENASSETS_DEPLOYMENTS: () => OPENASSETS_DEPLOYMENTS,
27
+ OPENASSETS_VAULT_SLUGS: () => OPENASSETS_VAULT_SLUGS,
26
28
  RECEIPT_TOKEN_DECIMALS: () => RECEIPT_TOKEN_DECIMALS,
27
29
  STABLECOINS: () => STABLECOINS,
28
30
  STABLECOINS_BY_CHAIN: () => STABLECOINS_BY_CHAIN,
@@ -33,6 +35,8 @@ __export(index_exports, {
33
35
  getContractAddresses: () => getContractAddresses,
34
36
  getMockUSDCAddress: () => getMockUSDCAddress,
35
37
  getMockUSDTAddress: () => getMockUSDTAddress,
38
+ getOpenAssetsDeployment: () => getOpenAssetsDeployment,
39
+ getOpenAssetsVault: () => getOpenAssetsVault,
36
40
  getSafeMultisigAddress: () => getSafeMultisigAddress,
37
41
  getStablecoinsForChain: () => getStablecoinsForChain,
38
42
  getStfTokenAddress: () => getStfTokenAddress,
@@ -40,6 +44,7 @@ __export(index_exports, {
40
44
  getTokenFactoryAddress: () => getTokenFactoryAddress,
41
45
  getVaultAddress: () => getVaultAddress,
42
46
  hasContractAddresses: () => hasContractAddresses,
47
+ hasOpenAssetsDeployment: () => hasOpenAssetsDeployment,
43
48
  rwaTokenAbi: () => rwaTokenAbi,
44
49
  stfTokenAbi: () => stfTokenAbi,
45
50
  stfVestingAbi: () => stfVestingAbi,
@@ -64,14 +69,16 @@ var CONTRACT_ADDRESSES = {
64
69
  safeMultisig: ZERO_ADDRESS
65
70
  },
66
71
  [import_utils.CHAIN_IDS.ETHEREUM_SEPOLIA]: {
72
+ // B1 C2/R3 redeploy (2026-05-18). The pre-B1 stack (0xb229.../0x7f7c...) is
73
+ // dead on this chain. stfToken was NOT redeployed by B1 — kept.
67
74
  stfToken: "0xe1c08ADa94E557CD495657e656c2f3EEB93A4BE3",
68
- tbillToken: "0xb2291a301ac47c4351fa424d847407111e604362",
69
- tokenFactory: "0xbbf3f31e67a56e76681da8a8f859b156b42b9249",
70
- vault: "0x7f7cabcb7f2715ce6f16d371f293425d2368e1e0",
71
- mockUSDC: "0x58a030261a940de9606e243a17fbc4454ae3b5d3",
72
- mockUSDT: "0xb63e62585cd426e51127fbae632645714d794a25",
75
+ tbillToken: "0x82dd8f86C86Db739E96Bd873B368a36E4ad298CA",
76
+ tokenFactory: "0x58b345E1018e55dc564aee44F8F58293DF59B167",
77
+ vault: "0x51C25F00dD5D84cf7604fAB43e2bBAEafFb887D6",
78
+ mockUSDC: "0xDA9564cF0c56A67071aDe6fc76499417CADBD1DF",
79
+ mockUSDT: "0xDBf21aB5A0767C737750f560bfAa8F31ed51FDe5",
73
80
  sanctionsOracle: ZERO_ADDRESS,
74
- safeMultisig: ZERO_ADDRESS
81
+ safeMultisig: "0x2f2171D6b92F8c7230dcd0084f33A083589bAFfe"
75
82
  },
76
83
  [import_utils.CHAIN_IDS.POLYGON_AMOY]: {
77
84
  stfToken: ZERO_ADDRESS,
@@ -191,28 +198,83 @@ function getSafeMultisigAddress(chainId) {
191
198
  return getContractAddresses(chainId).safeMultisig;
192
199
  }
193
200
 
194
- // src/stablecoins.ts
201
+ // src/openassets-vaults.ts
195
202
  var import_utils2 = require("@straton/utils");
203
+ var OPENASSETS_VAULT_SLUGS = ["susdt", "sweth"];
204
+ var OPENASSETS_DEPLOYMENTS = {
205
+ // Eth Sepolia — first KAN-17 deploy, 2026-05-20. Dedicated-deployer mode.
206
+ // wETH vault accepts canonical Sepolia WETH9 (0xfFf9976782...6B14) so demo
207
+ // users can wrap real test-ETH via any standard dApp and deposit.
208
+ [import_utils2.CHAIN_IDS.ETHEREUM_SEPOLIA]: {
209
+ chainId: 11155111,
210
+ deployer: "0x00818593B91f78D35766993637f10AA0B0660F8F",
211
+ safe: "0x2f2171D6b92F8c7230dcd0084f33A083589bAFfe",
212
+ backendHotKey: "0xc8A0841e703973418B7B5ED95c786c9e20a6eF86",
213
+ infra: {
214
+ rwaTokenImpl: "0x74a97547C5DA09f276Ba14e7F7Fe2e58C6D8E73F",
215
+ tokenFactory: "0x6AF3B0bd4294A54F8E71308080EC118a216900df",
216
+ vaultImpl: "0xdfB44eA93e513c694e638B364a102aF2A63198F0",
217
+ vaultFactory: "0x928BDDE5B40Be8fCD3336CF14781B861560532AC",
218
+ claimTopicsRegistry: "0x174589d1C853B4550572Cc61520C7E69D8CAf6b2",
219
+ trustedIssuersRegistry: "0x18B63497615Fcf24862cD2C4dD3B7d4d487c9B3E",
220
+ identityRegistry: "0xA880D5c53e1dbe632564b9dc98a04E99F5da0476"
221
+ },
222
+ complianceModules: {
223
+ globalRateLimit: "0x83660C2a85b2E8a88Cf75dF8C81c0d16c6B636A9",
224
+ perInvestorRateLimit: "0x3baCf1B71561467E210BAa51D6650DB5DA99B6b3",
225
+ maxBalance: "0xDbd657fb091f9C87FFA2B1cc35846C876256B51E",
226
+ countryRestrict: "0x7E81D808eC61c0a44e7279f716c21A426566A0F9"
227
+ },
228
+ vaults: {
229
+ susdt: {
230
+ vault: "0x09922D7b6dAcF6Bc2055446977b3A0260d6DD168",
231
+ receiptToken: "0xed138Fea5972f2df30701d1600f5615cdB606724",
232
+ modularCompliance: "0x05222388001F9eb27Ad5d906F92F4646fe3AfF58",
233
+ depositAsset: "0x61c57359a81b9c72F210fCAAE706Aaae799303Df"
234
+ // mock USDT (Tether absent on Sepolia)
235
+ },
236
+ sweth: {
237
+ vault: "0x35be45bb19C973b2c364490E5603B7926bfdd5B3",
238
+ receiptToken: "0x9b400efB3987a271a9609f11E8E52179934De2b5",
239
+ modularCompliance: "0x12a06A5aAB3E26bC4B326D72A309C641Ec6EE240",
240
+ depositAsset: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14"
241
+ // canonical Sepolia WETH9
242
+ }
243
+ }
244
+ }
245
+ };
246
+ function getOpenAssetsDeployment(chainId) {
247
+ return OPENASSETS_DEPLOYMENTS[chainId];
248
+ }
249
+ function getOpenAssetsVault(chainId, slug) {
250
+ return OPENASSETS_DEPLOYMENTS[chainId]?.vaults[slug];
251
+ }
252
+ function hasOpenAssetsDeployment(chainId) {
253
+ return chainId in OPENASSETS_DEPLOYMENTS;
254
+ }
255
+
256
+ // src/stablecoins.ts
257
+ var import_utils3 = require("@straton/utils");
196
258
  var STABLECOIN_DECIMALS = 6;
197
259
  var RECEIPT_TOKEN_DECIMALS = 18;
198
260
  var DECIMAL_CONVERSION_FACTOR = BigInt(1e12);
199
261
  var ERROR_MESSAGE_MAX_LENGTH = 100;
200
262
  var STABLECOINS_BY_CHAIN = {
201
- [import_utils2.CHAIN_IDS.BASE_SEPOLIA]: [
263
+ [import_utils3.CHAIN_IDS.BASE_SEPOLIA]: [
202
264
  {
203
265
  symbol: "USDC",
204
266
  label: "Mock USDC",
205
- address: getMockUSDCAddress(import_utils2.CHAIN_IDS.BASE_SEPOLIA),
267
+ address: getMockUSDCAddress(import_utils3.CHAIN_IDS.BASE_SEPOLIA),
206
268
  decimals: 6
207
269
  },
208
270
  {
209
271
  symbol: "USDT",
210
272
  label: "Mock USDT",
211
- address: getMockUSDTAddress(import_utils2.CHAIN_IDS.BASE_SEPOLIA),
273
+ address: getMockUSDTAddress(import_utils3.CHAIN_IDS.BASE_SEPOLIA),
212
274
  decimals: 6
213
275
  }
214
276
  ],
215
- [import_utils2.CHAIN_IDS.ETHEREUM]: [
277
+ [import_utils3.CHAIN_IDS.ETHEREUM]: [
216
278
  {
217
279
  symbol: "USDC",
218
280
  label: "USD Coin",
@@ -226,21 +288,21 @@ var STABLECOINS_BY_CHAIN = {
226
288
  decimals: 6
227
289
  }
228
290
  ],
229
- [import_utils2.CHAIN_IDS.ETHEREUM_SEPOLIA]: [
291
+ [import_utils3.CHAIN_IDS.ETHEREUM_SEPOLIA]: [
230
292
  {
231
293
  symbol: "USDC",
232
294
  label: "Mock USDC",
233
- address: getMockUSDCAddress(import_utils2.CHAIN_IDS.ETHEREUM_SEPOLIA),
295
+ address: getMockUSDCAddress(import_utils3.CHAIN_IDS.ETHEREUM_SEPOLIA),
234
296
  decimals: 6
235
297
  },
236
298
  {
237
299
  symbol: "USDT",
238
300
  label: "Mock USDT",
239
- address: getMockUSDTAddress(import_utils2.CHAIN_IDS.ETHEREUM_SEPOLIA),
301
+ address: getMockUSDTAddress(import_utils3.CHAIN_IDS.ETHEREUM_SEPOLIA),
240
302
  decimals: 6
241
303
  }
242
304
  ],
243
- [import_utils2.CHAIN_IDS.BASE]: [
305
+ [import_utils3.CHAIN_IDS.BASE]: [
244
306
  {
245
307
  symbol: "USDC",
246
308
  label: "USD Coin",
@@ -248,7 +310,7 @@ var STABLECOINS_BY_CHAIN = {
248
310
  decimals: 6
249
311
  }
250
312
  ],
251
- [import_utils2.CHAIN_IDS.ARBITRUM]: [
313
+ [import_utils3.CHAIN_IDS.ARBITRUM]: [
252
314
  {
253
315
  symbol: "USDC",
254
316
  label: "USD Coin",
@@ -256,7 +318,7 @@ var STABLECOINS_BY_CHAIN = {
256
318
  decimals: 6
257
319
  }
258
320
  ],
259
- [import_utils2.CHAIN_IDS.AVALANCHE]: [
321
+ [import_utils3.CHAIN_IDS.AVALANCHE]: [
260
322
  {
261
323
  symbol: "USDC",
262
324
  label: "USD Coin",
@@ -6430,6 +6492,8 @@ var feeCollectorAbi = [
6430
6492
  CONTRACT_ADDRESSES,
6431
6493
  DECIMAL_CONVERSION_FACTOR,
6432
6494
  ERROR_MESSAGE_MAX_LENGTH,
6495
+ OPENASSETS_DEPLOYMENTS,
6496
+ OPENASSETS_VAULT_SLUGS,
6433
6497
  RECEIPT_TOKEN_DECIMALS,
6434
6498
  STABLECOINS,
6435
6499
  STABLECOINS_BY_CHAIN,
@@ -6440,6 +6504,8 @@ var feeCollectorAbi = [
6440
6504
  getContractAddresses,
6441
6505
  getMockUSDCAddress,
6442
6506
  getMockUSDTAddress,
6507
+ getOpenAssetsDeployment,
6508
+ getOpenAssetsVault,
6443
6509
  getSafeMultisigAddress,
6444
6510
  getStablecoinsForChain,
6445
6511
  getStfTokenAddress,
@@ -6447,6 +6513,7 @@ var feeCollectorAbi = [
6447
6513
  getTokenFactoryAddress,
6448
6514
  getVaultAddress,
6449
6515
  hasContractAddresses,
6516
+ hasOpenAssetsDeployment,
6450
6517
  rwaTokenAbi,
6451
6518
  stfTokenAbi,
6452
6519
  stfVestingAbi,
package/dist/index.mjs CHANGED
@@ -13,14 +13,16 @@ var CONTRACT_ADDRESSES = {
13
13
  safeMultisig: ZERO_ADDRESS
14
14
  },
15
15
  [CHAIN_IDS.ETHEREUM_SEPOLIA]: {
16
+ // B1 C2/R3 redeploy (2026-05-18). The pre-B1 stack (0xb229.../0x7f7c...) is
17
+ // dead on this chain. stfToken was NOT redeployed by B1 — kept.
16
18
  stfToken: "0xe1c08ADa94E557CD495657e656c2f3EEB93A4BE3",
17
- tbillToken: "0xb2291a301ac47c4351fa424d847407111e604362",
18
- tokenFactory: "0xbbf3f31e67a56e76681da8a8f859b156b42b9249",
19
- vault: "0x7f7cabcb7f2715ce6f16d371f293425d2368e1e0",
20
- mockUSDC: "0x58a030261a940de9606e243a17fbc4454ae3b5d3",
21
- mockUSDT: "0xb63e62585cd426e51127fbae632645714d794a25",
19
+ tbillToken: "0x82dd8f86C86Db739E96Bd873B368a36E4ad298CA",
20
+ tokenFactory: "0x58b345E1018e55dc564aee44F8F58293DF59B167",
21
+ vault: "0x51C25F00dD5D84cf7604fAB43e2bBAEafFb887D6",
22
+ mockUSDC: "0xDA9564cF0c56A67071aDe6fc76499417CADBD1DF",
23
+ mockUSDT: "0xDBf21aB5A0767C737750f560bfAa8F31ed51FDe5",
22
24
  sanctionsOracle: ZERO_ADDRESS,
23
- safeMultisig: ZERO_ADDRESS
25
+ safeMultisig: "0x2f2171D6b92F8c7230dcd0084f33A083589bAFfe"
24
26
  },
25
27
  [CHAIN_IDS.POLYGON_AMOY]: {
26
28
  stfToken: ZERO_ADDRESS,
@@ -140,28 +142,83 @@ function getSafeMultisigAddress(chainId) {
140
142
  return getContractAddresses(chainId).safeMultisig;
141
143
  }
142
144
 
143
- // src/stablecoins.ts
145
+ // src/openassets-vaults.ts
144
146
  import { CHAIN_IDS as CHAIN_IDS2 } from "@straton/utils";
147
+ var OPENASSETS_VAULT_SLUGS = ["susdt", "sweth"];
148
+ var OPENASSETS_DEPLOYMENTS = {
149
+ // Eth Sepolia — first KAN-17 deploy, 2026-05-20. Dedicated-deployer mode.
150
+ // wETH vault accepts canonical Sepolia WETH9 (0xfFf9976782...6B14) so demo
151
+ // users can wrap real test-ETH via any standard dApp and deposit.
152
+ [CHAIN_IDS2.ETHEREUM_SEPOLIA]: {
153
+ chainId: 11155111,
154
+ deployer: "0x00818593B91f78D35766993637f10AA0B0660F8F",
155
+ safe: "0x2f2171D6b92F8c7230dcd0084f33A083589bAFfe",
156
+ backendHotKey: "0xc8A0841e703973418B7B5ED95c786c9e20a6eF86",
157
+ infra: {
158
+ rwaTokenImpl: "0x74a97547C5DA09f276Ba14e7F7Fe2e58C6D8E73F",
159
+ tokenFactory: "0x6AF3B0bd4294A54F8E71308080EC118a216900df",
160
+ vaultImpl: "0xdfB44eA93e513c694e638B364a102aF2A63198F0",
161
+ vaultFactory: "0x928BDDE5B40Be8fCD3336CF14781B861560532AC",
162
+ claimTopicsRegistry: "0x174589d1C853B4550572Cc61520C7E69D8CAf6b2",
163
+ trustedIssuersRegistry: "0x18B63497615Fcf24862cD2C4dD3B7d4d487c9B3E",
164
+ identityRegistry: "0xA880D5c53e1dbe632564b9dc98a04E99F5da0476"
165
+ },
166
+ complianceModules: {
167
+ globalRateLimit: "0x83660C2a85b2E8a88Cf75dF8C81c0d16c6B636A9",
168
+ perInvestorRateLimit: "0x3baCf1B71561467E210BAa51D6650DB5DA99B6b3",
169
+ maxBalance: "0xDbd657fb091f9C87FFA2B1cc35846C876256B51E",
170
+ countryRestrict: "0x7E81D808eC61c0a44e7279f716c21A426566A0F9"
171
+ },
172
+ vaults: {
173
+ susdt: {
174
+ vault: "0x09922D7b6dAcF6Bc2055446977b3A0260d6DD168",
175
+ receiptToken: "0xed138Fea5972f2df30701d1600f5615cdB606724",
176
+ modularCompliance: "0x05222388001F9eb27Ad5d906F92F4646fe3AfF58",
177
+ depositAsset: "0x61c57359a81b9c72F210fCAAE706Aaae799303Df"
178
+ // mock USDT (Tether absent on Sepolia)
179
+ },
180
+ sweth: {
181
+ vault: "0x35be45bb19C973b2c364490E5603B7926bfdd5B3",
182
+ receiptToken: "0x9b400efB3987a271a9609f11E8E52179934De2b5",
183
+ modularCompliance: "0x12a06A5aAB3E26bC4B326D72A309C641Ec6EE240",
184
+ depositAsset: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14"
185
+ // canonical Sepolia WETH9
186
+ }
187
+ }
188
+ }
189
+ };
190
+ function getOpenAssetsDeployment(chainId) {
191
+ return OPENASSETS_DEPLOYMENTS[chainId];
192
+ }
193
+ function getOpenAssetsVault(chainId, slug) {
194
+ return OPENASSETS_DEPLOYMENTS[chainId]?.vaults[slug];
195
+ }
196
+ function hasOpenAssetsDeployment(chainId) {
197
+ return chainId in OPENASSETS_DEPLOYMENTS;
198
+ }
199
+
200
+ // src/stablecoins.ts
201
+ import { CHAIN_IDS as CHAIN_IDS3 } from "@straton/utils";
145
202
  var STABLECOIN_DECIMALS = 6;
146
203
  var RECEIPT_TOKEN_DECIMALS = 18;
147
204
  var DECIMAL_CONVERSION_FACTOR = BigInt(1e12);
148
205
  var ERROR_MESSAGE_MAX_LENGTH = 100;
149
206
  var STABLECOINS_BY_CHAIN = {
150
- [CHAIN_IDS2.BASE_SEPOLIA]: [
207
+ [CHAIN_IDS3.BASE_SEPOLIA]: [
151
208
  {
152
209
  symbol: "USDC",
153
210
  label: "Mock USDC",
154
- address: getMockUSDCAddress(CHAIN_IDS2.BASE_SEPOLIA),
211
+ address: getMockUSDCAddress(CHAIN_IDS3.BASE_SEPOLIA),
155
212
  decimals: 6
156
213
  },
157
214
  {
158
215
  symbol: "USDT",
159
216
  label: "Mock USDT",
160
- address: getMockUSDTAddress(CHAIN_IDS2.BASE_SEPOLIA),
217
+ address: getMockUSDTAddress(CHAIN_IDS3.BASE_SEPOLIA),
161
218
  decimals: 6
162
219
  }
163
220
  ],
164
- [CHAIN_IDS2.ETHEREUM]: [
221
+ [CHAIN_IDS3.ETHEREUM]: [
165
222
  {
166
223
  symbol: "USDC",
167
224
  label: "USD Coin",
@@ -175,21 +232,21 @@ var STABLECOINS_BY_CHAIN = {
175
232
  decimals: 6
176
233
  }
177
234
  ],
178
- [CHAIN_IDS2.ETHEREUM_SEPOLIA]: [
235
+ [CHAIN_IDS3.ETHEREUM_SEPOLIA]: [
179
236
  {
180
237
  symbol: "USDC",
181
238
  label: "Mock USDC",
182
- address: getMockUSDCAddress(CHAIN_IDS2.ETHEREUM_SEPOLIA),
239
+ address: getMockUSDCAddress(CHAIN_IDS3.ETHEREUM_SEPOLIA),
183
240
  decimals: 6
184
241
  },
185
242
  {
186
243
  symbol: "USDT",
187
244
  label: "Mock USDT",
188
- address: getMockUSDTAddress(CHAIN_IDS2.ETHEREUM_SEPOLIA),
245
+ address: getMockUSDTAddress(CHAIN_IDS3.ETHEREUM_SEPOLIA),
189
246
  decimals: 6
190
247
  }
191
248
  ],
192
- [CHAIN_IDS2.BASE]: [
249
+ [CHAIN_IDS3.BASE]: [
193
250
  {
194
251
  symbol: "USDC",
195
252
  label: "USD Coin",
@@ -197,7 +254,7 @@ var STABLECOINS_BY_CHAIN = {
197
254
  decimals: 6
198
255
  }
199
256
  ],
200
- [CHAIN_IDS2.ARBITRUM]: [
257
+ [CHAIN_IDS3.ARBITRUM]: [
201
258
  {
202
259
  symbol: "USDC",
203
260
  label: "USD Coin",
@@ -205,7 +262,7 @@ var STABLECOINS_BY_CHAIN = {
205
262
  decimals: 6
206
263
  }
207
264
  ],
208
- [CHAIN_IDS2.AVALANCHE]: [
265
+ [CHAIN_IDS3.AVALANCHE]: [
209
266
  {
210
267
  symbol: "USDC",
211
268
  label: "USD Coin",
@@ -6378,6 +6435,8 @@ export {
6378
6435
  CONTRACT_ADDRESSES,
6379
6436
  DECIMAL_CONVERSION_FACTOR,
6380
6437
  ERROR_MESSAGE_MAX_LENGTH,
6438
+ OPENASSETS_DEPLOYMENTS,
6439
+ OPENASSETS_VAULT_SLUGS,
6381
6440
  RECEIPT_TOKEN_DECIMALS,
6382
6441
  STABLECOINS,
6383
6442
  STABLECOINS_BY_CHAIN,
@@ -6388,6 +6447,8 @@ export {
6388
6447
  getContractAddresses,
6389
6448
  getMockUSDCAddress,
6390
6449
  getMockUSDTAddress,
6450
+ getOpenAssetsDeployment,
6451
+ getOpenAssetsVault,
6391
6452
  getSafeMultisigAddress,
6392
6453
  getStablecoinsForChain,
6393
6454
  getStfTokenAddress,
@@ -6395,6 +6456,7 @@ export {
6395
6456
  getTokenFactoryAddress,
6396
6457
  getVaultAddress,
6397
6458
  hasContractAddresses,
6459
+ hasOpenAssetsDeployment,
6398
6460
  rwaTokenAbi,
6399
6461
  stfTokenAbi,
6400
6462
  stfVestingAbi,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@straton/blockchain",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "Contract ABIs, addresses, and stablecoin configs for the Straton RWAFi platform",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -24,7 +24,7 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@straton/utils": "1.1.2"
27
+ "@straton/utils": "1.2.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/node": "^22.10.0",