Skip to content

Commit

Permalink
fix(provider): rename rewardDelegationRate to stakerReward (#1017)
Browse files Browse the repository at this point in the history
* fix(provider)!: rename rewardDelegationRate to stakerReward

* Apply automatic changes

* add migration

* Apply automatic changes

---------

Co-authored-by: folex <[email protected]>
Co-authored-by: Artsiom Shamsutdzinau <[email protected]>
Co-authored-by: shamsartem <[email protected]>
  • Loading branch information
4 people committed Sep 3, 2024
1 parent 38a281b commit efc8acc
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 34 deletions.
10 changes: 5 additions & 5 deletions cli/docs/configs/provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ Defines a capacity commitment

#### Properties

| Property | Type | Required | Description |
|------------------------|--------|----------|-------------------------------------------------------------------------------|
| `duration` | string | **Yes** | Duration of the commitment in human-readable format. Example: 1 months 1 days |
| `rewardDelegationRate` | number | **Yes** | Reward delegation rate in percent |
| `delegator` | string | No | Delegator address |
| Property | Type | Required | Description |
|----------------|--------|----------|-------------------------------------------------------------------------------|
| `duration` | string | **Yes** | Duration of the commitment in human-readable format. Example: 1 months 1 days |
| `stakerReward` | number | **Yes** | Staker reward in percent |
| `delegator` | string | No | Delegator address |

## ccp

Expand Down
18 changes: 8 additions & 10 deletions cli/src/lib/chain/commitment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,8 +257,8 @@ export async function createCommitments(flags: {
};
}

const ccRewardDelegationRate = Math.floor(
(capacityCommitment.rewardDelegationRate / HUNDRED_PERCENT) *
const ccStakerReward = Math.floor(
(capacityCommitment.stakerReward / HUNDRED_PERCENT) *
Number(precision),
);

Expand All @@ -268,7 +268,7 @@ export async function createCommitments(flags: {
peerIdUint8Arr,
durationEpoch,
ccDelegator ?? ethers.ZeroAddress,
ccRewardDelegationRate,
ccStakerReward,
),
};
}),
Expand Down Expand Up @@ -647,7 +647,7 @@ export async function getCommitmentsInfo(flags: CCFlags) {
startDate: ccStartDate,
endEpoch: optBigIntToStr(commitment.endEpoch),
endDate: ccEndDate,
rewardDelegatorRate: await rewardDelegationRateToString(
stakerReward: await stakerRewardToString(
commitment.rewardDelegatorRate,
),
delegator: commitment.delegator,
Expand All @@ -665,18 +665,16 @@ function optBigIntToStr(value: bigint | undefined) {
return value === undefined ? undefined : bigintToStr(value);
}

async function rewardDelegationRateToString(
rewardDelegatorRate: bigint | undefined,
) {
if (rewardDelegatorRate === undefined) {
async function stakerRewardToString(stakerReward: bigint | undefined) {
if (stakerReward === undefined) {
return undefined;
}

const { readonlyDealClient } = await getReadonlyDealClient();
const core = readonlyDealClient.getCore();
const precision = await core.precision();
return `${numToStr(
(Number(rewardDelegatorRate) * HUNDRED_PERCENT) / Number(precision),
(Number(stakerReward) * HUNDRED_PERCENT) / Number(precision),
)}%`;
}

Expand Down Expand Up @@ -721,7 +719,7 @@ export async function getCommitmentInfoString(
"End epoch": ccInfo.endEpoch,
"Start date": ccInfo.startDate?.toLocaleString(),
"End date": ccInfo.endDate?.toLocaleString(),
"Reward delegator rate": ccInfo.rewardDelegatorRate,
"Staker reward %": ccInfo.stakerReward,
Delegator:
ccInfo.delegator === ethers.ZeroAddress
? "Anyone can activate capacity commitment"
Expand Down
110 changes: 94 additions & 16 deletions cli/src/lib/configs/project/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,13 @@ import {
import { initNewEnvConfig } from "./env.js";
import { initNewProviderSecretsConfig } from "./providerSecrets.js";

export type CapacityCommitment = {
type CapacityCommitmentV0 = {
duration: string;
rewardDelegationRate: number;
delegator?: string;
};

const capacityCommitmentSchema = {
const capacityCommitmentSchemaV0 = {
type: "object",
description: "Defines a capacity commitment",
required: ["duration", "rewardDelegationRate"],
Expand All @@ -130,7 +130,40 @@ const capacityCommitmentSchema = {
default: DEFAULT_CC_REWARD_DELEGATION_RATE,
},
},
} as const satisfies JSONSchemaType<CapacityCommitment>;
} as const satisfies JSONSchemaType<CapacityCommitmentV0>;

type CapacityCommitmentV1 = Omit<
CapacityCommitmentV0,
"rewardDelegationRate"
> & {
stakerReward: number;
};

const capacityCommitmentSchemaV1 = {
type: "object",
description: "Defines a capacity commitment",
required: ["duration", "stakerReward"],
additionalProperties: false,
properties: {
duration: {
type: "string",
default: DEFAULT_CC_DURATION,
description: `Duration of the commitment ${DURATION_EXAMPLE}`,
},
delegator: {
type: "string",
description: "Delegator address",
nullable: true,
},
stakerReward: {
type: "number",
minimum: 0,
maximum: 100,
description: "Staker reward in percent",
default: DEFAULT_CC_REWARD_DELEGATION_RATE,
},
},
} as const satisfies JSONSchemaType<CapacityCommitmentV1>;

export type OfferV0 = {
minPricePerWorkerEpoch: string;
Expand Down Expand Up @@ -959,7 +992,7 @@ type ConfigV0 = {
providerName: string;
offers: Record<string, OfferV0>;
computePeers: Record<string, ComputePeerV0>;
capacityCommitments: Record<string, CapacityCommitment>;
capacityCommitments: Record<string, CapacityCommitmentV0>;
nox?: NoxConfigYAMLV0;
version: 0;
};
Expand Down Expand Up @@ -1051,9 +1084,9 @@ const configSchemaV0Obj = {
description:
"A map with nox names as keys and capacity commitments as values",
type: "object",
additionalProperties: capacityCommitmentSchema,
additionalProperties: capacityCommitmentSchemaV0,
properties: {
noxName: capacityCommitmentSchema,
noxName: capacityCommitmentSchemaV0,
},
required: [],
},
Expand Down Expand Up @@ -1133,9 +1166,9 @@ const configSchemaV1Obj = {
description:
"A map with nox names as keys and capacity commitments as values",
type: "object",
additionalProperties: capacityCommitmentSchema,
additionalProperties: capacityCommitmentSchemaV0,
properties: {
noxName: capacityCommitmentSchema,
noxName: capacityCommitmentSchemaV0,
},
required: [],
},
Expand Down Expand Up @@ -1199,7 +1232,7 @@ const offerSchemaV1 = {
required: ["minPricePerCuPerEpoch", "computePeers"],
} as const satisfies JSONSchemaType<OfferV1>;

const configSchemaV2 = {
const configSchemaV2Obj = {
type: "object",
additionalProperties: false,
properties: {
Expand Down Expand Up @@ -1233,9 +1266,9 @@ const configSchemaV2 = {
description:
"A map with nox names as keys and capacity commitments as values",
type: "object",
additionalProperties: capacityCommitmentSchema,
additionalProperties: capacityCommitmentSchemaV0,
properties: {
noxName: capacityCommitmentSchema,
noxName: capacityCommitmentSchemaV0,
},
required: [],
},
Expand All @@ -1250,8 +1283,32 @@ const configSchemaV2 = {
],
} as const satisfies JSONSchemaType<ConfigV2>;

const configSchemaV2: JSONSchemaType<ConfigV2> = configSchemaV2Obj;

type ConfigV3 = Omit<ConfigV2, "version" | "capacityCommitments"> & {
version: 3;
capacityCommitments: Record<string, CapacityCommitmentV1>;
};

const configSchemaV3Obj = {
...configSchemaV2Obj,
properties: {
...configSchemaV2Obj.properties,
version: { type: "integer", const: 3, description: "Config version" },
capacityCommitments: {
...configSchemaV2Obj.properties.capacityCommitments,
additionalProperties: capacityCommitmentSchemaV1,
properties: {
noxName: capacityCommitmentSchemaV1,
},
},
},
} as const satisfies JSONSchemaType<ConfigV3>;

const configSchemaV3: JSONSchemaType<ConfigV3> = configSchemaV3Obj;

const latestConfigSchemaObj =
configSchemaV2 satisfies JSONSchemaType<LatestConfig>;
configSchemaV3Obj satisfies JSONSchemaType<LatestConfig>;

const latestConfigSchema: JSONSchemaType<LatestConfig> = {
$id: `${TOP_LEVEL_SCHEMA_ID}/${PROVIDER_CONFIG_FULL_FILE_NAME}`,
Expand Down Expand Up @@ -1301,7 +1358,7 @@ function getDefault(args: Omit<ProviderConfigArgs, "name">) {
noxName,
{
duration: DEFAULT_CC_DURATION,
rewardDelegationRate: DEFAULT_CC_REWARD_DELEGATION_RATE,
stakerReward: DEFAULT_CC_REWARD_DELEGATION_RATE,
},
] as const;
}),
Expand Down Expand Up @@ -1333,6 +1390,7 @@ ${yamlDiffPatch("", {}, userProvidedConfig)}

const validateConfigSchemaV0 = ajv.compile(configSchemaV0);
const validateConfigSchemaV1 = ajv.compile(configSchemaV1);
const validateConfigSchemaV2 = ajv.compile(configSchemaV2);

const migrations: Migrations<Config> = [
async (config: Config): Promise<ConfigV1> => {
Expand Down Expand Up @@ -1382,6 +1440,26 @@ const migrations: Migrations<Config> = [
}),
};
},
async (config: Config): Promise<ConfigV3> => {
if (!validateConfigSchemaV2(config)) {
throw new Error(
`Migration error. Errors: ${await validationErrorToString(
validateConfigSchemaV0.errors,
)}`,
);
}

return {
...config,
version: 3,
capacityCommitments: mapValues(
config.capacityCommitments,
({ rewardDelegationRate: stakerReward, ...cc }) => {
return { ...cc, stakerReward };
},
),
};
},
];

function migrateComputePeersV0ToV1(
Expand Down Expand Up @@ -1426,8 +1504,8 @@ function migrateChainConfigV0ToV1(
);
}

type Config = ConfigV0 | ConfigV1 | ConfigV2;
type LatestConfig = ConfigV2;
type Config = ConfigV0 | ConfigV1 | ConfigV2 | ConfigV3;
type LatestConfig = ConfigV3;
type LatestCCPConfigYAML = CCPConfigYAMLV1;
type LatestNoxConfigYAML = NoxConfigYAMLV1;
export type ProviderConfig = InitializedConfig<LatestConfig>;
Expand Down Expand Up @@ -1710,7 +1788,7 @@ function validateMissingComputePeers(config: LatestConfig): ValidationResult {
}

const initConfigOptions = {
allSchemas: [configSchemaV0, configSchemaV1, configSchemaV2],
allSchemas: [configSchemaV0, configSchemaV1, configSchemaV2, configSchemaV3],
latestSchema: latestConfigSchema,
migrations,
name: PROVIDER_CONFIG_FILE_NAME,
Expand Down
6 changes: 3 additions & 3 deletions cli/src/lib/generateUserProviderConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,16 +105,16 @@ export async function addComputePeers(
validate: validateAddress,
});

const capacityCommitmentRewardDelegationRate = await input({
message: `Enter capacity commitment reward delegation rate (in %)`,
const capacityCommitmentStakerReward = await input({
message: `Enter capacity commitment staker reward (in %)`,
default: numToStr(DEFAULT_CC_REWARD_DELEGATION_RATE),
validate: validatePercent,
});

userProvidedConfig.capacityCommitments[name] = {
duration: capacityCommitmentDuration,
delegator: capacityCommitmentDelegator,
rewardDelegationRate: Number(capacityCommitmentRewardDelegationRate),
stakerReward: Number(capacityCommitmentStakerReward),
};

userProvidedConfig.computePeers[name] = {
Expand Down

0 comments on commit efc8acc

Please sign in to comment.