Skip to content

Commit ae66201

Browse files
committed
support provider management address
1 parent bdc8ee4 commit ae66201

File tree

9 files changed

+81
-31
lines changed

9 files changed

+81
-31
lines changed

packages/cli/package/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"whatwg-url": "^14.0.0"
5757
},
5858
"dependencies": {
59-
"@fluencelabs/deal-ts-clients": "0.24.2",
59+
"@fluencelabs/deal-ts-clients": "0.24.3-feat-beam-support-f0edb5b-8391-1.0",
6060
"@kubernetes/client-node": "github:fluencelabs/kubernetes-client-javascript#e72ee00a52fec4eb4a8327632895d888ee504f4d",
6161
"@libp2p/crypto": "4.0.1",
6262
"@libp2p/peer-id-factory": "4.0.5",

packages/cli/package/src/commands/provider/offer-access-address.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ import {
2020
filterOffersFoundOnChain,
2121
resolveSingleOfferFromProviderConfig,
2222
} from "../../lib/chain/offer/offer.js";
23-
import { assertProviderIsRegistered } from "../../lib/chain/providerInfo.js";
23+
import {
24+
getOfferOwner,
25+
makeProviderAddressValidator
26+
} from "../../lib/chain/providerInfo.js";
2427
import { commandObj } from "../../lib/commandObj.js";
2528
import {
2629
CHAIN_FLAGS,
@@ -82,8 +85,10 @@ export default class OfferAccessAddress extends BaseCommand<
8285

8386
const { contracts } = await getContracts();
8487

88+
const providerAddress = await getOfferOwner(chainOffer.offerId);
89+
8590
await sign({
86-
validateAddress: assertProviderIsRegistered,
91+
validateAddress: makeProviderAddressValidator(providerAddress),
8792
title: `Setting cluster address ${address} for offer ${chainOffer.offerName} (${chainOffer.offerId})`,
8893
method: contracts.diamond.setClusterKey,
8994
args: [chainOffer.offerId, address],

packages/cli/package/src/commands/provider/offer-create.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import { BaseCommand } from "../../baseCommand.js";
1919
import { createOffers } from "../../lib/chain/offer/offer.js";
20-
import { OFFER_FLAG, CHAIN_FLAGS } from "../../lib/const.js";
20+
import { OFFER_FLAG, CHAIN_FLAGS, PROVIDER_ADDRESS_FLAG } from "../../lib/const.js";
2121
import { aliasesText } from "../../lib/helpers/aliasesText.js";
2222
import { initCli } from "../../lib/lifeCycle.js";
2323

@@ -27,10 +27,11 @@ export default class CreateOffer extends BaseCommand<typeof CreateOffer> {
2727
static override flags = {
2828
...CHAIN_FLAGS,
2929
...OFFER_FLAG,
30+
...PROVIDER_ADDRESS_FLAG
3031
};
3132

3233
async run(): Promise<void> {
3334
const { flags } = await initCli(this, await this.parse(CreateOffer));
34-
await createOffers(flags);
35+
await createOffers(flags, flags.provider);
3536
}
3637
}

packages/cli/package/src/lib/chain/offer/offer.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,12 @@ import {
4545
CLI_NAME,
4646
OFFER_FLAG_NAME,
4747
OFFER_IDS_FLAG_NAME,
48+
PROVIDER_ADDRESS_FLAG_NAME,
4849
PROVIDER_ARTIFACTS_CONFIG_FULL_FILE_NAME,
4950
PROVIDER_CONFIG_FULL_FILE_NAME,
5051
SINGLE_OFFER_FLAG_NAME,
5152
SINGLE_OFFER_ID_FLAG_NAME,
52-
VCPU_PER_CU,
53+
VCPU_PER_CU
5354
} from "../../const.js";
5455
import {
5556
getContracts,
@@ -76,7 +77,7 @@ import {
7677
resourceSupplyFromConfigToChain,
7778
} from "../conversions.js";
7879
import { ptFormatWithSymbol } from "../currencies.js";
79-
import { assertProviderIsRegistered } from "../providerInfo.js";
80+
import { makeProviderAddressValidator } from "../providerInfo.js";
8081

8182
const MARKET_OFFER_REGISTERED_EVENT_NAME = "MarketOfferRegistered";
8283
const OFFER_ID_PROPERTY = "offerId";
@@ -87,12 +88,16 @@ export type OffersArgs = {
8788
force?: boolean | undefined;
8889
};
8990

91+
export type CreateOffersArgs = OffersArgs & {
92+
[PROVIDER_ADDRESS_FLAG_NAME]?: string | undefined;
93+
};
94+
9095
export type SingleOffersArgs = {
9196
[SINGLE_OFFER_FLAG_NAME]?: string | undefined;
9297
[SINGLE_OFFER_ID_FLAG_NAME]?: string | undefined;
9398
};
9499

95-
export async function createOffers(flags: OffersArgs) {
100+
export async function createOffers(flags: CreateOffersArgs, maybeProviderAddress?: string) {
96101
const allOffers = await resolveOffersFromProviderConfig(flags);
97102
const providerConfig = await ensureReadonlyProviderConfig();
98103
const providerConfigPath = providerConfig.$getPath();
@@ -164,6 +169,8 @@ export async function createOffers(flags: OffersArgs) {
164169
let addedCPs;
165170
let offerRegisterTxReceipt;
166171

172+
const signerAddress = await getSignerAddress();
173+
const providerAddress = maybeProviderAddress ?? signerAddress;
167174
try {
168175
({
169176
sliceIndex: registeredCUsCount,
@@ -174,17 +181,18 @@ export async function createOffers(flags: OffersArgs) {
174181
sliceIndex: allCUs.length,
175182
getArgs(computePeersToRegister) {
176183
return [
184+
providerAddress,
177185
contracts.deployment.usdc,
178186
resourcePricesArray,
179187
setCPUSupplyForCP(computePeersToRegister),
180-
dataCenter.id,
188+
dataCenter.id
181189
];
182190
},
183191
getTitle() {
184192
return `Register offer: ${offerName}`;
185193
},
186-
method: contracts.diamond.registerMarketOfferV2,
187-
validateAddress: assertProviderIsRegistered,
194+
method: contracts.diamond.registerMarketOfferV2Delegated,
195+
validateAddress: makeProviderAddressValidator(providerAddress),
188196
}));
189197
} catch (e) {
190198
pushOfferRegisterResult({
@@ -221,7 +229,6 @@ export async function createOffers(flags: OffersArgs) {
221229
continue;
222230
}
223231

224-
const providerAddress = await getSignerAddress();
225232
const offerPerEnv = providerArtifactsConfig.offers[fluenceEnv] ?? {};
226233
offerPerEnv[offerName] = { id: offerId, providerAddress };
227234
providerArtifactsConfig.offers[fluenceEnv] = offerPerEnv;

packages/cli/package/src/lib/chain/offer/updateOffers.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
resourceSupplyFromChainToConfig,
3636
} from "../conversions.js";
3737
import { ptFormatWithSymbol } from "../currencies.js";
38-
import { assertProviderIsRegistered } from "../providerInfo.js";
38+
import { getOfferOwner, makeProviderAddressValidator } from "../providerInfo.js";
3939

4040
import {
4141
type OffersArgs,
@@ -116,6 +116,12 @@ export async function updateOffers(flags: OffersArgs) {
116116
return;
117117
}
118118

119+
let providerAddress = undefined;
120+
121+
if (offersFoundOnChain[0] !== undefined) {
122+
providerAddress = await getOfferOwner(offersFoundOnChain[0].offerId);
123+
}
124+
119125
if (firstUpdateOffersTx !== undefined) {
120126
await signBatch({
121127
title: `Updating offers:\n\n${populatedOffersTxs
@@ -124,7 +130,7 @@ export async function updateOffers(flags: OffersArgs) {
124130
})
125131
.join("\n")}`,
126132
populatedTxs: [firstUpdateOffersTx, ...restUpdateOffersTxs],
127-
validateAddress: assertProviderIsRegistered,
133+
validateAddress: makeProviderAddressValidator(providerAddress),
128134
});
129135
}
130136

@@ -190,14 +196,20 @@ export async function removeOffers(flags: OffersArgs) {
190196
return;
191197
}
192198

199+
let providerAddress = undefined;
200+
201+
if (offersFoundOnChain[0] !== undefined) {
202+
providerAddress = await getOfferOwner(offersFoundOnChain[0].offerId);
203+
}
204+
193205
await signBatch({
194206
title: `Removing offers:\n\n${populatedTxs
195207
.map(({ offerName, offerId }) => {
196208
return `${offerName} (${offerId})`;
197209
})
198210
.join("\n")}`,
199211
populatedTxs: [firstRemoveOffersTx, ...restRemoveOffersTxs],
200-
validateAddress: assertProviderIsRegistered,
212+
validateAddress: makeProviderAddressValidator(providerAddress),
201213
});
202214

203215
const providerArtifactsConfig = await initNewProviderArtifactsConfig();

packages/cli/package/src/lib/chain/providerInfo.ts

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,36 @@ Provider address: ${signerAddress}
110110
async function getProviderInfoByAddress(address: string) {
111111
const { contracts } = await getContracts();
112112
const { name } = await contracts.diamond.getProviderInfo(address);
113-
return { name: name === "" ? null : name, address };
113+
const managementAddress = await contracts.diamond.getProviderManagementAddress(address);
114+
return { name: name === "" ? null : name, address, managementAddress};
114115
}
115116

116117
export async function getProviderInfo(address?: string) {
117118
return getProviderInfoByAddress(address ?? (await getSignerAddress()));
118119
}
119120

120-
export async function assertProviderIsRegistered(address: string) {
121-
const providerInfo = await getProviderInfoByAddress(address);
121+
export function makeProviderAddressValidator(providerAddress?: string) {
122+
return async (address: string) => {
123+
providerAddress = providerAddress ?? address;
122124

123-
if (providerInfo.name === null) {
124-
commandObj.error(
125-
`You have to register as a provider first. Use '${CLI_NAME} provider register' command for that`,
126-
);
125+
const providerInfo = await getProviderInfoByAddress(providerAddress);
126+
127+
if (providerInfo.name === null) {
128+
commandObj.error(
129+
`You have to register as a provider first. Use '${CLI_NAME} provider register' command for that`,
130+
);
131+
} else if (address !== providerAddress && address !== providerInfo.managementAddress) {
132+
commandObj.error(
133+
`You have using nor provider address not provider management address to sign the transaction.`,
134+
);
135+
}
136+
137+
return
127138
}
128139
}
140+
141+
export async function getOfferOwner(offerId: string): Promise<string> {
142+
const { contracts } = await getContracts();
143+
const offerData = await contracts.diamond.getOffer(offerId);
144+
return offerData.provider;
145+
}

packages/cli/package/src/lib/const.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ export const PRIV_KEY_FLAG = {
198198
}),
199199
};
200200

201-
export const ADDRESS_FLAG_NAME = "address";
201+
export const ADDRESS_FLAG_NAME = "address"
202+
export const PROVIDER_ADDRESS_FLAG_NAME = "provider";
202203

203204
export const ADDRESS_FLAG = {
204205
[ADDRESS_FLAG_NAME]: Flags.string({
@@ -214,6 +215,13 @@ export const CLUSTER_ADDRESS_FLAG = {
214215
}),
215216
};
216217

218+
export const PROVIDER_ADDRESS_FLAG = {
219+
[PROVIDER_ADDRESS_FLAG_NAME]: Flags.string({
220+
description: "Provider address. In case using managmenent address to sign transactions",
221+
helpValue: "<address>",
222+
}),
223+
};
224+
217225
export const CHAIN_FLAGS = {
218226
...ENV_FLAG,
219227
...PRIV_KEY_FLAG,
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"protocolVersion": 2,
3-
"chain-rpc": "fluencelabs/chain-rpc:0.24.2",
4-
"chain-deploy-script": "fluencelabs/chain-deploy-script:0.24.2",
5-
"subgraph-deploy-script": "fluencelabs/subgraph-deploy-script:0.24.2"
3+
"chain-rpc": "docker.fluence.dev/chain-rpc:feat-beam-support-f0edb5b-8391-1",
4+
"chain-deploy-script": "docker.fluence.dev/chain-deploy-script:feat-beam-support-f0edb5b-8391-1",
5+
"subgraph-deploy-script": "docker.fluence.dev/subgraph-deploy-script:feat-beam-support-f0edb5b-8391-1"
66
}

packages/cli/package/yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,7 +1964,7 @@ __metadata:
19641964
dependencies:
19651965
"@actions/core": "npm:1.11.1"
19661966
"@aws-sdk/lib-storage": "npm:^3.501.0"
1967-
"@fluencelabs/deal-ts-clients": "npm:0.24.2"
1967+
"@fluencelabs/deal-ts-clients": "npm:0.24.3-feat-beam-support-f0edb5b-8391-1.0"
19681968
"@graphql-codegen/cli": "npm:^5.0.3"
19691969
"@graphql-codegen/typescript": "npm:^4.1.1"
19701970
"@graphql-codegen/typescript-graphql-request": "npm:^6.2.0"
@@ -2038,9 +2038,9 @@ __metadata:
20382038
languageName: unknown
20392039
linkType: soft
20402040

2041-
"@fluencelabs/deal-ts-clients@npm:0.24.2":
2042-
version: 0.24.2
2043-
resolution: "@fluencelabs/deal-ts-clients@npm:0.24.2"
2041+
"@fluencelabs/deal-ts-clients@npm:0.24.3-feat-beam-support-f0edb5b-8391-1.0":
2042+
version: 0.24.3-feat-beam-support-f0edb5b-8391-1.0
2043+
resolution: "@fluencelabs/deal-ts-clients@npm:0.24.3-feat-beam-support-f0edb5b-8391-1.0"
20442044
dependencies:
20452045
"@graphql-typed-document-node/core": "npm:^3.2.0"
20462046
debug: "npm:^4.3.4"
@@ -2052,7 +2052,7 @@ __metadata:
20522052
graphql-tag: "npm:^2.12.6"
20532053
ipfs-http-client: "npm:^60.0.1"
20542054
multiformats: "npm:^13.0.1"
2055-
checksum: 10c0/a8e21d13adb25c6a36e9c26b6292275784bc358a9ef025acd6406240ef46547730255851d5e83a5e2fc2ffbc0235955840dcf79090a735fa4a13a076ed73bbaa
2055+
checksum: 10c0/2478de8b0eeb12a98f3206dbf2af4501f59da55d413b261dbd84303054ad1053c7f602ce786e4fafb4ce322318605e897d48182759c5875c46685877f5356d58
20562056
languageName: node
20572057
linkType: hard
20582058

0 commit comments

Comments
 (0)