Skip to content

Commit af6a86f

Browse files
OPDATA-3845: Decouple proof-of-reserves from dependencies (#4279)
* Decouple proof-of-reserves from dependencies * changeset --------- Co-authored-by: app-token-issuer-data-feeds[bot] <134377064+app-token-issuer-data-feeds[bot]@users.noreply.github.com>
1 parent 393e7b4 commit af6a86f

File tree

8 files changed

+231
-153
lines changed

8 files changed

+231
-153
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@chainlink/proof-of-reserves-adapter': patch
3+
---
4+
5+
Decouple from adapter dependencies

packages/composites/proof-of-reserves/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
"start": "yarn server:dist"
3232
},
3333
"dependencies": {
34+
"@chainlink/ea-bootstrap": "workspace:*",
35+
"@chainlink/reduce-adapter": "workspace:*",
36+
"decimal.js": "^10.3.1",
37+
"ethers": "^5.4.6",
38+
"tslib": "^2.3.1"
39+
},
40+
"devDependencies": {
3441
"@chainlink/ada-balance-adapter": "workspace:*",
3542
"@chainlink/amberdata-adapter": "workspace:*",
3643
"@chainlink/avalanche-platform-adapter": "workspace:*",
@@ -43,10 +50,10 @@
4350
"@chainlink/chain-reserve-wallet-adapter": "workspace:*",
4451
"@chainlink/coinbase-prime-adapter": "workspace:*",
4552
"@chainlink/cryptoapis-adapter": "workspace:*",
46-
"@chainlink/ea-bootstrap": "workspace:*",
4753
"@chainlink/ea-test-helpers": "workspace:*",
4854
"@chainlink/eth-balance-adapter": "workspace:*",
4955
"@chainlink/eth-beacon-adapter": "workspace:*",
56+
"@chainlink/external-adapter-framework": "2.8.0",
5057
"@chainlink/gemini-adapter": "workspace:*",
5158
"@chainlink/ignition-address-list-adapter": "workspace:*",
5259
"@chainlink/lotus-adapter": "workspace:*",
@@ -55,7 +62,6 @@
5562
"@chainlink/polkadot-balance-adapter": "workspace:*",
5663
"@chainlink/por-address-list-adapter": "workspace:*",
5764
"@chainlink/por-indexer-adapter": "workspace:*",
58-
"@chainlink/reduce-adapter": "workspace:*",
5965
"@chainlink/renvm-address-set-adapter": "workspace:*",
6066
"@chainlink/sochain-adapter": "workspace:*",
6167
"@chainlink/stader-address-list-adapter": "workspace:*",
@@ -65,12 +71,6 @@
6571
"@chainlink/view-function-multi-chain-adapter": "workspace:*",
6672
"@chainlink/wbtc-address-set-adapter": "workspace:*",
6773
"@chainlink/wrapped-adapter": "workspace:*",
68-
"decimal.js": "^10.3.1",
69-
"ethers": "^5.4.6",
70-
"tslib": "^2.3.1"
71-
},
72-
"devDependencies": {
73-
"@chainlink/external-adapter-framework": "2.8.0",
7474
"@types/jest": "^29.5.14",
7575
"@types/node": "22.14.1",
7676
"@types/supertest": "2.0.16",

packages/composites/proof-of-reserves/src/config/index.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { DefaultConfig, Requester, util } from '@chainlink/ea-bootstrap'
22
import {
3-
adaptersV2 as BalanceAdaptersV2,
4-
adaptersV3 as BalanceAdaptersV3,
3+
adapterNamesV2 as BalanceAdaptersV2,
4+
adapterNamesV3 as BalanceAdaptersV3,
55
ETHEREUM_CL_INDEXER,
66
} from '../utils/balance'
77
import {
88
LIST_ADAPTER,
9-
adaptersV2 as ProtocolAdaptersV2,
10-
adaptersV3 as ProtocolAdaptersV3,
9+
adapterNamesV2 as ProtocolAdaptersV2,
10+
adapterNamesV3 as ProtocolAdaptersV3,
1111
} from '../utils/protocol'
1212

1313
export interface Config extends DefaultConfig {
@@ -33,32 +33,32 @@ export const makeOptions = (): Options => {
3333
protocol: [],
3434
indexer: [],
3535
}
36-
for (const a of ProtocolAdaptersV2) {
37-
const url = util.getURL(a.NAME)
36+
for (const a of Object.values(ProtocolAdaptersV2)) {
37+
const url = util.getURL(a)
3838
if (url) {
39-
options.protocol.push(a.NAME)
40-
options.protocol.push(a.NAME.toLowerCase())
39+
options.protocol.push(a)
40+
options.protocol.push(a.toLowerCase())
4141
}
4242
}
43-
for (const a of ProtocolAdaptersV3) {
44-
const url = util.getURL(a.name)
43+
for (const a of Object.values(ProtocolAdaptersV3)) {
44+
const url = util.getURL(a)
4545
if (url) {
46-
options.protocol.push(a.name)
47-
options.protocol.push(a.name.toLowerCase())
46+
options.protocol.push(a)
47+
options.protocol.push(a.toLowerCase())
4848
}
4949
}
50-
for (const a of BalanceAdaptersV2) {
51-
const url = util.getURL(a.NAME)
50+
for (const a of Object.values(BalanceAdaptersV2)) {
51+
const url = util.getURL(a)
5252
if (url) {
53-
options.indexer.push(a.NAME)
54-
options.indexer.push(a.NAME.toLowerCase())
53+
options.indexer.push(a)
54+
options.indexer.push(a.toLowerCase())
5555
}
5656
}
57-
for (const a of BalanceAdaptersV3) {
58-
const url = util.getURL(a.name)
57+
for (const a of Object.values(BalanceAdaptersV3)) {
58+
const url = util.getURL(a)
5959
if (url) {
60-
options.indexer.push(a.name)
61-
options.indexer.push(a.name.toLowerCase())
60+
options.indexer.push(a)
61+
options.indexer.push(a.toLowerCase())
6262
}
6363
}
6464
options.protocol.push(LIST_ADAPTER)

packages/composites/proof-of-reserves/src/endpoint/reserves.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import { Config } from '../config'
44
import { getValidAddresses } from '../utils/addressValidator'
55
import {
66
ETHEREUM_CL_INDEXER,
7-
adaptersV2 as indexerAdaptersV2,
8-
adaptersV3 as indexerAdaptersV3,
7+
adapterNamesV2 as indexerAdaptersV2,
8+
adapterNamesV3 as indexerAdaptersV3,
99
runBalanceAdapter,
1010
} from '../utils/balance'
1111
import {
12-
adaptersV2 as protocolAdaptersV2,
13-
adaptersV3 as protocolAdaptersV3,
12+
adapterNamesV2 as protocolAdaptersV2,
13+
adapterNamesV3 as protocolAdaptersV3,
1414
runProtocolAdapter,
1515
} from '../utils/protocol'
1616
import { runReduceAdapter } from '../utils/reduce'
@@ -40,10 +40,10 @@ const inputParameters: InputParameters<TInputParameters> = {
4040
type: 'string',
4141
description: 'The protocol external adapter to use',
4242
options: [
43-
...protocolAdaptersV2.map(({ NAME }) => NAME.toLowerCase()),
44-
...protocolAdaptersV2.map(({ NAME }) => NAME.toUpperCase()),
45-
...protocolAdaptersV3.map(({ name }) => name.toLowerCase()),
46-
...protocolAdaptersV3.map(({ name }) => name.toUpperCase()),
43+
...Object.values(protocolAdaptersV2).map((name) => name.toLowerCase()),
44+
...Object.values(protocolAdaptersV2).map((name) => name.toUpperCase()),
45+
...Object.values(protocolAdaptersV3).map((name) => name.toLowerCase()),
46+
...Object.values(protocolAdaptersV3).map((name) => name.toUpperCase()),
4747
'coinbase_prime_eth',
4848
'COINBASE_PRIME_ETH',
4949
'list',
@@ -59,10 +59,10 @@ const inputParameters: InputParameters<TInputParameters> = {
5959
type: 'string',
6060
description: 'The indexer external adapter to use',
6161
options: [
62-
...indexerAdaptersV2.map(({ NAME }) => NAME.toLowerCase()),
63-
...indexerAdaptersV2.map(({ NAME }) => NAME.toUpperCase()),
64-
...indexerAdaptersV3.map(({ name }) => name.toLowerCase()),
65-
...indexerAdaptersV3.map(({ name }) => name.toUpperCase()),
62+
...Object.values(indexerAdaptersV2).map((name) => name.toLowerCase()),
63+
...Object.values(indexerAdaptersV2).map((name) => name.toUpperCase()),
64+
...Object.values(indexerAdaptersV3).map((name) => name.toLowerCase()),
65+
...Object.values(indexerAdaptersV3).map((name) => name.toUpperCase()),
6666
ETHEREUM_CL_INDEXER,
6767
],
6868
},

packages/composites/proof-of-reserves/src/utils/balance.ts

Lines changed: 29 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,31 @@
1-
import type {
2-
Account,
3-
AdapterContext,
4-
AdapterResponse,
5-
Config,
6-
AdapterImplementation as v2AdapterImplementation,
7-
} from '@chainlink/ea-bootstrap'
8-
import { Adapter as v3AdapterImplementation } from '@chainlink/external-adapter-framework/adapter'
1+
import type { Account, AdapterContext, AdapterResponse, Config } from '@chainlink/ea-bootstrap'
92
import { callAdapter, makeRequestFactory } from '.'
103

11-
// balance adapters
12-
import * as adaBalance from '@chainlink/ada-balance-adapter'
13-
import * as amberdata from '@chainlink/amberdata-adapter'
14-
import { adapter as avalanchePlatform } from '@chainlink/avalanche-platform-adapter'
15-
import * as bitcoinJsonRpc from '@chainlink/bitcoin-json-rpc-adapter'
16-
import * as blockchainCom from '@chainlink/blockchain.com-adapter'
17-
import * as blockchair from '@chainlink/blockchair-adapter'
18-
import * as btcCom from '@chainlink/btc.com-adapter'
19-
import { adapter as ceffu } from '@chainlink/ceffu-adapter'
20-
import * as cryptoapis from '@chainlink/cryptoapis-adapter'
21-
import * as ethBalance from '@chainlink/eth-balance-adapter'
22-
import { adapter as ethBeacon } from '@chainlink/eth-beacon-adapter'
23-
import { adapter as lotus } from '@chainlink/lotus-adapter'
24-
import { adapter as polkadotBalance } from '@chainlink/polkadot-balance-adapter'
25-
import { adapter as porIndexer } from '@chainlink/por-indexer-adapter'
26-
import * as sochain from '@chainlink/sochain-adapter'
27-
import { adapter as staderBalance } from '@chainlink/stader-balance-adapter'
28-
import { adapter as tokenBalance } from '@chainlink/token-balance-adapter'
29-
import { adapter as viewFunctionMultiChain } from '@chainlink/view-function-multi-chain-adapter'
30-
314
export const ETHEREUM_CL_INDEXER = 'ETHEREUM_CL_INDEXER'
325

33-
// TODO: type
34-
export const adaptersV2: v2AdapterImplementation[] = [
35-
amberdata as unknown as v2AdapterImplementation,
36-
bitcoinJsonRpc as unknown as v2AdapterImplementation,
37-
blockchainCom as unknown as v2AdapterImplementation,
38-
blockchair as unknown as v2AdapterImplementation,
39-
btcCom as unknown as v2AdapterImplementation,
40-
cryptoapis as unknown as v2AdapterImplementation,
41-
sochain as unknown as v2AdapterImplementation,
42-
ethBalance as unknown as v2AdapterImplementation,
43-
adaBalance as unknown as v2AdapterImplementation,
44-
]
6+
export const adapterNamesV2 = {
7+
amberdata: 'AMBERDATA',
8+
bitcoinJsonRpc: 'BITCOIN_JSON_RPC',
9+
blockchainCom: 'BLOCKCHAIN_COM',
10+
blockchair: 'BLOCKCHAIR',
11+
btcCom: 'BTC_COM',
12+
cryptoapis: 'CRYPTOAPIS',
13+
sochain: 'SOCHAIN',
14+
ethBalance: 'ETH_BALANCE',
15+
adaBalance: 'ADA_BALANCE',
16+
}
4517

46-
export const adaptersV3: v3AdapterImplementation[] = [
47-
polkadotBalance,
48-
staderBalance,
49-
ethBeacon,
50-
avalanchePlatform,
51-
lotus,
52-
porIndexer,
53-
tokenBalance,
54-
ceffu,
55-
viewFunctionMultiChain,
56-
]
18+
export const adapterNamesV3 = {
19+
polkadotBalance: 'POLKADOT_BALANCE',
20+
staderBalance: 'STADER_BALANCE',
21+
ethBeacon: 'ETH_BEACON',
22+
avalanchePlatform: 'AVALANCHE_PLATFORM',
23+
lotus: 'LOTUS',
24+
porIndexer: 'POR_INDEXER',
25+
tokenBalance: 'TOKEN_BALANCE',
26+
ceffu: 'CEFFU',
27+
viewFunctionMultiChain: 'VIEW_FUNCTION_MULTI_CHAIN',
28+
}
5729

5830
// Get balances for address set
5931
export const runBalanceAdapter = async (
@@ -69,19 +41,19 @@ export const runBalanceAdapter = async (
6941
const execute = makeRequestFactory(config, indexer, postfix)
7042
let next
7143
switch (indexer) {
72-
case bitcoinJsonRpc.NAME:
44+
case adapterNamesV2.bitcoinJsonRpc:
7345
next = buildLocalBitcoinNodeRequest(input)
7446
break
75-
case porIndexer.name:
47+
case adapterNamesV3.porIndexer:
7648
next = buildPorIndexerRequest(input, confirmations)
7749
break
78-
case tokenBalance.name:
50+
case adapterNamesV3.tokenBalance:
7951
next = buildTokenBalanceRequest(input, confirmations)
8052
break
81-
case ceffu.name:
53+
case adapterNamesV3.ceffu:
8254
next = buildCeffuRequest(input)
8355
break
84-
case ethBeacon.name:
56+
case adapterNamesV3.ethBeacon:
8557
next = {
8658
id: input.jobRunID,
8759
data: {
@@ -94,7 +66,7 @@ export const runBalanceAdapter = async (
9466
},
9567
}
9668
break
97-
case staderBalance.name:
69+
case adapterNamesV3.staderBalance:
9870
next = {
9971
id: input.jobRunID,
10072
data: {

packages/composites/proof-of-reserves/src/utils/protocol.ts

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,26 @@
1-
import {
2-
AdapterContext,
3-
AdapterResponse,
4-
Config,
5-
Requester,
6-
AdapterImplementation as v2AdapterImplementation,
7-
} from '@chainlink/ea-bootstrap'
1+
import { AdapterContext, AdapterResponse, Config, Requester } from '@chainlink/ea-bootstrap'
82
import { callAdapter, makeRequestFactory } from '.'
93

10-
// protocol adapters
11-
import * as celsiusAddressList from '@chainlink/celsius-address-list-adapter'
12-
import * as chainReserveWallets from '@chainlink/chain-reserve-wallet-adapter'
13-
import { adapter as coinbasePrime } from '@chainlink/coinbase-prime-adapter'
14-
import { Adapter as v3AdapterImplementation } from '@chainlink/external-adapter-framework/adapter'
15-
import { adapter as gemini } from '@chainlink/gemini-adapter'
16-
import { adapter as ignitionAddressList } from '@chainlink/ignition-address-list-adapter'
17-
import { adapter as moonbeamAddressList } from '@chainlink/moonbeam-address-list-adapter'
18-
import { adapter as multiAddressList } from '@chainlink/multi-address-list-adapter'
19-
import { adapter as porAddressList } from '@chainlink/por-address-list-adapter'
20-
import * as renVM from '@chainlink/renvm-address-set-adapter'
21-
import { adapter as staderList } from '@chainlink/stader-address-list-adapter'
22-
import * as swellList from '@chainlink/swell-address-list-adapter'
23-
import { adapter as wBTC } from '@chainlink/wbtc-address-set-adapter'
24-
import * as wrapped from '@chainlink/wrapped-adapter'
25-
264
export const LIST_ADAPTER = 'LIST'
275

28-
// TODO: consistent package exports
29-
export const adaptersV2: v2AdapterImplementation[] = [
30-
renVM as unknown as v2AdapterImplementation,
31-
celsiusAddressList as unknown as v2AdapterImplementation,
32-
chainReserveWallets as unknown as v2AdapterImplementation,
33-
wrapped as unknown as v2AdapterImplementation,
34-
swellList as unknown as v2AdapterImplementation,
35-
]
6+
export const adapterNamesV2 = {
7+
renVM: 'RENVM',
8+
celsiusAddressList: 'CELSIUS_ADDRESS_LIST',
9+
chainReserveWallets: 'CHAIN_RESERVE_WALLET',
10+
wrapped: 'WRAPPED',
11+
swellList: 'SWELL_ADDRESS_LIST',
12+
}
3613

37-
export const adaptersV3: v3AdapterImplementation[] = [
38-
moonbeamAddressList,
39-
staderList,
40-
wBTC,
41-
gemini,
42-
porAddressList,
43-
coinbasePrime,
44-
multiAddressList,
45-
ignitionAddressList,
46-
]
14+
export const adapterNamesV3 = {
15+
moonbeamAddressList: 'MOONBEAM_ADDRESS_LIST',
16+
staderList: 'STADER_ADDRESS_LIST',
17+
wBTC: 'WBTC',
18+
gemini: 'GEMINI',
19+
porAddressList: 'POR_ADDRESS_LIST',
20+
coinbasePrime: 'COINBASE_PRIME',
21+
multiAddressList: 'MULTI_ADDRESS_LIST',
22+
ignitionAddressList: 'IGNITION_ADDRESS_LIST',
23+
}
4724

4825
type AddressData = ({ token: string; chainId: string; network: string } | AddressList) & {
4926
endpoint: string

0 commit comments

Comments
 (0)