Skip to content

Commit d487674

Browse files
feat(offer): add a command for setting cluster key (#1116)
* fix build * add new node checksums * add command * run on-each-commit * Apply automatic changes * make single-offer version * Apply automatic changes * Apply automatic changes * support offer-id * Apply automatic changes * update versions * uodate docs * Apply automatic changes * remove containers change --------- Co-authored-by: fluencebot <[email protected]>
1 parent afc6de9 commit d487674

File tree

10 files changed

+485
-60
lines changed

10 files changed

+485
-60
lines changed

packages/cli/package/docs/commands/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
* [`fluence provider gen`](#fluence-provider-gen)
2424
* [`fluence provider info`](#fluence-provider-info)
2525
* [`fluence provider init`](#fluence-provider-init)
26+
* [`fluence provider offer-access-address`](#fluence-provider-offer-access-address)
2627
* [`fluence provider offer-create`](#fluence-provider-offer-create)
2728
* [`fluence provider offer-info`](#fluence-provider-offer-info)
2829
* [`fluence provider offer-remove`](#fluence-provider-offer-remove)
@@ -637,6 +638,32 @@ DESCRIPTION
637638

638639
_See code: [src/commands/provider/init.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.25.1/src/commands/provider/init.ts)_
639640

641+
## `fluence provider offer-access-address`
642+
643+
Set access address for offer for use in cluster software.. Alias: fluence provider sck
644+
645+
```
646+
USAGE
647+
$ fluence provider offer-access-address [--no-input] [--offer <offer> | --offer-id <id>] [--env <testnet | mainnet | stage |
648+
local>] [--priv-key <private-key>] [--address <address>]
649+
650+
FLAGS
651+
--address=<address> Address derived from Cluster private key
652+
--env=<testnet | mainnet | stage | local> Fluence Environment to use when running the command
653+
--no-input Don't interactively ask for any input from the user
654+
--offer=<offer> Offer name. Can't be used together with --offer flag
655+
--offer-id=<id> Offer id. Can't be used together with --offer flag
656+
--priv-key=<private-key> !WARNING! for debug purposes only. Passing private keys through flags is
657+
unsecure. On local env
658+
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used
659+
by default when CLI is used in non-interactive mode
660+
661+
DESCRIPTION
662+
Set access address for offer for use in cluster software.. Alias: fluence provider sck
663+
```
664+
665+
_See code: [src/commands/provider/offer-access-address.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.25.1/src/commands/provider/offer-access-address.ts)_
666+
640667
## `fluence provider offer-create`
641668

642669
Create offers. You have to be registered as a provider to do that. Alias: fluence provider oc

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.23.2-update-deal-interface-c153307-7773-1.0",
59+
"@fluencelabs/deal-ts-clients": "0.24.2",
6060
"@kubernetes/client-node": "github:fluencelabs/kubernetes-client-javascript#e72ee00a52fec4eb4a8327632895d888ee504f4d",
6161
"@libp2p/crypto": "4.0.1",
6262
"@libp2p/peer-id-factory": "4.0.5",
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/**
2+
* Fluence CLI
3+
* Copyright (C) 2024 Fluence DAO
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Affero General Public License as
7+
* published by the Free Software Foundation, version 3.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU Affero General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU Affero General Public License
15+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
*/
17+
18+
import { BaseCommand } from "../../baseCommand.js";
19+
import {
20+
filterOffersFoundOnChain,
21+
resolveSingleOfferFromProviderConfig,
22+
} from "../../lib/chain/offer/offer.js";
23+
import { assertProviderIsRegistered } from "../../lib/chain/providerInfo.js";
24+
import { commandObj } from "../../lib/commandObj.js";
25+
import {
26+
CHAIN_FLAGS,
27+
CLUSTER_ADDRESS_FLAG,
28+
SINGLE_OFFER_FLAGS,
29+
ADDRESS_FLAG_NAME,
30+
} from "../../lib/const.js";
31+
import { getContracts, sign } from "../../lib/dealClient.js";
32+
import { aliasesText } from "../../lib/helpers/aliasesText.js";
33+
import { initCli } from "../../lib/lifeCycle.js";
34+
import { confirm, input } from "../../lib/prompt.js";
35+
36+
export default class OfferAccessAddress extends BaseCommand<
37+
typeof OfferAccessAddress
38+
> {
39+
static override hiddenAliases = ["provider:sck"];
40+
static override description = `Set access address for offer for use in cluster software.${aliasesText.apply(this)}`;
41+
static override flags = {
42+
...SINGLE_OFFER_FLAGS,
43+
...CHAIN_FLAGS,
44+
...CLUSTER_ADDRESS_FLAG,
45+
};
46+
47+
async run(): Promise<void> {
48+
const { flags } = await initCli(this, await this.parse(OfferAccessAddress));
49+
const configOffer = await resolveSingleOfferFromProviderConfig(flags);
50+
const offersFoundOnChain = await filterOffersFoundOnChain([configOffer]);
51+
const chainOffer = offersFoundOnChain[0];
52+
53+
if (chainOffer === undefined) {
54+
commandObj.error(`Offer ${configOffer.offerName} is not found on chain`);
55+
}
56+
57+
const address =
58+
flags[ADDRESS_FLAG_NAME] ??
59+
(await input({
60+
message: "Enter cluster address",
61+
validate(input: string) {
62+
return (
63+
input.length === 42 ||
64+
"Please enter an address (40 hex digits + 0x)"
65+
);
66+
},
67+
}));
68+
69+
commandObj.logToStderr(
70+
`Setting cluster address ${address} for offer ${chainOffer.offerName} (${chainOffer.offerId})`,
71+
);
72+
73+
if (
74+
!(await confirm({
75+
message: "Would you like to continue",
76+
default: true,
77+
}))
78+
) {
79+
commandObj.logToStderr("Setting cluster address cancelled");
80+
return;
81+
}
82+
83+
const { contracts } = await getContracts();
84+
85+
await sign({
86+
validateAddress: assertProviderIsRegistered,
87+
title: `Setting cluster address ${address} for offer ${chainOffer.offerName} (${chainOffer.offerId})`,
88+
method: contracts.diamond.setClusterKey,
89+
args: [chainOffer.offerId, address],
90+
});
91+
}
92+
}

0 commit comments

Comments
 (0)