Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
- Add `Coinbase.configure` method to allow for configuration of the SDK and marked constructor as deprecated.
- Return correlation ID from APIError response
- Add optional fields to `CreateContractInvocationOptions` to set amount for payable contract method invocations
- Add a `StakingRewardFormat` enum to allow for specifying the format in which staking rewards should be returned.

## [0.4.0] - 2024-09-06

Expand Down
4 changes: 2 additions & 2 deletions src/coinbase/address.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import { HistoricalBalance } from "./historical_balance";
import {
Amount,
StakeOptionsMode,
StakingRewardFormat,
ListHistoricalBalancesResult,
ListHistoricalBalancesOptions,
ListTransactionsOptions,
ListTransactionsResult,
} from "./types";
import { formatDate, getWeekBackDate } from "./utils";
import { StakingRewardFormat } from "../client";
import { StakingReward } from "./staking_reward";
import { StakingBalance } from "./staking_balance";
import { Transaction } from "./transaction";
Expand Down Expand Up @@ -201,7 +201,7 @@ export class Address {
assetId: string,
startTime = getWeekBackDate(new Date()),
endTime = formatDate(new Date()),
format: StakingRewardFormat = StakingRewardFormat.Usd,
format: StakingRewardFormat = StakingRewardFormat.USD,
): Promise<StakingReward[]> {
return StakingReward.list(
Coinbase.normalizeNetwork(this.getNetworkId()),
Expand Down
10 changes: 5 additions & 5 deletions src/coinbase/staking_reward.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { StakingRewardFormat, StakingReward as StakingRewardModel } from "../client";
import { StakingReward as StakingRewardModel } from "../client";
import Decimal from "decimal.js";
import { Coinbase } from "./coinbase";
import { Asset } from "./asset";
import { Amount } from "./types";
import { Amount, StakingRewardFormat } from "./types";

/**
* A representation of a staking reward earned on a network for a given asset.
*/
export class StakingReward {
private model: StakingRewardModel;
private asset: Asset;
private format: StakingRewardFormat;
private readonly format: StakingRewardFormat;

/**
* Creates the StakingReward object.
Expand Down Expand Up @@ -42,7 +42,7 @@ export class StakingReward {
addressIds: Array<string>,
startTime: string,
endTime: string,
format: StakingRewardFormat = StakingRewardFormat.Usd,
format: StakingRewardFormat = StakingRewardFormat.USD,
): Promise<StakingReward[]> {
const stakingRewards: StakingReward[] = [];
const queue: string[] = [""];
Expand Down Expand Up @@ -85,7 +85,7 @@ export class StakingReward {
* @returns The amount.
*/
public amount(): Amount {
if (this.format == StakingRewardFormat.Usd) {
if (this.format == StakingRewardFormat.USD) {
return new Decimal(this.model.amount).div(new Decimal("100"));
}
return this.asset.fromAtomicAmount(new Decimal(this.model.amount)).toNumber();
Expand Down
9 changes: 9 additions & 0 deletions src/coinbase/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,15 @@ export enum ValidatorStatus {
REAPED = "reaped",
}

/**
* Staking reward format type definition.
* Represents the format in which staking rewards can be queried.
*/
export enum StakingRewardFormat {
USD = "usd",
NATIVE = "native",
}

/**
* Payload Signature status type definition.
*/
Expand Down
5 changes: 3 additions & 2 deletions src/coinbase/wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Decimal from "decimal.js";
import { ethers } from "ethers";
import * as fs from "fs";
import * as secp256k1 from "secp256k1";
import { Address as AddressModel, Wallet as WalletModel, StakingRewardFormat } from "../client";
import { Address as AddressModel, Wallet as WalletModel } from "../client";
import { Address } from "./address";
import { WalletAddress } from "./address/wallet_address";
import { Asset } from "./asset";
Expand All @@ -17,6 +17,7 @@ import { Trade } from "./trade";
import { Transfer } from "./transfer";
import {
Amount,
StakingRewardFormat,
CreateContractInvocationOptions,
CreateTransferOptions,
CreateTradeOptions,
Expand Down Expand Up @@ -380,7 +381,7 @@ export class Wallet {
assetId: string,
startTime = getWeekBackDate(new Date()),
endTime = formatDate(new Date()),
format: StakingRewardFormat = StakingRewardFormat.Usd,
format: StakingRewardFormat = StakingRewardFormat.USD,
): Promise<StakingReward[]> {
return (await this.getDefaultAddress()).stakingRewards(assetId, startTime, endTime, format);
}
Expand Down
37 changes: 17 additions & 20 deletions src/tests/staking_reward_test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import {
FetchStakingRewards200Response,
StakingRewardFormat,
StakingRewardStateEnum,
} from "../client";
import { FetchStakingRewards200Response, StakingRewardStateEnum } from "../client";
import { Coinbase } from "../coinbase/coinbase";
import {
assetsApiMock,
Expand All @@ -12,6 +8,7 @@ import {
newAddressModel,
stakeApiMock,
} from "./utils";
import { StakingRewardFormat } from "../coinbase/types";
import { StakingReward } from "../coinbase/staking_reward";
import { ExternalAddress } from "../coinbase/address/external_address";
import { Asset } from "../coinbase/asset";
Expand All @@ -35,7 +32,7 @@ describe("StakingReward", () => {
date: "2024-05-01",
amount: "361",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: "usd",
usd_value: {
amount: "361",
conversion_price: "3000",
Expand All @@ -47,7 +44,7 @@ describe("StakingReward", () => {
date: "2024-05-02",
amount: "203",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: "usd",
usd_value: {
amount: "203",
conversion_price: "3000",
Expand All @@ -59,7 +56,7 @@ describe("StakingReward", () => {
date: "2024-05-03",
amount: "226",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: "usd",
usd_value: {
amount: "226",
conversion_price: "3000",
Expand Down Expand Up @@ -100,7 +97,7 @@ describe("StakingReward", () => {
address_ids: [address.getId()],
start_time: startTime,
end_time: endTime,
format: StakingRewardFormat.Usd,
format: StakingRewardFormat.USD,
},
100,
undefined,
Expand Down Expand Up @@ -130,7 +127,7 @@ describe("StakingReward", () => {
address_ids: [address.getId()],
start_time: startTime,
end_time: endTime,
format: StakingRewardFormat.Usd,
format: StakingRewardFormat.USD,
},
100,
undefined,
Expand All @@ -146,15 +143,15 @@ describe("StakingReward", () => {
date: "2024-05-03",
amount: "226",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: StakingRewardFormat.USD,
usd_value: {
amount: "226",
conversion_price: "3000",
conversion_time: "2024-05-03T00:00:00Z",
},
},
asset,
StakingRewardFormat.Usd,
StakingRewardFormat.USD,
);

const amount = reward.amount();
Expand All @@ -170,15 +167,15 @@ describe("StakingReward", () => {
date: "2024-05-03",
amount: "726030823305604",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Native,
format: StakingRewardFormat.NATIVE,
usd_value: {
amount: "179",
conversion_price: "2461.63",
conversion_time: "2024-05-02T00:00:00Z",
},
},
asset,
StakingRewardFormat.Native,
StakingRewardFormat.NATIVE,
);

const amount = reward.amount();
Expand All @@ -194,15 +191,15 @@ describe("StakingReward", () => {
date: "2024-05-03",
amount: "226",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: StakingRewardFormat.USD,
usd_value: {
amount: "226",
conversion_price: "3000",
conversion_time: "2024-05-03T00:00:00Z",
},
},
asset,
StakingRewardFormat.Usd,
StakingRewardFormat.USD,
);

const date = reward.date();
Expand All @@ -220,15 +217,15 @@ describe("StakingReward", () => {
date: "2024-05-03",
amount: "226",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: StakingRewardFormat.USD,
usd_value: {
amount: "226",
conversion_price: "3000",
conversion_time: "2024-05-03T00:00:00Z",
},
},
asset,
StakingRewardFormat.Usd,
StakingRewardFormat.USD,
);

const rewardStr = reward.toString();
Expand All @@ -246,15 +243,15 @@ describe("StakingReward", () => {
date: "2024-05-03",
amount: "226",
state: StakingRewardStateEnum.Pending,
format: StakingRewardFormat.Usd,
format: StakingRewardFormat.USD,
usd_value: {
amount: "226",
conversion_price: "3000",
conversion_time: "2024-05-03T00:00:00Z",
},
},
asset,
StakingRewardFormat.Usd,
StakingRewardFormat.USD,
);

const addressId = reward.addressId();
Expand Down