@bitgo-beta/statics 10.0.1-alpha.45 → 10.0.1-alpha.451
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/src/account.d.ts +956 -73
- package/dist/src/account.d.ts.map +1 -1
- package/dist/src/account.js +1541 -184
- package/dist/src/ada.d.ts.map +1 -1
- package/dist/src/ada.js +9 -3
- package/dist/src/allCoinsAndTokens.d.ts +2 -0
- package/dist/src/allCoinsAndTokens.d.ts.map +1 -0
- package/dist/src/allCoinsAndTokens.js +1110 -0
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +10 -3
- package/dist/src/base.d.ts +2156 -34
- package/dist/src/base.d.ts.map +1 -1
- package/dist/src/base.js +2258 -50
- package/dist/src/canton.d.ts +34 -0
- package/dist/src/canton.d.ts.map +1 -0
- package/dist/src/canton.js +51 -0
- package/dist/src/coinFeatures.d.ts +111 -0
- package/dist/src/coinFeatures.d.ts.map +1 -0
- package/dist/src/coinFeatures.js +697 -0
- package/dist/src/coins/adaTokens.d.ts +2 -0
- package/dist/src/coins/adaTokens.d.ts.map +1 -0
- package/dist/src/coins/adaTokens.js +18 -0
- package/dist/src/coins/avaxTokens.d.ts +2 -0
- package/dist/src/coins/avaxTokens.d.ts.map +1 -0
- package/dist/src/coins/avaxTokens.js +126 -0
- package/dist/src/coins/botOfcTokens.d.ts +2 -0
- package/dist/src/coins/botOfcTokens.d.ts.map +1 -0
- package/dist/src/coins/botOfcTokens.js +5 -0
- package/dist/src/coins/botTokens.d.ts +3 -0
- package/dist/src/coins/botTokens.d.ts.map +1 -0
- package/dist/src/coins/botTokens.js +43 -0
- package/dist/src/coins/bscTokens.d.ts +2 -0
- package/dist/src/coins/bscTokens.d.ts.map +1 -0
- package/dist/src/coins/bscTokens.js +192 -0
- package/dist/src/coins/cosmosTokens.d.ts +2 -0
- package/dist/src/coins/cosmosTokens.d.ts.map +1 -0
- package/dist/src/coins/cosmosTokens.js +12 -0
- package/dist/src/coins/erc20Coins.d.ts +32 -0
- package/dist/src/coins/erc20Coins.d.ts.map +1 -0
- package/dist/src/coins/erc20Coins.js +155 -0
- package/dist/src/coins/erc20MasterTokens.d.ts +43 -0
- package/dist/src/coins/erc20MasterTokens.d.ts.map +1 -0
- package/dist/src/coins/erc20MasterTokens.js +23904 -0
- package/dist/src/coins/jettonTokens.d.ts +2 -0
- package/dist/src/coins/jettonTokens.d.ts.map +1 -0
- package/dist/src/coins/jettonTokens.js +18 -0
- package/dist/src/coins/nep141Tokens.d.ts +2 -0
- package/dist/src/coins/nep141Tokens.d.ts.map +1 -0
- package/dist/src/coins/nep141Tokens.js +16 -0
- package/dist/src/coins/ofcCoins.d.ts +2 -0
- package/dist/src/coins/ofcCoins.d.ts.map +1 -0
- package/dist/src/coins/ofcCoins.js +831 -0
- package/dist/src/coins/ofcErc20Coins.d.ts +4 -0
- package/dist/src/coins/ofcErc20Coins.d.ts.map +1 -0
- package/dist/src/coins/ofcErc20Coins.js +63 -0
- package/dist/src/coins/polygonTokens.d.ts +2 -0
- package/dist/src/coins/polygonTokens.d.ts.map +1 -0
- package/dist/src/coins/polygonTokens.js +163 -0
- package/dist/src/coins/polyxTokens.d.ts +2 -0
- package/dist/src/coins/polyxTokens.d.ts.map +1 -0
- package/dist/src/coins/polyxTokens.js +21 -0
- package/dist/src/coins/sip10Tokens.d.ts +2 -0
- package/dist/src/coins/sip10Tokens.d.ts.map +1 -0
- package/dist/src/coins/sip10Tokens.js +25 -0
- package/dist/src/coins/solTokens.d.ts +3 -0
- package/dist/src/coins/solTokens.d.ts.map +1 -0
- package/dist/src/coins/solTokens.js +431 -0
- package/dist/src/coins/vetTokens.d.ts +2 -0
- package/dist/src/coins/vetTokens.d.ts.map +1 -0
- package/dist/src/coins/vetTokens.js +11 -0
- package/dist/src/coins.d.ts +11 -1
- package/dist/src/coins.d.ts.map +1 -1
- package/dist/src/coins.js +364 -1401
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +3 -2
- package/dist/src/errors.d.ts +3 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +9 -2
- package/dist/src/flrp.d.ts +40 -0
- package/dist/src/flrp.d.ts.map +1 -0
- package/dist/src/flrp.js +65 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +26 -3
- package/dist/src/lightning.d.ts +43 -0
- package/dist/src/lightning.d.ts.map +1 -0
- package/dist/src/lightning.js +60 -0
- package/dist/src/map.d.ts +16 -0
- package/dist/src/map.d.ts.map +1 -1
- package/dist/src/map.js +183 -17
- package/dist/src/networkFeatureMapForTokens.d.ts +3 -0
- package/dist/src/networkFeatureMapForTokens.d.ts.map +1 -0
- package/dist/src/networkFeatureMapForTokens.js +31 -0
- package/dist/src/networks.d.ts +1598 -60
- package/dist/src/networks.d.ts.map +1 -1
- package/dist/src/networks.js +1968 -64
- package/dist/src/ofc.d.ts +597 -3
- package/dist/src/ofc.d.ts.map +1 -1
- package/dist/src/ofc.js +1419 -28
- package/dist/src/tokenConfig.d.ts +261 -102
- package/dist/src/tokenConfig.d.ts.map +1 -1
- package/dist/src/tokenConfig.js +971 -201
- package/dist/src/utxo.d.ts +3 -1
- package/dist/src/utxo.d.ts.map +1 -1
- package/dist/src/utxo.js +85 -3
- package/dist/tsconfig.tsbuildinfo +1 -2744
- package/package.json +6 -3
- package/.mocharc.js +0 -10
- package/.prettierignore +0 -2
- package/CHANGELOG.md +0 -552
- package/dist/resources/dot/index.d.ts +0 -3
- package/dist/resources/dot/index.d.ts.map +0 -1
- package/dist/resources/dot/index.js +0 -15
- package/dist/resources/dot/mainnet.d.ts +0 -2
- package/dist/resources/dot/mainnet.d.ts.map +0 -1
- package/dist/resources/dot/mainnet.js +0 -5
- package/dist/resources/dot/westend.d.ts +0 -2
- package/dist/resources/dot/westend.d.ts.map +0 -1
- package/dist/resources/dot/westend.js +0 -5
- package/resources/dot/index.ts +0 -2
- package/resources/dot/mainnet.ts +0 -2
- package/resources/dot/westend.ts +0 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.erc20Coins = exports.ofcErc20Coins = void 0;
|
|
4
|
+
exports.getFilteredFeatures = getFilteredFeatures;
|
|
5
|
+
const account_1 = require("../account");
|
|
6
|
+
const base_1 = require("../base");
|
|
7
|
+
const networks_1 = require("../networks");
|
|
8
|
+
const erc20MasterTokens_1 = require("./erc20MasterTokens");
|
|
9
|
+
const DISALLOWED_FEATURES_IN_OFC = [
|
|
10
|
+
base_1.CoinFeature.UNSPENT_MODEL,
|
|
11
|
+
base_1.CoinFeature.CHILD_PAYS_FOR_PARENT,
|
|
12
|
+
base_1.CoinFeature.PAYGO,
|
|
13
|
+
base_1.CoinFeature.SUPPORTS_TOKENS,
|
|
14
|
+
// OFC inherits features from the base asset but the features are not always applicable to OFC
|
|
15
|
+
base_1.CoinFeature.SHARED_EVM_SIGNING,
|
|
16
|
+
base_1.CoinFeature.EVM_COMPATIBLE_WP,
|
|
17
|
+
];
|
|
18
|
+
const REQUIRED_FEATURES_IN_OFC = [base_1.CoinFeature.ACCOUNT_MODEL, base_1.CoinFeature.REQUIRES_BIG_NUMBER];
|
|
19
|
+
const COIN_DEFAULT_FEATURES = [...account_1.AccountCoin.DEFAULT_FEATURES, base_1.CoinFeature.BULK_TRANSACTION];
|
|
20
|
+
class OfcCoin extends base_1.BaseCoin {
|
|
21
|
+
constructor(options) {
|
|
22
|
+
const { addressCoin, ...baseOptions } = options;
|
|
23
|
+
super(baseOptions);
|
|
24
|
+
this.addressCoin = addressCoin;
|
|
25
|
+
this.minimumDenomination = Math.pow(10, this.decimalPlaces);
|
|
26
|
+
}
|
|
27
|
+
requiredFeatures() {
|
|
28
|
+
return new Set(REQUIRED_FEATURES_IN_OFC);
|
|
29
|
+
}
|
|
30
|
+
disallowedFeatures() {
|
|
31
|
+
return new Set(DISALLOWED_FEATURES_IN_OFC);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
OfcCoin.DEFAULT_FEATURES = [
|
|
35
|
+
base_1.CoinFeature.ACCOUNT_MODEL,
|
|
36
|
+
base_1.CoinFeature.REQUIRES_BIG_NUMBER,
|
|
37
|
+
base_1.CoinFeature.CUSTODY,
|
|
38
|
+
base_1.CoinFeature.CUSTODY_BITGO_TRUST,
|
|
39
|
+
base_1.CoinFeature.CUSTODY_BITGO_MENA_FZE,
|
|
40
|
+
base_1.CoinFeature.CUSTODY_BITGO_CUSTODY_MENA_FZE,
|
|
41
|
+
base_1.CoinFeature.CUSTODY_BITGO_INDIA,
|
|
42
|
+
];
|
|
43
|
+
function mergeFeatureWithOfcDefaultFeatures(customFeatures) {
|
|
44
|
+
if (!customFeatures || customFeatures.length === 0) {
|
|
45
|
+
return undefined; // Use OfcCoin.DEFAULT_FEATURES
|
|
46
|
+
}
|
|
47
|
+
// Merge defaults with custom features, avoiding duplicates
|
|
48
|
+
const merged = new Set([...OfcCoin.DEFAULT_FEATURES, ...customFeatures]);
|
|
49
|
+
return Array.from(merged);
|
|
50
|
+
}
|
|
51
|
+
function getFilteredFeatures(features) {
|
|
52
|
+
if (features.length == 0) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const filteredFeatures = features.filter((feature) => !DISALLOWED_FEATURES_IN_OFC.includes(feature));
|
|
56
|
+
return [...filteredFeatures, ...REQUIRED_FEATURES_IN_OFC];
|
|
57
|
+
}
|
|
58
|
+
function ofcerc20(id, name, fullName, decimalPlaces, asset, kind = base_1.CoinKind.CRYPTO, features = OfcCoin.DEFAULT_FEATURES, prefix = '', suffix = name.replace(/^ofc/, '').toUpperCase(), network = networks_1.Networks.main.ofc, isToken = true, addressCoin = 'eth', primaryKeyCurve = base_1.KeyCurve.Secp256k1) {
|
|
59
|
+
return Object.freeze(new OfcCoin({
|
|
60
|
+
id,
|
|
61
|
+
name,
|
|
62
|
+
fullName,
|
|
63
|
+
network,
|
|
64
|
+
prefix,
|
|
65
|
+
suffix,
|
|
66
|
+
features,
|
|
67
|
+
decimalPlaces,
|
|
68
|
+
isToken,
|
|
69
|
+
asset,
|
|
70
|
+
kind,
|
|
71
|
+
addressCoin,
|
|
72
|
+
primaryKeyCurve,
|
|
73
|
+
baseUnit: base_1.BaseUnit.ETH,
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
function tofcerc20(id, name, fullName, decimalPlaces, asset, kind = base_1.CoinKind.CRYPTO, features = OfcCoin.DEFAULT_FEATURES, prefix = '', suffix = name.replace(/^ofc/, '').toUpperCase(), network = networks_1.Networks.test.ofc, isToken = true, addressCoin = 'teth', primaryKeyCurve = base_1.KeyCurve.Secp256k1) {
|
|
77
|
+
return Object.freeze(new OfcCoin({
|
|
78
|
+
id,
|
|
79
|
+
name,
|
|
80
|
+
fullName,
|
|
81
|
+
network,
|
|
82
|
+
prefix,
|
|
83
|
+
suffix,
|
|
84
|
+
features,
|
|
85
|
+
decimalPlaces,
|
|
86
|
+
isToken,
|
|
87
|
+
asset,
|
|
88
|
+
kind,
|
|
89
|
+
addressCoin,
|
|
90
|
+
primaryKeyCurve,
|
|
91
|
+
baseUnit: base_1.BaseUnit.ETH,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Generate mainnet and testnet ERC20 coins from the master token list.
|
|
96
|
+
*/
|
|
97
|
+
function generateAllERC20Coins() {
|
|
98
|
+
const allErc20Coins = [];
|
|
99
|
+
for (const coinDetail of erc20MasterTokens_1.erc20MasterTokens) {
|
|
100
|
+
// generate mainnet ERC20 coins/tokens
|
|
101
|
+
if (coinDetail.onchain && !coinDetail.isTestnet) {
|
|
102
|
+
allErc20Coins.push((0, account_1.erc20)(coinDetail.onchain.id, coinDetail.onchain.name, coinDetail.fullName, coinDetail.decimalPlaces, coinDetail.onchain.contractAddress, coinDetail.underlyingAsset, coinDetail.onchain.features, undefined, // prefix
|
|
103
|
+
undefined, // suffix
|
|
104
|
+
coinDetail.onchain.network // network - default to Ethereum mainnet
|
|
105
|
+
));
|
|
106
|
+
}
|
|
107
|
+
// generate testnet ERC20 coins/tokens
|
|
108
|
+
if (coinDetail.onchain && coinDetail.isTestnet) {
|
|
109
|
+
allErc20Coins.push((0, account_1.terc20)(coinDetail.onchain.id, coinDetail.onchain.name, coinDetail.fullName, coinDetail.decimalPlaces, coinDetail.onchain.contractAddress, coinDetail.underlyingAsset, coinDetail.onchain.features || coinDetail.features, undefined, // prefix
|
|
110
|
+
undefined, // suffix
|
|
111
|
+
coinDetail.onchain.network // network - default to Holesky testnet
|
|
112
|
+
));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return allErc20Coins;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generate mainnet and testnet OFC ERC20 coins from the master token list.
|
|
119
|
+
*/
|
|
120
|
+
function generateAllOFCERC20Coins() {
|
|
121
|
+
const allOFCErc20Coins = [];
|
|
122
|
+
for (const coinDetail of erc20MasterTokens_1.erc20MasterTokens) {
|
|
123
|
+
let features = mergeFeatureWithOfcDefaultFeatures(coinDetail?.offchain?.features);
|
|
124
|
+
const filteredFeatures = coinDetail.onchain
|
|
125
|
+
? getFilteredFeatures(coinDetail.onchain.features || COIN_DEFAULT_FEATURES)
|
|
126
|
+
: [];
|
|
127
|
+
if (filteredFeatures.length > 0) {
|
|
128
|
+
features = filteredFeatures;
|
|
129
|
+
}
|
|
130
|
+
// generate mainnet OFC ERC20 coins (onchain, not testnet)
|
|
131
|
+
if (coinDetail.offchain && !coinDetail.isTestnet) {
|
|
132
|
+
allOFCErc20Coins.push(ofcerc20(coinDetail.offchain.id, coinDetail.offchain.name, coinDetail.fullName, coinDetail.decimalPlaces, coinDetail.underlyingAsset, undefined, // kind - defaults to CoinKind.CRYPTO
|
|
133
|
+
features, undefined, // prefix
|
|
134
|
+
undefined, // suffix
|
|
135
|
+
coinDetail.offchain.network, // network - default to OFC mainnet
|
|
136
|
+
undefined, // isToken
|
|
137
|
+
coinDetail.offchain.addressCoin // addressCoin - default to 'eth'
|
|
138
|
+
));
|
|
139
|
+
}
|
|
140
|
+
// generate testnet OFC ERC20 coins (onchain, not testnet)
|
|
141
|
+
if (coinDetail.offchain && coinDetail.isTestnet) {
|
|
142
|
+
allOFCErc20Coins.push(tofcerc20(coinDetail.offchain.id, coinDetail.offchain.name, coinDetail.fullName, coinDetail.decimalPlaces, coinDetail.underlyingAsset, undefined, // kind - defaults to CoinKind.CRYPTO
|
|
143
|
+
features, undefined, // prefix
|
|
144
|
+
undefined, // suffix
|
|
145
|
+
coinDetail.offchain.network, // network - default to OFC testnet
|
|
146
|
+
undefined, // isToken
|
|
147
|
+
coinDetail.offchain.addressCoin // addressCoin - default to 'hteth' (holesky testnet)
|
|
148
|
+
));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return allOFCErc20Coins;
|
|
152
|
+
}
|
|
153
|
+
exports.ofcErc20Coins = [...generateAllOFCERC20Coins()];
|
|
154
|
+
exports.erc20Coins = [...generateAllERC20Coins(), ...exports.ofcErc20Coins];
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJjMjBDb2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2lucy9lcmMyMENvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJFQSxrREFNQztBQWpGRCx3Q0FBbUU7QUFDbkUsa0NBQStGO0FBQy9GLDBDQUFnRTtBQUNoRSwyREFBd0Q7QUFFeEQsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxrQkFBVyxDQUFDLGFBQWE7SUFDekIsa0JBQVcsQ0FBQyxxQkFBcUI7SUFDakMsa0JBQVcsQ0FBQyxLQUFLO0lBQ2pCLGtCQUFXLENBQUMsZUFBZTtJQUMzQiw4RkFBOEY7SUFDOUYsa0JBQVcsQ0FBQyxrQkFBa0I7SUFDOUIsa0JBQVcsQ0FBQyxpQkFBaUI7Q0FDOUIsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxrQkFBVyxDQUFDLGFBQWEsRUFBRSxrQkFBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFOUYsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQUcscUJBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFtQjlGLE1BQU0sT0FBUSxTQUFRLGVBQVE7SUFjNUIsWUFBWSxPQUE4QjtRQUN4QyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxJQUFJLEdBQUcsQ0FBYyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsT0FBTyxJQUFJLEdBQUcsQ0FBYyww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QixVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxtQ0FBbUM7WUFDaEUsU0FBUyxFQUFFLFVBQVU7WUFDckIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsaUNBQWlDO2FBQ2xFLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCwwREFBMEQ7UUFDMUQsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FDUCxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDdEIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQ3hCLFVBQVUsQ0FBQyxRQUFRLEVBQ25CLFVBQVUsQ0FBQyxhQUFhLEVBQ3hCLFVBQVUsQ0FBQyxlQUFlLEVBQzFCLFNBQVMsRUFBRSxxQ0FBcUM7WUFDaEQsUUFBUSxFQUNSLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLG1DQUFtQztZQUNoRSxTQUFTLEVBQUUsVUFBVTtZQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxxREFBcUQ7YUFDdEYsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFWSxRQUFBLGFBQWEsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsVUFBVSxHQUFHLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxFQUFFLEdBQUcscUJBQWEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjb3VudENvaW4sIGVyYzIwLCBFcmMyMENvaW4sIHRlcmMyMCB9IGZyb20gJy4uL2FjY291bnQnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJhc2VVbml0LCBDb2luRmVhdHVyZSwgQ29pbktpbmQsIEtleUN1cnZlLCBVbmRlcmx5aW5nQXNzZXQgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IEJhc2VOZXR3b3JrLCBOZXR3b3JrcywgT2ZjTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IGVyYzIwTWFzdGVyVG9rZW5zIH0gZnJvbSAnLi9lcmMyME1hc3RlclRva2Vucyc7XG5cbmNvbnN0IERJU0FMTE9XRURfRkVBVFVSRVNfSU5fT0ZDID0gW1xuICBDb2luRmVhdHVyZS5VTlNQRU5UX01PREVMLFxuICBDb2luRmVhdHVyZS5DSElMRF9QQVlTX0ZPUl9QQVJFTlQsXG4gIENvaW5GZWF0dXJlLlBBWUdPLFxuICBDb2luRmVhdHVyZS5TVVBQT1JUU19UT0tFTlMsXG4gIC8vIE9GQyBpbmhlcml0cyBmZWF0dXJlcyBmcm9tIHRoZSBiYXNlIGFzc2V0IGJ1dCB0aGUgZmVhdHVyZXMgYXJlIG5vdCBhbHdheXMgYXBwbGljYWJsZSB0byBPRkNcbiAgQ29pbkZlYXR1cmUuU0hBUkVEX0VWTV9TSUdOSU5HLFxuICBDb2luRmVhdHVyZS5FVk1fQ09NUEFUSUJMRV9XUCxcbl07XG5cbmNvbnN0IFJFUVVJUkVEX0ZFQVRVUkVTX0lOX09GQyA9IFtDb2luRmVhdHVyZS5BQ0NPVU5UX01PREVMLCBDb2luRmVhdHVyZS5SRVFVSVJFU19CSUdfTlVNQkVSXTtcblxuY29uc3QgQ09JTl9ERUZBVUxUX0ZFQVRVUkVTID0gWy4uLkFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsIENvaW5GZWF0dXJlLkJVTEtfVFJBTlNBQ1RJT05dO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9mY0NvbnN0cnVjdG9yT3B0aW9ucyB7XG4gIGlkOiBzdHJpbmc7XG4gIGZ1bGxOYW1lOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbmV0d29yazogQmFzZU5ldHdvcms7XG4gIGFzc2V0OiBVbmRlcmx5aW5nQXNzZXQ7XG4gIGJhc2VVbml0OiBCYXNlVW5pdDtcbiAgZmVhdHVyZXM6IENvaW5GZWF0dXJlW107XG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlcjtcbiAgaXNUb2tlbjogYm9vbGVhbjtcbiAga2luZDogQ29pbktpbmQ7XG4gIHByZWZpeD86IHN0cmluZztcbiAgc3VmZml4Pzogc3RyaW5nO1xuICBhZGRyZXNzQ29pbj86IHN0cmluZztcbiAgcHJpbWFyeUtleUN1cnZlOiBLZXlDdXJ2ZTtcbn1cblxuY2xhc3MgT2ZjQ29pbiBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0ZFQVRVUkVTID0gW1xuICAgIENvaW5GZWF0dXJlLkFDQ09VTlRfTU9ERUwsXG4gICAgQ29pbkZlYXR1cmUuUkVRVUlSRVNfQklHX05VTUJFUixcbiAgICBDb2luRmVhdHVyZS5DVVNUT0RZLFxuICAgIENvaW5GZWF0dXJlLkNVU1RPRFlfQklUR09fVFJVU1QsXG4gICAgQ29pbkZlYXR1cmUuQ1VTVE9EWV9CSVRHT19NRU5BX0ZaRSxcbiAgICBDb2luRmVhdHVyZS5DVVNUT0RZX0JJVEdPX0NVU1RPRFlfTUVOQV9GWkUsXG4gICAgQ29pbkZlYXR1cmUuQ1VTVE9EWV9CSVRHT19JTkRJQSxcbiAgXTtcblxuICAvLyBJZiBzZXQsIHRoaXMgY29pbiBpcyB0aGUgbmF0aXZlIGFkZHJlc3MgZm9ybWF0IGZvciB0aGlzIHRva2VuLlxuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc0NvaW4/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtaW5pbXVtRGVub21pbmF0aW9uOiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9mY0NvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgIGNvbnN0IHsgYWRkcmVzc0NvaW4sIC4uLmJhc2VPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIHN1cGVyKGJhc2VPcHRpb25zKTtcbiAgICB0aGlzLmFkZHJlc3NDb2luID0gYWRkcmVzc0NvaW47XG4gICAgdGhpcy5taW5pbXVtRGVub21pbmF0aW9uID0gTWF0aC5wb3coMTAsIHRoaXMuZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZWRGZWF0dXJlcygpOiBTZXQ8Q29pbkZlYXR1cmU+IHtcbiAgICByZXR1cm4gbmV3IFNldDxDb2luRmVhdHVyZT4oUkVRVUlSRURfRkVBVFVSRVNfSU5fT0ZDKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkaXNhbGxvd2VkRmVhdHVyZXMoKTogU2V0PENvaW5GZWF0dXJlPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQ8Q29pbkZlYXR1cmU+KERJU0FMTE9XRURfRkVBVFVSRVNfSU5fT0ZDKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZUZlYXR1cmVXaXRoT2ZjRGVmYXVsdEZlYXR1cmVzKGN1c3RvbUZlYXR1cmVzOiBDb2luRmVhdHVyZVtdIHwgdW5kZWZpbmVkKTogQ29pbkZlYXR1cmVbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICghY3VzdG9tRmVhdHVyZXMgfHwgY3VzdG9tRmVhdHVyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gVXNlIE9mY0NvaW4uREVGQVVMVF9GRUFUVVJFU1xuICB9XG4gIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggY3VzdG9tIGZlYXR1cmVzLCBhdm9pZGluZyBkdXBsaWNhdGVzXG4gIGNvbnN0IG1lcmdlZCA9IG5ldyBTZXQoWy4uLk9mY0NvaW4uREVGQVVMVF9GRUFUVVJFUywgLi4uY3VzdG9tRmVhdHVyZXNdKTtcbiAgcmV0dXJuIEFycmF5LmZyb20obWVyZ2VkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcmVkRmVhdHVyZXMoZmVhdHVyZXM6IENvaW5GZWF0dXJlW10pOiBDb2luRmVhdHVyZVtdIHtcbiAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGZpbHRlcmVkRmVhdHVyZXMgPSBmZWF0dXJlcy5maWx0ZXIoKGZlYXR1cmUpID0+ICFESVNBTExPV0VEX0ZFQVRVUkVTX0lOX09GQy5pbmNsdWRlcyhmZWF0dXJlKSk7XG4gIHJldHVybiBbLi4uZmlsdGVyZWRGZWF0dXJlcywgLi4uUkVRVUlSRURfRkVBVFVSRVNfSU5fT0ZDXTtcbn1cblxuZnVuY3Rpb24gb2ZjZXJjMjAoXG4gIGlkOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZnVsbE5hbWU6IHN0cmluZyxcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyLFxuICBhc3NldDogVW5kZXJseWluZ0Fzc2V0LFxuICBraW5kOiBDb2luS2luZCA9IENvaW5LaW5kLkNSWVBUTyxcbiAgZmVhdHVyZXM6IENvaW5GZWF0dXJlW10gPSBPZmNDb2luLkRFRkFVTFRfRkVBVFVSRVMsXG4gIHByZWZpeCA9ICcnLFxuICBzdWZmaXg6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvXm9mYy8sICcnKS50b1VwcGVyQ2FzZSgpLFxuICBuZXR3b3JrOiBPZmNOZXR3b3JrID0gTmV0d29ya3MubWFpbi5vZmMsXG4gIGlzVG9rZW4gPSB0cnVlLFxuICBhZGRyZXNzQ29pbiA9ICdldGgnLFxuICBwcmltYXJ5S2V5Q3VydmU6IEtleUN1cnZlID0gS2V5Q3VydmUuU2VjcDI1NmsxXG4pIHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoXG4gICAgbmV3IE9mY0NvaW4oe1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgZnVsbE5hbWUsXG4gICAgICBuZXR3b3JrLFxuICAgICAgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBkZWNpbWFsUGxhY2VzLFxuICAgICAgaXNUb2tlbixcbiAgICAgIGFzc2V0LFxuICAgICAga2luZCxcbiAgICAgIGFkZHJlc3NDb2luLFxuICAgICAgcHJpbWFyeUtleUN1cnZlLFxuICAgICAgYmFzZVVuaXQ6IEJhc2VVbml0LkVUSCxcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiB0b2ZjZXJjMjAoXG4gIGlkOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZnVsbE5hbWU6IHN0cmluZyxcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyLFxuICBhc3NldDogVW5kZXJseWluZ0Fzc2V0LFxuICBraW5kOiBDb2luS2luZCA9IENvaW5LaW5kLkNSWVBUTyxcbiAgZmVhdHVyZXM6IENvaW5GZWF0dXJlW10gPSBPZmNDb2luLkRFRkFVTFRfRkVBVFVSRVMsXG4gIHByZWZpeCA9ICcnLFxuICBzdWZmaXg6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvXm9mYy8sICcnKS50b1VwcGVyQ2FzZSgpLFxuICBuZXR3b3JrOiBPZmNOZXR3b3JrID0gTmV0d29ya3MudGVzdC5vZmMsXG4gIGlzVG9rZW4gPSB0cnVlLFxuICBhZGRyZXNzQ29pbiA9ICd0ZXRoJyxcbiAgcHJpbWFyeUtleUN1cnZlOiBLZXlDdXJ2ZSA9IEtleUN1cnZlLlNlY3AyNTZrMVxuKSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKFxuICAgIG5ldyBPZmNDb2luKHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGZ1bGxOYW1lLFxuICAgICAgbmV0d29yayxcbiAgICAgIHByZWZpeCxcbiAgICAgIHN1ZmZpeCxcbiAgICAgIGZlYXR1cmVzLFxuICAgICAgZGVjaW1hbFBsYWNlcyxcbiAgICAgIGlzVG9rZW4sXG4gICAgICBhc3NldCxcbiAgICAgIGtpbmQsXG4gICAgICBhZGRyZXNzQ29pbixcbiAgICAgIHByaW1hcnlLZXlDdXJ2ZSxcbiAgICAgIGJhc2VVbml0OiBCYXNlVW5pdC5FVEgsXG4gICAgfSlcbiAgKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgbWFpbm5ldCBhbmQgdGVzdG5ldCBFUkMyMCBjb2lucyBmcm9tIHRoZSBtYXN0ZXIgdG9rZW4gbGlzdC5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVBbGxFUkMyMENvaW5zKCk6IFJlYWRvbmx5PEVyYzIwQ29pbj5bXSB7XG4gIGNvbnN0IGFsbEVyYzIwQ29pbnM6IFJlYWRvbmx5PEVyYzIwQ29pbj5bXSA9IFtdO1xuICBmb3IgKGNvbnN0IGNvaW5EZXRhaWwgb2YgZXJjMjBNYXN0ZXJUb2tlbnMpIHtcbiAgICAvLyBnZW5lcmF0ZSBtYWlubmV0IEVSQzIwIGNvaW5zL3Rva2Vuc1xuICAgIGlmIChjb2luRGV0YWlsLm9uY2hhaW4gJiYgIWNvaW5EZXRhaWwuaXNUZXN0bmV0KSB7XG4gICAgICBhbGxFcmMyMENvaW5zLnB1c2goXG4gICAgICAgIGVyYzIwKFxuICAgICAgICAgIGNvaW5EZXRhaWwub25jaGFpbi5pZCxcbiAgICAgICAgICBjb2luRGV0YWlsLm9uY2hhaW4ubmFtZSxcbiAgICAgICAgICBjb2luRGV0YWlsLmZ1bGxOYW1lLFxuICAgICAgICAgIGNvaW5EZXRhaWwuZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgICBjb2luRGV0YWlsLm9uY2hhaW4uY29udHJhY3RBZGRyZXNzLFxuICAgICAgICAgIGNvaW5EZXRhaWwudW5kZXJseWluZ0Fzc2V0LFxuICAgICAgICAgIGNvaW5EZXRhaWwub25jaGFpbi5mZWF0dXJlcyxcbiAgICAgICAgICB1bmRlZmluZWQsIC8vIHByZWZpeFxuICAgICAgICAgIHVuZGVmaW5lZCwgLy8gc3VmZml4XG4gICAgICAgICAgY29pbkRldGFpbC5vbmNoYWluLm5ldHdvcmsgLy8gbmV0d29yayAtIGRlZmF1bHQgdG8gRXRoZXJldW0gbWFpbm5ldFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRlIHRlc3RuZXQgRVJDMjAgY29pbnMvdG9rZW5zXG4gICAgaWYgKGNvaW5EZXRhaWwub25jaGFpbiAmJiBjb2luRGV0YWlsLmlzVGVzdG5ldCkge1xuICAgICAgYWxsRXJjMjBDb2lucy5wdXNoKFxuICAgICAgICB0ZXJjMjAoXG4gICAgICAgICAgY29pbkRldGFpbC5vbmNoYWluLmlkLFxuICAgICAgICAgIGNvaW5EZXRhaWwub25jaGFpbi5uYW1lLFxuICAgICAgICAgIGNvaW5EZXRhaWwuZnVsbE5hbWUsXG4gICAgICAgICAgY29pbkRldGFpbC5kZWNpbWFsUGxhY2VzLFxuICAgICAgICAgIGNvaW5EZXRhaWwub25jaGFpbi5jb250cmFjdEFkZHJlc3MsXG4gICAgICAgICAgY29pbkRldGFpbC51bmRlcmx5aW5nQXNzZXQsXG4gICAgICAgICAgY29pbkRldGFpbC5vbmNoYWluLmZlYXR1cmVzIHx8IGNvaW5EZXRhaWwuZmVhdHVyZXMsXG4gICAgICAgICAgdW5kZWZpbmVkLCAvLyBwcmVmaXhcbiAgICAgICAgICB1bmRlZmluZWQsIC8vIHN1ZmZpeFxuICAgICAgICAgIGNvaW5EZXRhaWwub25jaGFpbi5uZXR3b3JrIC8vIG5ldHdvcmsgLSBkZWZhdWx0IHRvIEhvbGVza3kgdGVzdG5ldFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWxsRXJjMjBDb2lucztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBtYWlubmV0IGFuZCB0ZXN0bmV0IE9GQyBFUkMyMCBjb2lucyBmcm9tIHRoZSBtYXN0ZXIgdG9rZW4gbGlzdC5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVBbGxPRkNFUkMyMENvaW5zKCk6IFJlYWRvbmx5PE9mY0NvaW4+W10ge1xuICBjb25zdCBhbGxPRkNFcmMyMENvaW5zOiBSZWFkb25seTxPZmNDb2luPltdID0gW107XG4gIGZvciAoY29uc3QgY29pbkRldGFpbCBvZiBlcmMyME1hc3RlclRva2Vucykge1xuICAgIGxldCBmZWF0dXJlcyA9IG1lcmdlRmVhdHVyZVdpdGhPZmNEZWZhdWx0RmVhdHVyZXMoY29pbkRldGFpbD8ub2ZmY2hhaW4/LmZlYXR1cmVzKTtcbiAgICBjb25zdCBmaWx0ZXJlZEZlYXR1cmVzOiBDb2luRmVhdHVyZVtdIHwgdW5kZWZpbmVkID0gY29pbkRldGFpbC5vbmNoYWluXG4gICAgICA/IGdldEZpbHRlcmVkRmVhdHVyZXMoY29pbkRldGFpbC5vbmNoYWluLmZlYXR1cmVzIHx8IENPSU5fREVGQVVMVF9GRUFUVVJFUylcbiAgICAgIDogW107XG4gICAgaWYgKGZpbHRlcmVkRmVhdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgZmVhdHVyZXMgPSBmaWx0ZXJlZEZlYXR1cmVzO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRlIG1haW5uZXQgT0ZDIEVSQzIwIGNvaW5zIChvbmNoYWluLCBub3QgdGVzdG5ldClcbiAgICBpZiAoY29pbkRldGFpbC5vZmZjaGFpbiAmJiAhY29pbkRldGFpbC5pc1Rlc3RuZXQpIHtcbiAgICAgIGFsbE9GQ0VyYzIwQ29pbnMucHVzaChcbiAgICAgICAgb2ZjZXJjMjAoXG4gICAgICAgICAgY29pbkRldGFpbC5vZmZjaGFpbi5pZCxcbiAgICAgICAgICBjb2luRGV0YWlsLm9mZmNoYWluLm5hbWUsXG4gICAgICAgICAgY29pbkRldGFpbC5mdWxsTmFtZSxcbiAgICAgICAgICBjb2luRGV0YWlsLmRlY2ltYWxQbGFjZXMsXG4gICAgICAgICAgY29pbkRldGFpbC51bmRlcmx5aW5nQXNzZXQsXG4gICAgICAgICAgdW5kZWZpbmVkLCAvLyBraW5kIC0gZGVmYXVsdHMgdG8gQ29pbktpbmQuQ1JZUFRPXG4gICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgdW5kZWZpbmVkLCAvLyBwcmVmaXhcbiAgICAgICAgICB1bmRlZmluZWQsIC8vIHN1ZmZpeFxuICAgICAgICAgIGNvaW5EZXRhaWwub2ZmY2hhaW4ubmV0d29yaywgLy8gbmV0d29yayAtIGRlZmF1bHQgdG8gT0ZDIG1haW5uZXRcbiAgICAgICAgICB1bmRlZmluZWQsIC8vIGlzVG9rZW5cbiAgICAgICAgICBjb2luRGV0YWlsLm9mZmNoYWluLmFkZHJlc3NDb2luIC8vIGFkZHJlc3NDb2luIC0gZGVmYXVsdCB0byAnZXRoJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRlIHRlc3RuZXQgT0ZDIEVSQzIwIGNvaW5zIChvbmNoYWluLCBub3QgdGVzdG5ldClcbiAgICBpZiAoY29pbkRldGFpbC5vZmZjaGFpbiAmJiBjb2luRGV0YWlsLmlzVGVzdG5ldCkge1xuICAgICAgYWxsT0ZDRXJjMjBDb2lucy5wdXNoKFxuICAgICAgICB0b2ZjZXJjMjAoXG4gICAgICAgICAgY29pbkRldGFpbC5vZmZjaGFpbi5pZCxcbiAgICAgICAgICBjb2luRGV0YWlsLm9mZmNoYWluLm5hbWUsXG4gICAgICAgICAgY29pbkRldGFpbC5mdWxsTmFtZSxcbiAgICAgICAgICBjb2luRGV0YWlsLmRlY2ltYWxQbGFjZXMsXG4gICAgICAgICAgY29pbkRldGFpbC51bmRlcmx5aW5nQXNzZXQsXG4gICAgICAgICAgdW5kZWZpbmVkLCAvLyBraW5kIC0gZGVmYXVsdHMgdG8gQ29pbktpbmQuQ1JZUFRPXG4gICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgdW5kZWZpbmVkLCAvLyBwcmVmaXhcbiAgICAgICAgICB1bmRlZmluZWQsIC8vIHN1ZmZpeFxuICAgICAgICAgIGNvaW5EZXRhaWwub2ZmY2hhaW4ubmV0d29yaywgLy8gbmV0d29yayAtIGRlZmF1bHQgdG8gT0ZDIHRlc3RuZXRcbiAgICAgICAgICB1bmRlZmluZWQsIC8vIGlzVG9rZW5cbiAgICAgICAgICBjb2luRGV0YWlsLm9mZmNoYWluLmFkZHJlc3NDb2luIC8vIGFkZHJlc3NDb2luIC0gZGVmYXVsdCB0byAnaHRldGgnIChob2xlc2t5IHRlc3RuZXQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbGxPRkNFcmMyMENvaW5zO1xufVxuXG5leHBvcnQgY29uc3Qgb2ZjRXJjMjBDb2lucyA9IFsuLi5nZW5lcmF0ZUFsbE9GQ0VSQzIwQ29pbnMoKV07XG5leHBvcnQgY29uc3QgZXJjMjBDb2lucyA9IFsuLi5nZW5lcmF0ZUFsbEVSQzIwQ29pbnMoKSwgLi4ub2ZjRXJjMjBDb2luc107XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Master ERC20 Token Configuration
|
|
3
|
+
*
|
|
4
|
+
* This file contains the combined on-chain (ERC20/tERC20) and off-chain (OFC/tOFC) token configurations.
|
|
5
|
+
* Each token entry contains:
|
|
6
|
+
* - underlyingAsset: The shared underlying asset identifier
|
|
7
|
+
* - fullName: The human-readable token name
|
|
8
|
+
* - decimalPlaces: Token decimal places
|
|
9
|
+
* - isTestnet: Optional flag indicating if this is a testnet token (defaults to false/mainnet)
|
|
10
|
+
* - features: Optional common features (when same for both on-chain and off-chain)
|
|
11
|
+
* - onchain: Optional ERC20-specific configuration (id, name, contractAddress, features)
|
|
12
|
+
* - offchain: Optional OFC-specific configuration (id, name, kind, features)
|
|
13
|
+
*
|
|
14
|
+
* Note: Some tokens may only have onchain or offchain configuration, not both.
|
|
15
|
+
*/
|
|
16
|
+
import { CoinFeature, UnderlyingAsset } from '../base';
|
|
17
|
+
import { EthereumNetwork, OfcNetwork } from '../networks';
|
|
18
|
+
export interface Erc20MasterTokenOnchain {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
contractAddress: string;
|
|
22
|
+
features?: CoinFeature[];
|
|
23
|
+
network?: EthereumNetwork;
|
|
24
|
+
}
|
|
25
|
+
export interface Erc20MasterTokenOffchain {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
kind?: string;
|
|
29
|
+
features?: CoinFeature[];
|
|
30
|
+
network?: OfcNetwork;
|
|
31
|
+
addressCoin?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface Erc20MasterToken {
|
|
34
|
+
underlyingAsset: UnderlyingAsset;
|
|
35
|
+
fullName: string;
|
|
36
|
+
decimalPlaces: number;
|
|
37
|
+
isTestnet?: boolean;
|
|
38
|
+
features?: CoinFeature[];
|
|
39
|
+
onchain?: Erc20MasterTokenOnchain;
|
|
40
|
+
offchain?: Erc20MasterTokenOffchain;
|
|
41
|
+
}
|
|
42
|
+
export declare const erc20MasterTokens: Erc20MasterToken[];
|
|
43
|
+
//# sourceMappingURL=erc20MasterTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20MasterTokens.d.ts","sourceRoot":"","sources":["../../../src/coins/erc20MasterTokens.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAY,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8BpE,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAmgvB/C,CAAC"}
|