This repository was archived by the owner on Mar 5, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5.1k
Expand file tree
/
Copy pathindex.ts
More file actions
58 lines (47 loc) · 1.74 KB
/
index.ts
File metadata and controls
58 lines (47 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
This file is part of web3.js.
web3.js is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
web3.js is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
*/
import { ContractAbi } from 'web3-eth-abi';
import Contract from 'web3-eth-contract';
import { Web3PluginBase } from 'web3-core';
import { Address, Web3APISpec } from 'web3-types';
// @ts-expect-error 'Web3' is declared but its value is never read.
import { Web3 } from 'web3';
import { AggregatorV3InterfaceABI } from './aggregator_v3_interface_abi';
interface Price {
roundId: string;
answer: string;
startedAt: string;
updatedAt: string;
answeredInRound: string;
}
interface ChainlinkPluginAPI extends Web3APISpec {
getPrice: () => Promise<Price>;
}
declare module 'web3' {
interface Web3 {
chainlink: ChainlinkPluginAPI;
}
}
export class ChainlinkPlugin extends Web3PluginBase<ChainlinkPluginAPI> {
public pluginNamespace = 'chainlink';
protected readonly _contract: Contract<typeof AggregatorV3InterfaceABI>;
public constructor(abi: ContractAbi, address: Address) {
super();
this._contract = new Contract(abi, address);
}
public async getPrice() {
if (this._contract.currentProvider === undefined) this._contract.link(this);
return this._contract.methods.latestRoundData().call();
}
}