Skip to content

Commit

Permalink
Add getDeposits to staking module
Browse files Browse the repository at this point in the history
Add function that returns all deposits - `queued`, `initialized` and
`finalized` for a given depositor. Depositor address is created besed on
the bitcoin address returned by `BitcoinProvider`.
  • Loading branch information
r-czajkowski committed May 15, 2024
1 parent d8d05c2 commit f3ac44b
Showing 1 changed file with 48 additions and 0 deletions.
48 changes: 48 additions & 0 deletions sdk/src/modules/staking/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { StakeInitialization } from "./stake-initialization"
import { fromSatoshi, toSatoshi } from "../../lib/utils"
import Tbtc from "../tbtc"
import { BitcoinProvider } from "../../lib/bitcoin/providers"
import AcreSubgraphApi from "../../lib/api/AcreSubgraphApi"
import { DepositStatus } from "../../lib/api/TbtcApi"

export { DepositReceipt } from "../tbtc"

Expand Down Expand Up @@ -41,16 +43,20 @@ class StakingModule {
*/
readonly #orangeKit: OrangeKitSdk

readonly #acreSubgraphApi: AcreSubgraphApi

constructor(
_contracts: AcreContracts,
_bitcoinProvider: BitcoinProvider,
_orangeKit: OrangeKitSdk,
_tbtc: Tbtc,
acreSubgraphApi: AcreSubgraphApi,
) {
this.#contracts = _contracts
this.#bitcoinProvider = _bitcoinProvider
this.#tbtc = _tbtc
this.#orangeKit = _orangeKit
this.#acreSubgraphApi = acreSubgraphApi
}

/**
Expand Down Expand Up @@ -156,6 +162,48 @@ class StakingModule {
const value = await this.#contracts.bitcoinDepositor.minDepositAmount()
return toSatoshi(value)
}

async getDeposits(): Promise<
{
id: string
txHash: string
amount: bigint
status: DepositStatus
}[]
> {
const bitcoinAddress = await this.#bitcoinProvider.getAddress()

const depositOwnerEvmAddress = EthereumAddress.from(
await this.#orangeKit.predictAddress(bitcoinAddress),
)

const subgraphData = await this.#acreSubgraphApi.getDepositsByOwner(
depositOwnerEvmAddress,
)

const initializedOrFinalizedDepositsMap = new Map(
subgraphData.map((data) => [data.depositKey, data]),
)

const tbtcData = await this.#tbtc.tbtcApi.getDepositsByOwner(
depositOwnerEvmAddress,
)

return tbtcData.map((deposit) => {
const depositFromSubgraph = initializedOrFinalizedDepositsMap.get(
deposit.depositKey,
)

const amount = depositFromSubgraph?.amount ?? deposit.initialAmount

return {
id: deposit.depositKey,
txHash: deposit.txHash,
amount,
status: deposit.status,
}
})
}
}

export { StakingModule, StakeInitialization }

0 comments on commit f3ac44b

Please sign in to comment.