diff --git a/.circleci/config.yml b/.circleci/config.yml index d6cfd70c7..8ae587cd8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -282,6 +282,7 @@ jobs: - install-ubuntu-deps - run: go install golang.org/x/tools/cmd/goimports - run: go install github.com/hannahhoward/cbor-gen-for + - run: go install golang.org/x/text/cmd/gotext - run: make deps gen - run: git --no-pager diff && git --no-pager diff --quiet diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa1c80e49..0f047c46f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -311,6 +311,10 @@ jobs: run: go install github.com/hannahhoward/cbor-gen-for shell: bash + - name: Install gotext + run: go install golang.org/x/text/cmd/gotext + shell: bash + - name: Install FFI env: GITHUB_TOKEN: ${{ github.token }} @@ -319,6 +323,8 @@ jobs: shell: bash - name: Generate Code + env: + LANG: en-US run: make gen shell: bash diff --git a/cmd/curio/calc.go b/cmd/curio/calc.go index 538cdad69..61a105faf 100644 --- a/cmd/curio/calc.go +++ b/cmd/curio/calc.go @@ -6,12 +6,14 @@ import ( "github.com/fatih/color" "github.com/urfave/cli/v2" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/tasks/sealsupra" ) var calcCmd = &cli.Command{ - Name: "calc", - Usage: "Math Utils", + Name: "calc", + + Usage: translations.T("Math Utils"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "actor", @@ -24,12 +26,13 @@ var calcCmd = &cli.Command{ } var calcBatchCpuCmd = &cli.Command{ - Name: "batch-cpu", - Usage: "Analyze and display the layout of batch sealer threads", - Description: `Analyze and display the layout of batch sealer threads on your CPU. + Name: "batch-cpu", + + Usage: translations.T("Analyze and display the layout of batch sealer threads"), + Description: translations.T(`Analyze and display the layout of batch sealer threads on your CPU. It provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread -distribution for different batch sizes.`, +distribution for different batch sizes.`), Flags: []cli.Flag{ &cli.BoolFlag{Name: "dual-hashers", Value: true}, }, @@ -139,17 +142,18 @@ distribution for different batch sizes.`, } var calcSuprasealConfigCmd = &cli.Command{ - Name: "supraseal-config", - Usage: "Generate a supra_seal configuration", - Description: `Generate a supra_seal configuration for a given batch size. + Name: "supraseal-config", + + Usage: translations.T("Generate a supra_seal configuration"), + Description: translations.T(`Generate a supra_seal configuration for a given batch size. This command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing. -The config can be used directly with SupraSeal binaries to test it without involving Curio.`, +The config can be used directly with SupraSeal binaries to test it without involving Curio.`), Flags: []cli.Flag{ &cli.BoolFlag{ Name: "dual-hashers", Value: true, - Usage: "Zen3 and later supports two sectors per thread, set to false for older CPUs", + Usage: translations.T("Zen3 and later supports two sectors per thread, set to false for older CPUs"), }, &cli.IntFlag{ Name: "batch-size", diff --git a/cmd/curio/cli.go b/cmd/curio/cli.go index 48bf41075..451709d4e 100644 --- a/cmd/curio/cli.go +++ b/cmd/curio/cli.go @@ -18,6 +18,7 @@ import ( "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/cmd/curio/rpc" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/lib/reqcontext" @@ -29,11 +30,11 @@ const providerEnvVar = "CURIO_API_INFO" var cliCmd = &cli.Command{ Name: "cli", - Usage: "Execute cli commands", + Usage: translations.T("Execute cli commands"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "machine", - Usage: "machine host:port (curio run --listen address)", + Usage: translations.T("machine host:port (curio run --listen address)"), }, }, Before: func(cctx *cli.Context) error { @@ -209,11 +210,11 @@ var cliCmd = &cli.Command{ var waitApiCmd = &cli.Command{ Name: "wait-api", - Usage: "Wait for Curio api to come online", + Usage: translations.T("Wait for Curio api to come online"), Flags: []cli.Flag{ &cli.DurationFlag{ Name: "timeout", - Usage: "duration to wait till fail", + Usage: translations.T("duration to wait till fail"), Value: time.Second * 30, }, }, diff --git a/cmd/curio/config.go b/cmd/curio/config.go index 8a594c07d..e5a7ec3f1 100644 --- a/cmd/curio/config.go +++ b/cmd/curio/config.go @@ -15,6 +15,7 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/deps/config" "github.com/filecoin-project/curio/harmony/harmonydb" @@ -22,7 +23,7 @@ import ( var configCmd = &cli.Command{ Name: "config", - Usage: "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + Usage: translations.T("Manage node config by layers. The layer 'base' will always be applied at Curio start-up."), Subcommands: []*cli.Command{ configDefaultCmd, configSetCmd, @@ -38,11 +39,11 @@ var configCmd = &cli.Command{ var configDefaultCmd = &cli.Command{ Name: "default", Aliases: []string{"defaults"}, - Usage: "Print default node config", + Usage: translations.T("Print default node config"), Flags: []cli.Flag{ &cli.BoolFlag{ Name: "no-comment", - Usage: "don't comment default values", + Usage: translations.T("don't comment default values"), }, }, Action: func(cctx *cli.Context) error { @@ -60,12 +61,12 @@ var configDefaultCmd = &cli.Command{ var configSetCmd = &cli.Command{ Name: "set", Aliases: []string{"add", "update", "create"}, - Usage: "Set a config layer or the base by providing a filename or stdin.", - ArgsUsage: "a layer's file name", + Usage: translations.T("Set a config layer or the base by providing a filename or stdin."), + ArgsUsage: translations.T("a layer's file name"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "title", - Usage: "title of the config layer (req'd for stdin)", + Usage: translations.T("title of the config layer (req'd for stdin)"), }, }, Action: func(cctx *cli.Context) error { @@ -124,8 +125,8 @@ func setConfig(db *harmonydb.DB, name, config string) error { var configGetCmd = &cli.Command{ Name: "get", Aliases: []string{"cat", "show"}, - Usage: "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", - ArgsUsage: "layer name", + Usage: translations.T("Get a config layer by name. You may want to pipe the output to a file, or use 'less'"), + ArgsUsage: translations.T("layer name"), Action: func(cctx *cli.Context) error { args := cctx.Args() if args.Len() != 1 { @@ -158,7 +159,7 @@ func getConfig(db *harmonydb.DB, layer string) (string, error) { var configListCmd = &cli.Command{ Name: "list", Aliases: []string{"ls"}, - Usage: "List config layers present in the DB.", + Usage: translations.T("List config layers present in the DB."), Flags: []cli.Flag{}, Action: func(cctx *cli.Context) error { db, err := deps.MakeDB(cctx) @@ -181,7 +182,7 @@ var configListCmd = &cli.Command{ var configRmCmd = &cli.Command{ Name: "remove", Aliases: []string{"rm", "del", "delete"}, - Usage: "Remove a named config layer.", + Usage: translations.T("Remove a named config layer."), Flags: []cli.Flag{}, Action: func(cctx *cli.Context) error { args := cctx.Args() @@ -206,12 +207,12 @@ var configRmCmd = &cli.Command{ var configViewCmd = &cli.Command{ Name: "interpret", Aliases: []string{"view", "stacked", "stack"}, - Usage: "Interpret stacked config layers by this version of curio, with system-generated comments.", - ArgsUsage: "a list of layers to be interpreted as the final config", + Usage: translations.T("Interpret stacked config layers by this version of curio, with system-generated comments."), + ArgsUsage: translations.T("a list of layers to be interpreted as the final config"), Flags: []cli.Flag{ &cli.StringSliceFlag{ Name: "layers", - Usage: "comma or space separated list of layers to be interpreted (base is always applied)", + Usage: translations.T("comma or space separated list of layers to be interpreted (base is always applied)"), Required: true, }, }, @@ -236,32 +237,32 @@ var configViewCmd = &cli.Command{ var configEditCmd = &cli.Command{ Name: "edit", - Usage: "edit a config layer", - ArgsUsage: "[layer name]", + Usage: translations.T("edit a config layer"), + ArgsUsage: translations.T("[layer name]"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "editor", - Usage: "editor to use", + Usage: translations.T("editor to use"), Value: "vim", EnvVars: []string{"EDITOR"}, }, &cli.StringFlag{ Name: "source", - Usage: "source config layer", + Usage: translations.T("source config layer"), DefaultText: "", }, &cli.BoolFlag{ Name: "allow-overwrite", - Usage: "allow overwrite of existing layer if source is a different layer", + Usage: translations.T("allow overwrite of existing layer if source is a different layer"), }, &cli.BoolFlag{ Name: "no-source-diff", - Usage: "save the whole config into the layer, not just the diff", + Usage: translations.T("save the whole config into the layer, not just the diff"), }, &cli.BoolFlag{ Name: "no-interpret-source", - Usage: "do not interpret source layer", - DefaultText: "true if --source is set", + Usage: translations.T("do not interpret source layer"), + DefaultText: translations.T("true if --source is set"), }, }, Action: func(cctx *cli.Context) error { diff --git a/cmd/curio/config_new.go b/cmd/curio/config_new.go index fce972a30..059d3f2e6 100644 --- a/cmd/curio/config_new.go +++ b/cmd/curio/config_new.go @@ -6,6 +6,7 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/lotus/api" @@ -15,8 +16,8 @@ import ( var configNewCmd = &cli.Command{ Name: "new-cluster", - Usage: "Create new configuration for a new cluster", - ArgsUsage: "[SP actor address...]", + Usage: translations.T("Create new configuration for a new cluster"), + ArgsUsage: translations.T("[SP actor address...]"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "repo", diff --git a/cmd/curio/debug-ipni.go b/cmd/curio/debug-ipni.go index 960d08492..6cd6559b2 100644 --- a/cmd/curio/debug-ipni.go +++ b/cmd/curio/debug-ipni.go @@ -12,12 +12,13 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/market/ipni/chunker" ) var testDebugIpniChunks = &cli.Command{ Name: "ipni-piece-chunks", - Usage: "generate ipni chunks from a file", + Usage: translations.T("generate ipni chunks from a file"), Action: func(c *cli.Context) error { ck := chunker.NewInitialChunker() diff --git a/cmd/curio/guidedsetup/guidedsetup.go b/cmd/curio/guidedsetup/guidedsetup.go index 0b23c0baf..256a1307f 100644 --- a/cmd/curio/guidedsetup/guidedsetup.go +++ b/cmd/curio/guidedsetup/guidedsetup.go @@ -28,7 +28,6 @@ import ( "github.com/samber/lo" "github.com/snadrus/must" "github.com/urfave/cli/v2" - "golang.org/x/text/language" "golang.org/x/text/message" "github.com/filecoin-project/go-address" @@ -37,6 +36,7 @@ import ( "github.com/filecoin-project/curio/api" "github.com/filecoin-project/curio/build" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" _ "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/deps/config" @@ -64,7 +64,7 @@ var GuidedsetupCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) (err error) { - T, say := SetupLanguage() + T, say := translations.SetupLanguage() setupCtrlC(say) // Run the migration steps @@ -144,42 +144,6 @@ var ( Background(lipgloss.Color("#f8f9fa")) ) -func SetupLanguage() (func(key message.Reference, a ...interface{}) string, func(style lipgloss.Style, key message.Reference, a ...interface{})) { - langText := "en" - problem := false - if len(os.Getenv("LANG")) > 1 { - langText = os.Getenv("LANG")[:2] - } else { - problem = true - } - - lang, err := language.Parse(langText) - if err != nil { - lang = language.English - problem = true - fmt.Println("Error parsing language") - } - - langs := message.DefaultCatalog.Languages() - have := lo.SliceToMap(langs, func(t language.Tag) (string, bool) { return t.String(), true }) - if _, ok := have[lang.String()]; !ok { - lang = language.English - problem = true - } - if problem { - _ = os.Setenv("LANG", "en-US") // for later users of this function - notice.Copy().AlignHorizontal(lipgloss.Right). - Render("$LANG=" + langText + " unsupported. Available: " + strings.Join(lo.Keys(have), ", ")) - fmt.Println("Defaulting to English. Please reach out to the Curio team if you would like to have additional language support.") - } - return func(key message.Reference, a ...interface{}) string { - return message.NewPrinter(lang).Sprintf(key, a...) - }, func(sty lipgloss.Style, key message.Reference, a ...interface{}) { - msg := message.NewPrinter(lang).Sprintf(key, a...) - fmt.Println(sty.Render(msg)) - } -} - func newOrMigrate(d *MigrationData) { i, _, err := (&promptui.Select{ Label: d.T("I want to:"), diff --git a/cmd/curio/guidedsetup/shared.go b/cmd/curio/guidedsetup/shared.go index 9ceb1e734..a05595437 100644 --- a/cmd/curio/guidedsetup/shared.go +++ b/cmd/curio/guidedsetup/shared.go @@ -23,6 +23,7 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-statestore" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/deps/config" "github.com/filecoin-project/curio/harmony/harmonydb" @@ -69,7 +70,7 @@ func (storageMiner) APIInfoEnvVars() (primary string, fallbacks []string, deprec } func SaveConfigToLayerMigrateSectors(db *harmonydb.DB, minerRepoPath, chainApiInfo string, unmigSectorShouldFail func() bool) (minerAddress address.Address, err error) { - _, say := SetupLanguage() + _, say := translations.SetupLanguage() ctx := context.Background() r, err := repo.NewFS(minerRepoPath) diff --git a/cmd/curio/internal/translations/catalog.go b/cmd/curio/internal/translations/catalog.go index aadf8fad4..ba47d8c65 100644 --- a/cmd/curio/internal/translations/catalog.go +++ b/cmd/curio/internal/translations/catalog.go @@ -40,273 +40,646 @@ func init() { } var messageKeyToIndex = map[string]int{ - "2 KiB": 74, - "32 GiB": 72, - "64 GiB": 71, - "8 MiB": 73, - "Aborting migration.": 12, - "Aborting remaining steps.": 9, - "Additional info is at http://docs.curiostorage.org": 17, - "Aggregate-Anonymous: version, chain, and Miner power (bucketed).": 30, - "Cannot reach the DB: %s": 79, - "Cannot read the config.toml file in the provided directory, Error: %s": 53, - "Compare the configurations %s to %s. Changes between the miner IDs other than wallet addreses should be a new, minimal layer for runners that need it.": 107, - "Configuration 'base' was created to resemble this lotus-miner's config.toml .": 108, - "Configuration 'base' was updated to include this miner's address": 88, - "Configuration 'base' was updated to include this miner's address (%s) and its wallet setup.": 106, - "Connected to Yugabyte": 47, - "Connected to Yugabyte. Schema is current.": 46, - "Continue to connect and update schema.": 98, - "Continue to verify the addresses and create a new miner actor.": 64, - "Could not create repo from directory: %s. Aborting migration": 54, - "Could not lock miner repo. Your miner must be stopped: %s\n Aborting migration": 55, - "Create a new miner": 8, - "Ctrl+C pressed in Terminal": 5, - "Database config error occurred, abandoning migration: %s ": 99, - "Database: %s": 97, - "Documentation: ": 40, - "Each step needs your confirmation and can be reversed. Press Ctrl+C to exit at any time.": 4, - "Enter %s address": 69, - "Enter the Yugabyte database %s": 102, - "Enter the Yugabyte database host(s)": 100, - "Enter the info to connect to your Yugabyte database installation (https://download.yugabyte.com/)": 92, - "Enter the info to create a new miner": 59, - "Enter the owner address": 66, - "Enter the path to the configuration directory used by %s": 51, - "Error connecting to Yugabyte database: %s": 104, - "Error connecting to full node API: %s": 80, - "Error getting API: %s": 20, - "Error getting miner info: %s": 35, - "Error getting miner power: %s": 33, - "Error getting token: %s": 22, - "Error marshalling message: %s": 34, - "Error saving config to layer: %s. Aborting Migration": 26, - "Error sending message: %s": 37, - "Error sending message: Status %s, Message: ": 38, - "Error signing message: %s": 36, - "Error writing file: %s": 13, - "Failed to create the miner actor: %s": 77, - "Failed to generate default config: %s": 86, - "Failed to generate random bytes for secret: %s": 82, - "Failed to get API info for FullNode: %w": 84, - "Failed to insert 'base' config layer in database: %s": 87, - "Failed to load base config from database: %s": 89, - "Failed to parse base config: %s": 90, - "Failed to parse sector size: %s": 76, - "Failed to parse the address: %s": 68, - "Failed to regenerate base config: %s": 91, - "Failed to verify the auth token from daemon node: %s": 85, - "Filecoin %s channels: %s and %s": 43, - "For more servers, make /etc/curio.env with the curio.env database env and add the CURIO_LAYERS env to assign purposes.": 15, - "Hint: I am someone running Curio on whichever chain.": 31, - "Host: %s": 93, - "I want to:": 6, - "Increase reliability using redundancy: start multiple machines with at-least the post layer: 'curio run --layers=post'": 44, - "Individual Data: Miner ID, Curio version, chain (%s or %s). Signed.": 29, - "Initializing a new miner actor.": 58, - "Layer %s created. ": 109, - "Lotus-Miner to Curio Migration.": 10, - "Message sent.": 39, - "Migrate from existing Lotus-Miner": 7, - "Migrating lotus-miner config.toml to Curio in-database configuration.": 19, - "Migrating metadata for %d sectors.": 105, - "Miner %s created successfully": 78, - "Miner creation error occurred: %s ": 65, - "New Miner initialization complete.": 18, - "No address provided": 67, - "No host provided": 101, - "No path provided, abandoning migration ": 52, - "No value provided": 103, - "No, abort": 25, - "Nothing.": 32, - "One database can serve multiple miner IDs: Run a migration for each lotus-miner.": 45, - "Other": 50, - "Owner Wallet: %s": 60, - "Password: %s": 96, - "Please do not run guided-setup again as miner creation is not idempotent. You need to run 'curio config new-cluster %s' to finish the configuration": 83, - "Port: %s": 94, - "Pre-initialization steps complete": 81, - "Read Miner Config": 56, - "Sector Size: %s": 63, - "Sector selection failed: %s ": 75, - "Select the Sector Size": 70, - "Select the location of your lotus-miner config directory?": 49, - "Select what you want to share with the Curio team.": 28, - "Sender Wallet: %s": 62, - "Step Complete: %s\n": 57, - "The '%s' layer stores common configuration. All curio instances can include it in their %s argument.": 41, - "The Curio team wants to improve the software you use. Tell the team you're using `%s`.": 27, - "This interactive tool creates a new miner actor and creates the basic configuration layer for it.": 1, - "This interactive tool migrates lotus-miner to Curio in 5 minutes.": 3, - "This process is partially idempotent. Once a new miner actor has been created and subsequent steps fail, the user need to run 'curio config new-cluster < miner ID >' to finish the configuration.": 2, - "To run Curio: With machine or cgroup isolation, use the command (with example layer selection):": 111, - "To start, ensure your sealing pipeline is drained and shut-down lotus-miner.": 48, - "To work with the config: ": 110, - "Try the web interface with %s ": 14, - "Unmigratable sectors found. Do you want to continue?": 23, - "Use the arrow keys to navigate: ↓ ↑ → ← ": 0, - "Username: %s": 95, - "Where should we save your database config file?": 11, - "Worker Wallet: %s": 61, - "Yes, continue": 24, - "You can add other layers for per-machine configuration changes.": 42, - "You can now migrate your market node (%s), if applicable.": 16, - "could not get API info for FullNode: %w": 21, + "(debug tool) Copy LM sector metadata into Curio DB": 76, + "(for init) limit storage space for sectors (expensive for very large paths!)": 93, + "(for init) path weight": 90, + "(for init) use path for long-term storage": 92, + "(for init) use path for sealing": 91, + "1278 (3.5 years)": 75, + "2 KiB": 194, + "32 GiB": 192, + "64 GiB": 191, + "8 MiB": 193, + "": 50, + "Aborting migration.": 132, + "Aborting remaining steps.": 129, + "Add URL to fetch data for offline deals": 51, + "Additional info is at http://docs.curiostorage.org": 137, + "Address to listen for the GUI on": 68, + "Aggregate-Anonymous: version, chain, and Miner power (bucketed).": 150, + "Analyze and display the layout of batch sealer threads": 1, + "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.": 2, + "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'": 52, + "Cannot reach the DB: %s": 199, + "Cannot read the config.toml file in the provided directory, Error: %s": 173, + "Check data integrity in unsealed sector files": 118, + "Collection of debugging utilities": 110, + "Command separated list of hostnames for yugabyte cluster": 43, + "Compare the configurations %s to %s. Changes between the miner IDs other than wallet addreses should be a new, minimal layer for runners that need it.": 227, + "Compute WindowPoSt for performance and configuration testing.": 105, + "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.": 102, + "Configuration 'base' was created to resemble this lotus-miner's config.toml .": 228, + "Configuration 'base' was updated to include this miner's address": 208, + "Configuration 'base' was updated to include this miner's address (%s) and its wallet setup.": 226, + "Connected to Yugabyte": 167, + "Connected to Yugabyte. Schema is current.": 166, + "Continue to connect and update schema.": 218, + "Continue to verify the addresses and create a new miner actor.": 184, + "Could not create repo from directory: %s. Aborting migration": 174, + "Could not lock miner repo. Your miner must be stopped: %s\n Aborting migration": 175, + "Create a check task for a specific sector, wait for its completion, and output the result.\n : The storage provider ID\n : The sector number": 119, + "Create a new miner": 128, + "Create new configuration for a new cluster": 31, + "Ctrl+C pressed in Terminal": 125, + "Custom `HEADER` to include in the HTTP request": 53, + "Database config error occurred, abandoning migration: %s ": 219, + "Database: %s": 217, + "Documentation: ": 160, + "Each step needs your confirmation and can be reversed. Press Ctrl+C to exit at any time.": 124, + "Enter %s address": 189, + "Enter the Yugabyte database %s": 222, + "Enter the Yugabyte database host(s)": 220, + "Enter the info to connect to your Yugabyte database installation (https://download.yugabyte.com/)": 212, + "Enter the info to create a new miner": 179, + "Enter the owner address": 186, + "Enter the path to the configuration directory used by %s": 171, + "Error connecting to Yugabyte database: %s": 224, + "Error connecting to full node API: %s": 200, + "Error getting API: %s": 140, + "Error getting miner info: %s": 155, + "Error getting miner power: %s": 153, + "Error getting token: %s": 142, + "Error marshalling message: %s": 154, + "Error saving config to layer: %s. Aborting Migration": 146, + "Error sending message: %s": 157, + "Error sending message: Status %s, Message: ": 158, + "Error signing message: %s": 156, + "Error writing file: %s": 133, + "Execute cli commands": 6, + "Failed to create the miner actor: %s": 197, + "Failed to generate default config: %s": 206, + "Failed to generate random bytes for secret: %s": 202, + "Failed to get API info for FullNode: %w": 204, + "Failed to insert 'base' config layer in database: %s": 207, + "Failed to load base config from database: %s": 209, + "Failed to parse base config: %s": 210, + "Failed to parse sector size: %s": 196, + "Failed to parse the address: %s": 188, + "Failed to regenerate base config: %s": 211, + "Failed to verify the auth token from daemon node: %s": 205, + "Fetch proving parameters": 45, + "Filecoin %s channels: %s and %s": 163, + "Filecoin decentralized storage network provider": 40, + "Filter by storage provider ID": 114, + "Filter events by actor address; lists all if not specified": 80, + "Filter events by sector number; requires --actor to be specified": 81, + "For more servers, make /etc/curio.env with the curio.env database env and add the CURIO_LAYERS env to assign purposes.": 135, + "Generate a supra_seal configuration": 3, + "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.": 4, + "Get a config layer by name. You may want to pipe the output to a file, or use 'less'": 16, + "Get information about unsealed data": 112, + "Hint: I am someone running Curio on whichever chain.": 151, + "Host: %s": 213, + "How long to commit sectors for": 74, + "I want to:": 126, + "Ignore sectors that cannot be migrated": 78, + "Increase reliability using redundancy: start multiple machines with at-least the post layer: 'curio run --layers=post'": 164, + "Individual Data: Miner ID, Curio version, chain (%s or %s). Signed.": 149, + "Initializing a new miner actor.": 178, + "Interpret stacked config layers by this version of curio, with system-generated comments.": 20, + "Layer %s created. ": 229, + "Limit output to the last N events": 82, + "List config layers present in the DB.": 18, + "List data from the sectors_unseal_pipeline and sectors_meta tables": 113, + "List log systems": 35, + "List pipeline events": 79, + "Lotus-Miner to Curio Migration.": 130, + "Manage logging": 34, + "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.": 10, + "Manage the sealing pipeline": 69, + "Manage unsealed data": 111, + "Math Utils": 0, + "Message sent.": 159, + "Migrate from existing Lotus-Miner": 127, + "Migrating lotus-miner config.toml to Curio in-database configuration.": 139, + "Migrating metadata for %d sectors.": 225, + "Miner %s created successfully": 198, + "Miner creation error occurred: %s ": 185, + "Moves funds from the deal collateral wallet into escrow with the storage market actor": 55, + "New Miner initialization complete.": 138, + "No address provided": 187, + "No host provided": 221, + "No path provided, abandoning migration ": 172, + "No value provided": 223, + "No, abort": 145, + "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.": 106, + "Nothing.": 152, + "Number of sectors to start": 73, + "One database can serve multiple miner IDs: Run a migration for each lotus-miner.": 165, + "Other": 170, + "Output file path (default: stdout)": 115, + "Owner Wallet: %s": 180, + "Password: %s": 216, + "Path to miner repo": 77, + "Please do not run guided-setup again as miner creation is not idempotent. You need to run 'curio config new-cluster %s' to finish the configuration": 203, + "Port: %s": 214, + "Pre-initialization steps complete": 201, + "Print default node config": 11, + "Read Miner Config": 176, + "Remove a named config layer.": 19, + "Sector Size: %s": 183, + "Sector selection failed: %s ": 195, + "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').": 85, + "Select the Sector Size": 190, + "Select the location of your lotus-miner config directory?": 169, + "Select what you want to share with the Curio team.": 148, + "Sender Wallet: %s": 182, + "Set a config layer or the base by providing a filename or stdin.": 13, + "Set log level": 36, + "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr\n": 38, + "Set the target unseal state for a sector": 116, + "Set the target unseal state for a specific sector.\n : The storage provider ID\n : The sector number\n : The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.\n": 117, + "Specify actor address to start sealing sectors for": 48, + "Specify wallet address to send the funds from": 57, + "Start Curio web interface": 66, + "Start a Curio process": 58, + "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.": 67, + "Start new sealing operations manually": 70, + "Start sealing new CC sectors": 72, + "Start sealing sectors for all actors now (not on schedule)": 71, + "Step Complete: %s\n": 177, + "Stop a running Curio process": 83, + "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time\n ": 88, + "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.": 103, + "The '%s' layer stores common configuration. All curio instances can include it in their %s argument.": 161, + "The Curio team wants to improve the software you use. Tell the team you're using `%s`.": 147, + "This interactive tool creates a new miner actor and creates the basic configuration layer for it.": 121, + "This interactive tool migrates lotus-miner to Curio in 5 minutes.": 123, + "This process is partially idempotent. Once a new miner actor has been created and subsequent steps fail, the user need to run 'curio config new-cluster < miner ID >' to finish the configuration.": 122, + "To run Curio: With machine or cgroup isolation, use the command (with example layer selection):": 231, + "To start, ensure your sealing pipeline is drained and shut-down lotus-miner.": 168, + "To work with the config: ": 230, + "Try the web interface with %s ": 134, + "Unmigratable sectors found. Do you want to continue?": 143, + "Use synthetic PoRep": 49, + "Use the arrow keys to navigate: ↓ ↑ → ← ": 120, + "Username: %s": 215, + "Utility functions for testing": 101, + "Wait for Curio api to come online": 8, + "Where should we save your database config file?": 131, + "Worker Wallet: %s": 181, + "Yes, continue": 144, + "You can add other layers for per-machine configuration changes.": 162, + "You can now migrate your market node (%s), if applicable.": 136, + "Zen3 and later supports two sectors per thread, set to false for older CPUs": 5, + "[SP actor address...]": 32, + "[deadline index]": 107, + "[layer name]": 24, + "[level]": 37, + "[miner address] [sector number]": 100, + "[path]": 87, + "[sectorSize]": 46, + "`URL` to send the request to": 54, + "a layer's file name": 14, + "a list of layers to be interpreted as the final config": 21, + "allow overwrite of existing layer if source is a different layer": 27, + "attach local storage path": 86, + "comma or space separated list of layers to be interpreted (base is always applied)": 22, + "could not get API info for FullNode: %w": 141, + "custom node name": 65, + "deadline to compute WindowPoSt for ": 104, + "depends on output being a TTY": 42, + "detach local storage path": 96, + "do not interpret source layer": 29, + "don't check full-node sync status": 61, + "don't comment default values": 12, + "duration to wait till fail": 9, + "edit a config layer": 23, + "editor to use": 25, + "enables very verbose mode, useful for debugging the CLI": 44, + "find sector in the storage system": 99, + "generate ipni chunks from a file": 33, + "host address and port the gui will listen on": 60, + "host address and port the worker api will listen on": 59, + "initialize the path first": 89, + "layer name": 17, + "limit to log system": 39, + "list local storage paths": 97, + "list of layers to be interpreted (atop defaults). Default: base": 64, + "machine host:port (curio run --listen address)": 7, + "manage open file limit": 63, + "manage sector storage": 84, + "maximum fee in FIL user is willing to pay for this message": 56, + "only list local storage paths": 98, + "only run init, then return": 62, + "partition to compute WindowPoSt for": 109, + "path group names": 94, + "path groups allowed to pull data from this path (allow all if not specified)": 95, + "path to json file containing storage config": 108, + "save the whole config into the layer, not just the diff": 28, + "source config layer": 26, + "start sealing a deal sector early": 47, + "title of the config layer (req'd for stdin)": 15, + "true if --source is set": 30, + "use color in display output": 41, } -var enIndex = []uint32{ // 113 elements +var enIndex = []uint32{ // 233 elements // Entry 0 - 1F - 0x00000000, 0x00000035, 0x00000097, 0x0000015a, - 0x0000019c, 0x000001f5, 0x00000210, 0x0000021b, - 0x0000023d, 0x00000250, 0x0000026a, 0x0000028a, - 0x000002ba, 0x000002ce, 0x000002e8, 0x0000030e, - 0x00000385, 0x000003c2, 0x000003f5, 0x00000418, - 0x0000045e, 0x00000477, 0x000004a2, 0x000004bd, - 0x000004f2, 0x00000500, 0x0000050a, 0x00000542, - 0x0000059c, 0x000005cf, 0x00000619, 0x0000065a, + 0x00000000, 0x0000000b, 0x00000042, 0x00000126, + 0x0000014a, 0x0000025a, 0x000002a6, 0x000002bb, + 0x000002ea, 0x0000030c, 0x00000327, 0x00000380, + 0x0000039a, 0x000003b7, 0x000003f8, 0x0000040c, + 0x00000438, 0x0000048d, 0x00000498, 0x000004be, + 0x000004db, 0x00000535, 0x0000056c, 0x000005bf, + 0x000005d3, 0x000005e0, 0x000005ee, 0x00000602, + 0x00000643, 0x0000067b, 0x00000699, 0x000006b1, // Entry 20 - 3F - 0x0000068f, 0x00000698, 0x000006b9, 0x000006da, - 0x000006fa, 0x00000717, 0x00000734, 0x00000767, - 0x00000775, 0x00000789, 0x000007f4, 0x00000834, - 0x0000085d, 0x000008d4, 0x00000925, 0x0000094f, - 0x00000965, 0x000009b2, 0x000009ec, 0x000009f2, - 0x00000a2e, 0x00000a5a, 0x00000aa3, 0x00000ae3, - 0x00000b34, 0x00000b46, 0x00000b60, 0x00000b80, - 0x00000ba5, 0x00000bb9, 0x00000bce, 0x00000be3, + 0x000006dc, 0x000006f2, 0x00000713, 0x00000722, + 0x00000733, 0x00000741, 0x00000749, 0x00000947, + 0x0000095b, 0x0000098b, 0x000009a7, 0x000009c5, + 0x000009fe, 0x00000a36, 0x00000a4f, 0x00000a5c, + 0x00000a7e, 0x00000ab1, 0x00000ac5, 0x00000ace, + 0x00000af6, 0x00000b7d, 0x00000bac, 0x00000bc9, + 0x00000c1f, 0x00000c5a, 0x00000c88, 0x00000c9e, + 0x00000cd2, 0x00000cff, 0x00000d21, 0x00000d3c, // Entry 40 - 5F - 0x00000bf6, 0x00000c35, 0x00000c5f, 0x00000c77, - 0x00000c8b, 0x00000cae, 0x00000cc2, 0x00000cd9, - 0x00000ce0, 0x00000ce7, 0x00000ced, 0x00000cf3, - 0x00000d17, 0x00000d3a, 0x00000d62, 0x00000d83, - 0x00000d9e, 0x00000dc7, 0x00000de9, 0x00000e1b, - 0x00000eb2, 0x00000edd, 0x00000f15, 0x00000f3e, - 0x00000f76, 0x00000fb7, 0x00000fe7, 0x0000100a, - 0x00001032, 0x00001094, 0x000010a0, 0x000010ac, + 0x00000d53, 0x00000d93, 0x00000da4, 0x00000dbe, + 0x00000e3d, 0x00000e5e, 0x00000e7a, 0x00000ea0, + 0x00000edb, 0x00000ef8, 0x00000f13, 0x00000f32, + 0x00000f43, 0x00000f76, 0x00000f89, 0x00000fb0, + 0x00000fc5, 0x00001000, 0x00001041, 0x00001063, + 0x00001080, 0x00001096, 0x000011b9, 0x000011d3, + 0x000011da, 0x0000148a, 0x000014a4, 0x000014bb, + 0x000014db, 0x00001505, 0x00001552, 0x00001563, // Entry 60 - 7F - 0x000010bc, 0x000010cc, 0x000010dc, 0x00001103, - 0x00001144, 0x00001168, 0x00001179, 0x0000119b, - 0x000011ad, 0x000011da, 0x00001200, 0x0000125f, - 0x000012fc, 0x0000134a, 0x00001364, 0x00001382, - 0x000013e2, -} // Size: 476 bytes + 0x000015b0, 0x000015ca, 0x000015e3, 0x00001601, + 0x00001623, 0x00001643, 0x00001661, 0x000016d5, + 0x0000175a, 0x00001782, 0x000017c0, 0x0000188c, + 0x0000189d, 0x000018c9, 0x000018ed, 0x0000190f, + 0x00001924, 0x00001948, 0x0000198b, 0x000019a9, + 0x000019cc, 0x000019f5, 0x00001d7b, 0x00001da9, + 0x00001e51, 0x00001e86, 0x00001ee8, 0x00001fab, + 0x00001fed, 0x00002046, 0x00002061, 0x0000206c, + // Entry 80 - 9F + 0x0000208e, 0x000020a1, 0x000020bb, 0x000020db, + 0x0000210b, 0x0000211f, 0x00002139, 0x0000215f, + 0x000021d6, 0x00002213, 0x00002246, 0x00002269, + 0x000022af, 0x000022c8, 0x000022f3, 0x0000230e, + 0x00002343, 0x00002351, 0x0000235b, 0x00002393, + 0x000023ed, 0x00002420, 0x0000246a, 0x000024ab, + 0x000024e0, 0x000024e9, 0x0000250a, 0x0000252b, + 0x0000254b, 0x00002568, 0x00002585, 0x000025b8, + // Entry A0 - BF + 0x000025c6, 0x000025da, 0x00002645, 0x00002685, + 0x000026ae, 0x00002725, 0x00002776, 0x000027a0, + 0x000027b6, 0x00002803, 0x0000283d, 0x00002843, + 0x0000287f, 0x000028ab, 0x000028f4, 0x00002934, + 0x00002985, 0x00002997, 0x000029b1, 0x000029d1, + 0x000029f6, 0x00002a0a, 0x00002a1f, 0x00002a34, + 0x00002a47, 0x00002a86, 0x00002ab0, 0x00002ac8, + 0x00002adc, 0x00002aff, 0x00002b13, 0x00002b2a, + // Entry C0 - DF + 0x00002b31, 0x00002b38, 0x00002b3e, 0x00002b44, + 0x00002b68, 0x00002b8b, 0x00002bb3, 0x00002bd4, + 0x00002bef, 0x00002c18, 0x00002c3a, 0x00002c6c, + 0x00002d03, 0x00002d2e, 0x00002d66, 0x00002d8f, + 0x00002dc7, 0x00002e08, 0x00002e38, 0x00002e5b, + 0x00002e83, 0x00002ee5, 0x00002ef1, 0x00002efd, + 0x00002f0d, 0x00002f1d, 0x00002f2d, 0x00002f54, + 0x00002f95, 0x00002fb9, 0x00002fca, 0x00002fec, + // Entry E0 - FF + 0x00002ffe, 0x0000302b, 0x00003051, 0x000030b0, + 0x0000314d, 0x0000319b, 0x000031b5, 0x000031d3, + 0x00003233, +} // Size: 956 bytes -const enData string = "" + // Size: 5090 bytes - "\x04\x00\x01 0\x02Use the arrow keys to navigate: ↓ ↑ → ←\x02This intera" + - "ctive tool creates a new miner actor and creates the basic configuration" + - " layer for it.\x02This process is partially idempotent. Once a new miner" + - " actor has been created and subsequent steps fail, the user need to run " + - "'curio config new-cluster < miner ID >' to finish the configuration.\x02" + - "This interactive tool migrates lotus-miner to Curio in 5 minutes.\x02Eac" + - "h step needs your confirmation and can be reversed. Press Ctrl+C to exit" + - " at any time.\x02Ctrl+C pressed in Terminal\x02I want to:\x02Migrate fro" + - "m existing Lotus-Miner\x02Create a new miner\x02Aborting remaining steps" + - ".\x02Lotus-Miner to Curio Migration.\x02Where should we save your databa" + - "se config file?\x02Aborting migration.\x02Error writing file: %[1]s\x04" + - "\x00\x01 !\x02Try the web interface with %[1]s\x02For more servers, make" + - " /etc/curio.env with the curio.env database env and add the CURIO_LAYERS" + - " env to assign purposes.\x02You can now migrate your market node (%[1]s)" + - ", if applicable.\x02Additional info is at http://docs.curiostorage.org" + - "\x02New Miner initialization complete.\x02Migrating lotus-miner config.t" + - "oml to Curio in-database configuration.\x02Error getting API: %[1]s\x02c" + - "ould not get API info for FullNode: %[1]w\x02Error getting token: %[1]s" + - "\x02Unmigratable sectors found. Do you want to continue?\x02Yes, continu" + - "e\x02No, abort\x02Error saving config to layer: %[1]s. Aborting Migratio" + - "n\x02The Curio team wants to improve the software you use. Tell the team" + - " you're using `%[1]s`.\x02Select what you want to share with the Curio t" + - "eam.\x02Individual Data: Miner ID, Curio version, chain (%[1]s or %[2]s)" + - ". Signed.\x02Aggregate-Anonymous: version, chain, and Miner power (bucke" + - "ted).\x02Hint: I am someone running Curio on whichever chain.\x02Nothing" + - ".\x02Error getting miner power: %[1]s\x02Error marshalling message: %[1]" + - "s\x02Error getting miner info: %[1]s\x02Error signing message: %[1]s\x02" + - "Error sending message: %[1]s\x04\x00\x01 .\x02Error sending message: Sta" + - "tus %[1]s, Message:\x02Message sent.\x04\x00\x01 \x0f\x02Documentation:" + - "\x02The '%[1]s' layer stores common configuration. All curio instances c" + - "an include it in their %[2]s argument.\x02You can add other layers for p" + - "er-machine configuration changes.\x02Filecoin %[1]s channels: %[2]s and " + - "%[3]s\x02Increase reliability using redundancy: start multiple machines " + - "with at-least the post layer: 'curio run --layers=post'\x02One database " + - "can serve multiple miner IDs: Run a migration for each lotus-miner.\x02C" + - "onnected to Yugabyte. Schema is current.\x02Connected to Yugabyte\x02To " + - "start, ensure your sealing pipeline is drained and shut-down lotus-miner" + - ".\x02Select the location of your lotus-miner config directory?\x02Other" + - "\x02Enter the path to the configuration directory used by %[1]s\x04\x00" + - "\x01 '\x02No path provided, abandoning migration\x02Cannot read the conf" + - "ig.toml file in the provided directory, Error: %[1]s\x02Could not create" + - " repo from directory: %[1]s. Aborting migration\x02Could not lock miner " + - "repo. Your miner must be stopped: %[1]s\x0a Aborting migration\x02Read M" + - "iner Config\x04\x00\x01\x0a\x15\x02Step Complete: %[1]s\x02Initializing " + - "a new miner actor.\x02Enter the info to create a new miner\x02Owner Wall" + - "et: %[1]s\x02Worker Wallet: %[1]s\x02Sender Wallet: %[1]s\x02Sector Size" + - ": %[1]s\x02Continue to verify the addresses and create a new miner actor" + - ".\x04\x00\x01 %\x02Miner creation error occurred: %[1]s\x02Enter the own" + - "er address\x02No address provided\x02Failed to parse the address: %[1]s" + - "\x02Enter %[1]s address\x02Select the Sector Size\x0264 GiB\x0232 GiB" + - "\x028 MiB\x022 KiB\x04\x00\x01 \x1f\x02Sector selection failed: %[1]s" + - "\x02Failed to parse sector size: %[1]s\x02Failed to create the miner act" + - "or: %[1]s\x02Miner %[1]s created successfully\x02Cannot reach the DB: %[" + - "1]s\x02Error connecting to full node API: %[1]s\x02Pre-initialization st" + - "eps complete\x02Failed to generate random bytes for secret: %[1]s\x02Ple" + - "ase do not run guided-setup again as miner creation is not idempotent. Y" + - "ou need to run 'curio config new-cluster %[1]s' to finish the configurat" + - "ion\x02Failed to get API info for FullNode: %[1]w\x02Failed to verify th" + - "e auth token from daemon node: %[1]s\x02Failed to generate default confi" + - "g: %[1]s\x02Failed to insert 'base' config layer in database: %[1]s\x02C" + - "onfiguration 'base' was updated to include this miner's address\x02Faile" + - "d to load base config from database: %[1]s\x02Failed to parse base confi" + - "g: %[1]s\x02Failed to regenerate base config: %[1]s\x02Enter the info to" + - " connect to your Yugabyte database installation (https://download.yugaby" + - "te.com/)\x02Host: %[1]s\x02Port: %[1]s\x02Username: %[1]s\x02Password: %" + - "[1]s\x02Database: %[1]s\x02Continue to connect and update schema.\x04" + - "\x00\x01 <\x02Database config error occurred, abandoning migration: %[1]" + - "s\x02Enter the Yugabyte database host(s)\x02No host provided\x02Enter th" + - "e Yugabyte database %[1]s\x02No value provided\x02Error connecting to Yu" + - "gabyte database: %[1]s\x02Migrating metadata for %[1]d sectors.\x02Confi" + - "guration 'base' was updated to include this miner's address (%[1]s) and " + - "its wallet setup.\x02Compare the configurations %[1]s to %[2]s. Changes " + - "between the miner IDs other than wallet addreses should be a new, minima" + - "l layer for runners that need it.\x02Configuration 'base' was created to" + - " resemble this lotus-miner's config.toml .\x04\x00\x01 \x15\x02Layer %[1" + - "]s created.\x04\x00\x01 \x19\x02To work with the config:\x02To run Curio" + - ": With machine or cgroup isolation, use the command (with example layer " + - "selection):" +const enData string = "" + // Size: 12851 bytes + "\x02Math Utils\x02Analyze and display the layout of batch sealer threads" + + "\x02Analyze and display the layout of batch sealer threads on your CPU." + + "\x0a\x0aIt provides detailed information about CPU utilization for batch" + + " sealing operations, including core allocation, thread\x0adistribution f" + + "or different batch sizes.\x02Generate a supra_seal configuration\x02Gene" + + "rate a supra_seal configuration for a given batch size.\x0a\x0aThis comm" + + "and outputs a configuration expected by SupraSeal. Main purpose of this " + + "command is for debugging and testing.\x0aThe config can be used directly" + + " with SupraSeal binaries to test it without involving Curio.\x02Zen3 and" + + " later supports two sectors per thread, set to false for older CPUs\x02E" + + "xecute cli commands\x02machine host:port (curio run --listen address)" + + "\x02Wait for Curio api to come online\x02duration to wait till fail\x02M" + + "anage node config by layers. The layer 'base' will always be applied at " + + "Curio start-up.\x02Print default node config\x02don't comment default va" + + "lues\x02Set a config layer or the base by providing a filename or stdin." + + "\x02a layer's file name\x02title of the config layer (req'd for stdin)" + + "\x02Get a config layer by name. You may want to pipe the output to a fil" + + "e, or use 'less'\x02layer name\x02List config layers present in the DB." + + "\x02Remove a named config layer.\x02Interpret stacked config layers by t" + + "his version of curio, with system-generated comments.\x02a list of layer" + + "s to be interpreted as the final config\x02comma or space separated list" + + " of layers to be interpreted (base is always applied)\x02edit a config l" + + "ayer\x02[layer name]\x02editor to use\x02source config layer\x02allow ov" + + "erwrite of existing layer if source is a different layer\x02save the who" + + "le config into the layer, not just the diff\x02do not interpret source l" + + "ayer\x02true if --source is set\x02Create new configuration for a new cl" + + "uster\x02[SP actor address...]\x02generate ipni chunks from a file\x02Ma" + + "nage logging\x02List log systems\x02Set log level\x02[level]\x04\x00\x01" + + "\x0a\xf8\x03\x02Set the log level for logging systems:\x0a\x0a The sys" + + "tem flag can be specified multiple times.\x0a\x0a eg) log set-level --" + + "system chain --system chainxchg debug\x0a\x0a Available Levels:\x0a " + + "debug\x0a info\x0a warn\x0a error\x0a\x0a Environment Variables:" + + "\x0a GOLOG_LOG_LEVEL - Default log level for all log systems\x0a GOL" + + "OG_LOG_FMT - Change output log format (json, nocolor)\x0a GOLOG_FILE" + + " - Write logs to file\x0a GOLOG_OUTPUT - Specify whether to ou" + + "tput to file, stderr, stdout or a combination, i.e. file+stderr\x02limit" + + " to log system\x02Filecoin decentralized storage network provider\x02use" + + " color in display output\x02depends on output being a TTY\x02Command sep" + + "arated list of hostnames for yugabyte cluster\x02enables very verbose mo" + + "de, useful for debugging the CLI\x02Fetch proving parameters\x02[sectorS" + + "ize]\x02start sealing a deal sector early\x02Specify actor address to st" + + "art sealing sectors for\x02Use synthetic PoRep\x02\x02Add URL to" + + " fetch data for offline deals\x02CSV file location to use for multiple d" + + "eal input. Each line in the file should be in the format 'uuid,raw size," + + "url,header1,header2...'\x02Custom `HEADER` to include in the HTTP reques" + + "t\x02`URL` to send the request to\x02Moves funds from the deal collatera" + + "l wallet into escrow with the storage market actor\x02maximum fee in FIL" + + " user is willing to pay for this message\x02Specify wallet address to se" + + "nd the funds from\x02Start a Curio process\x02host address and port the " + + "worker api will listen on\x02host address and port the gui will listen o" + + "n\x02don't check full-node sync status\x02only run init, then return\x02" + + "manage open file limit\x02list of layers to be interpreted (atop default" + + "s). Default: base\x02custom node name\x02Start Curio web interface\x02St" + + "art an instance of Curio web interface. \x0a\x09This creates the 'web' l" + + "ayer if it does not exist, then calls run with that layer.\x02Address to" + + " listen for the GUI on\x02Manage the sealing pipeline\x02Start new seali" + + "ng operations manually\x02Start sealing sectors for all actors now (not " + + "on schedule)\x02Start sealing new CC sectors\x02Number of sectors to sta" + + "rt\x02How long to commit sectors for\x021278 (3.5 years)\x02(debug tool)" + + " Copy LM sector metadata into Curio DB\x02Path to miner repo\x02Ignore s" + + "ectors that cannot be migrated\x02List pipeline events\x02Filter events " + + "by actor address; lists all if not specified\x02Filter events by sector " + + "number; requires --actor to be specified\x02Limit output to the last N e" + + "vents\x02Stop a running Curio process\x02manage sector storage\x02Sector" + + "s can be stored across many filesystem paths. These\x0acommands provide " + + "ways to manage the storage a Curio node will use to store sectors\x0alon" + + "g term for proving (references as 'store') as well as how sectors will b" + + "e\x0astored while moving through the sealing pipeline (references as 'se" + + "al').\x02attach local storage path\x02[path]\x04\x00\x04\x0a \xa7\x05" + + "\x02Storage can be attached to a Curio node using this command. The stor" + + "age volume\x0alist is stored local to the Curio node in storage.json set" + + " in curio run. We do not\x0arecommend manually modifying this value with" + + "out further understanding of the\x0astorage system.\x0a\x0aEach storage " + + "volume contains a configuration file which describes the\x0acapabilities" + + " of the volume. When the '--init' flag is provided, this file will\x0abe" + + " created using the additional flags.\x0a\x0aWeight\x0aA high weight valu" + + "e means data will be more likely to be stored in this path\x0a\x0aSeal" + + "\x0aData for the sealing process will be stored here\x0a\x0aStore\x0aFin" + + "alized sectors that will be moved here for long term storage and be prov" + + "en\x0aover time\x02initialize the path first\x02(for init) path weight" + + "\x02(for init) use path for sealing\x02(for init) use path for long-term" + + " storage\x02(for init) limit storage space for sectors (expensive for ve" + + "ry large paths!)\x02path group names\x02path groups allowed to pull data" + + " from this path (allow all if not specified)\x02detach local storage pat" + + "h\x02list local storage paths\x02only list local storage paths\x02find s" + + "ector in the storage system\x02[miner address] [sector number]\x02Utilit" + + "y functions for testing\x02Compute a proof-of-spacetime for a sector (re" + + "quires the sector to be pre-sealed). These will not send to the chain." + + "\x02Test the windowpost scheduler by running it on the next available cu" + + "rio. If tasks fail all retries, you will need to ctrl+c to exit.\x04\x00" + + "\x01 #\x02deadline to compute WindowPoSt for\x02Compute WindowPoSt for p" + + "erformance and configuration testing.\x02Note: This command is intended " + + "to be used to verify PoSt compute performance.\x0aIt will not send any m" + + "essages to the chain. Since it can compute any deadline, output may be i" + + "ncorrectly timed for the chain.\x02[deadline index]\x02path to json file" + + " containing storage config\x02partition to compute WindowPoSt for\x02Col" + + "lection of debugging utilities\x02Manage unsealed data\x02Get informatio" + + "n about unsealed data\x02List data from the sectors_unseal_pipeline and " + + "sectors_meta tables\x02Filter by storage provider ID\x02Output file path" + + " (default: stdout)\x02Set the target unseal state for a sector\x04\x00" + + "\x01\x0a\x80\x07\x02Set the target unseal state for a specific sector." + + "\x0a : The storage provider ID\x0a : The se" + + "ctor number\x0a : The target state (true, false, or none" + + ")\x0a\x0a The unseal target state indicates to curio how an unsealed c" + + "opy of the sector should be maintained.\x0a\x09 If the target state is" + + " true, curio will ensure that the sector is unsealed.\x0a\x09 If the t" + + "arget state is false, curio will ensure that there is no unsealed copy o" + + "f the sector.\x0a\x09 If the target state is none, curio will not chan" + + "ge the current state of the sector.\x0a\x0a Currently when the curio w" + + "ill only start new unseal processes when the target state changes from a" + + "nother state to true.\x0a\x0a When the target state is false, and an u" + + "nsealed sector file exists, the GC mark step will create a removal mark" + + "\x0a for the unsealed sector file. The file will only be removed after" + + " the removal mark is accepted.\x02Check data integrity in unsealed secto" + + "r files\x02Create a check task for a specific sector, wait for its compl" + + "etion, and output the result.\x0a : The storage provider ID" + + "\x0a : The sector number\x04\x00\x01 0\x02Use the arrow" + + " keys to navigate: ↓ ↑ → ←\x02This interactive tool creates a new miner " + + "actor and creates the basic configuration layer for it.\x02This process " + + "is partially idempotent. Once a new miner actor has been created and sub" + + "sequent steps fail, the user need to run 'curio config new-cluster < min" + + "er ID >' to finish the configuration.\x02This interactive tool migrates " + + "lotus-miner to Curio in 5 minutes.\x02Each step needs your confirmation " + + "and can be reversed. Press Ctrl+C to exit at any time.\x02Ctrl+C pressed" + + " in Terminal\x02I want to:\x02Migrate from existing Lotus-Miner\x02Creat" + + "e a new miner\x02Aborting remaining steps.\x02Lotus-Miner to Curio Migra" + + "tion.\x02Where should we save your database config file?\x02Aborting mig" + + "ration.\x02Error writing file: %[1]s\x04\x00\x01 !\x02Try the web interf" + + "ace with %[1]s\x02For more servers, make /etc/curio.env with the curio.e" + + "nv database env and add the CURIO_LAYERS env to assign purposes.\x02You " + + "can now migrate your market node (%[1]s), if applicable.\x02Additional i" + + "nfo is at http://docs.curiostorage.org\x02New Miner initialization compl" + + "ete.\x02Migrating lotus-miner config.toml to Curio in-database configura" + + "tion.\x02Error getting API: %[1]s\x02could not get API info for FullNode" + + ": %[1]w\x02Error getting token: %[1]s\x02Unmigratable sectors found. Do " + + "you want to continue?\x02Yes, continue\x02No, abort\x02Error saving conf" + + "ig to layer: %[1]s. Aborting Migration\x02The Curio team wants to improv" + + "e the software you use. Tell the team you're using `%[1]s`.\x02Select wh" + + "at you want to share with the Curio team.\x02Individual Data: Miner ID, " + + "Curio version, chain (%[1]s or %[2]s). Signed.\x02Aggregate-Anonymous: v" + + "ersion, chain, and Miner power (bucketed).\x02Hint: I am someone running" + + " Curio on whichever chain.\x02Nothing.\x02Error getting miner power: %[1" + + "]s\x02Error marshalling message: %[1]s\x02Error getting miner info: %[1]" + + "s\x02Error signing message: %[1]s\x02Error sending message: %[1]s\x04" + + "\x00\x01 .\x02Error sending message: Status %[1]s, Message:\x02Message s" + + "ent.\x04\x00\x01 \x0f\x02Documentation:\x02The '%[1]s' layer stores comm" + + "on configuration. All curio instances can include it in their %[2]s argu" + + "ment.\x02You can add other layers for per-machine configuration changes." + + "\x02Filecoin %[1]s channels: %[2]s and %[3]s\x02Increase reliability usi" + + "ng redundancy: start multiple machines with at-least the post layer: 'cu" + + "rio run --layers=post'\x02One database can serve multiple miner IDs: Run" + + " a migration for each lotus-miner.\x02Connected to Yugabyte. Schema is c" + + "urrent.\x02Connected to Yugabyte\x02To start, ensure your sealing pipeli" + + "ne is drained and shut-down lotus-miner.\x02Select the location of your " + + "lotus-miner config directory?\x02Other\x02Enter the path to the configur" + + "ation directory used by %[1]s\x04\x00\x01 '\x02No path provided, abandon" + + "ing migration\x02Cannot read the config.toml file in the provided direct" + + "ory, Error: %[1]s\x02Could not create repo from directory: %[1]s. Aborti" + + "ng migration\x02Could not lock miner repo. Your miner must be stopped: %" + + "[1]s\x0a Aborting migration\x02Read Miner Config\x04\x00\x01\x0a\x15\x02" + + "Step Complete: %[1]s\x02Initializing a new miner actor.\x02Enter the inf" + + "o to create a new miner\x02Owner Wallet: %[1]s\x02Worker Wallet: %[1]s" + + "\x02Sender Wallet: %[1]s\x02Sector Size: %[1]s\x02Continue to verify the" + + " addresses and create a new miner actor.\x04\x00\x01 %\x02Miner creation" + + " error occurred: %[1]s\x02Enter the owner address\x02No address provided" + + "\x02Failed to parse the address: %[1]s\x02Enter %[1]s address\x02Select " + + "the Sector Size\x0264 GiB\x0232 GiB\x028 MiB\x022 KiB\x04\x00\x01 \x1f" + + "\x02Sector selection failed: %[1]s\x02Failed to parse sector size: %[1]s" + + "\x02Failed to create the miner actor: %[1]s\x02Miner %[1]s created succe" + + "ssfully\x02Cannot reach the DB: %[1]s\x02Error connecting to full node A" + + "PI: %[1]s\x02Pre-initialization steps complete\x02Failed to generate ran" + + "dom bytes for secret: %[1]s\x02Please do not run guided-setup again as m" + + "iner creation is not idempotent. You need to run 'curio config new-clust" + + "er %[1]s' to finish the configuration\x02Failed to get API info for Full" + + "Node: %[1]w\x02Failed to verify the auth token from daemon node: %[1]s" + + "\x02Failed to generate default config: %[1]s\x02Failed to insert 'base' " + + "config layer in database: %[1]s\x02Configuration 'base' was updated to i" + + "nclude this miner's address\x02Failed to load base config from database:" + + " %[1]s\x02Failed to parse base config: %[1]s\x02Failed to regenerate bas" + + "e config: %[1]s\x02Enter the info to connect to your Yugabyte database i" + + "nstallation (https://download.yugabyte.com/)\x02Host: %[1]s\x02Port: %[1" + + "]s\x02Username: %[1]s\x02Password: %[1]s\x02Database: %[1]s\x02Continue " + + "to connect and update schema.\x04\x00\x01 <\x02Database config error occ" + + "urred, abandoning migration: %[1]s\x02Enter the Yugabyte database host(s" + + ")\x02No host provided\x02Enter the Yugabyte database %[1]s\x02No value p" + + "rovided\x02Error connecting to Yugabyte database: %[1]s\x02Migrating met" + + "adata for %[1]d sectors.\x02Configuration 'base' was updated to include " + + "this miner's address (%[1]s) and its wallet setup.\x02Compare the config" + + "urations %[1]s to %[2]s. Changes between the miner IDs other than wallet" + + " addreses should be a new, minimal layer for runners that need it.\x02Co" + + "nfiguration 'base' was created to resemble this lotus-miner's config.tom" + + "l .\x04\x00\x01 \x15\x02Layer %[1]s created.\x04\x00\x01 \x19\x02To work" + + " with the config:\x02To run Curio: With machine or cgroup isolation, use" + + " the command (with example layer selection):" -var koIndex = []uint32{ // 113 elements +var koIndex = []uint32{ // 233 elements // Entry 0 - 1F - 0x00000000, 0x00000044, 0x000000c1, 0x000001c1, - 0x0000020e, 0x00000289, 0x000002aa, 0x000002bc, - 0x000002e5, 0x00000300, 0x00000325, 0x00000348, - 0x0000038e, 0x000003a9, 0x000003c5, 0x00000404, - 0x000004ba, 0x0000050a, 0x0000054a, 0x00000570, - 0x000005c9, 0x000005e8, 0x00000624, 0x00000654, - 0x000006a4, 0x000006b0, 0x000006c2, 0x0000071a, - 0x000007a6, 0x000007df, 0x00000835, 0x00000873, + 0x00000000, 0x00000014, 0x0000004e, 0x00000168, + 0x00000181, 0x000002b1, 0x00000328, 0x0000033a, + 0x0000036e, 0x000003aa, 0x000003cf, 0x0000043e, + 0x0000045a, 0x0000047f, 0x000004d4, 0x000004ef, + 0x0000051c, 0x0000059b, 0x000005ac, 0x000005d2, + 0x000005ff, 0x0000065e, 0x0000068d, 0x000006e8, + 0x00000700, 0x00000713, 0x00000727, 0x0000073f, + 0x00000789, 0x000007c8, 0x000007ed, 0x0000080f, // Entry 20 - 3F - 0x000008c1, 0x000008dc, 0x00000916, 0x00000949, - 0x00000983, 0x000009ad, 0x000009d7, 0x00000a19, - 0x00000a3d, 0x00000a4a, 0x00000ad0, 0x00000b22, - 0x00000b49, 0x00000be5, 0x00000c77, 0x00000cb8, - 0x00000cce, 0x00000d39, 0x00000d88, 0x00000d8f, - 0x00000dd7, 0x00000e29, 0x00000e83, 0x00000eed, - 0x00000f7e, 0x00000f96, 0x00000fb0, 0x00000fd4, - 0x00001007, 0x0000101f, 0x00001037, 0x0000104f, + 0x0000083c, 0x00000852, 0x00000872, 0x00000880, + 0x00000898, 0x000008ad, 0x000008b6, 0x00000ade, + 0x00000afc, 0x00000b30, 0x00000b58, 0x00000b70, + 0x00000bbf, 0x00000c02, 0x00000c23, 0x00000c33, + 0x00000c5c, 0x00000c85, 0x00000c99, 0x00000ca2, + 0x00000cd8, 0x00000d6d, 0x00000da0, 0x00000db7, + 0x00000e11, 0x00000e5e, 0x00000e84, 0x00000e9e, + 0x00000edb, 0x00000f0e, 0x00000f39, 0x00000f58, // Entry 40 - 5F - 0x00001064, 0x000010bb, 0x000010e6, 0x000010fe, - 0x00001125, 0x00001148, 0x0000115c, 0x00001171, - 0x00001178, 0x0000117f, 0x00001185, 0x0000118b, - 0x000011ac, 0x000011d6, 0x000011fc, 0x00001235, - 0x0000126d, 0x000012a5, 0x000012c4, 0x00001310, - 0x000013ce, 0x0000141a, 0x00001468, 0x0000148b, - 0x000014e7, 0x00001537, 0x0000158c, 0x000015cf, - 0x0000160e, 0x0000167c, 0x0000168d, 0x0000169b, + 0x00000f74, 0x00000fb3, 0x00000fd2, 0x00000ff3, + 0x00001095, 0x000010b4, 0x000010d2, 0x000010f8, + 0x0000113f, 0x0000115b, 0x00001170, 0x0000118b, + 0x00001199, 0x000011dc, 0x000011f7, 0x0000121a, + 0x0000123b, 0x0000129c, 0x000012d8, 0x00001308, + 0x00001330, 0x0000134b, 0x00001497, 0x000014b9, + 0x000014c2, 0x000017fb, 0x00001816, 0x00001836, + 0x0000185d, 0x0000188b, 0x000018f3, 0x00001908, // Entry 60 - 7F - 0x000016b3, 0x000016c7, 0x000016e1, 0x0000170b, - 0x0000176e, 0x000017aa, 0x000017d4, 0x0000180c, - 0x00001830, 0x00001884, 0x000018bc, 0x00001935, - 0x000019ef, 0x00001a46, 0x00001a75, 0x00001a9c, - 0x00001b28, -} // Size: 476 bytes + 0x00001970, 0x00001992, 0x000019b4, 0x000019d9, + 0x00001a04, 0x00001a27, 0x00001a48, 0x00001abe, + 0x00001b68, 0x00001b8c, 0x00001bc5, 0x00001cb7, + 0x00001cca, 0x00001d08, 0x00001d2a, 0x00001d48, + 0x00001d66, 0x00001d98, 0x00001ddf, 0x00001e06, + 0x00001e36, 0x00001e5f, 0x0000223f, 0x00002275, + 0x00002329, 0x0000236d, 0x000023ea, 0x000024ea, + 0x00002537, 0x000025b2, 0x000025d3, 0x000025e5, + // Entry 80 - 9F + 0x0000260e, 0x00002629, 0x0000264e, 0x00002671, + 0x000026b7, 0x000026d2, 0x000026ee, 0x0000272d, + 0x000027e3, 0x00002833, 0x00002873, 0x00002899, + 0x000028f2, 0x00002911, 0x0000294d, 0x0000297d, + 0x000029cd, 0x000029d9, 0x000029eb, 0x00002a43, + 0x00002acf, 0x00002b08, 0x00002b5e, 0x00002b9c, + 0x00002bea, 0x00002c05, 0x00002c3f, 0x00002c72, + 0x00002cac, 0x00002cd6, 0x00002d00, 0x00002d42, + // Entry A0 - BF + 0x00002d66, 0x00002d73, 0x00002df9, 0x00002e4b, + 0x00002e72, 0x00002f0e, 0x00002fa0, 0x00002fe1, + 0x00002ff7, 0x00003062, 0x000030b1, 0x000030b8, + 0x00003100, 0x00003152, 0x000031ac, 0x00003216, + 0x000032a7, 0x000032bf, 0x000032d9, 0x000032fd, + 0x00003330, 0x00003348, 0x00003360, 0x00003378, + 0x0000338d, 0x000033e4, 0x0000340f, 0x00003427, + 0x0000344e, 0x00003471, 0x00003485, 0x0000349a, + // Entry C0 - DF + 0x000034a1, 0x000034a8, 0x000034ae, 0x000034b4, + 0x000034d5, 0x000034ff, 0x00003525, 0x0000355e, + 0x00003596, 0x000035ce, 0x000035ed, 0x00003639, + 0x000036f7, 0x00003743, 0x00003791, 0x000037b4, + 0x00003810, 0x00003860, 0x000038b5, 0x000038f8, + 0x00003937, 0x000039a5, 0x000039b6, 0x000039c4, + 0x000039dc, 0x000039f0, 0x00003a0a, 0x00003a34, + 0x00003a97, 0x00003ad3, 0x00003afd, 0x00003b35, + // Entry E0 - FF + 0x00003b59, 0x00003bad, 0x00003be5, 0x00003c5e, + 0x00003d18, 0x00003d6f, 0x00003d9e, 0x00003dc5, + 0x00003e51, +} // Size: 956 bytes -const koData string = "" + // Size: 6952 bytes +const koData string = "" + // Size: 15953 bytes + "\x02수학 유틸리티\x02배치 실러 스레드의 레이아웃 분석 및 표시\x02CPU에서 배치 실러 스레드의 레이아웃을 분석하고 표시" + + "합니다.\x0a\x0a이 작업은 배치 실링 작업의 CPU 사용량에 대한 자세한 정보를 제공하며, 여기에는 코어 할당 및 다양한" + + " 배치 크기에 대한 스레드 분포가 포함됩니다.\x02supra_seal 구성 생성\x02주어진 배치 크기에 대한 supra_sea" + + "l 구성을 생성합니다.\x0a\x0a이 명령은 SupraSeal에서 기대하는 구성을 출력하며, 주로 디버깅 및 테스트를 목적으로 " + + "합니다.\x0a구성은 Curio를 사용하지 않고도 SupraSeal 바이너리에서 직접 사용할 수 있습니다.\x02Zen3 및 " + + "이후 버전은 스레드당 두 개의 섹터를 지원하며, 이전 CPU에서는 false로 설정합니다\x02CLI 명령 실행\x02기계 호" + + "스트:포트 (curio run --listen 주소)\x02Curio API가 온라인 상태가 될 때까지 기다리기\x02실패할 " + + "때까지 대기할 시간\x02노드 구성을 레이어별로 관리합니다. 'base' 레이어는 항상 Curio 시작 시 적용됩니다.\x02" + + "기본 노드 구성 출력\x02기본값에 주석을 달지 않음\x02파일 이름 또는 stdin을 제공하여 구성 레이어 또는 기본값 설정" + + ".\x02레이어의 파일 이름\x02구성 레이어의 제목 (stdin에 필요)\x02이름으로 구성 레이어를 가져옵니다. 출력을 파일로" + + " 파이핑하거나 'less'를 사용할 수 있습니다.\x02레이어 이름\x02DB에 있는 구성 레이어 목록.\x02이름이 지정된 구성" + + " 레이어 제거.\x02시스템 생성 주석과 함께 이 버전의 Curio에서 스택된 구성 레이어 해석.\x02최종 구성으로 해석될 레이" + + "어 목록\x02쉼표 또는 공백으로 구분된 해석될 레이어 목록 (base는 항상 적용됨)\x02구성 레이어 편집\x02[레이어 " + + "이름]\x02사용할 편집기\x02원본 구성 레이어\x02원본이 다른 레이어일 경우 기존 레이어 덮어쓰기 허용\x02차이점만이 " + + "아니라 전체 구성을 레이어에 저장\x02원본 레이어 해석하지 않음\x02--source가 설정된 경우 true\x02새 클러스" + + "터에 대한 새 구성 생성\x02[SP 액터 주소...]\x02파일에서 IPNI 청크 생성\x02로깅 관리\x02로그 시스템 목" + + "록\x02로그 레벨 설정\x02[레벨]\x04\x00\x01\x0a\xa2\x04\x02로깅 시스템의 로그 레벨을 설정합니다:" + + "\x0a\x0a 시스템 플래그는 여러 번 지정할 수 있습니다.\x0a\x0a 예) log set-level --system" + + " chain --system chainxchg debug\x0a\x0a 사용 가능한 레벨:\x0a debug\x0a i" + + "nfo\x0a warn\x0a error\x0a\x0a 환경 변수:\x0a GOLOG_LOG_LEVEL - 모든 로" + + "그 시스템의 기본 로그 레벨\x0a GOLOG_LOG_FMT - 출력 로그 형식 변경 (json, nocolor)" + + "\x0a GOLOG_FILE - 로그를 파일에 기록\x0a GOLOG_OUTPUT - 출력 위치 지정 (파일" + + ", stderr, stdout 또는 조합, 예: file+stderr)\x02로그 시스템으로 제한\x02Filecoin 분산 스토" + + "리지 네트워크 제공자\x02디스플레이 출력에 색상 사용\x02출력이 TTY에 의존\x02유가바이트 클러스터의 호스트 이름을 쉼" + + "표로 구분한 목록\x02매우 상세한 모드를 활성화하여 CLI 디버깅에 유용\x02증명 매개변수 가져오기\x02[섹터 크기]" + + "\x02거래 섹터를 조기에 실링 시작\x02실링할 섹터의 액터 주소 지정\x02합성 PoRep 사용\x02<섹터>\x02오프라인 " + + "거래 데이터를 가져올 URL 추가\x02여러 거래 입력에 사용할 CSV 파일 위치. 파일의 각 행은 'uuid, 원시 크기, " + + "url, header1, header2...' 형식이어야 합니다.\x02HTTP 요청에 포함할 사용자 정의 `HEADER`\x02" + + "요청을 보낼 `URL`\x02거래 담보 지갑에서 자금을 스토리지 시장 액터의 에스크로로 이동\x02사용자가 이 메시지에 대해 " + + "지불하려는 FIL의 최대 수수료\x02자금을 보낼 지갑 주소 지정\x02Curio 프로세스 시작\x02작업자 API가 수신 대" + + "기할 호스트 주소와 포트\x02GUI가 수신 대기할 호스트 주소와 포트\x02풀 노드 동기화 상태 확인 안 함\x02init만" + + " 실행하고 돌아옴\x02열린 파일 제한 관리\x02해석될 레이어 목록 (기본값 위에). 기본값: base\x02사용자 지정 노드 " + + "이름\x02Curio 웹 인터페이스 시작\x02Curio 웹 인터페이스 인스턴스를 시작합니다.\x0a\x09존재하지 않으면 '" + + "web' 레이어를 생성하고 해당 레이어로 실행을 호출합니다.\x02GUI가 수신 대기할 주소\x02실링 파이프라인 관리\x02새로" + + "운 실링 작업 수동 시작\x02모든 액터에 대한 섹터 실링 즉시 시작 (일정에 없음)\x02새 CC 섹터 실링 시작\x02시작" + + "할 섹터 수\x02섹터를 커밋할 기간\x021278 (3.5년)\x02(디버그 도구) LM 섹터 메타데이터를 Curio DB로" + + " 복사\x02마이너 저장소 경로\x02이동할 수 없는 섹터 무시\x02파이프라인 이벤트 목록\x02액터 주소로 이벤트 필터링; 지" + + "정하지 않으면 모든 이벤트를 나열합니다\x02섹터 번호로 이벤트 필터링; --actor 지정 필요\x02출력을 마지막 N개의 " + + "이벤트로 제한\x02실행 중인 Curio 프로세스 중지\x02섹터 스토리지 관리\x02섹터는 여러 파일 시스템 경로에 걸쳐 저" + + "장될 수 있습니다.\x0a이 명령은 Curio 노드가 섹터를 장기 저장(증명용, 'store'로 참조)하는 스토리지를 관리하는" + + " 방법과\x0a실링 파이프라인을 통해 이동하는 동안 섹터가 어떻게 저장될지를 관리합니다('seal'로 참조).\x02로컬 스토리지" + + " 경로 연결\x02[경로]\x04\x00\x04\x0a \xb0\x06\x02이 명령을 사용하여 Curio 노드에 스토리지를 " + + "연결할 수 있습니다. 스토리지 볼륨 목록은 curio run에 설정된 storage.json에 로컬로 저장됩니다.\x0a스토리" + + "지 시스템에 대한 추가 이해 없이 수동으로 이 값을 수정하는 것은 권장하지 않습니다.\x0a\x0a각 스토리지 볼륨에는 볼륨의" + + " 기능을 설명하는 구성 파일이 포함되어 있습니다. '--init' 플래그가 제공되면 이 파일은 추가 플래그를 사용하여 생성됩니다." + + "\x0a\x0aWeight\x0a높은 가중치 값은 데이터가 이 경로에 저장될 가능성이 더 높다는 것을 의미합니다\x0a\x0aSe" + + "al\x0a실링 프로세스 데이터를 여기에 저장합니다\x0a\x0aStore\x0a완료된 섹터는 장기 저장을 위해 여기로 이동되며 " + + "시간이 지남에 따라 증명됩니다\x02경로를 먼저 초기화\x02(초기화용) 경로 가중치\x02(초기화용) 실링에 경로 사용" + + "\x02(초기화용) 장기 저장에 경로 사용\x02(초기화용) 섹터에 대한 저장 공간 제한 (매우 큰 경로에서는 비용이 많이 듦!)" + + "\x02경로 그룹 이름\x02이 경로에서 데이터를 가져올 수 있는 경로 그룹 (지정하지 않으면 모두 허용)\x02로컬 스토리지 경" + + "로 분리\x02로컬 스토리지 경로 목록\x02로컬 스토리지 경로만 나열\x02스토리지 시스템에서 섹터 찾기\x02[마이너 주소" + + "] [섹터 번호]\x02테스트용 유틸리티 기능\x02섹터에 대한 증명 계산 (섹터가 사전 실링되어야 함). 이는 체인으로 전송되지" + + " 않습니다.\x02다음 사용 가능한 Curio에서 windowpost 스케줄러를 실행하여 테스트합니다. 모든 재시도가 실패하면 c" + + "trl+c를 눌러 종료해야 합니다.\x04\x00\x01 \x1f\x02WindowPoSt를 계산할 기한\x02성능 및 구성 테스" + + "트를 위한 WindowPoSt 계산.\x02참고: 이 명령은 PoSt 계산 성능을 검증하기 위해 사용됩니다.\x0a체인으로 메" + + "시지를 전송하지 않습니다. 모든 기한을 계산할 수 있으므로 출력이 체인과 부정확하게 일치할 수 있습니다.\x02[기한 인덱스]" + + "\x02스토리지 구성 파일이 포함된 JSON 파일의 경로\x02WindowPoSt를 계산할 파티션\x02디버깅 유틸리티 모음" + + "\x02미봉인 데이터를 관리\x02미봉인 데이터에 대한 정보 가져오기\x02sectors_unseal_pipeline 및 sect" + + "ors_meta 테이블의 데이터 나열\x02스토리지 제공자 ID로 필터링\x02출력 파일 경로 (기본값: 표준 출력)\x02섹터의" + + " 목표 미봉인 상태 설정\x04\x00\x01\x0a\xda\x07\x02특정 섹터의 목표 미봉인 상태를 설정합니다.\x0a " + + ": 스토리지 제공자 ID\x0a : 섹터 번호\x0a : 목표 상태 (true, false, none 중 하나)\x0a\x0a 미봉인 목표 상태는 Curio가 섹터의 미봉인 복사" + + "본을 어떻게 유지할지를 나타냅니다.\x0a\x09 목표 상태가 true이면 Curio는 섹터가 미봉인 상태로 유지되도록 보" + + "장합니다.\x0a\x09 목표 상태가 false이면 Curio는 섹터에 미봉인 복사본이 없도록 보장합니다.\x0a\x09 " + + " 목표 상태가 none이면 Curio는 섹터의 현재 상태를 변경하지 않습니다.\x0a\x0a 현재, 목표 상태가 다른 상태에" + + "서 true로 변경될 때만 Curio는 새로운 미봉인 프로세스를 시작합니다.\x0a\x0a 목표 상태가 false이고 미봉" + + "인 섹터 파일이 존재하는 경우, GC 마크 단계는 미봉인 섹터 파일에 대한 제거 마크를 생성합니다. 파일은 제거 마크가 승인된" + + " 후에만 제거됩니다.\x02미봉인 섹터 파일의 데이터 무결성 확인\x02특정 섹터에 대한 검사 작업을 생성하고 완료를 기다린 후 " + + "결과를 출력합니다.\x0a : 스토리지 제공자 ID\x0a : 섹터 번호" + "\x04\x00\x01 ?\x02화살표 키를 사용하여 이동하세요: ↓ ↑ → ←\x02이 대화형 도구는 새로운 채굴자 액터를 생성" + "하고 그에 대한 기본 구성 레이어를 생성합니다.\x02이 프로세스는 부분적으로 항등원적입니다. 새로운 채굴자 액터가 생성되었고" + " 후속 단계가 실패하는 경우 사용자는 구성을 완료하기 위해 'curio config new-cluster < 채굴자 ID >'를 " + @@ -363,56 +736,142 @@ const koData string = "" + // Size: 6952 bytes "어 %[1]s가 생성되었습니다.\x04\x00\x01 \x22\x02구성 파일을 사용하려면:\x02Curio를 실행하려면: 기" + "계 또는 cgroup 격리를 사용하여 다음 명령을 사용하세요 (예제 레이어 선택과 함께):" -var zhIndex = []uint32{ // 113 elements +var zhIndex = []uint32{ // 233 elements // Entry 0 - 1F - 0x00000000, 0x00000033, 0x0000008b, 0x00000134, - 0x0000017c, 0x000001cb, 0x000001e4, 0x000001f1, - 0x00000211, 0x0000022a, 0x00000240, 0x0000025d, - 0x0000029a, 0x000002aa, 0x000002c4, 0x000002ea, - 0x00000371, 0x000003b2, 0x000003e5, 0x00000401, - 0x00000446, 0x00000463, 0x0000048c, 0x000004aa, - 0x000004de, 0x000004ee, 0x000004fb, 0x00000534, - 0x00000588, 0x000005b5, 0x00000604, 0x0000063f, + 0x00000000, 0x0000000d, 0x00000038, 0x000000e6, + 0x000000ff, 0x000001d8, 0x00000229, 0x0000023b, + 0x0000026c, 0x00000284, 0x000002a0, 0x000002ea, + 0x00000303, 0x00000319, 0x0000035f, 0x0000036f, + 0x0000039a, 0x000003f3, 0x000003fd, 0x00000425, + 0x00000441, 0x00000491, 0x000004b6, 0x000004fe, + 0x0000050e, 0x0000051a, 0x0000052d, 0x0000053a, + 0x0000056e, 0x000005a5, 0x000005b8, 0x000005df, // Entry 20 - 3F - 0x00000674, 0x0000067e, 0x000006a2, 0x000006c0, - 0x000006e4, 0x00000702, 0x00000720, 0x00000755, - 0x00000768, 0x00000777, 0x000007d1, 0x0000080e, - 0x00000836, 0x00000895, 0x000008e5, 0x00000912, - 0x00000927, 0x00000972, 0x000009a2, 0x000009a9, - 0x000009d3, 0x000009f7, 0x00000a3b, 0x00000a6d, - 0x00000ab6, 0x00000ac9, 0x00000ae3, 0x00000b02, - 0x00000b27, 0x00000b3e, 0x00000b52, 0x00000b69, + 0x000005fb, 0x00000610, 0x00000629, 0x0000063c, + 0x0000064f, 0x00000662, 0x0000066b, 0x00000838, + 0x0000084e, 0x00000879, 0x00000898, 0x000008b4, + 0x000008e2, 0x00000914, 0x00000927, 0x00000936, + 0x00000955, 0x0000097d, 0x00000990, 0x00000999, + 0x000009c3, 0x00000a40, 0x00000a6b, 0x00000a81, + 0x00000acd, 0x00000b00, 0x00000b22, 0x00000b36, + 0x00000b60, 0x00000b83, 0x00000ba2, 0x00000bc4, // Entry 40 - 5F - 0x00000b7d, 0x00000bae, 0x00000bd3, 0x00000be9, - 0x00000bf9, 0x00000c13, 0x00000c27, 0x00000c3a, - 0x00000c41, 0x00000c48, 0x00000c4e, 0x00000c54, - 0x00000c73, 0x00000c93, 0x00000cb3, 0x00000ccd, - 0x00000cea, 0x00000d1b, 0x00000d34, 0x00000d5d, - 0x00000dea, 0x00000e16, 0x00000e51, 0x00000e71, - 0x00000ea2, 0x00000ed5, 0x00000f02, 0x00000f23, - 0x00000f49, 0x00000fa3, 0x00000fb2, 0x00000fc1, + 0x00000be0, 0x00000c1e, 0x00000c34, 0x00000c4e, + 0x00000ccd, 0x00000ce1, 0x00000cf7, 0x00000d16, + 0x00000d50, 0x00000d6d, 0x00000d86, 0x00000da2, + 0x00000db1, 0x00000df3, 0x00000e06, 0x00000e22, + 0x00000e38, 0x00000e75, 0x00000ea8, 0x00000ecd, + 0x00000ef0, 0x00000f03, 0x00000fec, 0x00001005, + 0x0000100e, 0x00001261, 0x00001274, 0x00001296, + 0x000012be, 0x000012ec, 0x0000134d, 0x0000135d, // Entry 60 - 7F - 0x00000fd3, 0x00000fe2, 0x00000ff4, 0x00001013, - 0x0000104b, 0x00001070, 0x00001080, 0x0000109e, - 0x000010ab, 0x000010d7, 0x00001101, 0x00001152, - 0x000011d4, 0x0000121b, 0x00001235, 0x0000124d, - 0x000012a4, -} // Size: 476 bytes + 0x000013af, 0x000013c8, 0x000013e1, 0x000013fd, + 0x0000141c, 0x0000143a, 0x00001450, 0x000014ae, + 0x00001533, 0x0000155a, 0x0000158e, 0x0000163b, + 0x00001650, 0x0000167b, 0x00001697, 0x000016aa, + 0x000016c3, 0x000016e2, 0x00001725, 0x00001742, + 0x00001770, 0x00001792, 0x00001a93, 0x00001ac4, + 0x00001b4a, 0x00001b7d, 0x00001bd5, 0x00001c7e, + 0x00001cc6, 0x00001d15, 0x00001d2e, 0x00001d3b, + // Entry 80 - 9F + 0x00001d5b, 0x00001d74, 0x00001d8a, 0x00001da7, + 0x00001de4, 0x00001df4, 0x00001e0e, 0x00001e34, + 0x00001ebb, 0x00001efc, 0x00001f2f, 0x00001f4b, + 0x00001f90, 0x00001fad, 0x00001fd6, 0x00001ff4, + 0x00002028, 0x00002038, 0x00002045, 0x0000207e, + 0x000020d2, 0x000020ff, 0x0000214e, 0x00002189, + 0x000021be, 0x000021c8, 0x000021ec, 0x0000220a, + 0x0000222e, 0x0000224c, 0x0000226a, 0x0000229f, + // Entry A0 - BF + 0x000022b2, 0x000022c1, 0x0000231b, 0x00002358, + 0x00002380, 0x000023df, 0x0000242f, 0x0000245c, + 0x00002471, 0x000024bc, 0x000024ec, 0x000024f3, + 0x0000251d, 0x00002541, 0x00002585, 0x000025b7, + 0x00002600, 0x00002613, 0x0000262d, 0x0000264c, + 0x00002671, 0x00002688, 0x0000269c, 0x000026b3, + 0x000026c7, 0x000026f8, 0x0000271d, 0x00002733, + 0x00002743, 0x0000275d, 0x00002771, 0x00002784, + // Entry C0 - DF + 0x0000278b, 0x00002792, 0x00002798, 0x0000279e, + 0x000027bd, 0x000027dd, 0x000027fd, 0x00002817, + 0x00002834, 0x00002865, 0x0000287e, 0x000028a7, + 0x00002934, 0x00002960, 0x0000299b, 0x000029bb, + 0x000029ec, 0x00002a1f, 0x00002a4c, 0x00002a6d, + 0x00002a93, 0x00002aed, 0x00002afc, 0x00002b0b, + 0x00002b1d, 0x00002b2c, 0x00002b3e, 0x00002b5d, + 0x00002b95, 0x00002bba, 0x00002bca, 0x00002be8, + // Entry E0 - FF + 0x00002bf5, 0x00002c21, 0x00002c4b, 0x00002c9c, + 0x00002d1e, 0x00002d65, 0x00002d7f, 0x00002d97, + 0x00002dee, +} // Size: 956 bytes -const zhData string = "" + // Size: 4772 bytes - "\x04\x00\x01 .\x02使用箭头键进行导航:↓ ↑ → ←\x02此交互式工具将创建一个新的矿工角色,并为其创建基本配置层。\x02" + - "该过程部分幂等。一旦创建了新的矿工角色,并且随后的步骤失败,用户需要运行 'curio config new-cluster < 矿工 ID" + - " >' 来完成配置。\x02这个交互式工具可以在5分钟内将lotus-miner迁移到Curio。\x02每一步都需要您的确认,并且可以撤销。随" + - "时按Ctrl+C退出。\x02在终端中按下Ctrl+C\x02我想要:\x02从现有的 Lotus-Miner 迁移\x02创建一个新的矿工" + - "\x02中止剩余步骤。\x02Lotus-Miner到Curio迁移。\x02我们应该把你的数据库配置文件保存在哪里?\x02中止迁移。\x02" + - "写入文件错误: %[1]s\x04\x00\x01 !\x02尝试使用%[1]s的网页界面\x02对于更多服务器,请使用 curio.env" + - " 数据库环境创建 /etc/curio.env 并添加 CURIO_LAYERS 环境变量以分配用途。\x02如果适用,您现在可以迁移您的市场节" + - "点(%[1]s)。\x02更多信息请访问 http://docs.curiostorage.org\x02新矿工初始化完成。\x02将 lo" + - "tus-miner config.toml 迁移到 Curio 的数据库配置中。\x02获取 API 时出错:%[1]s\x02无法获取Full" + - "Node的API信息:%[1]w\x02获取令牌时出错:%[1]s\x02发现无法迁移的扇区。您想要继续吗?\x02是的,继续\x02不,中止" + - "\x02保存配置到层时出错:%[1]s。正在中止迁移\x02Curio 团队希望改进您使用的软件。告诉团队您正在使用 `%[1]s`。\x02选" + - "择您想与Curio团队分享的内容。\x02个人数据:矿工 ID,Curio 版本,链(%[1]s 或 %[2]s)。签名。\x02聚合-匿名" + - ":版本,链和矿工算力(分桶)。\x02提示:我是在任何链上运行 Curio 的人。\x02没有。\x02获取矿工功率时出错:%[1]s" + +const zhData string = "" + // Size: 11758 bytes + "\x02数学工具\x02分析并显示批量封装线程的布局\x02分析并显示CPU上批量封装线程的布局。\x0a\x0a提供有关批量封装操作的CPU利" + + "用率的详细信息,包括核心分配和不同批量大小的线程分布。\x02生成 supra_seal 配置\x02为指定的批量大小生成 supra_se" + + "al 配置。\x0a\x0a此命令输出 SupraSeal 所需的配置,主要用于调试和测试。配置可以直接用于 SupraSeal 二进制文件进行" + + "测试,而无需涉及 Curio。\x02Zen3 及以后版本支持每个线程两个扇区,旧版CPU请设置为 false\x02执行 CLI 命令" + + "\x02机器主机:端口 (curio run --listen address)\x02等待 Curio API 上线\x02等待失败的持续时间" + + "\x02通过层管理节点配置。Curio 启动时始终应用“base”层。\x02打印默认节点配置\x02不要注释默认值\x02通过提供文件名或标准" + + "输入来设置配置层或基础层。\x02层的文件名\x02配置层的标题(标准输入必需)\x02通过名称获取配置层。您可能希望将输出传递到文件,或使" + + "用 'less'\x02层名称\x02列出数据库中存在的配置层。\x02移除命名的配置层。\x02由此版本的 Curio 解释堆叠的配置层," + + "带有系统生成的注释。\x02要解释为最终配置的层列表\x02要解释的层列表,以逗号或空格分隔(base 始终应用)\x02编辑配置层\x02" + + "[层名称]\x02使用的编辑器\x02源配置层\x02如果源是不同的层,则允许覆盖现有层\x02将整个配置保存到层中,而不仅仅是差异\x02不要" + + "解释源层\x02如果设置了 --source,则为 true\x02为新集群创建新配置\x02[SP actor 地址...]\x02从文件" + + "生成 IPNI 块\x02管理日志记录\x02列出日志系统\x02设置日志级别\x02[级别]\x04\x00\x01\x0a\xc7" + + "\x03\x02为日志系统设置日志级别:\x0a\x0a 系统标志可以多次指定。\x0a\x0a 例如) log set-level --sys" + + "tem chain --system chainxchg debug\x0a\x0a 可用级别:\x0a debug\x0a info\x0a " + + "warn\x0a error\x0a\x0a 环境变量:\x0a GOLOG_LOG_LEVEL - 所有日志系统的默认日志级别\x0a GOL" + + "OG_LOG_FMT - 更改输出日志格式 (json, nocolor)\x0a GOLOG_FILE - 将日志写入文件" + + "\x0a GOLOG_OUTPUT - 指定是否输出到文件、stderr、stdout 或组合,例如 file+stderr\x02限制到" + + "日志系统\x02Filecoin 去中心化存储网络提供商\x02在显示输出中使用颜色\x02取决于输出是否为TTY\x02Yugabyte " + + "集群的主机名命令分隔列表\x02启用非常详细的模式,有助于调试 CLI\x02获取证明参数\x02[扇区大小]\x02提前开始封装交易扇区" + + "\x02指定演员地址以开始封装扇区\x02使用合成 PoRep\x02<扇区>\x02添加 URL 以获取离线交易的数据\x02用于多交易输入的" + + " CSV 文件位置。文件中的每一行应为格式 'uuid, 原始大小, URL, header1, header2...'\x02在 HTTP 请" + + "求中包含自定义 `HEADER`\x02发送请求的 `URL`\x02将资金从交易抵押钱包转移到存储市场参与者的托管账户\x02用户愿意为此" + + "消息支付的最大 FIL 费用\x02指定发送资金的钱包地址\x02启动 Curio 进程\x02worker API 监听的主机地址和端口" + + "\x02GUI 监听的主机地址和端口\x02不检查全节点同步状态\x02仅运行初始化,然后返回\x02管理打开文件的限制\x02要解释的层列表(" + + "在默认值之上)。默认:base\x02自定义节点名称\x02启动 Curio 网络界面\x02启动 Curio 网络界面的一个实例。\x0a" + + "\x09如果“web”层不存在,则创建该层,然后使用该层调用运行。\x02GUI 监听的地址\x02管理封装流水线\x02手动开始新的封装操作" + + "\x02立即为所有演员开始封装扇区(非计划内)\x02开始封装新的 CC 扇区\x02要开始的扇区数量\x02承诺扇区的时间长度\x021278" + + " (3.5 年)\x02(调试工具)将 LM 扇区元数据复制到 Curio 数据库\x02矿工库的路径\x02忽略无法迁移的扇区\x02列出流水" + + "线事件\x02按演员地址过滤事件;如果未指定则列出所有\x02按扇区编号过滤事件;需要指定 --actor\x02将输出限制为最后 N 个事" + + "件\x02停止正在运行的 Curio 进程\x02管理扇区存储\x02扇区可以存储在多个文件系统路径中。这些命令提供了管理 Curio 节点" + + "用于长期存储和证明的存储方法(参考为“store”),以及封装过程中扇区的存储方式(参考为“seal”)。\x02附加本地存储路径\x02[" + + "路径]\x04\x00\x04\x0a \xca\x04\x02可以使用此命令将存储附加到 Curio 节点。存储卷列表存储在本地 Cu" + + "rio 节点中的 storage.json 文件中,通过 curio run 设置。建议在了解存储系统之前,不要手动修改此值。\x0a\x0a每" + + "个存储卷包含一个配置文件,该文件描述了该卷的功能。提供 '--init' 标志时,将使用其他标志创建此文件。\x0a\x0a权重\x0a较高" + + "的权重值意味着数据更有可能存储在此路径中\x0a\x0a封装\x0a封装过程的数据将存储在这里\x0a\x0a存储\x0a已完成的扇区将移至" + + "此处进行长期存储,并随着时间推移进行证明\x02先初始化路径\x02(用于初始化)路径权重\x02(用于初始化)路径用于封装\x02(用于初" + + "始化)路径用于长期存储\x02(用于初始化)限制扇区的存储空间(对非常大的路径来说成本较高!)\x02路径组名称\x02允许从此路径提取数据" + + "的路径组(如果未指定,则允许所有)\x02分离本地存储路径\x02列出本地存储路径\x02仅列出本地存储路径\x02在存储系统中查找扇区" + + "\x02[矿工地址] [扇区编号]\x02测试的实用功能\x02为扇区计算时空证明(需要预封装的扇区)。这些将不会发送到链上。\x02通过在下一" + + "个可用的 Curio 上运行来测试窗口后调度器。如果所有重试都失败,则需要按 ctrl+c 退出。\x04\x00\x01 \x22\x02" + + "计算 WindowPoSt 的截止日期\x02计算 WindowPoSt 以进行性能和配置测试。\x02注意:此命令旨在用于验证 PoSt " + + "计算性能。\x0a它不会向链发送任何消息。由于它可以计算任何截止日期,输出的时间可能与链不符。\x02[截止日期索引]\x02包含存储配置的" + + " JSON 文件的路径\x02计算 WindowPoSt 的分区\x02调试工具集合\x02管理未密封的数据\x02获取未密封数据的信息\x02" + + "列出来自 sectors_unseal_pipeline 和 sectors_meta 表的数据\x02按存储提供者 ID 过滤\x02输出" + + "文件路径(默认:标准输出)\x02设置扇区的目标解封状态\x04\x00\x01\x0a\xfb\x05\x02为特定扇区设置目标解封状态。" + + "\x0a : 存储提供者 ID\x0a : 扇区号\x0a : 目标状态(true、false 或 none)\x0a\x0a 解封目标状态表示 Curio 应如何维护扇区的未密封副本。\x0a" + + "\x09 如果目标状态为 true,Curio 将确保扇区未密封。\x0a\x09 如果目标状态为 false,Curio 将确保扇区没" + + "有未密封副本。\x0a\x09 如果目标状态为 none,Curio 将不会更改扇区的当前状态。\x0a\x0a 当前,Curio " + + "仅在目标状态从其他状态更改为 true 时启动新的解封进程。\x0a\x0a 当目标状态为 false 且存在未密封的扇区文件时,GC " + + "标记步骤将为未密封的扇区文件创建一个删除标记。文件将在删除标记被接受后才会被移除。\x02检查未密封扇区文件中的数据完整性\x02为特定扇区" + + "创建检查任务,等待其完成并输出结果。\x0a : 存储提供者 ID\x0a : 扇" + + "区号\x04\x00\x01 .\x02使用箭头键进行导航:↓ ↑ → ←\x02此交互式工具将创建一个新的矿工角色,并为其创建基本配置层。" + + "\x02该过程部分幂等。一旦创建了新的矿工角色,并且随后的步骤失败,用户需要运行 'curio config new-cluster < 矿工 " + + "ID >' 来完成配置。\x02这个交互式工具可以在5分钟内将lotus-miner迁移到Curio。\x02每一步都需要您的确认,并且可以撤销" + + "。随时按Ctrl+C退出。\x02在终端中按下Ctrl+C\x02我想要:\x02从现有的 Lotus-Miner 迁移\x02创建一个新的" + + "矿工\x02中止剩余步骤。\x02Lotus-Miner到Curio迁移。\x02我们应该把你的数据库配置文件保存在哪里?\x02中止迁移。" + + "\x02写入文件错误: %[1]s\x04\x00\x01 !\x02尝试使用%[1]s的网页界面\x02对于更多服务器,请使用 curio.e" + + "nv 数据库环境创建 /etc/curio.env 并添加 CURIO_LAYERS 环境变量以分配用途。\x02如果适用,您现在可以迁移您的市" + + "场节点(%[1]s)。\x02更多信息请访问 http://docs.curiostorage.org\x02新矿工初始化完成。\x02将 " + + "lotus-miner config.toml 迁移到 Curio 的数据库配置中。\x02获取 API 时出错:%[1]s\x02无法获取Fu" + + "llNode的API信息:%[1]w\x02获取令牌时出错:%[1]s\x02发现无法迁移的扇区。您想要继续吗?\x02是的,继续\x02不,中" + + "止\x02保存配置到层时出错:%[1]s。正在中止迁移\x02Curio 团队希望改进您使用的软件。告诉团队您正在使用 `%[1]s`。" + + "\x02选择您想与Curio团队分享的内容。\x02个人数据:矿工 ID,Curio 版本,链(%[1]s 或 %[2]s)。签名。\x02聚合" + + "-匿名:版本,链和矿工算力(分桶)。\x02提示:我是在任何链上运行 Curio 的人。\x02没有。\x02获取矿工功率时出错:%[1]s" + "\x02整理消息时出错:%[1]s\x02获取矿工信息时出错:%[1]s\x02签署消息时出错:%[1]s\x02发送消息时出错:%[1]s" + "\x04\x00\x01 0\x02发送消息时出错:状态%[1]s,消息:\x02消息已发送。\x04\x00\x01 \x0a\x02文档:" + "\x02'%[1]s'层存储通用配置。所有Curio实例都可以在其%[2]s参数中包含它。\x02您可以添加其他层进行每台机器的配置更改。" + @@ -441,4 +900,4 @@ const zhData string = "" + // Size: 4772 bytes "\x15\x02层%[1]s已创建。\x04\x00\x01 \x13\x02要使用配置:\x02运行Curio:使用机器或cgroup隔离,使" + "用命令(附带示例层选择):" - // Total table size 18242 bytes (17KiB); checksum: 1CC76A35 + // Total table size 43430 bytes (42KiB); checksum: 353798B2 diff --git a/cmd/curio/internal/translations/locales/en/out.gotext.json b/cmd/curio/internal/translations/locales/en/out.gotext.json index 3a13ba39c..7a702c6f1 100644 --- a/cmd/curio/internal/translations/locales/en/out.gotext.json +++ b/cmd/curio/internal/translations/locales/en/out.gotext.json @@ -1,6 +1,846 @@ { "language": "en", "messages": [ + { + "id": "Math Utils", + "message": "Math Utils", + "translation": "Math Utils", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Analyze and display the layout of batch sealer threads", + "message": "Analyze and display the layout of batch sealer threads", + "translation": "Analyze and display the layout of batch sealer threads", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "message": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "translation": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Generate a supra_seal configuration", + "message": "Generate a supra_seal configuration", + "translation": "Generate a supra_seal configuration", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "message": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "translation": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "message": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "translation": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Execute cli commands", + "message": "Execute cli commands", + "translation": "Execute cli commands", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "machine host:port (curio run --listen address)", + "message": "machine host:port (curio run --listen address)", + "translation": "machine host:port (curio run --listen address)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Wait for Curio api to come online", + "message": "Wait for Curio api to come online", + "translation": "Wait for Curio api to come online", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "duration to wait till fail", + "message": "duration to wait till fail", + "translation": "duration to wait till fail", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "message": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "translation": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Print default node config", + "message": "Print default node config", + "translation": "Print default node config", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "don't comment default values", + "message": "don't comment default values", + "translation": "don't comment default values", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Set a config layer or the base by providing a filename or stdin.", + "message": "Set a config layer or the base by providing a filename or stdin.", + "translation": "Set a config layer or the base by providing a filename or stdin.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "a layer's file name", + "message": "a layer's file name", + "translation": "a layer's file name", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "title of the config layer (req'd for stdin)", + "message": "title of the config layer (req'd for stdin)", + "translation": "title of the config layer (req'd for stdin)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "message": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "translation": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "layer name", + "message": "layer name", + "translation": "layer name", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "List config layers present in the DB.", + "message": "List config layers present in the DB.", + "translation": "List config layers present in the DB.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Remove a named config layer.", + "message": "Remove a named config layer.", + "translation": "Remove a named config layer.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "message": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "translation": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "a list of layers to be interpreted as the final config", + "message": "a list of layers to be interpreted as the final config", + "translation": "a list of layers to be interpreted as the final config", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "comma or space separated list of layers to be interpreted (base is always applied)", + "message": "comma or space separated list of layers to be interpreted (base is always applied)", + "translation": "comma or space separated list of layers to be interpreted (base is always applied)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "edit a config layer", + "message": "edit a config layer", + "translation": "edit a config layer", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[layer name]", + "message": "[layer name]", + "translation": "[layer name]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "editor to use", + "message": "editor to use", + "translation": "editor to use", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "source config layer", + "message": "source config layer", + "translation": "source config layer", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "allow overwrite of existing layer if source is a different layer", + "message": "allow overwrite of existing layer if source is a different layer", + "translation": "allow overwrite of existing layer if source is a different layer", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "save the whole config into the layer, not just the diff", + "message": "save the whole config into the layer, not just the diff", + "translation": "save the whole config into the layer, not just the diff", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "do not interpret source layer", + "message": "do not interpret source layer", + "translation": "do not interpret source layer", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "true if --source is set", + "message": "true if --source is set", + "translation": "true if --source is set", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Create new configuration for a new cluster", + "message": "Create new configuration for a new cluster", + "translation": "Create new configuration for a new cluster", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[SP actor address...]", + "message": "[SP actor address...]", + "translation": "[SP actor address...]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "generate ipni chunks from a file", + "message": "generate ipni chunks from a file", + "translation": "generate ipni chunks from a file", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Manage logging", + "message": "Manage logging", + "translation": "Manage logging", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "List log systems", + "message": "List log systems", + "translation": "List log systems", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Set log level", + "message": "Set log level", + "translation": "Set log level", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[level]", + "message": "[level]", + "translation": "[level]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "message": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "translation": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "limit to log system", + "message": "limit to log system", + "translation": "limit to log system", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Filecoin decentralized storage network provider", + "message": "Filecoin decentralized storage network provider", + "translation": "Filecoin decentralized storage network provider", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "use color in display output", + "message": "use color in display output", + "translation": "use color in display output", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "depends on output being a TTY", + "message": "depends on output being a TTY", + "translation": "depends on output being a TTY", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Command separated list of hostnames for yugabyte cluster", + "message": "Command separated list of hostnames for yugabyte cluster", + "translation": "Command separated list of hostnames for yugabyte cluster", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "enables very verbose mode, useful for debugging the CLI", + "message": "enables very verbose mode, useful for debugging the CLI", + "translation": "enables very verbose mode, useful for debugging the CLI", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Fetch proving parameters", + "message": "Fetch proving parameters", + "translation": "Fetch proving parameters", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[sectorSize]", + "message": "[sectorSize]", + "translation": "[sectorSize]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "start sealing a deal sector early", + "message": "start sealing a deal sector early", + "translation": "start sealing a deal sector early", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Specify actor address to start sealing sectors for", + "message": "Specify actor address to start sealing sectors for", + "translation": "Specify actor address to start sealing sectors for", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Use synthetic PoRep", + "message": "Use synthetic PoRep", + "translation": "Use synthetic PoRep", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "\u003csector\u003e", + "message": "\u003csector\u003e", + "translation": "\u003csector\u003e", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Add URL to fetch data for offline deals", + "message": "Add URL to fetch data for offline deals", + "translation": "Add URL to fetch data for offline deals", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "message": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "translation": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Custom `HEADER` to include in the HTTP request", + "message": "Custom `HEADER` to include in the HTTP request", + "translation": "Custom `HEADER` to include in the HTTP request", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "`URL` to send the request to", + "message": "`URL` to send the request to", + "translation": "`URL` to send the request to", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "message": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "translation": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "maximum fee in FIL user is willing to pay for this message", + "message": "maximum fee in FIL user is willing to pay for this message", + "translation": "maximum fee in FIL user is willing to pay for this message", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Specify wallet address to send the funds from", + "message": "Specify wallet address to send the funds from", + "translation": "Specify wallet address to send the funds from", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Start a Curio process", + "message": "Start a Curio process", + "translation": "Start a Curio process", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "host address and port the worker api will listen on", + "message": "host address and port the worker api will listen on", + "translation": "host address and port the worker api will listen on", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "host address and port the gui will listen on", + "message": "host address and port the gui will listen on", + "translation": "host address and port the gui will listen on", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "don't check full-node sync status", + "message": "don't check full-node sync status", + "translation": "don't check full-node sync status", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "only run init, then return", + "message": "only run init, then return", + "translation": "only run init, then return", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "manage open file limit", + "message": "manage open file limit", + "translation": "manage open file limit", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "list of layers to be interpreted (atop defaults). Default: base", + "message": "list of layers to be interpreted (atop defaults). Default: base", + "translation": "list of layers to be interpreted (atop defaults). Default: base", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "custom node name", + "message": "custom node name", + "translation": "custom node name", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Start Curio web interface", + "message": "Start Curio web interface", + "translation": "Start Curio web interface", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "message": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "translation": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Address to listen for the GUI on", + "message": "Address to listen for the GUI on", + "translation": "Address to listen for the GUI on", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Manage the sealing pipeline", + "message": "Manage the sealing pipeline", + "translation": "Manage the sealing pipeline", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Start new sealing operations manually", + "message": "Start new sealing operations manually", + "translation": "Start new sealing operations manually", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Start sealing sectors for all actors now (not on schedule)", + "message": "Start sealing sectors for all actors now (not on schedule)", + "translation": "Start sealing sectors for all actors now (not on schedule)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Start sealing new CC sectors", + "message": "Start sealing new CC sectors", + "translation": "Start sealing new CC sectors", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Number of sectors to start", + "message": "Number of sectors to start", + "translation": "Number of sectors to start", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "How long to commit sectors for", + "message": "How long to commit sectors for", + "translation": "How long to commit sectors for", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "1278 (3.5 years)", + "message": "1278 (3.5 years)", + "translation": "1278 (3.5 years)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "(debug tool) Copy LM sector metadata into Curio DB", + "message": "(debug tool) Copy LM sector metadata into Curio DB", + "translation": "(debug tool) Copy LM sector metadata into Curio DB", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Path to miner repo", + "message": "Path to miner repo", + "translation": "Path to miner repo", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Ignore sectors that cannot be migrated", + "message": "Ignore sectors that cannot be migrated", + "translation": "Ignore sectors that cannot be migrated", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "List pipeline events", + "message": "List pipeline events", + "translation": "List pipeline events", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Filter events by actor address; lists all if not specified", + "message": "Filter events by actor address; lists all if not specified", + "translation": "Filter events by actor address; lists all if not specified", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Filter events by sector number; requires --actor to be specified", + "message": "Filter events by sector number; requires --actor to be specified", + "translation": "Filter events by sector number; requires --actor to be specified", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Limit output to the last N events", + "message": "Limit output to the last N events", + "translation": "Limit output to the last N events", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Stop a running Curio process", + "message": "Stop a running Curio process", + "translation": "Stop a running Curio process", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "manage sector storage", + "message": "manage sector storage", + "translation": "manage sector storage", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "message": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "translation": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "attach local storage path", + "message": "attach local storage path", + "translation": "attach local storage path", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[path]", + "message": "[path]", + "translation": "[path]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "message": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "translation": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "initialize the path first", + "message": "initialize the path first", + "translation": "initialize the path first", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "(for init) path weight", + "message": "(for init) path weight", + "translation": "(for init) path weight", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "(for init) use path for sealing", + "message": "(for init) use path for sealing", + "translation": "(for init) use path for sealing", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "(for init) use path for long-term storage", + "message": "(for init) use path for long-term storage", + "translation": "(for init) use path for long-term storage", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "(for init) limit storage space for sectors (expensive for very large paths!)", + "message": "(for init) limit storage space for sectors (expensive for very large paths!)", + "translation": "(for init) limit storage space for sectors (expensive for very large paths!)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "path group names", + "message": "path group names", + "translation": "path group names", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "path groups allowed to pull data from this path (allow all if not specified)", + "message": "path groups allowed to pull data from this path (allow all if not specified)", + "translation": "path groups allowed to pull data from this path (allow all if not specified)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "detach local storage path", + "message": "detach local storage path", + "translation": "detach local storage path", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "list local storage paths", + "message": "list local storage paths", + "translation": "list local storage paths", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "only list local storage paths", + "message": "only list local storage paths", + "translation": "only list local storage paths", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "find sector in the storage system", + "message": "find sector in the storage system", + "translation": "find sector in the storage system", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[miner address] [sector number]", + "message": "[miner address] [sector number]", + "translation": "[miner address] [sector number]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Utility functions for testing", + "message": "Utility functions for testing", + "translation": "Utility functions for testing", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "message": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "translation": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "message": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "translation": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "deadline to compute WindowPoSt for", + "message": "deadline to compute WindowPoSt for", + "translation": "deadline to compute WindowPoSt for", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Compute WindowPoSt for performance and configuration testing.", + "message": "Compute WindowPoSt for performance and configuration testing.", + "translation": "Compute WindowPoSt for performance and configuration testing.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "message": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "translation": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "[deadline index]", + "message": "[deadline index]", + "translation": "[deadline index]", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "path to json file containing storage config", + "message": "path to json file containing storage config", + "translation": "path to json file containing storage config", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "partition to compute WindowPoSt for", + "message": "partition to compute WindowPoSt for", + "translation": "partition to compute WindowPoSt for", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Collection of debugging utilities", + "message": "Collection of debugging utilities", + "translation": "Collection of debugging utilities", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Manage unsealed data", + "message": "Manage unsealed data", + "translation": "Manage unsealed data", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Get information about unsealed data", + "message": "Get information about unsealed data", + "translation": "Get information about unsealed data", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "message": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "translation": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Filter by storage provider ID", + "message": "Filter by storage provider ID", + "translation": "Filter by storage provider ID", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Output file path (default: stdout)", + "message": "Output file path (default: stdout)", + "translation": "Output file path (default: stdout)", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Set the target unseal state for a sector", + "message": "Set the target unseal state for a sector", + "translation": "Set the target unseal state for a sector", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "message": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "translation": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Check data integrity in unsealed sector files", + "message": "Check data integrity in unsealed sector files", + "translation": "Check data integrity in unsealed sector files", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "message": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "translation": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "translatorComment": "Copied from source.", + "fuzzy": true + }, { "id": "Use the arrow keys to navigate: ↓ ↑ → ←", "message": "Use the arrow keys to navigate: ↓ ↑ → ←", diff --git a/cmd/curio/internal/translations/locales/ko/messages.gotext.json b/cmd/curio/internal/translations/locales/ko/messages.gotext.json index d868d1539..25efb9e99 100644 --- a/cmd/curio/internal/translations/locales/ko/messages.gotext.json +++ b/cmd/curio/internal/translations/locales/ko/messages.gotext.json @@ -1216,6 +1216,618 @@ "message": "Additional info is at http://docs.curiostorage.org", "placeholder": null }, + { + "id": "Math Utils", + "translation": "수학 유틸리티", + "message": "Math Utils", + "placeholder": null + }, + { + "id": "Analyze and display the layout of batch sealer threads", + "translation": "배치 실러 스레드의 레이아웃 분석 및 표시", + "message": "Analyze and display the layout of batch sealer threads", + "placeholder": null + }, + { + "id": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "translation": "CPU에서 배치 실러 스레드의 레이아웃을 분석하고 표시합니다.\n\n이 작업은 배치 실링 작업의 CPU 사용량에 대한 자세한 정보를 제공하며, 여기에는 코어 할당 및 다양한 배치 크기에 대한 스레드 분포가 포함됩니다.", + "message": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "placeholder": null + }, + { + "id": "Generate a supra_seal configuration", + "translation": "supra_seal 구성 생성", + "message": "Generate a supra_seal configuration", + "placeholder": null + }, + { + "id": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "translation": "주어진 배치 크기에 대한 supra_seal 구성을 생성합니다.\n\n이 명령은 SupraSeal에서 기대하는 구성을 출력하며, 주로 디버깅 및 테스트를 목적으로 합니다.\n구성은 Curio를 사용하지 않고도 SupraSeal 바이너리에서 직접 사용할 수 있습니다.", + "message": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "placeholder": null + }, + { + "id": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "translation": "Zen3 및 이후 버전은 스레드당 두 개의 섹터를 지원하며, 이전 CPU에서는 false로 설정합니다", + "message": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "placeholder": null + }, + { + "id": "Execute cli commands", + "translation": "CLI 명령 실행", + "message": "Execute cli commands", + "placeholder": null + }, + { + "id": "machine host:port (curio run --listen address)", + "translation": "기계 호스트:포트 (curio run --listen 주소)", + "message": "machine host:port (curio run --listen address)", + "placeholder": null + }, + { + "id": "Wait for Curio api to come online", + "translation": "Curio API가 온라인 상태가 될 때까지 기다리기", + "message": "Wait for Curio api to come online", + "placeholder": null + }, + { + "id": "duration to wait till fail", + "translation": "실패할 때까지 대기할 시간", + "message": "duration to wait till fail", + "placeholder": null + }, + { + "id": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "translation": "노드 구성을 레이어별로 관리합니다. 'base' 레이어는 항상 Curio 시작 시 적용됩니다.", + "message": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "placeholder": null + }, + { + "id": "Print default node config", + "translation": "기본 노드 구성 출력", + "message": "Print default node config", + "placeholder": null + }, + { + "id": "don't comment default values", + "translation": "기본값에 주석을 달지 않음", + "message": "don't comment default values", + "placeholder": null + }, + { + "id": "Set a config layer or the base by providing a filename or stdin.", + "translation": "파일 이름 또는 stdin을 제공하여 구성 레이어 또는 기본값 설정.", + "message": "Set a config layer or the base by providing a filename or stdin.", + "placeholder": null + }, + { + "id": "a layer's file name", + "translation": "레이어의 파일 이름", + "message": "a layer's file name", + "placeholder": null + }, + { + "id": "title of the config layer (req'd for stdin)", + "translation": "구성 레이어의 제목 (stdin에 필요)", + "message": "title of the config layer (req'd for stdin)", + "placeholder": null + }, + { + "id": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "translation": "이름으로 구성 레이어를 가져옵니다. 출력을 파일로 파이핑하거나 'less'를 사용할 수 있습니다.", + "message": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "placeholder": null + }, + { + "id": "layer name", + "translation": "레이어 이름", + "message": "layer name", + "placeholder": null + }, + { + "id": "List config layers present in the DB.", + "translation": "DB에 있는 구성 레이어 목록.", + "message": "List config layers present in the DB.", + "placeholder": null + }, + { + "id": "Remove a named config layer.", + "translation": "이름이 지정된 구성 레이어 제거.", + "message": "Remove a named config layer.", + "placeholder": null + }, + { + "id": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "translation": "시스템 생성 주석과 함께 이 버전의 Curio에서 스택된 구성 레이어 해석.", + "message": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "placeholder": null + }, + { + "id": "a list of layers to be interpreted as the final config", + "translation": "최종 구성으로 해석될 레이어 목록", + "message": "a list of layers to be interpreted as the final config", + "placeholder": null + }, + { + "id": "comma or space separated list of layers to be interpreted (base is always applied)", + "translation": "쉼표 또는 공백으로 구분된 해석될 레이어 목록 (base는 항상 적용됨)", + "message": "comma or space separated list of layers to be interpreted (base is always applied)", + "placeholder": null + }, + { + "id": "edit a config layer", + "translation": "구성 레이어 편집", + "message": "edit a config layer", + "placeholder": null + }, + { + "id": "[layer name]", + "translation": "[레이어 이름]", + "message": "[layer name]", + "placeholder": null + }, + { + "id": "editor to use", + "translation": "사용할 편집기", + "message": "editor to use", + "placeholder": null + }, + { + "id": "source config layer", + "translation": "원본 구성 레이어", + "message": "source config layer", + "placeholder": null + }, + { + "id": "allow overwrite of existing layer if source is a different layer", + "translation": "원본이 다른 레이어일 경우 기존 레이어 덮어쓰기 허용", + "message": "allow overwrite of existing layer if source is a different layer", + "placeholder": null + }, + { + "id": "save the whole config into the layer, not just the diff", + "translation": "차이점만이 아니라 전체 구성을 레이어에 저장", + "message": "save the whole config into the layer, not just the diff", + "placeholder": null + }, + { + "id": "do not interpret source layer", + "translation": "원본 레이어 해석하지 않음", + "message": "do not interpret source layer", + "placeholder": null + }, + { + "id": "true if --source is set", + "translation": "--source가 설정된 경우 true", + "message": "true if --source is set", + "placeholder": null + }, + { + "id": "Create new configuration for a new cluster", + "translation": "새 클러스터에 대한 새 구성 생성", + "message": "Create new configuration for a new cluster", + "placeholder": null + }, + { + "id": "[SP actor address...]", + "translation": "[SP 액터 주소...]", + "message": "[SP actor address...]", + "placeholder": null + }, + { + "id": "Manage logging", + "translation": "로깅 관리", + "message": "Manage logging", + "placeholder": null + }, + { + "id": "List log systems", + "translation": "로그 시스템 목록", + "message": "List log systems", + "placeholder": null + }, + { + "id": "Set log level", + "translation": "로그 레벨 설정", + "message": "Set log level", + "placeholder": null + }, + { + "id": "[level]", + "translation": "[레벨]", + "message": "[level]", + "placeholder": null + }, + { + "id": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "translation": "로깅 시스템의 로그 레벨을 설정합니다:\n\n 시스템 플래그는 여러 번 지정할 수 있습니다.\n\n 예) log set-level --system chain --system chainxchg debug\n\n 사용 가능한 레벨:\n debug\n info\n warn\n error\n\n 환경 변수:\n GOLOG_LOG_LEVEL - 모든 로그 시스템의 기본 로그 레벨\n GOLOG_LOG_FMT - 출력 로그 형식 변경 (json, nocolor)\n GOLOG_FILE - 로그를 파일에 기록\n GOLOG_OUTPUT - 출력 위치 지정 (파일, stderr, stdout 또는 조합, 예: file+stderr)", + "message": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "placeholder": null + }, + { + "id": "limit to log system", + "translation": "로그 시스템으로 제한", + "message": "limit to log system", + "placeholder": null + }, + { + "id": "Filecoin decentralized storage network provider", + "translation": "Filecoin 분산 스토리지 네트워크 제공자", + "message": "Filecoin decentralized storage network provider", + "placeholder": null + }, + { + "id": "use color in display output", + "translation": "디스플레이 출력에 색상 사용", + "message": "use color in display output", + "placeholder": null + }, + { + "id": "depends on output being a TTY", + "translation": "출력이 TTY에 의존", + "message": "depends on output being a TTY", + "placeholder": null + }, + { + "id": "Command separated list of hostnames for yugabyte cluster", + "translation": "유가바이트 클러스터의 호스트 이름을 쉼표로 구분한 목록", + "message": "Command separated list of hostnames for yugabyte cluster", + "placeholder": null + }, + { + "id": "enables very verbose mode, useful for debugging the CLI", + "translation": "매우 상세한 모드를 활성화하여 CLI 디버깅에 유용", + "message": "enables very verbose mode, useful for debugging the CLI", + "placeholder": null + }, + { + "id": "Fetch proving parameters", + "translation": "증명 매개변수 가져오기", + "message": "Fetch proving parameters", + "placeholder": null + }, + { + "id": "[sectorSize]", + "translation": "[섹터 크기]", + "message": "[sectorSize]", + "placeholder": null + }, + { + "id": "list of layers to be interpreted (atop defaults). Default: base", + "translation": "해석될 레이어 목록 (기본값 위에). 기본값: base", + "message": "list of layers to be interpreted (atop defaults). Default: base", + "placeholder": null + }, + { + "id": "start sealing a deal sector early", + "translation": "거래 섹터를 조기에 실링 시작", + "message": "start sealing a deal sector early", + "placeholder": null + }, + { + "id": "Specify actor address to start sealing sectors for", + "translation": "실링할 섹터의 액터 주소 지정", + "message": "Specify actor address to start sealing sectors for", + "placeholder": null + }, + { + "id": "Use synthetic PoRep", + "translation": "합성 PoRep 사용", + "message": "Use synthetic PoRep", + "placeholder": null + }, + { + "id": "\u003csector\u003e", + "translation": "\u003c섹터\u003e", + "message": "\u003csector\u003e", + "placeholder": null + }, + { + "id": "Manage the sealing pipeline", + "translation": "실링 파이프라인 관리", + "message": "Manage the sealing pipeline", + "placeholder": null + }, + { + "id": "Start new sealing operations manually", + "translation": "새로운 실링 작업 수동 시작", + "message": "Start new sealing operations manually", + "placeholder": null + }, + { + "id": "Start sealing sectors for all actors now (not on schedule)", + "translation": "모든 액터에 대한 섹터 실링 즉시 시작 (일정에 없음)", + "message": "Start sealing sectors for all actors now (not on schedule)", + "placeholder": null + }, + { + "id": "Start sealing new CC sectors", + "translation": "새 CC 섹터 실링 시작", + "message": "Start sealing new CC sectors", + "placeholder": null + }, + { + "id": "Number of sectors to start", + "translation": "시작할 섹터 수", + "message": "Number of sectors to start", + "placeholder": null + }, + { + "id": "How long to commit sectors for", + "translation": "섹터를 커밋할 기간", + "message": "How long to commit sectors for", + "placeholder": null + }, + { + "id": "1278 (3.5 years)", + "translation": "1278 (3.5년)", + "message": "1278 (3.5 years)", + "placeholder": null + }, + { + "id": "(debug tool) Copy LM sector metadata into Curio DB", + "translation": "(디버그 도구) LM 섹터 메타데이터를 Curio DB로 복사", + "message": "(debug tool) Copy LM sector metadata into Curio DB", + "placeholder": null + }, + { + "id": "Path to miner repo", + "translation": "마이너 저장소 경로", + "message": "Path to miner repo", + "placeholder": null + }, + { + "id": "Ignore sectors that cannot be migrated", + "translation": "이동할 수 없는 섹터 무시", + "message": "Ignore sectors that cannot be migrated", + "placeholder": null + }, + { + "id": "List pipeline events", + "translation": "파이프라인 이벤트 목록", + "message": "List pipeline events", + "placeholder": null + }, + { + "id": "Filter events by actor address; lists all if not specified", + "translation": "액터 주소로 이벤트 필터링; 지정하지 않으면 모든 이벤트를 나열합니다", + "message": "Filter events by actor address; lists all if not specified", + "placeholder": null + }, + { + "id": "Filter events by sector number; requires --actor to be specified", + "translation": "섹터 번호로 이벤트 필터링; --actor 지정 필요", + "message": "Filter events by sector number; requires --actor to be specified", + "placeholder": null + }, + { + "id": "Limit output to the last N events", + "translation": "출력을 마지막 N개의 이벤트로 제한", + "message": "Limit output to the last N events", + "placeholder": null + }, + { + "id": "Start a Curio process", + "translation": "Curio 프로세스 시작", + "message": "Start a Curio process", + "placeholder": null + }, + { + "id": "host address and port the worker api will listen on", + "translation": "작업자 API가 수신 대기할 호스트 주소와 포트", + "message": "host address and port the worker api will listen on", + "placeholder": null + }, + { + "id": "host address and port the gui will listen on", + "translation": "GUI가 수신 대기할 호스트 주소와 포트", + "message": "host address and port the gui will listen on", + "placeholder": null + }, + { + "id": "don't check full-node sync status", + "translation": "풀 노드 동기화 상태 확인 안 함", + "message": "don't check full-node sync status", + "placeholder": null + }, + { + "id": "only run init, then return", + "translation": "init만 실행하고 돌아옴", + "message": "only run init, then return", + "placeholder": null + }, + { + "id": "manage open file limit", + "translation": "열린 파일 제한 관리", + "message": "manage open file limit", + "placeholder": null + }, + { + "id": "custom node name", + "translation": "사용자 지정 노드 이름", + "message": "custom node name", + "placeholder": null + }, + { + "id": "Start Curio web interface", + "translation": "Curio 웹 인터페이스 시작", + "message": "Start Curio web interface", + "placeholder": null + }, + { + "id": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "translation": "Curio 웹 인터페이스 인스턴스를 시작합니다.\n\t존재하지 않으면 'web' 레이어를 생성하고 해당 레이어로 실행을 호출합니다.", + "message": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "placeholder": null + }, + { + "id": "Address to listen for the GUI on", + "translation": "GUI가 수신 대기할 주소", + "message": "Address to listen for the GUI on", + "placeholder": null + }, + { + "id": "Stop a running Curio process", + "translation": "실행 중인 Curio 프로세스 중지", + "message": "Stop a running Curio process", + "placeholder": null + }, + { + "id": "manage sector storage", + "translation": "섹터 스토리지 관리", + "message": "manage sector storage", + "placeholder": null + }, + { + "id": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "translation": "섹터는 여러 파일 시스템 경로에 걸쳐 저장될 수 있습니다.\n이 명령은 Curio 노드가 섹터를 장기 저장(증명용, 'store'로 참조)하는 스토리지를 관리하는 방법과\n실링 파이프라인을 통해 이동하는 동안 섹터가 어떻게 저장될지를 관리합니다('seal'로 참조).", + "message": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "placeholder": null + }, + { + "id": "attach local storage path", + "translation": "로컬 스토리지 경로 연결", + "message": "attach local storage path", + "placeholder": null + }, + { + "id": "[path]", + "translation": "[경로]", + "message": "[path]", + "placeholder": null + }, + { + "id": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "translation": "이 명령을 사용하여 Curio 노드에 스토리지를 연결할 수 있습니다. 스토리지 볼륨 목록은 curio run에 설정된 storage.json에 로컬로 저장됩니다.\n스토리지 시스템에 대한 추가 이해 없이 수동으로 이 값을 수정하는 것은 권장하지 않습니다.\n\n각 스토리지 볼륨에는 볼륨의 기능을 설명하는 구성 파일이 포함되어 있습니다. '--init' 플래그가 제공되면 이 파일은 추가 플래그를 사용하여 생성됩니다.\n\nWeight\n높은 가중치 값은 데이터가 이 경로에 저장될 가능성이 더 높다는 것을 의미합니다\n\nSeal\n실링 프로세스 데이터를 여기에 저장합니다\n\nStore\n완료된 섹터는 장기 저장을 위해 여기로 이동되며 시간이 지남에 따라 증명됩니다", + "message": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "placeholder": null + }, + { + "id": "initialize the path first", + "translation": "경로를 먼저 초기화", + "message": "initialize the path first", + "placeholder": null + }, + { + "id": "(for init) path weight", + "translation": "(초기화용) 경로 가중치", + "message": "(for init) path weight", + "placeholder": null + }, + { + "id": "(for init) use path for sealing", + "translation": "(초기화용) 실링에 경로 사용", + "message": "(for init) use path for sealing", + "placeholder": null + }, + { + "id": "(for init) use path for long-term storage", + "translation": "(초기화용) 장기 저장에 경로 사용", + "message": "(for init) use path for long-term storage", + "placeholder": null + }, + { + "id": "(for init) limit storage space for sectors (expensive for very large paths!)", + "translation": "(초기화용) 섹터에 대한 저장 공간 제한 (매우 큰 경로에서는 비용이 많이 듦!)", + "message": "(for init) limit storage space for sectors (expensive for very large paths!)", + "placeholder": null + }, + { + "id": "path group names", + "translation": "경로 그룹 이름", + "message": "path group names", + "placeholder": null + }, + { + "id": "path groups allowed to pull data from this path (allow all if not specified)", + "translation": "이 경로에서 데이터를 가져올 수 있는 경로 그룹 (지정하지 않으면 모두 허용)", + "message": "path groups allowed to pull data from this path (allow all if not specified)", + "placeholder": null + }, + { + "id": "detach local storage path", + "translation": "로컬 스토리지 경로 분리", + "message": "detach local storage path", + "placeholder": null + }, + { + "id": "list local storage paths", + "translation": "로컬 스토리지 경로 목록", + "message": "list local storage paths", + "placeholder": null + }, + { + "id": "only list local storage paths", + "translation": "로컬 스토리지 경로만 나열", + "message": "only list local storage paths", + "placeholder": null + }, + { + "id": "find sector in the storage system", + "translation": "스토리지 시스템에서 섹터 찾기", + "message": "find sector in the storage system", + "placeholder": null + }, + { + "id": "[miner address] [sector number]", + "translation": "[마이너 주소] [섹터 번호]", + "message": "[miner address] [sector number]", + "placeholder": null + }, + { + "id": "Utility functions for testing", + "translation": "테스트용 유틸리티 기능", + "message": "Utility functions for testing", + "placeholder": null + }, + { + "id": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "translation": "섹터에 대한 증명 계산 (섹터가 사전 실링되어야 함). 이는 체인으로 전송되지 않습니다.", + "message": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "placeholder": null + }, + { + "id": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "translation": "다음 사용 가능한 Curio에서 windowpost 스케줄러를 실행하여 테스트합니다. 모든 재시도가 실패하면 ctrl+c를 눌러 종료해야 합니다.", + "message": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "placeholder": null + }, + { + "id": "deadline to compute WindowPoSt for", + "translation": "WindowPoSt를 계산할 기한", + "message": "deadline to compute WindowPoSt for", + "placeholder": null + }, + { + "id": "Compute WindowPoSt for performance and configuration testing.", + "translation": "성능 및 구성 테스트를 위한 WindowPoSt 계산.", + "message": "Compute WindowPoSt for performance and configuration testing.", + "placeholder": null + }, + { + "id": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "translation": "참고: 이 명령은 PoSt 계산 성능을 검증하기 위해 사용됩니다.\n체인으로 메시지를 전송하지 않습니다. 모든 기한을 계산할 수 있으므로 출력이 체인과 부정확하게 일치할 수 있습니다.", + "message": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "placeholder": null + }, + { + "id": "[deadline index]", + "translation": "[기한 인덱스]", + "message": "[deadline index]", + "placeholder": null + }, + { + "id": "path to json file containing storage config", + "translation": "스토리지 구성 파일이 포함된 JSON 파일의 경로", + "message": "path to json file containing storage config", + "placeholder": null + }, + { + "id": "partition to compute WindowPoSt for", + "translation": "WindowPoSt를 계산할 파티션", + "message": "partition to compute WindowPoSt for", + "placeholder": null + }, { "id": "Failed to generate the libp2p private key.", "translation": "libp2p 개인 키 생성 실패.", @@ -1251,6 +1863,114 @@ "translation": "libp2p 개인 키 마샬링에 실패했습니다.", "message": "Failed to marshal libp2p private key.", "placeholder": null + }, + { + "id": "generate ipni chunks from a file", + "translation": "파일에서 IPNI 청크 생성", + "message": "generate ipni chunks from a file", + "placeholder": null + }, + { + "id": "Add URL to fetch data for offline deals", + "translation": "오프라인 거래 데이터를 가져올 URL 추가", + "message": "Add URL to fetch data for offline deals", + "placeholder": null + }, + { + "id": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "translation": "여러 거래 입력에 사용할 CSV 파일 위치. 파일의 각 행은 'uuid, 원시 크기, url, header1, header2...' 형식이어야 합니다.", + "message": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "placeholder": null + }, + { + "id": "Custom `HEADER` to include in the HTTP request", + "translation": "HTTP 요청에 포함할 사용자 정의 `HEADER`", + "message": "Custom `HEADER` to include in the HTTP request", + "placeholder": null + }, + { + "id": "`URL` to send the request to", + "translation": "요청을 보낼 `URL`", + "message": "`URL` to send the request to", + "placeholder": null + }, + { + "id": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "translation": "거래 담보 지갑에서 자금을 스토리지 시장 액터의 에스크로로 이동", + "message": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "placeholder": null + }, + { + "id": "maximum fee in FIL user is willing to pay for this message", + "translation": "사용자가 이 메시지에 대해 지불하려는 FIL의 최대 수수료", + "message": "maximum fee in FIL user is willing to pay for this message", + "placeholder": null + }, + { + "id": "Specify wallet address to send the funds from", + "translation": "자금을 보낼 지갑 주소 지정", + "message": "Specify wallet address to send the funds from", + "placeholder": null + }, + { + "id": "Collection of debugging utilities", + "translation": "디버깅 유틸리티 모음", + "message": "Collection of debugging utilities", + "placeholder": null + }, + { + "id": "Manage unsealed data", + "translation": "미봉인 데이터를 관리", + "message": "Manage unsealed data", + "placeholder": null + }, + { + "id": "Get information about unsealed data", + "translation": "미봉인 데이터에 대한 정보 가져오기", + "message": "Get information about unsealed data", + "placeholder": null + }, + { + "id": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "translation": "sectors_unseal_pipeline 및 sectors_meta 테이블의 데이터 나열", + "message": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "placeholder": null + }, + { + "id": "Filter by storage provider ID", + "translation": "스토리지 제공자 ID로 필터링", + "message": "Filter by storage provider ID", + "placeholder": null + }, + { + "id": "Output file path (default: stdout)", + "translation": "출력 파일 경로 (기본값: 표준 출력)", + "message": "Output file path (default: stdout)", + "placeholder": null + }, + { + "id": "Set the target unseal state for a sector", + "translation": "섹터의 목표 미봉인 상태 설정", + "message": "Set the target unseal state for a sector", + "placeholder": null + }, + { + "id": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "translation": "특정 섹터의 목표 미봉인 상태를 설정합니다.\n \u003cminer-id\u003e: 스토리지 제공자 ID\n \u003csector-number\u003e: 섹터 번호\n \u003ctarget-state\u003e: 목표 상태 (true, false, none 중 하나)\n\n 미봉인 목표 상태는 Curio가 섹터의 미봉인 복사본을 어떻게 유지할지를 나타냅니다.\n\t 목표 상태가 true이면 Curio는 섹터가 미봉인 상태로 유지되도록 보장합니다.\n\t 목표 상태가 false이면 Curio는 섹터에 미봉인 복사본이 없도록 보장합니다.\n\t 목표 상태가 none이면 Curio는 섹터의 현재 상태를 변경하지 않습니다.\n\n 현재, 목표 상태가 다른 상태에서 true로 변경될 때만 Curio는 새로운 미봉인 프로세스를 시작합니다.\n\n 목표 상태가 false이고 미봉인 섹터 파일이 존재하는 경우, GC 마크 단계는 미봉인 섹터 파일에 대한 제거 마크를 생성합니다. 파일은 제거 마크가 승인된 후에만 제거됩니다.", + "message": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "placeholder": null + }, + { + "id": "Check data integrity in unsealed sector files", + "translation": "미봉인 섹터 파일의 데이터 무결성 확인", + "message": "Check data integrity in unsealed sector files", + "placeholder": null + }, + { + "id": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "translation": "특정 섹터에 대한 검사 작업을 생성하고 완료를 기다린 후 결과를 출력합니다.\n \u003cminer-id\u003e: 스토리지 제공자 ID\n \u003csector-number\u003e: 섹터 번호", + "message": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "placeholder": null } ] } \ No newline at end of file diff --git a/cmd/curio/internal/translations/locales/zh/messages.gotext.json b/cmd/curio/internal/translations/locales/zh/messages.gotext.json index 753fcbc8b..eae5ea994 100644 --- a/cmd/curio/internal/translations/locales/zh/messages.gotext.json +++ b/cmd/curio/internal/translations/locales/zh/messages.gotext.json @@ -1186,6 +1186,618 @@ "message": "Additional info is at http://docs.curiostorage.org", "placeholder": null }, + { + "id": "Math Utils", + "translation": "数学工具", + "message": "Math Utils", + "placeholder": null + }, + { + "id": "Analyze and display the layout of batch sealer threads", + "translation": "分析并显示批量封装线程的布局", + "message": "Analyze and display the layout of batch sealer threads", + "placeholder": null + }, + { + "id": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "translation": "分析并显示CPU上批量封装线程的布局。\n\n提供有关批量封装操作的CPU利用率的详细信息,包括核心分配和不同批量大小的线程分布。", + "message": "Analyze and display the layout of batch sealer threads on your CPU.\n\nIt provides detailed information about CPU utilization for batch sealing operations, including core allocation, thread\ndistribution for different batch sizes.", + "placeholder": null + }, + { + "id": "Generate a supra_seal configuration", + "translation": "生成 supra_seal 配置", + "message": "Generate a supra_seal configuration", + "placeholder": null + }, + { + "id": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "translation": "为指定的批量大小生成 supra_seal 配置。\n\n此命令输出 SupraSeal 所需的配置,主要用于调试和测试。配置可以直接用于 SupraSeal 二进制文件进行测试,而无需涉及 Curio。", + "message": "Generate a supra_seal configuration for a given batch size.\n\nThis command outputs a configuration expected by SupraSeal. Main purpose of this command is for debugging and testing.\nThe config can be used directly with SupraSeal binaries to test it without involving Curio.", + "placeholder": null + }, + { + "id": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "translation": "Zen3 及以后版本支持每个线程两个扇区,旧版CPU请设置为 false", + "message": "Zen3 and later supports two sectors per thread, set to false for older CPUs", + "placeholder": null + }, + { + "id": "Execute cli commands", + "translation": "执行 CLI 命令", + "message": "Execute cli commands", + "placeholder": null + }, + { + "id": "machine host:port (curio run --listen address)", + "translation": "机器主机:端口 (curio run --listen address)", + "message": "machine host:port (curio run --listen address)", + "placeholder": null + }, + { + "id": "Wait for Curio api to come online", + "translation": "等待 Curio API 上线", + "message": "Wait for Curio api to come online", + "placeholder": null + }, + { + "id": "duration to wait till fail", + "translation": "等待失败的持续时间", + "message": "duration to wait till fail", + "placeholder": null + }, + { + "id": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "translation": "通过层管理节点配置。Curio 启动时始终应用“base”层。", + "message": "Manage node config by layers. The layer 'base' will always be applied at Curio start-up.", + "placeholder": null + }, + { + "id": "Print default node config", + "translation": "打印默认节点配置", + "message": "Print default node config", + "placeholder": null + }, + { + "id": "don't comment default values", + "translation": "不要注释默认值", + "message": "don't comment default values", + "placeholder": null + }, + { + "id": "Set a config layer or the base by providing a filename or stdin.", + "translation": "通过提供文件名或标准输入来设置配置层或基础层。", + "message": "Set a config layer or the base by providing a filename or stdin.", + "placeholder": null + }, + { + "id": "a layer's file name", + "translation": "层的文件名", + "message": "a layer's file name", + "placeholder": null + }, + { + "id": "title of the config layer (req'd for stdin)", + "translation": "配置层的标题(标准输入必需)", + "message": "title of the config layer (req'd for stdin)", + "placeholder": null + }, + { + "id": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "translation": "通过名称获取配置层。您可能希望将输出传递到文件,或使用 'less'", + "message": "Get a config layer by name. You may want to pipe the output to a file, or use 'less'", + "placeholder": null + }, + { + "id": "layer name", + "translation": "层名称", + "message": "layer name", + "placeholder": null + }, + { + "id": "List config layers present in the DB.", + "translation": "列出数据库中存在的配置层。", + "message": "List config layers present in the DB.", + "placeholder": null + }, + { + "id": "Remove a named config layer.", + "translation": "移除命名的配置层。", + "message": "Remove a named config layer.", + "placeholder": null + }, + { + "id": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "translation": "由此版本的 Curio 解释堆叠的配置层,带有系统生成的注释。", + "message": "Interpret stacked config layers by this version of curio, with system-generated comments.", + "placeholder": null + }, + { + "id": "a list of layers to be interpreted as the final config", + "translation": "要解释为最终配置的层列表", + "message": "a list of layers to be interpreted as the final config", + "placeholder": null + }, + { + "id": "comma or space separated list of layers to be interpreted (base is always applied)", + "translation": "要解释的层列表,以逗号或空格分隔(base 始终应用)", + "message": "comma or space separated list of layers to be interpreted (base is always applied)", + "placeholder": null + }, + { + "id": "edit a config layer", + "translation": "编辑配置层", + "message": "edit a config layer", + "placeholder": null + }, + { + "id": "[layer name]", + "translation": "[层名称]", + "message": "[layer name]", + "placeholder": null + }, + { + "id": "editor to use", + "translation": "使用的编辑器", + "message": "editor to use", + "placeholder": null + }, + { + "id": "source config layer", + "translation": "源配置层", + "message": "source config layer", + "placeholder": null + }, + { + "id": "allow overwrite of existing layer if source is a different layer", + "translation": "如果源是不同的层,则允许覆盖现有层", + "message": "allow overwrite of existing layer if source is a different layer", + "placeholder": null + }, + { + "id": "save the whole config into the layer, not just the diff", + "translation": "将整个配置保存到层中,而不仅仅是差异", + "message": "save the whole config into the layer, not just the diff", + "placeholder": null + }, + { + "id": "do not interpret source layer", + "translation": "不要解释源层", + "message": "do not interpret source layer", + "placeholder": null + }, + { + "id": "true if --source is set", + "translation": "如果设置了 --source,则为 true", + "message": "true if --source is set", + "placeholder": null + }, + { + "id": "Create new configuration for a new cluster", + "translation": "为新集群创建新配置", + "message": "Create new configuration for a new cluster", + "placeholder": null + }, + { + "id": "[SP actor address...]", + "translation": "[SP actor 地址...]", + "message": "[SP actor address...]", + "placeholder": null + }, + { + "id": "Manage logging", + "translation": "管理日志记录", + "message": "Manage logging", + "placeholder": null + }, + { + "id": "List log systems", + "translation": "列出日志系统", + "message": "List log systems", + "placeholder": null + }, + { + "id": "Set log level", + "translation": "设置日志级别", + "message": "Set log level", + "placeholder": null + }, + { + "id": "[level]", + "translation": "[级别]", + "message": "[level]", + "placeholder": null + }, + { + "id": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "translation": "为日志系统设置日志级别:\n\n 系统标志可以多次指定。\n\n 例如) log set-level --system chain --system chainxchg debug\n\n 可用级别:\n debug\n info\n warn\n error\n\n 环境变量:\n GOLOG_LOG_LEVEL - 所有日志系统的默认日志级别\n GOLOG_LOG_FMT - 更改输出日志格式 (json, nocolor)\n GOLOG_FILE - 将日志写入文件\n GOLOG_OUTPUT - 指定是否输出到文件、stderr、stdout 或组合,例如 file+stderr", + "message": "Set the log level for logging systems:\n\n The system flag can be specified multiple times.\n\n eg) log set-level --system chain --system chainxchg debug\n\n Available Levels:\n debug\n info\n warn\n error\n\n Environment Variables:\n GOLOG_LOG_LEVEL - Default log level for all log systems\n GOLOG_LOG_FMT - Change output log format (json, nocolor)\n GOLOG_FILE - Write logs to file\n GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr", + "placeholder": null + }, + { + "id": "limit to log system", + "translation": "限制到日志系统", + "message": "limit to log system", + "placeholder": null + }, + { + "id": "Filecoin decentralized storage network provider", + "translation": "Filecoin 去中心化存储网络提供商", + "message": "Filecoin decentralized storage network provider", + "placeholder": null + }, + { + "id": "use color in display output", + "translation": "在显示输出中使用颜色", + "message": "use color in display output", + "placeholder": null + }, + { + "id": "depends on output being a TTY", + "translation": "取决于输出是否为TTY", + "message": "depends on output being a TTY", + "placeholder": null + }, + { + "id": "Command separated list of hostnames for yugabyte cluster", + "translation": "Yugabyte 集群的主机名命令分隔列表", + "message": "Command separated list of hostnames for yugabyte cluster", + "placeholder": null + }, + { + "id": "enables very verbose mode, useful for debugging the CLI", + "translation": "启用非常详细的模式,有助于调试 CLI", + "message": "enables very verbose mode, useful for debugging the CLI", + "placeholder": null + }, + { + "id": "Fetch proving parameters", + "translation": "获取证明参数", + "message": "Fetch proving parameters", + "placeholder": null + }, + { + "id": "[sectorSize]", + "translation": "[扇区大小]", + "message": "[sectorSize]", + "placeholder": null + }, + { + "id": "list of layers to be interpreted (atop defaults). Default: base", + "translation": "要解释的层列表(在默认值之上)。默认:base", + "message": "list of layers to be interpreted (atop defaults). Default: base", + "placeholder": null + }, + { + "id": "start sealing a deal sector early", + "translation": "提前开始封装交易扇区", + "message": "start sealing a deal sector early", + "placeholder": null + }, + { + "id": "Specify actor address to start sealing sectors for", + "translation": "指定演员地址以开始封装扇区", + "message": "Specify actor address to start sealing sectors for", + "placeholder": null + }, + { + "id": "Use synthetic PoRep", + "translation": "使用合成 PoRep", + "message": "Use synthetic PoRep", + "placeholder": null + }, + { + "id": "\u003csector\u003e", + "translation": "\u003c扇区\u003e", + "message": "\u003csector\u003e", + "placeholder": null + }, + { + "id": "Manage the sealing pipeline", + "translation": "管理封装流水线", + "message": "Manage the sealing pipeline", + "placeholder": null + }, + { + "id": "Start new sealing operations manually", + "translation": "手动开始新的封装操作", + "message": "Start new sealing operations manually", + "placeholder": null + }, + { + "id": "Start sealing sectors for all actors now (not on schedule)", + "translation": "立即为所有演员开始封装扇区(非计划内)", + "message": "Start sealing sectors for all actors now (not on schedule)", + "placeholder": null + }, + { + "id": "Start sealing new CC sectors", + "translation": "开始封装新的 CC 扇区", + "message": "Start sealing new CC sectors", + "placeholder": null + }, + { + "id": "Number of sectors to start", + "translation": "要开始的扇区数量", + "message": "Number of sectors to start", + "placeholder": null + }, + { + "id": "How long to commit sectors for", + "translation": "承诺扇区的时间长度", + "message": "How long to commit sectors for", + "placeholder": null + }, + { + "id": "1278 (3.5 years)", + "translation": "1278 (3.5 年)", + "message": "1278 (3.5 years)", + "placeholder": null + }, + { + "id": "(debug tool) Copy LM sector metadata into Curio DB", + "translation": "(调试工具)将 LM 扇区元数据复制到 Curio 数据库", + "message": "(debug tool) Copy LM sector metadata into Curio DB", + "placeholder": null + }, + { + "id": "Path to miner repo", + "translation": "矿工库的路径", + "message": "Path to miner repo", + "placeholder": null + }, + { + "id": "Ignore sectors that cannot be migrated", + "translation": "忽略无法迁移的扇区", + "message": "Ignore sectors that cannot be migrated", + "placeholder": null + }, + { + "id": "List pipeline events", + "translation": "列出流水线事件", + "message": "List pipeline events", + "placeholder": null + }, + { + "id": "Filter events by actor address; lists all if not specified", + "translation": "按演员地址过滤事件;如果未指定则列出所有", + "message": "Filter events by actor address; lists all if not specified", + "placeholder": null + }, + { + "id": "Filter events by sector number; requires --actor to be specified", + "translation": "按扇区编号过滤事件;需要指定 --actor", + "message": "Filter events by sector number; requires --actor to be specified", + "placeholder": null + }, + { + "id": "Limit output to the last N events", + "translation": "将输出限制为最后 N 个事件", + "message": "Limit output to the last N events", + "placeholder": null + }, + { + "id": "Start a Curio process", + "translation": "启动 Curio 进程", + "message": "Start a Curio process", + "placeholder": null + }, + { + "id": "host address and port the worker api will listen on", + "translation": "worker API 监听的主机地址和端口", + "message": "host address and port the worker api will listen on", + "placeholder": null + }, + { + "id": "host address and port the gui will listen on", + "translation": "GUI 监听的主机地址和端口", + "message": "host address and port the gui will listen on", + "placeholder": null + }, + { + "id": "don't check full-node sync status", + "translation": "不检查全节点同步状态", + "message": "don't check full-node sync status", + "placeholder": null + }, + { + "id": "only run init, then return", + "translation": "仅运行初始化,然后返回", + "message": "only run init, then return", + "placeholder": null + }, + { + "id": "manage open file limit", + "translation": "管理打开文件的限制", + "message": "manage open file limit", + "placeholder": null + }, + { + "id": "custom node name", + "translation": "自定义节点名称", + "message": "custom node name", + "placeholder": null + }, + { + "id": "Start Curio web interface", + "translation": "启动 Curio 网络界面", + "message": "Start Curio web interface", + "placeholder": null + }, + { + "id": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "translation": "启动 Curio 网络界面的一个实例。\n\t如果“web”层不存在,则创建该层,然后使用该层调用运行。", + "message": "Start an instance of Curio web interface. \n\tThis creates the 'web' layer if it does not exist, then calls run with that layer.", + "placeholder": null + }, + { + "id": "Address to listen for the GUI on", + "translation": "GUI 监听的地址", + "message": "Address to listen for the GUI on", + "placeholder": null + }, + { + "id": "Stop a running Curio process", + "translation": "停止正在运行的 Curio 进程", + "message": "Stop a running Curio process", + "placeholder": null + }, + { + "id": "manage sector storage", + "translation": "管理扇区存储", + "message": "manage sector storage", + "placeholder": null + }, + { + "id": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "translation": "扇区可以存储在多个文件系统路径中。这些命令提供了管理 Curio 节点用于长期存储和证明的存储方法(参考为“store”),以及封装过程中扇区的存储方式(参考为“seal”)。", + "message": "Sectors can be stored across many filesystem paths. These\ncommands provide ways to manage the storage a Curio node will use to store sectors\nlong term for proving (references as 'store') as well as how sectors will be\nstored while moving through the sealing pipeline (references as 'seal').", + "placeholder": null + }, + { + "id": "attach local storage path", + "translation": "附加本地存储路径", + "message": "attach local storage path", + "placeholder": null + }, + { + "id": "[path]", + "translation": "[路径]", + "message": "[path]", + "placeholder": null + }, + { + "id": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "translation": "可以使用此命令将存储附加到 Curio 节点。存储卷列表存储在本地 Curio 节点中的 storage.json 文件中,通过 curio run 设置。建议在了解存储系统之前,不要手动修改此值。\n\n每个存储卷包含一个配置文件,该文件描述了该卷的功能。提供 '--init' 标志时,将使用其他标志创建此文件。\n\n权重\n较高的权重值意味着数据更有可能存储在此路径中\n\n封装\n封装过程的数据将存储在这里\n\n存储\n已完成的扇区将移至此处进行长期存储,并随着时间推移进行证明", + "message": "Storage can be attached to a Curio node using this command. The storage volume\nlist is stored local to the Curio node in storage.json set in curio run. We do not\nrecommend manually modifying this value without further understanding of the\nstorage system.\n\nEach storage volume contains a configuration file which describes the\ncapabilities of the volume. When the '--init' flag is provided, this file will\nbe created using the additional flags.\n\nWeight\nA high weight value means data will be more likely to be stored in this path\n\nSeal\nData for the sealing process will be stored here\n\nStore\nFinalized sectors that will be moved here for long term storage and be proven\nover time", + "placeholder": null + }, + { + "id": "initialize the path first", + "translation": "先初始化路径", + "message": "initialize the path first", + "placeholder": null + }, + { + "id": "(for init) path weight", + "translation": "(用于初始化)路径权重", + "message": "(for init) path weight", + "placeholder": null + }, + { + "id": "(for init) use path for sealing", + "translation": "(用于初始化)路径用于封装", + "message": "(for init) use path for sealing", + "placeholder": null + }, + { + "id": "(for init) use path for long-term storage", + "translation": "(用于初始化)路径用于长期存储", + "message": "(for init) use path for long-term storage", + "placeholder": null + }, + { + "id": "(for init) limit storage space for sectors (expensive for very large paths!)", + "translation": "(用于初始化)限制扇区的存储空间(对非常大的路径来说成本较高!)", + "message": "(for init) limit storage space for sectors (expensive for very large paths!)", + "placeholder": null + }, + { + "id": "path group names", + "translation": "路径组名称", + "message": "path group names", + "placeholder": null + }, + { + "id": "path groups allowed to pull data from this path (allow all if not specified)", + "translation": "允许从此路径提取数据的路径组(如果未指定,则允许所有)", + "message": "path groups allowed to pull data from this path (allow all if not specified)", + "placeholder": null + }, + { + "id": "detach local storage path", + "translation": "分离本地存储路径", + "message": "detach local storage path", + "placeholder": null + }, + { + "id": "list local storage paths", + "translation": "列出本地存储路径", + "message": "list local storage paths", + "placeholder": null + }, + { + "id": "only list local storage paths", + "translation": "仅列出本地存储路径", + "message": "only list local storage paths", + "placeholder": null + }, + { + "id": "find sector in the storage system", + "translation": "在存储系统中查找扇区", + "message": "find sector in the storage system", + "placeholder": null + }, + { + "id": "[miner address] [sector number]", + "translation": "[矿工地址] [扇区编号]", + "message": "[miner address] [sector number]", + "placeholder": null + }, + { + "id": "Utility functions for testing", + "translation": "测试的实用功能", + "message": "Utility functions for testing", + "placeholder": null + }, + { + "id": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "translation": "为扇区计算时空证明(需要预封装的扇区)。这些将不会发送到链上。", + "message": "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + "placeholder": null + }, + { + "id": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "translation": "通过在下一个可用的 Curio 上运行来测试窗口后调度器。如果所有重试都失败,则需要按 ctrl+c 退出。", + "message": "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + "placeholder": null + }, + { + "id": "deadline to compute WindowPoSt for", + "translation": "计算 WindowPoSt 的截止日期", + "message": "deadline to compute WindowPoSt for", + "placeholder": null + }, + { + "id": "Compute WindowPoSt for performance and configuration testing.", + "translation": "计算 WindowPoSt 以进行性能和配置测试。", + "message": "Compute WindowPoSt for performance and configuration testing.", + "placeholder": null + }, + { + "id": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "translation": "注意:此命令旨在用于验证 PoSt 计算性能。\n它不会向链发送任何消息。由于它可以计算任何截止日期,输出的时间可能与链不符。", + "message": "Note: This command is intended to be used to verify PoSt compute performance.\nIt will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.", + "placeholder": null + }, + { + "id": "[deadline index]", + "translation": "[截止日期索引]", + "message": "[deadline index]", + "placeholder": null + }, + { + "id": "path to json file containing storage config", + "translation": "包含存储配置的 JSON 文件的路径", + "message": "path to json file containing storage config", + "placeholder": null + }, + { + "id": "partition to compute WindowPoSt for", + "translation": "计算 WindowPoSt 的分区", + "message": "partition to compute WindowPoSt for", + "placeholder": null + }, { "id": "Failed to generate the libp2p private key.", "translation": "生成 libp2p 私钥失败。", @@ -1221,6 +1833,114 @@ "translation": "libp2p私钥编组失败。", "message": "Failed to marshal libp2p private key.", "placeholder": null + }, + { + "id": "generate ipni chunks from a file", + "translation": "从文件生成 IPNI 块", + "message": "generate ipni chunks from a file", + "placeholder": null + }, + { + "id": "Add URL to fetch data for offline deals", + "translation": "添加 URL 以获取离线交易的数据", + "message": "Add URL to fetch data for offline deals", + "placeholder": null + }, + { + "id": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "translation": "用于多交易输入的 CSV 文件位置。文件中的每一行应为格式 'uuid, 原始大小, URL, header1, header2...'", + "message": "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'", + "placeholder": null + }, + { + "id": "Custom `HEADER` to include in the HTTP request", + "translation": "在 HTTP 请求中包含自定义 `HEADER`", + "message": "Custom `HEADER` to include in the HTTP request", + "placeholder": null + }, + { + "id": "`URL` to send the request to", + "translation": "发送请求的 `URL`", + "message": "`URL` to send the request to", + "placeholder": null + }, + { + "id": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "translation": "将资金从交易抵押钱包转移到存储市场参与者的托管账户", + "message": "Moves funds from the deal collateral wallet into escrow with the storage market actor", + "placeholder": null + }, + { + "id": "maximum fee in FIL user is willing to pay for this message", + "translation": "用户愿意为此消息支付的最大 FIL 费用", + "message": "maximum fee in FIL user is willing to pay for this message", + "placeholder": null + }, + { + "id": "Specify wallet address to send the funds from", + "translation": "指定发送资金的钱包地址", + "message": "Specify wallet address to send the funds from", + "placeholder": null + }, + { + "id": "Collection of debugging utilities", + "translation": "调试工具集合", + "message": "Collection of debugging utilities", + "placeholder": null + }, + { + "id": "Manage unsealed data", + "translation": "管理未密封的数据", + "message": "Manage unsealed data", + "placeholder": null + }, + { + "id": "Get information about unsealed data", + "translation": "获取未密封数据的信息", + "message": "Get information about unsealed data", + "placeholder": null + }, + { + "id": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "translation": "列出来自 sectors_unseal_pipeline 和 sectors_meta 表的数据", + "message": "List data from the sectors_unseal_pipeline and sectors_meta tables", + "placeholder": null + }, + { + "id": "Filter by storage provider ID", + "translation": "按存储提供者 ID 过滤", + "message": "Filter by storage provider ID", + "placeholder": null + }, + { + "id": "Output file path (default: stdout)", + "translation": "输出文件路径(默认:标准输出)", + "message": "Output file path (default: stdout)", + "placeholder": null + }, + { + "id": "Set the target unseal state for a sector", + "translation": "设置扇区的目标解封状态", + "message": "Set the target unseal state for a sector", + "placeholder": null + }, + { + "id": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "translation": "为特定扇区设置目标解封状态。\n \u003cminer-id\u003e: 存储提供者 ID\n \u003csector-number\u003e: 扇区号\n \u003ctarget-state\u003e: 目标状态(true、false 或 none)\n\n 解封目标状态表示 Curio 应如何维护扇区的未密封副本。\n\t 如果目标状态为 true,Curio 将确保扇区未密封。\n\t 如果目标状态为 false,Curio 将确保扇区没有未密封副本。\n\t 如果目标状态为 none,Curio 将不会更改扇区的当前状态。\n\n 当前,Curio 仅在目标状态从其他状态更改为 true 时启动新的解封进程。\n\n 当目标状态为 false 且存在未密封的扇区文件时,GC 标记步骤将为未密封的扇区文件创建一个删除标记。文件将在删除标记被接受后才会被移除。", + "message": "Set the target unseal state for a specific sector.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number\n \u003ctarget-state\u003e: The target state (true, false, or none)\n\n The unseal target state indicates to curio how an unsealed copy of the sector should be maintained.\n\t If the target state is true, curio will ensure that the sector is unsealed.\n\t If the target state is false, curio will ensure that there is no unsealed copy of the sector.\n\t If the target state is none, curio will not change the current state of the sector.\n\n Currently when the curio will only start new unseal processes when the target state changes from another state to true.\n\n When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark\n for the unsealed sector file. The file will only be removed after the removal mark is accepted.", + "placeholder": null + }, + { + "id": "Check data integrity in unsealed sector files", + "translation": "检查未密封扇区文件中的数据完整性", + "message": "Check data integrity in unsealed sector files", + "placeholder": null + }, + { + "id": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "translation": "为特定扇区创建检查任务,等待其完成并输出结果。\n \u003cminer-id\u003e: 存储提供者 ID\n \u003csector-number\u003e: 扇区号", + "message": "Create a check task for a specific sector, wait for its completion, and output the result.\n \u003cminer-id\u003e: The storage provider ID\n \u003csector-number\u003e: The sector number", + "placeholder": null } ] } \ No newline at end of file diff --git a/cmd/curio/internal/translations/translations.go b/cmd/curio/internal/translations/translations.go index 361e8e894..dfd4c0e4e 100644 --- a/cmd/curio/internal/translations/translations.go +++ b/cmd/curio/internal/translations/translations.go @@ -24,4 +24,63 @@ // FUTURE Reliability: OpenAPI automation. package translations +import ( + "fmt" + "os" + "strings" + + "github.com/charmbracelet/lipgloss" + "github.com/samber/lo" + "golang.org/x/text/language" + "golang.org/x/text/message" +) + //go:generate ./updateLang.sh + +var T = setupLang() + +func setupLang() func(key message.Reference, a ...interface{}) string { + lang, _ := SetupLanguage() + return lang +} + +var notice = lipgloss.NewStyle(). + Align(lipgloss.Left). + Bold(true). + Foreground(lipgloss.Color("#CCCCCC")). + Background(lipgloss.Color("#333300")).MarginBottom(1) + +func SetupLanguage() (func(key message.Reference, a ...interface{}) string, func(style lipgloss.Style, key message.Reference, a ...interface{})) { + langText := "en" + problem := false + if len(os.Getenv("LANG")) > 1 { + langText = os.Getenv("LANG")[:2] + } else { + problem = true + } + + lang, err := language.Parse(langText) + if err != nil { + lang = language.English + problem = true + fmt.Println("Error parsing language") + } + + langs := message.DefaultCatalog.Languages() + have := lo.SliceToMap(langs, func(t language.Tag) (string, bool) { return t.String(), true }) + if _, ok := have[lang.String()]; !ok { + lang = language.English + problem = true + } + if problem { + _ = os.Setenv("LANG", "en-US") // for later users of this function + notice.Copy().AlignHorizontal(lipgloss.Right). + Render("$LANG=" + langText + " unsupported. Available: " + strings.Join(lo.Keys(have), ", ")) + } + return func(key message.Reference, a ...interface{}) string { + return message.NewPrinter(lang).Sprintf(key, a...) + }, func(sty lipgloss.Style, key message.Reference, a ...interface{}) { + msg := message.NewPrinter(lang).Sprintf(key, a...) + fmt.Println(sty.Render(msg)) + } +} diff --git a/cmd/curio/internal/translations/updateLang.sh b/cmd/curio/internal/translations/updateLang.sh index 9fb786abe..b5747c145 100755 --- a/cmd/curio/internal/translations/updateLang.sh +++ b/cmd/curio/internal/translations/updateLang.sh @@ -1,8 +1,8 @@ #!/bin/bash -#OP: Only run if some file in ../guidedsetup* is newer than catalog.go -# Change this condition if using translations more widely. -if [ "$(find ../../guidedsetup/* -newer catalog.go)" ]; then - gotext -srclang=en update -out=catalog.go -lang=en,zh,ko github.com/filecoin-project/curio/cmd/curio/guidedsetup +#OP: Only run if some file in ../* is newer than catalog.go +# Change this condition if using translations elsewhere. +if [ "$(find ../../* -newer catalog.go)" ]; then + gotext -srclang=en update -out=catalog.go -lang=en,zh,ko github.com/filecoin-project/curio/cmd/curio/ go run knowns/main.go ./locales/zh ./locales/ko fi diff --git a/cmd/curio/log.go b/cmd/curio/log.go index 628f1586b..5ea0cf471 100644 --- a/cmd/curio/log.go +++ b/cmd/curio/log.go @@ -6,13 +6,14 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/cmd/curio/rpc" "github.com/filecoin-project/curio/lib/reqcontext" ) var logCmd = &cli.Command{ Name: "log", - Usage: "Manage logging", + Usage: translations.T("Manage logging"), Subcommands: []*cli.Command{ LogList, LogSetLevel, @@ -21,7 +22,7 @@ var logCmd = &cli.Command{ var LogList = &cli.Command{ Name: "list", - Usage: "List log systems", + Usage: translations.T("List log systems"), Action: func(cctx *cli.Context) error { minerApi, closer, err := rpc.GetCurioAPI(cctx) if err != nil { @@ -46,9 +47,9 @@ var LogList = &cli.Command{ var LogSetLevel = &cli.Command{ Name: "set-level", - Usage: "Set log level", - ArgsUsage: "[level]", - Description: `Set the log level for logging systems: + Usage: translations.T("Set log level"), + ArgsUsage: translations.T("[level]"), + Description: translations.T(`Set the log level for logging systems: The system flag can be specified multiple times. @@ -65,11 +66,11 @@ var LogSetLevel = &cli.Command{ GOLOG_LOG_FMT - Change output log format (json, nocolor) GOLOG_FILE - Write logs to file GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr -`, +`), Flags: []cli.Flag{ &cli.StringSliceFlag{ Name: "system", - Usage: "limit to log system", + Usage: translations.T("limit to log system"), Value: &cli.StringSlice{}, }, }, diff --git a/cmd/curio/main.go b/cmd/curio/main.go index 24ed5d1bb..0e31c823b 100644 --- a/cmd/curio/main.go +++ b/cmd/curio/main.go @@ -18,6 +18,7 @@ import ( curiobuild "github.com/filecoin-project/curio/build" "github.com/filecoin-project/curio/cmd/curio/guidedsetup" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/lib/fastparamfetch" "github.com/filecoin-project/curio/lib/panicreport" @@ -101,7 +102,7 @@ func main() { app := &cli.App{ Name: "curio", - Usage: "Filecoin decentralized storage network provider", + Usage: translations.T("Filecoin decentralized storage network provider"), Version: curiobuild.UserVersion(), EnableBashCompletion: true, Before: func(c *cli.Context) error { @@ -112,9 +113,10 @@ func main() { Flags: []cli.Flag{ &cli.BoolFlag{ // examined in the Before above - Name: "color", - Usage: "use color in display output", - DefaultText: "depends on output being a TTY", + Name: "color", + + Usage: translations.T("use color in display output"), + DefaultText: translations.T("depends on output being a TTY"), }, &cli.StringFlag{ Name: "panic-reports", @@ -125,7 +127,7 @@ func main() { &cli.StringFlag{ Name: "db-host", EnvVars: []string{"CURIO_DB_HOST", "CURIO_HARMONYDB_HOSTS"}, - Usage: "Command separated list of hostnames for yugabyte cluster", + Usage: translations.T("Command separated list of hostnames for yugabyte cluster"), Value: "127.0.0.1", }, &cli.StringFlag{ @@ -155,7 +157,7 @@ func main() { }, &cli.BoolFlag{ // disconnected from cli/util for dependency reasons. Not used in curio that way. Name: "vv", - Usage: "enables very verbose mode, useful for debugging the CLI", + Usage: translations.T("enables very verbose mode, useful for debugging the CLI"), }, }, Commands: local, @@ -180,9 +182,10 @@ func main() { } var fetchParamCmd = &cli.Command{ - Name: "fetch-params", - Usage: "Fetch proving parameters", - ArgsUsage: "[sectorSize]", + Name: "fetch-params", + + Usage: translations.T("Fetch proving parameters"), + ArgsUsage: translations.T("[sectorSize]"), Action: func(cctx *cli.Context) error { if cctx.NArg() != 1 { return xerrors.Errorf("incorrect number of arguments") diff --git a/cmd/curio/market.go b/cmd/curio/market.go index 1e647187c..abcbf751a 100644 --- a/cmd/curio/market.go +++ b/cmd/curio/market.go @@ -17,6 +17,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/lib/reqcontext" "github.com/filecoin-project/curio/market/storageingest" @@ -38,20 +39,21 @@ var marketCmd = &cli.Command{ var marketSealCmd = &cli.Command{ Name: "seal", - Usage: "start sealing a deal sector early", + Usage: translations.T("start sealing a deal sector early"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "actor", - Usage: "Specify actor address to start sealing sectors for", + Usage: translations.T("Specify actor address to start sealing sectors for"), Required: true, }, &cli.BoolFlag{ Name: "synthetic", - Usage: "Use synthetic PoRep", + Usage: translations.T("Use synthetic PoRep"), Value: false, }, }, - ArgsUsage: "", + + ArgsUsage: translations.T(""), Action: func(cctx *cli.Context) error { act, err := address.NewFromString(cctx.String("actor")) if err != nil { @@ -61,7 +63,6 @@ var marketSealCmd = &cli.Command{ if cctx.Args().Len() > 1 { return xerrors.Errorf("specify only one sector") } - sec := cctx.Args().First() sector, err := strconv.ParseUint(sec, 10, 64) @@ -81,21 +82,21 @@ var marketSealCmd = &cli.Command{ var marketAddOfflineURLCmd = &cli.Command{ Name: "add-url", - Usage: "Add URL to fetch data for offline deals", + Usage: translations.T("Add URL to fetch data for offline deals"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "file", - Usage: "CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'\"", + Usage: translations.T("CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'"), }, &cli.StringSliceFlag{ Name: "header", Aliases: []string{"H"}, - Usage: "Custom `HEADER` to include in the HTTP request", + Usage: translations.T("Custom `HEADER` to include in the HTTP request"), }, &cli.StringFlag{ Name: "url", Aliases: []string{"u"}, - Usage: "`URL` to send the request to", + Usage: translations.T("`URL` to send the request to"), Required: true, }, }, @@ -237,22 +238,22 @@ var marketAddOfflineURLCmd = &cli.Command{ var marketMoveToEscrowCmd = &cli.Command{ Name: "move-to-escrow", - Usage: "Moves funds from the deal collateral wallet into escrow with the storage market actor", + Usage: translations.T("Moves funds from the deal collateral wallet into escrow with the storage market actor"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "actor", - Usage: "Specify actor address to start sealing sectors for", + Usage: translations.T("Specify actor address to start sealing sectors for"), Required: true, }, &cli.StringFlag{ Name: "max-fee", - Usage: "maximum fee in FIL user is willing to pay for this message", + Usage: translations.T("maximum fee in FIL user is willing to pay for this message"), Required: false, Value: "0.5", }, &cli.StringFlag{ Name: "wallet", - Usage: "Specify wallet address to send the funds from", + Usage: translations.T("Specify wallet address to send the funds from"), Required: true, }, }, diff --git a/cmd/curio/run.go b/cmd/curio/run.go index 54282eb56..fd471c799 100644 --- a/cmd/curio/run.go +++ b/cmd/curio/run.go @@ -12,6 +12,7 @@ import ( "go.opencensus.io/stats" "golang.org/x/xerrors" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/cmd/curio/rpc" "github.com/filecoin-project/curio/cmd/curio/tasks" "github.com/filecoin-project/curio/deps" @@ -27,44 +28,44 @@ type stackTracer interface { var runCmd = &cli.Command{ Name: "run", - Usage: "Start a Curio process", + Usage: translations.T("Start a Curio process"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "listen", - Usage: "host address and port the worker api will listen on", + Usage: translations.T("host address and port the worker api will listen on"), Value: "0.0.0.0:12300", EnvVars: []string{"CURIO_LISTEN"}, }, &cli.StringFlag{ Name: "gui-listen", - Usage: "host address and port the gui will listen on", + Usage: translations.T("host address and port the gui will listen on"), Hidden: true, }, &cli.BoolFlag{ Name: "nosync", - Usage: "don't check full-node sync status", + Usage: translations.T("don't check full-node sync status"), }, &cli.BoolFlag{ Name: "halt-after-init", - Usage: "only run init, then return", + Usage: translations.T("only run init, then return"), Hidden: true, }, &cli.BoolFlag{ Name: "manage-fdlimit", - Usage: "manage open file limit", + Usage: translations.T("manage open file limit"), Value: true, }, &cli.StringSliceFlag{ Name: "layers", - Usage: "list of layers to be interpreted (atop defaults). Default: base", + Usage: translations.T("list of layers to be interpreted (atop defaults). Default: base"), EnvVars: []string{"CURIO_LAYERS"}, Aliases: []string{"l", "layer"}, }, &cli.StringFlag{ Name: "name", - Usage: "custom node name", + Usage: translations.T("custom node name"), EnvVars: []string{"CURIO_NODE_NAME"}, - DefaultText: "", + DefaultText: translations.T(""), }, }, Action: func(cctx *cli.Context) (err error) { @@ -145,23 +146,24 @@ var runCmd = &cli.Command{ var layersFlag = &cli.StringSliceFlag{ Name: "layers", - Usage: "list of layers to be interpreted (atop defaults). Default: base", + Usage: translations.T("list of layers to be interpreted (atop defaults). Default: base"), } var webCmd = &cli.Command{ - Name: "web", - Usage: "Start Curio web interface", - Description: `Start an instance of Curio web interface. - This creates the 'web' layer if it does not exist, then calls run with that layer.`, + Name: "web", + + Usage: translations.T("Start Curio web interface"), + Description: translations.T(`Start an instance of Curio web interface. + This creates the 'web' layer if it does not exist, then calls run with that layer.`), Flags: []cli.Flag{ &cli.StringFlag{ Name: "gui-listen", - Usage: "Address to listen for the GUI on", + Usage: translations.T("Address to listen for the GUI on"), Value: "0.0.0.0:4701", }, &cli.BoolFlag{ Name: "nosync", - Usage: "don't check full-node sync status", + Usage: translations.T("don't check full-node sync status"), }, layersFlag, }, diff --git a/cmd/curio/seal.go b/cmd/curio/seal.go index e32eb996c..c1bcc5e2c 100644 --- a/cmd/curio/seal.go +++ b/cmd/curio/seal.go @@ -15,6 +15,7 @@ import ( miner12 "github.com/filecoin-project/go-state-types/builtin/v12/miner" "github.com/filecoin-project/curio/cmd/curio/guidedsetup" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/harmony/harmonydb" "github.com/filecoin-project/curio/lib/reqcontext" @@ -27,7 +28,7 @@ import ( var sealCmd = &cli.Command{ Name: "seal", - Usage: "Manage the sealing pipeline", + Usage: translations.T("Manage the sealing pipeline"), Subcommands: []*cli.Command{ sealStartCmd, sealMigrateLMSectorsCmd, @@ -37,42 +38,43 @@ var sealCmd = &cli.Command{ var sealStartCmd = &cli.Command{ Name: "start", - Usage: "Start new sealing operations manually", + Usage: translations.T("Start new sealing operations manually"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "actor", - Usage: "Specify actor address to start sealing sectors for", + Usage: translations.T("Specify actor address to start sealing sectors for"), Required: true, }, &cli.BoolFlag{ Name: "now", - Usage: "Start sealing sectors for all actors now (not on schedule)", + Usage: translations.T("Start sealing sectors for all actors now (not on schedule)"), }, &cli.BoolFlag{ Name: "cc", - Usage: "Start sealing new CC sectors", + Usage: translations.T("Start sealing new CC sectors"), }, &cli.IntFlag{ Name: "count", - Usage: "Number of sectors to start", + Usage: translations.T("Number of sectors to start"), Value: 1, }, &cli.BoolFlag{ Name: "synthetic", - Usage: "Use synthetic PoRep", + Usage: translations.T("Use synthetic PoRep"), Value: false, }, &cli.StringSliceFlag{ Name: "layers", - Usage: "list of layers to be interpreted (atop defaults). Default: base", + Usage: translations.T("list of layers to be interpreted (atop defaults). Default: base"), }, &cli.IntFlag{ Name: "duration-days", Aliases: []string{"d"}, - Usage: "How long to commit sectors for", - DefaultText: "1278 (3.5 years)", + Usage: translations.T("How long to commit sectors for"), + DefaultText: translations.T("1278 (3.5 years)"), }, }, + Action: func(cctx *cli.Context) error { if !cctx.Bool("now") { return xerrors.Errorf("schedule not implemented, use --now") @@ -97,15 +99,15 @@ var sealStartCmd = &cli.Command{ /* create table sectors_sdr_pipeline ( - sp_id bigint not null, - sector_number bigint not null, + sp_id bigint not null, + sector_number bigint not null, - -- at request time - create_time timestamp not null, - reg_seal_proof int not null, - comm_d_cid text not null, + -- at request time + create_time timestamp not null, + reg_seal_proof int not null, + comm_d_cid text not null, - [... other not relevant fields] + [... other not relevant fields] */ mid, err := address.IDFromAddress(act) @@ -182,21 +184,22 @@ var sealStartCmd = &cli.Command{ var sealMigrateLMSectorsCmd = &cli.Command{ Name: "migrate-lm-sectors", - Usage: "(debug tool) Copy LM sector metadata into Curio DB", + Usage: translations.T("(debug tool) Copy LM sector metadata into Curio DB"), Hidden: true, // only needed in advanced cases where manual repair is needed Flags: []cli.Flag{ &cli.StringFlag{ Name: "miner-repo", - Usage: "Path to miner repo", + Usage: translations.T("Path to miner repo"), Value: "~/.lotusminer", }, &cli.BoolFlag{ Name: "seal-ignore", - Usage: "Ignore sectors that cannot be migrated", + Usage: translations.T("Ignore sectors that cannot be migrated"), Value: false, EnvVars: []string{"CURUO_MIGRATE_SEAL_IGNORE"}, }, }, + Action: func(cctx *cli.Context) error { ctx := reqcontext.ReqContext(cctx) db, err := deps.MakeDB(cctx) @@ -259,22 +262,23 @@ var sealMigrateLMSectorsCmd = &cli.Command{ var sealEventsCmd = &cli.Command{ Name: "events", - Usage: "List pipeline events", + Usage: translations.T("List pipeline events"), Flags: []cli.Flag{ &cli.StringFlag{ Name: "actor", - Usage: "Filter events by actor address; lists all if not specified", + Usage: translations.T("Filter events by actor address; lists all if not specified"), }, &cli.IntFlag{ Name: "sector", - Usage: "Filter events by sector number; requires --actor to be specified", + Usage: translations.T("Filter events by sector number; requires --actor to be specified"), }, &cli.UintFlag{ Name: "last", - Usage: "Limit output to the last N events", + Usage: translations.T("Limit output to the last N events"), Value: 100, }, }, + Action: func(cctx *cli.Context) error { var actorID uint64 @@ -320,22 +324,22 @@ var sealEventsCmd = &cli.Command{ if !cctx.IsSet("actor") { // list for all actors err = dep.DB.Select(ctx, &events, `SELECT s.sp_id, s.sector_number, h.* - FROM harmony_task_history h - JOIN sectors_pipeline_events s ON h.id = s.task_history_id - ORDER BY h.work_end DESC LIMIT $1;`, cctx.Int("last")) + FROM harmony_task_history h + JOIN sectors_pipeline_events s ON h.id = s.task_history_id + ORDER BY h.work_end DESC LIMIT $1;`, cctx.Int("last")) } else if cctx.IsSet("sector") { // list for specific actor and sector err = dep.DB.Select(ctx, &events, `SELECT s.sp_id, s.sector_number, h.* - FROM harmony_task_history h - JOIN sectors_pipeline_events s ON h.id = s.task_history_id - WHERE s.sp_id = $1 AND s.sector_number = $2 ORDER BY h.work_end DESC LIMIT $3;`, actorID, sector, cctx.Int("last")) + FROM harmony_task_history h + JOIN sectors_pipeline_events s ON h.id = s.task_history_id + WHERE s.sp_id = $1 AND s.sector_number = $2 ORDER BY h.work_end DESC LIMIT $3;`, actorID, sector, cctx.Int("last")) } else { fmt.Println(cctx.IsSet("actor"), cctx.IsSet("sector")) // list for specific actor err = dep.DB.Select(ctx, &events, `SELECT s.sp_id, s.sector_number, h.* - FROM harmony_task_history h - JOIN sectors_pipeline_events s ON h.id = s.task_history_id - WHERE s.sp_id = $1 ORDER BY h.work_end DESC LIMIT $2;`, actorID, cctx.Int("last")) + FROM harmony_task_history h + JOIN sectors_pipeline_events s ON h.id = s.task_history_id + WHERE s.sp_id = $1 ORDER BY h.work_end DESC LIMIT $2;`, actorID, cctx.Int("last")) } if err != nil { diff --git a/cmd/curio/stop.go b/cmd/curio/stop.go index 972566e59..668305374 100644 --- a/cmd/curio/stop.go +++ b/cmd/curio/stop.go @@ -5,13 +5,14 @@ import ( "github.com/urfave/cli/v2" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/cmd/curio/rpc" "github.com/filecoin-project/curio/lib/reqcontext" ) var stopCmd = &cli.Command{ Name: "stop", - Usage: "Stop a running Curio process", + Usage: translations.T("Stop a running Curio process"), Flags: []cli.Flag{}, Action: func(cctx *cli.Context) error { api, closer, err := rpc.GetCurioAPI(cctx) diff --git a/cmd/curio/storage.go b/cmd/curio/storage.go index 4cb1097ac..3b2f10771 100644 --- a/cmd/curio/storage.go +++ b/cmd/curio/storage.go @@ -18,6 +18,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/cmd/curio/rpc" "github.com/filecoin-project/curio/lib/reqcontext" storiface "github.com/filecoin-project/curio/lib/storiface" @@ -27,12 +28,13 @@ import ( ) var storageCmd = &cli.Command{ - Name: "storage", - Usage: "manage sector storage", - Description: `Sectors can be stored across many filesystem paths. These + Name: "storage", + + Usage: translations.T("manage sector storage"), + Description: translations.T(`Sectors can be stored across many filesystem paths. These commands provide ways to manage the storage a Curio node will use to store sectors long term for proving (references as 'store') as well as how sectors will be -stored while moving through the sealing pipeline (references as 'seal').`, +stored while moving through the sealing pipeline (references as 'seal').`), Subcommands: []*cli.Command{ storageAttachCmd, storageDetachCmd, @@ -46,10 +48,11 @@ stored while moving through the sealing pipeline (references as 'seal').`, } var storageAttachCmd = &cli.Command{ - Name: "attach", - Usage: "attach local storage path", - ArgsUsage: "[path]", - Description: `Storage can be attached to a Curio node using this command. The storage volume + Name: "attach", + + Usage: translations.T("attach local storage path"), + ArgsUsage: translations.T("[path]"), + Description: translations.T(`Storage can be attached to a Curio node using this command. The storage volume list is stored local to the Curio node in storage.json set in curio run. We do not recommend manually modifying this value without further understanding of the storage system. @@ -67,36 +70,36 @@ Data for the sealing process will be stored here Store Finalized sectors that will be moved here for long term storage and be proven over time - `, + `), Flags: []cli.Flag{ &cli.BoolFlag{ Name: "init", - Usage: "initialize the path first", + Usage: translations.T("initialize the path first"), }, &cli.Uint64Flag{ Name: "weight", - Usage: "(for init) path weight", + Usage: translations.T("(for init) path weight"), Value: 10, }, &cli.BoolFlag{ Name: "seal", - Usage: "(for init) use path for sealing", + Usage: translations.T("(for init) use path for sealing"), }, &cli.BoolFlag{ Name: "store", - Usage: "(for init) use path for long-term storage", + Usage: translations.T("(for init) use path for long-term storage"), }, &cli.StringFlag{ Name: "max-storage", - Usage: "(for init) limit storage space for sectors (expensive for very large paths!)", + Usage: translations.T("(for init) limit storage space for sectors (expensive for very large paths!)"), }, &cli.StringSliceFlag{ Name: "groups", - Usage: "path group names", + Usage: translations.T("path group names"), }, &cli.StringSliceFlag{ Name: "allow-to", - Usage: "path groups allowed to pull data from this path (allow all if not specified)", + Usage: translations.T("path groups allowed to pull data from this path (allow all if not specified)"), }, &cli.StringSliceFlag{ Name: "allow-types", @@ -175,13 +178,13 @@ over time var storageDetachCmd = &cli.Command{ Name: "detach", - Usage: "detach local storage path", + Usage: translations.T("detach local storage path"), Flags: []cli.Flag{ &cli.BoolFlag{ Name: "really-do-it", }, }, - ArgsUsage: "[path]", + ArgsUsage: translations.T("[path]"), Action: func(cctx *cli.Context) error { minerApi, closer, err := rpc.GetCurioAPI(cctx) if err != nil { @@ -209,11 +212,11 @@ var storageDetachCmd = &cli.Command{ var storageListCmd = &cli.Command{ Name: "list", - Usage: "list local storage paths", + Usage: translations.T("list local storage paths"), Flags: []cli.Flag{ &cli.BoolFlag{ Name: "local", - Usage: "only list local storage paths", + Usage: translations.T("only list local storage paths"), }, }, Subcommands: []*cli.Command{ @@ -422,8 +425,8 @@ type storedSector struct { var storageFindCmd = &cli.Command{ Name: "find", - Usage: "find sector in the storage system", - ArgsUsage: "[miner address] [sector number]", + Usage: translations.T("find sector in the storage system"), + ArgsUsage: translations.T("[miner address] [sector number]"), Action: func(cctx *cli.Context) error { minerApi, closer, err := rpc.GetCurioAPI(cctx) if err != nil { diff --git a/cmd/curio/test-cli.go b/cmd/curio/test-cli.go index 5bb043068..677513bce 100644 --- a/cmd/curio/test-cli.go +++ b/cmd/curio/test-cli.go @@ -17,6 +17,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/cmd/curio/tasks" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/harmony/harmonydb" @@ -24,7 +25,7 @@ import ( var testCmd = &cli.Command{ Name: "test", - Usage: "Utility functions for testing", + Usage: translations.T("Utility functions for testing"), Subcommands: []*cli.Command{ //provingInfoCmd, wdPostCmd, @@ -38,7 +39,7 @@ var testCmd = &cli.Command{ var wdPostCmd = &cli.Command{ Name: "window-post", Aliases: []string{"wd", "windowpost", "wdpost"}, - Usage: "Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain.", + Usage: translations.T("Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain."), Subcommands: []*cli.Command{ wdPostHereCmd, wdPostTaskCmd, @@ -53,16 +54,16 @@ var wdPostCmd = &cli.Command{ var wdPostTaskCmd = &cli.Command{ Name: "task", Aliases: []string{"scheduled", "schedule", "async", "asynchronous"}, - Usage: "Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit.", + Usage: translations.T("Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit."), Flags: []cli.Flag{ &cli.Uint64Flag{ Name: "deadline", - Usage: "deadline to compute WindowPoSt for ", + Usage: translations.T("deadline to compute WindowPoSt for "), Value: 0, }, &cli.StringSliceFlag{ Name: "layers", - Usage: "list of layers to be interpreted (atop defaults). Default: base", + Usage: translations.T("list of layers to be interpreted (atop defaults). Default: base"), }, }, Action: func(cctx *cli.Context) error { @@ -180,28 +181,28 @@ var wdPostTaskCmd = &cli.Command{ var wdPostHereCmd = &cli.Command{ Name: "here", Aliases: []string{"cli"}, - Usage: "Compute WindowPoSt for performance and configuration testing.", - Description: `Note: This command is intended to be used to verify PoSt compute performance. -It will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.`, - ArgsUsage: "[deadline index]", + Usage: translations.T("Compute WindowPoSt for performance and configuration testing."), + Description: translations.T(`Note: This command is intended to be used to verify PoSt compute performance. +It will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.`), + ArgsUsage: translations.T("[deadline index]"), Flags: []cli.Flag{ &cli.Uint64Flag{ Name: "deadline", - Usage: "deadline to compute WindowPoSt for ", + Usage: translations.T("deadline to compute WindowPoSt for "), Value: 0, }, &cli.StringSliceFlag{ Name: "layers", - Usage: "list of layers to be interpreted (atop defaults). Default: base", + Usage: translations.T("list of layers to be interpreted (atop defaults). Default: base"), }, &cli.StringFlag{ Name: "storage-json", - Usage: "path to json file containing storage config", + Usage: translations.T("path to json file containing storage config"), Value: "~/.curio/storage.json", }, &cli.Uint64Flag{ Name: "partition", - Usage: "partition to compute WindowPoSt for", + Usage: translations.T("partition to compute WindowPoSt for"), Value: 0, }, }, diff --git a/cmd/curio/test-debug.go b/cmd/curio/test-debug.go index 0654dd21f..4db5e24f2 100644 --- a/cmd/curio/test-debug.go +++ b/cmd/curio/test-debug.go @@ -2,11 +2,13 @@ package main import ( "github.com/urfave/cli/v2" + + "github.com/filecoin-project/curio/cmd/curio/internal/translations" ) var testDebugCmd = &cli.Command{ Name: "debug", - Usage: "Collection of debugging utilities", + Usage: translations.T("Collection of debugging utilities"), Subcommands: []*cli.Command{ testDebugIpniChunks, }, diff --git a/cmd/curio/unseal.go b/cmd/curio/unseal.go index 7c962b183..bfdcd8532 100644 --- a/cmd/curio/unseal.go +++ b/cmd/curio/unseal.go @@ -18,6 +18,7 @@ import ( "github.com/filecoin-project/go-address" + "github.com/filecoin-project/curio/cmd/curio/internal/translations" "github.com/filecoin-project/curio/deps" "github.com/filecoin-project/curio/lib/dealdata" "github.com/filecoin-project/curio/lib/paths" @@ -27,7 +28,7 @@ import ( var unsealCmd = &cli.Command{ Name: "unseal", - Usage: "Manage unsealed data", + Usage: translations.T("Manage unsealed data"), Subcommands: []*cli.Command{ unsealInfoCmd, listUnsealPipelineCmd, @@ -38,7 +39,7 @@ var unsealCmd = &cli.Command{ var unsealInfoCmd = &cli.Command{ Name: "info", - Usage: "Get information about unsealed data", + Usage: translations.T("Get information about unsealed data"), ArgsUsage: "[minerAddress] [sectorNumber]", Action: func(cctx *cli.Context) error { @@ -273,17 +274,17 @@ func filterPred[T any](pred func(T) bool) func(T, int) bool { var listUnsealPipelineCmd = &cli.Command{ Name: "list-sectors", - Usage: "List data from the sectors_unseal_pipeline and sectors_meta tables", + Usage: translations.T("List data from the sectors_unseal_pipeline and sectors_meta tables"), Flags: []cli.Flag{ &cli.Int64Flag{ Name: "sp-id", Aliases: []string{"s"}, - Usage: "Filter by storage provider ID", + Usage: translations.T("Filter by storage provider ID"), }, &cli.StringFlag{ Name: "output", Aliases: []string{"o"}, - Usage: "Output file path (default: stdout)", + Usage: translations.T("Output file path (default: stdout)"), }, }, Action: func(cctx *cli.Context) error { @@ -392,9 +393,9 @@ var listUnsealPipelineCmd = &cli.Command{ var setTargetUnsealStateCmd = &cli.Command{ Name: "set-target-state", - Usage: "Set the target unseal state for a sector", + Usage: translations.T("Set the target unseal state for a sector"), ArgsUsage: " ", - Description: `Set the target unseal state for a specific sector. + Description: translations.T(`Set the target unseal state for a specific sector. : The storage provider ID : The sector number : The target state (true, false, or none) @@ -408,7 +409,7 @@ var setTargetUnsealStateCmd = &cli.Command{ When the target state is false, and an unsealed sector file exists, the GC mark step will create a removal mark for the unsealed sector file. The file will only be removed after the removal mark is accepted. -`, +`), Action: func(cctx *cli.Context) error { if cctx.Args().Len() != 3 { return cli.ShowSubcommandHelp(cctx) @@ -480,11 +481,11 @@ func formatNullableBool(v *bool) string { var unsealCheckCmd = &cli.Command{ Name: "check", - Usage: "Check data integrity in unsealed sector files", + Usage: translations.T("Check data integrity in unsealed sector files"), ArgsUsage: " ", - Description: `Create a check task for a specific sector, wait for its completion, and output the result. + Description: translations.T(`Create a check task for a specific sector, wait for its completion, and output the result. : The storage provider ID - : The sector number`, + : The sector number`), Action: func(cctx *cli.Context) error { if cctx.Args().Len() != 2 { return cli.ShowSubcommandHelp(cctx) diff --git a/documentation/en/.gitbook/assets/curio-cluster.drawio b/documentation/en/.gitbook/assets/curio-cluster.drawio new file mode 100644 index 000000000..71c74adff --- /dev/null +++ b/documentation/en/.gitbook/assets/curio-cluster.drawio @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/en/curio-cli/curio.md b/documentation/en/curio-cli/curio.md index f53c0fe4e..2028f2006 100644 --- a/documentation/en/curio-cli/curio.md +++ b/documentation/en/curio-cli/curio.md @@ -702,7 +702,7 @@ USAGE: curio market add-url [command options] OPTIONS: - --file value CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...'" + --file value CSV file location to use for multiple deal input. Each line in the file should be in the format 'uuid,raw size,url,header1,header2...' --header HEADER, -H HEADER [ --header HEADER, -H HEADER ] Custom HEADER to include in the HTTP request --url URL, -u URL URL to send the request to --help, -h show help diff --git a/documentation/zh/.gitbook/assets/curio-cluster.svg b/documentation/zh/.gitbook/assets/curio-cluster.svg new file mode 100644 index 000000000..a3db6301c --- /dev/null +++ b/documentation/zh/.gitbook/assets/curio-cluster.svg @@ -0,0 +1,4 @@ + + + +
Curio Cluster
长期
存储
PoRep
管道
快照
管道
解封
管道
计算
节点
SaaS /
去中心化Pin?
PoSt
证明
证明
节点
链通信发生在一组节点之间,使其非常稳健
长期存储可以从群集中的任何地方进行读取
计算工人执行来自管道的任务。当管道准备好执行任务时,任务就会被创建,然后被可用的节点认领。所有节点都帮助维护与它们相关的管道
证明工人确保证明任务被正确且及时执行
创建新扇区
引入新数据
读取存档
替代
收入
可靠的
证明
交易
客户
检索
服务器
网络
节点
网络节点与互联网(或离线数据传输设备)通信,以在群集之间传输数据。
存储
节点
数据
摄取
提供
检索
Exists
很快
计划的
研究
\ No newline at end of file diff --git a/documentation/zh/.gitbook/assets/curio-cluster_translated.drawio b/documentation/zh/.gitbook/assets/curio-cluster_translated.drawio new file mode 100644 index 000000000..d7ffbdac1 --- /dev/null +++ b/documentation/zh/.gitbook/assets/curio-cluster_translated.drawio @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/zh/.gitbook/assets/curio-cluster_translations.json b/documentation/zh/.gitbook/assets/curio-cluster_translations.json new file mode 100644 index 000000000..b5bbdd158 --- /dev/null +++ b/documentation/zh/.gitbook/assets/curio-cluster_translations.json @@ -0,0 +1,98 @@ +{ + "language": "zh", + "messages": [ + {"message": "<div align=\"left\">Exists</div>", "translation": "<div align=\"left\">存在</div>"}, + {"message": "<div style=\"font-size: 10px;\">Multiple</div><div style=\"font-size: 10px;\">Actors on one Cluster<br style=\"font-size: 10px;\"></div>", "translation": "<div style=\"font-size: 10px;\">多个</div><div style=\"font-size: 10px;\">群集上的演员<br style=\"font-size: 10px;\"></div>"}, + {"message": "<div style=\"font-size: 9px;\">Each Curio node is primarily identified by it's host:port.</div><div style=\"font-size: 9px;\"><br style=\"font-size: 9px;\"></div><div style=\"font-size: 9px;\">Nodes register themselves in the harmony_machines table on startup, and update their last_contact periodically so that other machines in the cluster can see that they are alive and that their tasks don't need to be re-claimed by another node<br style=\"font-size: 9px;\"></div>", "translation": "<div style=\"font-size: 9px;\">每个 Curio 节点主要由其主机:端口标识。</div><div style=\"font-size: 9px;\"><br style=\"font-size: 9px;\"></div><div style=\"font-size: 9px;\">节点在启动时注册到 harmony_machines 表,并定期更新其 last_contact,以便群集中的其他机器可以看到它们处于活动状态,并且它们的任务不需要被其他节点重新获取<br style=\"font-size: 9px;\"></div>"}, + {"message": "<div style=\"font-size: 9px;\">Task execution is coordinated through the harmony_task table.</div><div style=\"font-size: 9px;\"><br style=\"font-size: 9px;\"></div><div style=\"font-size: 9px;\">Tasks are initially added to this table by nodes which are interested in them getting executed. Nodes which add tasks are not guaranteed to be the ones executing them.</div><div style=\"font-size: 9px;\"><br style=\"font-size: 9px;\"></div><div style=\"font-size: 9px;\">Tasks initially have null owned_by - when curio nodes see tasks with a null owned_by and are capable of handling tasks with the given name and have available resources will try to claim the task by setting this field to their machine_id. Postgres will only allow one node to successfully set themselves as the owner, and that node will start executing the task<br style=\"font-size: 9px;\"></div>", "translation": "<div style=\"font-size: 9px;\">任务执行通过 harmony_task 表协调。</div><div style=\"font-size: 9px;\"><br style=\"font-size: 9px;\"></div><div style=\"font-size: 9px;\">任务最初由对任务执行感兴趣的节点添加到该表中。添加任务的节点不一定是执行任务的节点。</div><div style=\"font-size: 9px;\"><br style=\"font-size: 9px;\"></div><div style=\"font-size: 9px;\">任务最初的 owned_by 为 null - 当 curio 节点看到 owned_by 为 null 且能够处理给定名称的任务并具有可用资源时,会尝试通过将该字段设置为其 machine_id 来声明任务。Postgres 只允许一个节点成功将自己设为所有者,并且该节点将开始执行任务<br style=\"font-size: 9px;\"></div>"}, + {"message": "<div>..</div>", "translation": "<div>..</div>"}, + {"message": "<div>Alternative</div><div>Revenue<br></div>", "translation": "<div>替代</div><div>收入<br></div>"}, + {"message": "<div>Compute</div><div>Nodes<br></div>", "translation": "<div>计算</div><div>节点<br></div>"}, + {"message": "<div>Curio clusters are coordinated by one shared postgres database. By default it is recommended to use YugabyteDB.</div><div><br></div><div>The database contains a set of tables which are used to orchestract actions between cluster nodes.<br></div>", "translation": "<div>Curio 群集由一个共享的 Postgres 数据库协调。默认推荐使用 YugabyteDB。</div><div><br></div><div>数据库包含一组用于协调群集节点之间操作的表。<br></div>"}, + {"message": "<div>Curio supports boost without modifications. Curio nodes can be configured to expose a subset of lotus-miner RPC. One node can expose multiple endpoints for multiple miner actors, making it easy to configure a cluster with multiple actors/boost nodes.</div><div><br></div><div>In the future boost will be integrated as a component of curio, meaning that only a single binary needs to be managed, and making market operations scalable<br></div>", "translation": "<div>Curio 支持无修改的 boost。Curio 节点可以配置为公开 lotus-miner RPC 的子集。一个节点可以为多个矿工参与者公开多个端点,这使得配置具有多个参与者/boost 节点的集群变得容易。</div><div><br></div><div>未来,boost 将作为 curio 的组件进行集成,这意味着只需管理单一的二进制文件,使市场操作可扩展。<br></div>"}, + {"message": "<div>Data</div><div>Ingest<br></div>", "translation": "<div>数据</div><div>摄取<br></div>"}, + {"message": "<div>Deal</div><div>Client<br></div>", "translation": "<div>交易</div><div>客户<br></div>"}, + {"message": "<div>Long</div><div>Term Storage<br></div>", "translation": "<div>长期</div><div>存储<br></div>"}, + {"message": "<div>Network</div><div>Nodes<br></div>", "translation": "<div>网络</div><div>节点<br></div>"}, + {"message": "<div>PoRep</div><div>Pipeline<br></div>", "translation": "<div>PoRep</div><div>管道<br></div>"}, + {"message": "<div>PoSt nodes schedule PoSt tasks collaboratively. First each node watches the chain and proposes taks to execute, then the Harmony task engine ensures that tasks are executed by at least one node in the cluster. This means that with just two nodes an SP with no overlapping partitions can get highly available window and winning PoSt.</div><div><br></div><div>This configuration also enables SPs to compute multiple partitions in parallel enabling very large actors as well as making it possible to share one set of PoSt nodes between multiple actors<br> </div>", "translation": "<div>PoSt 节点协作调度 PoSt 任务。首先,每个节点观察链并提出执行的任务,然后 Harmony 任务引擎确保群集中的至少一个节点执行这些任务。这意味着仅使用两个节点的 SP 在没有重叠分区的情况下可以获得高度可用的窗口和获胜的 PoSt。</div><div><br></div><div>这种配置还使 SP 能够并行计算多个分区,使得非常大的演员以及在多个演员之间共享一组 PoSt 节点成为可能。<br> </div>"}, + {"message": "<div>PoSt</div><div>Proving<br></div>", "translation": "<div>PoSt</div><div>证明<br></div>"}, + {"message": "<div>Providing</div><div>Retrieval<br></div>", "translation": "<div>提供</div><div>检索<br></div>"}, + {"message": "<div>Proving</div><div>Nodes</div>", "translation": "<div>证明</div><div>节点</div>"}, + {"message": "<div>Reliable</div><div>Proving<br></div>", "translation": "<div>可靠的</div><div>证明<br></div>"}, + {"message": "<div>Retrieval</div><div>Server<br></div>", "translation": "<div>检索</div><div>服务器<br></div>"}, + {"message": "<div>SDR task</div><div>execution starts<br></div>", "translation": "<div>SDR 任务</div><div>执行开始<br></div>"}, + {"message": "<div>SDR task</div><div>execution</div><div>finishes<br></div>", "translation": "<div>SDR 任务</div><div>执行</div><div>完成<br></div>"}, + {"message": "<div>SDR task</div><div>is claimed</div>", "translation": "<div>SDR 任务</div><div>已被认领</div>"}, + {"message": "<div>SDR task</div><div>is created</div>", "translation": "<div>SDR 任务</div><div>已创建</div>"}, + {"message": "<div>SDRTrees task</div><div>execution starts<br></div>", "translation": "<div>SDRTrees 任务</div><div>执行开始<br></div>"}, + {"message": "<div>SDRTrees task</div><div>execution</div><div>finishes<br></div>", "translation": "<div>SDRTrees 任务</div><div>执行</div><div>完成<br></div>"}, + {"message": "<div>SDRTrees task</div><div>is claimed</div>", "translation": "<div>SDRTrees 任务</div><div>已被认领</div>"}, + {"message": "<div>SDRTrees task</div><div>is created</div>", "translation": "<div>SDRTrees 任务</div><div>已创建</div>"}, + {"message": "<div>SaaS /<br></div><div>DePin?</div>", "translation": "<div>SaaS /<br></div><div>去中心化Pin?</div>"}, + {"message": "<div>Scratch</div><div>Space<br></div>", "translation": "<div>暂存</div><div>空间<br></div>"}, + {"message": "<div>Snap</div><div>Pipeline<br></div>", "translation": "<div>快照</div><div>管道<br></div>"}, + {"message": "<div>Storage</div><div>Nodes<br></div>", "translation": "<div>存储</div><div>节点<br></div>"}, + {"message": "<div>Storage</div><div>nodes<br></div>", "translation": "<div>存储</div><div>节点<br></div>"}, + {"message": "<div>Unseal</div><div>Pipeline<br></div>", "translation": "<div>解封</div><div>管道<br></div>"}, + {"message": "<div>after_sdr</div>", "translation": "<div>after_sdr</div>"}, + {"message": "<font style=\"font-size: 10px;\">YugabyteDB, which is already used in boost, is used by Curio as an easy to manage highly available central place for all cluster state. It technically doesn't hold any critical data without which sectors wouldn't be provable, but all cluster operations are coordinated through it<br></font>", "translation": "<font style=\"font-size: 10px;\">YugabyteDB 已在 boost 中使用,并被 Curio 用作易于管理的高可用集群状态的中央位置。技术上,它不持有任何没有它无法证明的关键数据,但所有集群操作都是通过它协调的。<br></font>"}, + {"message": "<font style=\"font-size: 24px;\">Curio Cluster</font>", "translation": "<font style=\"font-size: 24px;\">Curio 集群</font>"}, + {"message": "<font style=\"font-size: 24px;\">Curio Nodes</font>", "translation": "<font style=\"font-size: 24px;\">Curio 节点</font>"}, + {"message": "<font style=\"font-size: 9px;\">Each Curio node can talk to a set of Chain nodes, so that in case one goes down or is slow, another one can be selected</font>", "translation": "<font style=\"font-size: 9px;\">每个 Curio 节点可以与一组链节点通信,这样如果一个节点宕机或运行缓慢,可以选择另一个节点。</font>"}, + {"message": "...", "translation": "..."}, + {"message": "Boost", "translation": "Boost"}, + {"message": "Chain", "translation": "链"}, + {"message": "Chain communication happens with a set of nodes which should make it very robust", "translation": "链通信发生在一组节点之间,使其非常稳健"}, + {"message": "Compute workers execute tasks from pipelines. Tasks are created when pipelines are ready for them to be executed, then they get claimed by available nodes. All nodes help maintain pipelines relevant to them", "translation": "计算工人执行来自管道的任务。当管道准备好执行任务时,任务就会被创建,然后被可用的节点认领。所有节点都帮助维护与它们相关的管道"}, + {"message": "Creating new sectors", "translation": "创建新扇区"}, + {"message": "Curio", "translation": "Curio"}, + {"message": "Curio Task", "translation": "Curio 任务"}, + {"message": "Curio Task Execution", "translation": "Curio 任务执行"}, + {"message": "Example: Few steps in the sealing pipeline", "translation": "示例:封装管道中的几个步骤"}, + {"message": "GPU Node", "translation": "GPU 节点"}, + {"message": "Long-term storage is accessible for reading from any place in the cluster ", "translation": "长期存储可以从群集中的任何地方进行读取"}, + {"message": "Lotus Chain", "translation": "Lotus 链"}, + {"message": "Network nodes communicate with the internet (or offline data transfer devices) getting data in and out of the cluster. ", "translation": "网络节点与互联网(或离线数据传输设备)通信,以在群集之间传输数据。"}, + {"message": "Onboarding new data", "translation": "引入新数据"}, + {"message": "Piece storage", "translation": "分片存储"}, + {"message": "Planned", "translation": "计划的"}, + {"message": "PoSt nodes", "translation": "PoSt 节点"}, + {"message": "Proving workers make sure that proving tasks get executed correctly and on time", "translation": "证明工人确保证明任务被正确且及时执行"}, + {"message": "Reading archives", "translation": "读取存档"}, + {"message": "Redundant chain nodes", "translation": "冗余链节点"}, + {"message": "Research", "translation": "研究"}, + {"message": "SDR Node", "translation": "SDR 节点"}, + {"message": "SDRTrees task is executed by the GPU node. Execution steps are almost identical to the SDR (or any other) task", "translation": "SDRTrees 任务由 GPU 节点执行。执行步骤几乎与 SDR(或其他任何)任务相同"}, + {"message": "Sealing nodes", "translation": "封装节点"}, + {"message": "Sealing nodes make independent scheduling decisions. Each node looks for available work in the database, and collaboratively decides what to do next.<br>Sectors in the process of being sealed simply list which algorithms need to be executed on them, which means that work isn't bound by a sequential pipeline.For example data can start mowing to long-term storage while the commit message is landing on-chain", "translation": "封装节点做出独立的调度决策。每个节点在数据库中查找可用的工作,并共同决定下一步的操作。<br>封装过程中的扇区仅列出需要在其上执行的算法,这意味着工作不受顺序管道的限制。例如,在提交消息上链时,数据可以开始移动到长期存储中"}, + {"message": "Sector 1 is Created", "translation": "扇区 1 已创建"}, + {"message": "Some process (e.g boost proxy handling a deal) creates an entry in the sectors_sdr_pipeline. That entry only contains a sector number and miner actor id plus a set of pieces assigned to the sector", "translation": "某些过程(例如 boost 代理处理交易)在 sectors_sdr_pipeline 中创建条目。该条目仅包含扇区编号和矿工参与者 ID,以及分配给该扇区的一组分片"}, + {"message": "Soon", "translation": "很快"}, + {"message": "Storage nodes are like any other node in the curio cluster - just a curio node, but with only the light storage related tasks enabled.", "translation": "存储节点就像 Curio 集群中的任何其他节点一样 - 只是一个 Curio 节点,但只启用了轻量级的存储相关任务。"}, + {"message": "The GPU node sees that there is a sector entry in the pipeline table which is ready for Trees tasks to be started - this is indicated by after_sdr flag being true and after_tree_.. being false", "translation": "GPU 节点看到管道表中有一个扇区条目准备好开始树任务 - 这由 after_sdr 标志为 true 和 after_tree_.. 为 false 指示"}, + {"message": "The SDR node (which may be a different node) sees that there is a SDR task in the harmony_task table with null owner_id, so it tries to set itself as the owner. If that is successful this node will now start executing the task", "translation": "SDR 节点(可能是不同的节点)看到 harmony_task 表中有一个 SDR 任务,且 owner_id 为 null,因此它尝试将自己设为所有者。如果成功,该节点现在将开始执行任务"}, + {"message": "The SDR node has a sha-capable CPU and a bunch of memory. It will claim SDR tasks.", "translation": "SDR 节点具有支持 sha 的 CPU 和大量内存。它将认领 SDR 任务。"}, + {"message": "The SDR node sees that there is a sector entry in the pipeline table which is ready for SDR to be started. In a transaction it will create a task in the harmony_task table and assign the task_id of the task to the task_id_sdr field of the sector in the pipeline table", "translation": "SDR 节点看到管道表中有一个扇区条目准备好启动 SDR。在事务中,它将在 harmony_task 表中创建一个任务,并将任务的 task_id 分配给管道表中扇区的 task_id_sdr 字段"}, + {"message": "The example GPU node has a GPU and is configured to execute the SDRTrees tasks", "translation": "示例 GPU 节点具有 GPU,并配置为执行 SDRTrees 任务"}, + {"message": "The node which has just set itself as the owner now starts executing the task. It looks for sector which sector it is operating on by checking what rows in sectors_sdr_pipeline have task_id_sdr set to the task_id which it is currently executing", "translation": "刚刚将自己设置为所有者的节点现在开始执行任务。它通过检查 sectors_sdr_pipeline 中哪些行的 task_id_sdr 设置为它当前正在执行的 task_id 来查找它正在操作的扇区"}, + {"message": "We start with an example cluster with two machines. Those machines will register themselves in the harmony_machine table on startup", "translation": "我们从一个包含两台机器的示例集群开始。这些机器将在启动时在 harmony_machine 表中注册自己"}, + {"message": "When task execution finishes, the task code will set after_sdr in sectors_sdr_pipeline to true, which will indicate to the next stage that the previous stage has finished", "translation": "当任务执行完成时,任务代码会将 sectors_sdr_pipeline 中的 after_sdr 设置为 true,这将指示下一个阶段前一个阶段已完成"}, + {"message": "Yugabyte", "translation": "Yugabyte"}, + {"message": "YugabyteDB<br><div>(Postgres+HA)</div><div>Orchestrating</div><div>the cluster<br></div>", "translation": "YugabyteDB<br><div>(Postgres+HA)</div><div>协调</div><div>集群<br></div>"}, + {"message": "after_tree_r", "translation": "after_tree_r"}, + {"message": "harmory_machines", "translation": "harmory_machines"}, + {"message": "harmory_task", "translation": "harmory_task"}, + {"message": "host_and_port", "translation": "host_and_port"}, + {"message": "last_contact", "translation": "last_contact"}, + {"message": "machine_id", "translation": "machine_id"}, + {"message": "name", "translation": "名称"}, + {"message": "owned_by", "translation": "owned_by"}, + {"message": "sdr_pipeline is one of the ways in which tasks are coordinated. Each sealing node is responsible for its part of the pipeline - for example nodes which are executing TreeR will look for sectors that are after_sdr, but not after_tree_r and have null tree_r task ID - when they find a sector like that those nodes will start a transaction which creates a task for e.g. computing trees and will assign the task ID to the task_id_tree_r in case of the Trees task", "translation": "sdr_pipeline 是任务协调的一种方式。每个封装节点负责其管道部分 - 例如执行 TreeR 的节点将寻找那些 after_sdr 为 true、但 after_tree_r 为 false 且 tree_r 任务 ID 为 null 的扇区 - 当它们找到这样的扇区时,这些节点将开始一个事务,为例如计算树创建一个任务,并将任务 ID 分配给树任务的 task_id_tree_r"}, + {"message": "sector_id", "translation": "扇区 ID"}, + {"message": "sectors_sdr_pipeline", "translation": "sectors_sdr_pipeline"}, + {"message": "task_id", "translation": "任务 ID"}, + {"message": "task_id_sdr", "translation": "task_id_sdr"}, + {"message": "task_id_tree_r", "translation": "task_id_tree_r"} + ] +} diff --git a/documentation/zh/.gitbook/assets/curio-node.svg b/documentation/zh/.gitbook/assets/curio-node.svg new file mode 100644 index 000000000..f3d61e482 --- /dev/null +++ b/documentation/zh/.gitbook/assets/curio-node.svg @@ -0,0 +1,4 @@ + + + +
暂存
空间
暂存
空间
冗余链节点
Curio Nodes
Lotus 链
Lotus 链
Lotus 链
Curio
Curio
Curio
Curio
Curio
封装节点
Curio
Curio
Curio
PoSt 节点
Curio
Curio
Curio
Curio
Curio
存储
节点
YugabyteDB
(Postgres+HA)
协调
集群
Curio
分片存储
Boost
Boost
Boost
多个参与者在一个集群上
Sealing nodes make independent scheduling decisions. Each node looks for available work in the database, and collaboratively decides what to do next.
Sectors in the process of being sealed simply list which algorithms need to be executed on them, which means that work isn't bound by a sequential pipeline.For example data can start mowing to long-term storage while the commit message is landing on-chain
PoSt 节点协作调度 PoSt 任务。首先,每个节点观察链并提出执行的任务,然后 Harmony 任务引擎确保群集中的至少一个节点执行这些任务。这意味着仅使用两个节点的 SP 在没有重叠分区的情况下可以获得高度可用的窗口和获胜的 PoSt。

这种配置还使 SP 能够并行计算多个分区,使得非常大的演员以及在多个演员之间共享一组 PoSt 节点成为可能。
存储节点就像 Curio 集群中的任何其他节点一样 - 只是一个 Curio 节点,但只启用了轻量级的存储相关任务。
Curio 支持无修改的 boost。Curio 节点可以配置为公开 lotus-miner RPC 的子集。一个节点可以为多个矿工参与者公开多个端点,这使得配置具有多个参与者/boost 节点的集群变得容易。

未来,boost 将作为 curio 的组件进行集成,这意味着只需管理单一的二进制文件,使市场操作可扩展。
Each Curio node can talk to a set of Chain nodes, so that in case one goes down or is slow, another one can be selected
YugabyteDB 已经在 boost 中使用,Curio 也使用它作为一个易于管理的高可用集群状态中心位置。技术上来说,它不持有任何关键数据,这些数据的丢失不会导致扇区无法验证,但所有集群操作都是通过它进行协调的。
\ No newline at end of file diff --git a/documentation/zh/.gitbook/assets/curio-tasks.svg b/documentation/zh/.gitbook/assets/curio-tasks.svg new file mode 100644 index 000000000..bf8ded0b3 --- /dev/null +++ b/documentation/zh/.gitbook/assets/curio-tasks.svg @@ -0,0 +1,4 @@ + + + +
Curio 任务
Yugabyte
harmory_machines
machine_id
host_and_port
last_contact
harmory_task
任务 ID
名称
owned_by
sectors_sdr_pipeline
扇区 ID
task_id_sdr
after_sdr
..
task_id_tree_r
after_tree_r
...
Curio 群集由一个共享的 Postgres 数据库协调。默认推荐使用 YugabyteDB。

数据库包含一组用于协调群集节点之间操作的表。

每个 Curio 节点主要通过其主机:端口标识。

节点在启动时会在 harmony_machines 表中注册自己,并定期更新其 last_contact,以便集群中的其他机器可以看到它们是活跃的,这样它们的任务就不需要被其他节点重新认领。

任务执行通过 harmony_task 表进行协调。

任务最初由对其执行感兴趣的节点添加到该表中。添加任务的节点不一定是执行任务的节点。

任务最初的 owned_by 为 null——当 Curio 节点看到 owned_by 为 null 的任务,并且能够处理具有该名称的任务且有可用资源时,它们会尝试通过将该字段设置为自己的 machine_id 来认领任务。Postgres 只允许一个节点成功将自己设为所有者,然后该节点将开始执行任务。

sdr_pipeline 是任务协调的一种方式。每个封装节点负责其管道部分 - 例如执行 TreeR 的节点将寻找那些 after_sdr 为 true、但 after_tree_r 为 false 且 tree_r 任务 ID 为 null 的扇区 - 当它们找到这样的扇区时,这些节点将开始一个事务,为例如计算树创建一个任务,并将任务 ID 分配给树任务的 task_id_tree_r
\ No newline at end of file diff --git a/documentation/zh/.gitbook/assets/sealing-tasks.svg b/documentation/zh/.gitbook/assets/sealing-tasks.svg new file mode 100644 index 000000000..42e3f34b2 --- /dev/null +++ b/documentation/zh/.gitbook/assets/sealing-tasks.svg @@ -0,0 +1,4 @@ + + + +
Curio 任务执行
SDR 节点
GPU 节点
示例:封装管道中的几个步骤
我们从一个包含两台机器的示例集群开始。这些机器将在启动时在 harmony_machine 表中注册自己
SDR 节点拥有支持 SHA 的 CPU 和大量内存。它将认领“SDR”任务。
例 GPU 节点配备 GPU,并配置为执行“SDRTrees”任务。
扇区 1 已创建
某些过程(例如 boost 代理处理交易)在 sectors_sdr_pipeline 中创建条目。该条目仅包含扇区编号和矿工参与者 ID,以及分配给该扇区的一组分片
SDR 任务
已创建
SDR 节点看到管道表中有一个扇区条目准备好启动 SDR。在事务中,它将在 harmony_task 表中创建一个任务,并将任务的 task_id 分配给管道表中扇区的 task_id_sdr 字段
SDR 任务
已被认领
SDR 节点(可能是不同的节点)看到 harmony_task 表中有一个 SDR 任务,且 owner_id 为 null,因此它尝试将自己设为所有者。如果成功,该节点现在将开始执行任务
SDR 任务
执行开始
刚刚将自己设置为所有者的节点现在开始执行任务。它通过检查 sectors_sdr_pipeline 中哪些行的 task_id_sdr 设置为它当前正在执行的 task_id 来查找它正在操作的扇区
SDR 任务
执行
完成
当任务执行完成时,任务代码会将 sectors_sdr_pipeline 中的 after_sdr 设置为 true,这将指示下一个阶段前一个阶段已完成
SDRTrees 任务
已创建
GPU 节点看到管道表中有一个扇区条目准备好开始树任务 - 这由 after_sdr 标志为 true 和 after_tree_.. 为 false 指示
SDRTrees 任务
已被认领
SDRTrees 任务
执行开始
SDRTrees 任务
执行
完成
SDRTrees 任务由 GPU 节点执行。执行步骤几乎与 SDR(或其他任何)任务相同
\ No newline at end of file diff --git a/documentation/zh/curio-cli/curio.md b/documentation/zh/curio-cli/curio.md index ba59c5ee9..42d30bb1b 100644 --- a/documentation/zh/curio-cli/curio.md +++ b/documentation/zh/curio-cli/curio.md @@ -1,418 +1,409 @@ # curio - -TODO -Translated desciptions in the help menus & here are coming soon. -帮助菜单和此处的翻译描述即将推出。 - - -``` NAME: - curio - Filecoin decentralized storage network provider + curio - Filecoin 去中心化存储网络提供商 USAGE: - curio [global options] command [command options] [arguments...] + curio [全局选项] 命令 [命令选项] [参数...] VERSION: 1.23.0 COMMANDS: - cli Execute cli commands - run Start a Curio process - config Manage node config by layers. The layer 'base' will always be applied at Curio start-up. - test Utility functions for testing - web Start Curio web interface - guided-setup Run the guided setup for migrating from lotus-miner to Curio or Creating a new Curio miner - seal Manage the sealing pipeline + cli 执行 CLI 命令 + run 启动 Curio 进程 + config 按层管理节点配置。'base' 层将始终在 Curio 启动时应用。 + test 测试的实用功能 + web 启动 Curio 网页界面 + guided-setup 运行引导式设置,用于从 lotus-miner 迁移到 Curio 或创建新的 Curio 矿工 + seal 管理封装流程 market - fetch-params Fetch proving parameters - calc Math Utils - help, h Shows a list of commands or help for one command + fetch-params 获取证明参数 + calc 数学工具 + help, h 显示命令列表或某个命令的帮助 GLOBAL OPTIONS: - --color use color in display output (default: depends on output being a TTY) - --db-host value Command separated list of hostnames for yugabyte cluster (default: "127.0.0.1") [$CURIO_DB_HOST, $CURIO_HARMONYDB_HOSTS] - --db-name value (default: "yugabyte") [$CURIO_DB_NAME, $CURIO_HARMONYDB_NAME] - --db-user value (default: "yugabyte") [$CURIO_DB_USER, $CURIO_HARMONYDB_USERNAME] - --db-password value (default: "yugabyte") [$CURIO_DB_PASSWORD, $CURIO_HARMONYDB_PASSWORD] - --db-port value (default: "5433") [$CURIO_DB_PORT, $CURIO_HARMONYDB_PORT] - --repo-path value (default: "~/.curio") [$CURIO_REPO_PATH] - --vv enables very verbose mode, useful for debugging the CLI (default: false) - --help, -h show help - --version, -v print the version -``` + --color 在显示输出中使用颜色(默认:取决于输出是否为 TTY) + --db-host value Yugabyte 集群的主机名列表,用逗号分隔(默认:"127.0.0.1")[$CURIO_DB_HOST, $CURIO_HARMONYDB_HOSTS] + --db-name value (默认:"yugabyte")[$CURIO_DB_NAME, $CURIO_HARMONYDB_NAME] + --db-user value (默认:"yugabyte")[$CURIO_DB_USER, $CURIO_HARMONYDB_USERNAME] + --db-password value (默认:"yugabyte")[$CURIO_DB_PASSWORD, $CURIO_HARMONYDB_PASSWORD] + --db-port value (默认:"5433")[$CURIO_DB_PORT, $CURIO_HARMONYDB_PORT] + --repo-path value (默认:"~/.curio")[$CURIO_REPO_PATH] + --vv 启用非常详细的模式,用于调试 CLI(默认:false) + --help, -h 显示帮助 + --version, -v 打印版本 + + ## curio cli -``` + + NAME: - curio cli - Execute cli commands + curio cli - 执行 CLI 命令 USAGE: - curio cli command [command options] [arguments...] + curio cli 命令 [命令选项] [参数...] COMMANDS: - storage manage sector storage - log Manage logging - wait-api Wait for Curio api to come online - stop Stop a running Curio process - help, h Shows a list of commands or help for one command + storage 管理扇区存储 + log 管理日志 + wait-api 等待 Curio API 上线 + stop 停止正在运行的 Curio 进程 + help, h 显示命令列表或某个命令的帮助 OPTIONS: - --machine value machine host:port (curio run --listen address) - --help, -h show help -``` + --machine value 机器主机:端口(curio run --listen 地址) + --help, -h 显示帮助 + ### curio cli storage -``` + NAME: - curio cli storage - manage sector storage + curio cli storage - 管理扇区存储 USAGE: - curio cli storage command [command options] [arguments...] + curio cli storage 命令 [命令选项] [参数...] DESCRIPTION: - Sectors can be stored across many filesystem paths. These - commands provide ways to manage the storage a Curio node will use to store sectors - long term for proving (references as 'store') as well as how sectors will be - stored while moving through the sealing pipeline (references as 'seal'). + 扇区可以存储在多个文件系统路径中。这些 + 命令提供了管理 Curio 节点用于长期存储扇区以进行证明的存储(称为 'store') + 以及扇区在封装流程中如何存储(称为 'seal')的方法。 COMMANDS: - attach attach local storage path - detach detach local storage path - list list local storage paths - find find sector in the storage system - help, h Shows a list of commands or help for one command + attach 附加本地存储路径 + detach 分离本地存储路径 + list 列出本地存储路径 + find 在存储系统中查找扇区 + help, h 显示命令列表或某个命令的帮助 OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + #### curio cli storage attach -``` + NAME: - curio cli storage attach - attach local storage path + curio cli storage attach - 附加本地存储路径 USAGE: - curio cli storage attach [command options] [path] + curio cli storage attach [命令选项] [路径] DESCRIPTION: - Storage can be attached to a Curio node using this command. The storage volume - list is stored local to the Curio node in storage.json set in curio run. We do not - recommend manually modifying this value without further understanding of the - storage system. + 可以使用此命令将存储附加到 Curio 节点。存储卷 + 列表存储在 curio run 中设置的 storage.json 中,位于 Curio 节点本地。我们不 + 建议在不进一步了解存储系统的情况下手动修改此值。 - Each storage volume contains a configuration file which describes the - capabilities of the volume. When the '--init' flag is provided, this file will - be created using the additional flags. + 每个存储卷都包含一个描述卷 + 功能的配置文件。当提供 '--init' 标志时,将使用 + 附加标志创建此文件。 - Weight - A high weight value means data will be more likely to be stored in this path + 权重 + 较高的权重值意味着数据更有可能存储在此路径中 - Seal - Data for the sealing process will be stored here + 封装 + 封装过程的数据将存储在这里 - Store - Finalized sectors that will be moved here for long term storage and be proven - over time + 存储 + 最终确定的扇区将被移动到这里进行长期存储,并随时间 + 进行证明 OPTIONS: - --init initialize the path first (default: false) - --weight value (for init) path weight (default: 10) - --seal (for init) use path for sealing (default: false) - --store (for init) use path for long-term storage (default: false) - --max-storage value (for init) limit storage space for sectors (expensive for very large paths!) - --groups value [ --groups value ] path group names - --allow-to value [ --allow-to value ] path groups allowed to pull data from this path (allow all if not specified) - --help, -h show help -``` + --init 首先初始化路径(默认:false) + --weight value (用于初始化)路径权重(默认:10) + --seal (用于初始化)将路径用于封装(默认:false) + --store (用于初始化)将路径用于长期存储(默认:false) + --max-storage value (用于初始化)限制扇区的存储空间(对于非常大的路径来说代价很高!) + --groups value [ --groups value ] 路径组名称 + --allow-to value [ --allow-to value ] 允许从此路径拉取数据的路径组(如果未指定则允许所有) + --help, -h 显示帮助 + #### curio cli storage detach -``` + NAME: - curio cli storage detach - detach local storage path + curio cli storage detach - 分离本地存储路径 USAGE: - curio cli storage detach [command options] [path] + curio cli storage detach [命令选项] [路径] OPTIONS: - --really-do-it (default: false) - --help, -h show help -``` + --really-do-it (默认:false) + --help, -h 显示帮助 + #### curio cli storage list -``` + NAME: - curio cli storage list - list local storage paths + curio cli storage list - 列出本地存储路径 USAGE: - curio cli storage list [command options] [arguments...] + curio cli storage list [命令选项] [参数...] OPTIONS: - --local only list local storage paths (default: false) - --help, -h show help -``` + --local 仅列出本地存储路径(默认:false) + --help, -h 显示帮助 + #### curio cli storage find -``` + NAME: - curio cli storage find - find sector in the storage system + curio cli storage find - 在存储系统中查找扇区 USAGE: - curio cli storage find [command options] [miner address] [sector number] + curio cli storage find [命令选项] [矿工地址] [扇区编号] OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ### curio cli log -``` + NAME: - curio cli log - Manage logging + curio cli log - 管理日志 USAGE: - curio cli log command [command options] [arguments...] + curio cli log 命令 [命令选项] [参数...] COMMANDS: - list List log systems - set-level Set log level - help, h Shows a list of commands or help for one command + list 列出日志系统 + set-level 设置日志级别 + help, h 显示命令列表或某个命令的帮助 OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + #### curio cli log list -``` + NAME: - curio cli log list - List log systems + curio cli log list - 列出日志系统 USAGE: - curio cli log list [command options] [arguments...] + curio cli log list [命令选项] [参数...] OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + #### curio cli log set-level -``` + NAME: - curio cli log set-level - Set log level + curio cli log set-level - 设置日志级别 USAGE: - curio cli log set-level [command options] [level] + curio cli log set-level [命令选项] [级别] DESCRIPTION: - Set the log level for logging systems: + 为日志系统设置日志级别: - The system flag can be specified multiple times. + 系统标志可以多次指定。 - eg) log set-level --system chain --system chainxchg debug + 例如)log set-level --system chain --system chainxchg debug - Available Levels: - debug - info - warn - error + 可用级别: + debug + info + warn + error - Environment Variables: - GOLOG_LOG_LEVEL - Default log level for all log systems - GOLOG_LOG_FMT - Change output log format (json, nocolor) - GOLOG_FILE - Write logs to file - GOLOG_OUTPUT - Specify whether to output to file, stderr, stdout or a combination, i.e. file+stderr + 环境变量: + GOLOG_LOG_LEVEL - 所有日志系统的默认日志级别 + GOLOG_LOG_FMT - 更改输出日志格式(json,nocolor) + GOLOG_FILE - 将日志写入文件 + GOLOG_OUTPUT - 指定是否输出到文件、stderr、stdout 或组合,例如 file+stderr OPTIONS: - --system value [ --system value ] limit to log system - --help, -h show help -``` - + --system value [ --system value ] 限制到日志系统 + --help, -h 显示帮助 ### curio cli wait-api -``` + NAME: - curio cli wait-api - Wait for Curio api to come online + curio cli wait-api - 等待 Curio API 上线 USAGE: curio cli wait-api [command options] [arguments...] OPTIONS: - --timeout value duration to wait till fail (default: 30s) - --help, -h show help -``` + --timeout value 等待失败的持续时间(默认:30s) + --help, -h 显示帮助 + ### curio cli stop -``` + NAME: - curio cli stop - Stop a running Curio process + curio cli stop - 停止正在运行的 Curio 进程 USAGE: curio cli stop [command options] [arguments...] OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ## curio run -``` + NAME: - curio run - Start a Curio process + curio run - 启动 Curio 进程 USAGE: curio run [command options] [arguments...] OPTIONS: - --listen value host address and port the worker api will listen on (default: "0.0.0.0:12300") [$CURIO_LISTEN] - --nosync don't check full-node sync status (default: false) - --manage-fdlimit manage open file limit (default: true) - --layers value, -l value, --layer value [ --layers value, -l value, --layer value ] list of layers to be interpreted (atop defaults). Default: base [$CURIO_LAYERS] - --name value custom node name [$CURIO_NODE_NAME] - --help, -h show help -``` + --listen value 工作者 API 将监听的主机地址和端口(默认:"0.0.0.0:12300")[$CURIO_LISTEN] + --nosync 不检查全节点同步状态(默认:false) + --manage-fdlimit 管理打开文件限制(默认:true) + --layers value, -l value, --layer value [ --layers value, -l value, --layer value ] 要解释的层列表(在默认值之上)。默认:base [$CURIO_LAYERS] + --name value 自定义节点名称 [$CURIO_NODE_NAME] + --help, -h 显示帮助 + ## curio config -``` + NAME: - curio config - Manage node config by layers. The layer 'base' will always be applied at Curio start-up. + curio config - 通过层管理节点配置。'base' 层将始终在 Curio 启动时应用。 USAGE: curio config command [command options] [arguments...] COMMANDS: - default, defaults Print default node config - set, add, update, create Set a config layer or the base by providing a filename or stdin. - get, cat, show Get a config layer by name. You may want to pipe the output to a file, or use 'less' - list, ls List config layers present in the DB. - interpret, view, stacked, stack Interpret stacked config layers by this version of curio, with system-generated comments. - remove, rm, del, delete Remove a named config layer. - edit edit a config layer - new-cluster Create new configuration for a new cluster - help, h Shows a list of commands or help for one command + default, defaults 打印默认节点配置 + set, add, update, create 通过提供文件名或标准输入来设置配置层或基础层。 + get, cat, show 按名称获取配置层。您可能想将输出管道到文件,或使用 'less' + list, ls 列出数据库中存在的配置层。 + interpret, view, stacked, stack 通过此版本的 curio 解释堆叠的配置层,并带有系统生成的注释。 + remove, rm, del, delete 删除指定的配置层。 + edit 编辑配置层 + new-cluster 为新集群创建新配置 + help, h 显示命令列表或某个命令的帮助 OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ### curio config default -``` + NAME: - curio config default - Print default node config + curio config default - 打印默认节点配置 USAGE: curio config default [command options] [arguments...] OPTIONS: - --no-comment don't comment default values (default: false) - --help, -h show help -``` + --no-comment 不注释默认值(默认:false) + --help, -h 显示帮助 + ### curio config set -``` + NAME: - curio config set - Set a config layer or the base by providing a filename or stdin. + curio config set - 通过提供文件名或标准输入来设置配置层或基础层。 USAGE: - curio config set [command options] a layer's file name + curio config set [command options] 层的文件名 OPTIONS: - --title value title of the config layer (req'd for stdin) - --help, -h show help -``` + --title value 配置层的标题(对于标准输入是必需的) + --help, -h 显示帮助 + ### curio config get -``` + NAME: - curio config get - Get a config layer by name. You may want to pipe the output to a file, or use 'less' + curio config get - 按名称获取配置层。您可能想将输出管道到文件,或使用 'less' USAGE: - curio config get [command options] layer name + curio config get [command options] 层名称 OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ### curio config list -``` + NAME: - curio config list - List config layers present in the DB. + curio config list - 列出数据库中存在的配置层。 USAGE: curio config list [command options] [arguments...] OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ### curio config interpret -``` + NAME: - curio config interpret - Interpret stacked config layers by this version of curio, with system-generated comments. + curio config interpret - 通过此版本的 curio 解释堆叠的配置层,并带有系统生成的注释。 USAGE: - curio config interpret [command options] a list of layers to be interpreted as the final config + curio config interpret [command options] 要解释为最终配置的层列表 OPTIONS: - --layers value [ --layers value ] comma or space separated list of layers to be interpreted (base is always applied) - --help, -h show help -``` + --layers value [ --layers value ] 要解释的层的逗号或空格分隔列表(base 总是应用) + --help, -h 显示帮助 + ### curio config remove -``` + NAME: - curio config remove - Remove a named config layer. + curio config remove - 删除指定的配置层。 USAGE: curio config remove [command options] [arguments...] OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ### curio config edit -``` + NAME: - curio config edit - edit a config layer + curio config edit - 编辑配置层 USAGE: - curio config edit [command options] [layer name] + curio config edit [command options] [层名称] OPTIONS: - --editor value editor to use (default: "vim") [$EDITOR] - --source value source config layer (default: ) - --allow-overwrite allow overwrite of existing layer if source is a different layer (default: false) - --no-source-diff save the whole config into the layer, not just the diff (default: false) - --no-interpret-source do not interpret source layer (default: true if --source is set) - --help, -h show help -``` + --editor value 要使用的编辑器(默认:"vim")[$EDITOR] + --source value 源配置层(默认:<编辑的层>) + --allow-overwrite 如果源是不同的层,允许覆盖现有层(默认:false) + --no-source-diff 将整个配置保存到层中,而不仅仅是差异(默认:false) + --no-interpret-source 不解释源层(如果设置了 --source,默认为 true) + --help, -h 显示帮助 + ### curio config new-cluster -``` + NAME: - curio config new-cluster - Create new configuration for a new cluster + curio config new-cluster - 为新集群创建新配置 USAGE: - curio config new-cluster [command options] [SP actor address...] + curio config new-cluster [command options] [SP actor 地址...] OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ## curio test -``` + NAME: - curio test - Utility functions for testing + curio test - 用于测试的实用功能 USAGE: curio test command [command options] [arguments...] COMMANDS: - window-post, wd, windowpost, wdpost Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain. - help, h Shows a list of commands or help for one command + window-post, wd, windowpost, wdpost 为扇区计算时空证明(需要预先密封扇区)。这些不会发送到链上。 + help, h 显示命令列表或某个命令的帮助 OPTIONS: - --help, -h show help -``` + --help, -h 显示帮助 + ### curio test window-post -``` +```yaml NAME: curio test window-post - Compute a proof-of-spacetime for a sector (requires the sector to be pre-sealed). These will not send to the chain. @@ -429,7 +420,7 @@ OPTIONS: ``` #### curio test window-post here -``` +```yaml NAME: curio test window-post here - Compute WindowPoSt for performance and configuration testing. @@ -449,7 +440,7 @@ OPTIONS: ``` #### curio test window-post task -``` +```yaml NAME: curio test window-post task - Test the windowpost scheduler by running it on the next available curio. If tasks fail all retries, you will need to ctrl+c to exit. @@ -463,7 +454,7 @@ OPTIONS: ``` ## curio web -``` +```yaml NAME: curio web - Start Curio web interface @@ -482,7 +473,7 @@ OPTIONS: ``` ## curio guided-setup -``` +```yaml NAME: curio guided-setup - Run the guided setup for migrating from lotus-miner to Curio or Creating a new Curio miner @@ -494,7 +485,7 @@ OPTIONS: ``` ## curio seal -``` +```yaml NAME: curio seal - Manage the sealing pipeline @@ -510,7 +501,7 @@ OPTIONS: ``` ### curio seal start -``` +```yaml NAME: curio seal start - Start new sealing operations manually @@ -529,7 +520,7 @@ OPTIONS: ``` ## curio market -``` +```yaml NAME: curio market @@ -546,7 +537,7 @@ OPTIONS: ``` ### curio market rpc-info -``` +```yaml NAME: curio market rpc-info @@ -559,7 +550,7 @@ OPTIONS: ``` ### curio market seal -``` +```yaml NAME: curio market seal - start sealing a deal sector early @@ -573,7 +564,7 @@ OPTIONS: ``` ## curio fetch-params -``` +```yaml NAME: curio fetch-params - Fetch proving parameters @@ -585,7 +576,7 @@ OPTIONS: ``` ## curio calc -``` +```yaml NAME: curio calc - Math Utils @@ -603,7 +594,7 @@ OPTIONS: ``` ### curio calc batch-cpu -``` +```yaml NAME: curio calc batch-cpu - Analyze and display the layout of batch sealer threads @@ -622,7 +613,7 @@ OPTIONS: ``` ### curio calc supraseal-config -``` +```yaml NAME: curio calc supraseal-config - Generate a supra_seal configuration diff --git a/documentation/zh/curio-cli/sptool.md b/documentation/zh/curio-cli/sptool.md index 84355d81b..1ded38e47 100644 --- a/documentation/zh/curio-cli/sptool.md +++ b/documentation/zh/curio-cli/sptool.md @@ -1,480 +1,458 @@ -# sptool +# sptool 工具 -TODO -Translated desciptions in the help menus & here are coming soon. -帮助菜单和此处的翻译描述即将推出。 +名称: + sptool - 管理 Filecoin 矿工参与者 -```yaml -NAME: - sptool - Manage Filecoin Miner Actor +用法: + sptool [全局选项] 命令 [命令选项] [参数...] -USAGE: - sptool [global options] command [command options] [arguments...] - -VERSION: +版本: 1.23.0 -COMMANDS: - actor Manage Filecoin Miner Actor Metadata - info Print miner actor info - sectors interact with sector store - proving View proving information - help, h Shows a list of commands or help for one command - -GLOBAL OPTIONS: - --log-level value (default: "info") - --actor value miner actor to manage [$SP_ADDRESS] - --help, -h show help - --version, -v print the version -``` - -## sptool actor -```yaml -NAME: - sptool actor - Manage Filecoin Miner Actor Metadata - -USAGE: - sptool actor command [command options] [arguments...] - -COMMANDS: - set-addresses, set-addrs set addresses that your miner can be publicly dialed on - withdraw withdraw available balance to beneficiary - repay-debt pay down a miner's debt - set-peer-id set the peer id of your miner - set-owner Set owner address (this command should be invoked twice, first with the old owner as the senderAddress, and then with the new owner) - control Manage control addresses - propose-change-worker Propose a worker address change - confirm-change-worker Confirm a worker address change - compact-allocated compact allocated sectors bitfield - propose-change-beneficiary Propose a beneficiary address change - confirm-change-beneficiary Confirm a beneficiary address change - new-miner Initializes a new miner actor - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help -``` - -### sptool actor set-addresses -```yaml -NAME: - sptool actor set-addresses - set addresses that your miner can be publicly dialed on - -USAGE: - sptool actor set-addresses [command options] - -OPTIONS: - --from value optionally specify the account to send the message from - --gas-limit value set gas limit (default: 0) - --unset unset address (default: false) - --help, -h show help -``` - -### sptool actor withdraw -```yaml -NAME: - sptool actor withdraw - withdraw available balance to beneficiary - -USAGE: - sptool actor withdraw [command options] [amount (FIL)] - -OPTIONS: - --confidence value number of block confirmations to wait for (default: 5) - --beneficiary send withdraw message from the beneficiary address (default: false) - --help, -h show help -``` - -### sptool actor repay-debt -```yaml -NAME: - sptool actor repay-debt - pay down a miner's debt - -USAGE: - sptool actor repay-debt [command options] [amount (FIL)] - -OPTIONS: - --from value optionally specify the account to send funds from - --help, -h show help -``` - -### sptool actor set-peer-id -```yaml -NAME: - sptool actor set-peer-id - set the peer id of your miner - -USAGE: - sptool actor set-peer-id [command options] - -OPTIONS: - --gas-limit value set gas limit (default: 0) - --help, -h show help -``` - -### sptool actor set-owner -```yaml -NAME: - sptool actor set-owner - Set owner address (this command should be invoked twice, first with the old owner as the senderAddress, and then with the new owner) - -USAGE: - sptool actor set-owner [command options] [newOwnerAddress senderAddress] - -OPTIONS: - --really-do-it Actually send transaction performing the action (default: false) - --help, -h show help -``` - -### sptool actor control -```yaml -NAME: - sptool actor control - Manage control addresses - -USAGE: - sptool actor control command [command options] [arguments...] - -COMMANDS: - list Get currently set control addresses. Note: This excludes most roles as they are not known to the immediate chain state. - set Set control address(-es) - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help -``` - -#### sptool actor control list -```yaml -NAME: - sptool actor control list - Get currently set control addresses. Note: This excludes most roles as they are not known to the immediate chain state. - -USAGE: - sptool actor control list [command options] [arguments...] - -OPTIONS: - --verbose (default: false) - --help, -h show help -``` - -#### sptool actor control set -```yaml -NAME: - sptool actor control set - Set control address(-es) - -USAGE: - sptool actor control set [command options] [...address] - -OPTIONS: - --really-do-it Actually send transaction performing the action (default: false) - --help, -h show help -``` - -### sptool actor propose-change-worker -```yaml -NAME: - sptool actor propose-change-worker - Propose a worker address change - -USAGE: - sptool actor propose-change-worker [command options] [address] - -OPTIONS: - --really-do-it Actually send transaction performing the action (default: false) - --help, -h show help -``` - -### sptool actor confirm-change-worker -```yaml -NAME: - sptool actor confirm-change-worker - Confirm a worker address change - -USAGE: - sptool actor confirm-change-worker [command options] [address] - -OPTIONS: - --really-do-it Actually send transaction performing the action (default: false) - --help, -h show help -``` - -### sptool actor compact-allocated -```yaml -NAME: - sptool actor compact-allocated - compact allocated sectors bitfield - -USAGE: - sptool actor compact-allocated [command options] [arguments...] - -OPTIONS: - --mask-last-offset value Mask sector IDs from 0 to 'highest_allocated - offset' (default: 0) - --mask-upto-n value Mask sector IDs from 0 to 'n' (default: 0) - --really-do-it Actually send transaction performing the action (default: false) - --help, -h show help -``` - -### sptool actor propose-change-beneficiary -```yaml -NAME: - sptool actor propose-change-beneficiary - Propose a beneficiary address change - -USAGE: - sptool actor propose-change-beneficiary [command options] [beneficiaryAddress quota expiration] - -OPTIONS: - --really-do-it Actually send transaction performing the action (default: false) - --overwrite-pending-change Overwrite the current beneficiary change proposal (default: false) - --actor value specify the address of miner actor - --help, -h show help -``` - -### sptool actor confirm-change-beneficiary -```yaml -NAME: - sptool actor confirm-change-beneficiary - Confirm a beneficiary address change - -USAGE: - sptool actor confirm-change-beneficiary [command options] [minerID] - -OPTIONS: - --really-do-it Actually send transaction performing the action (default: false) - --existing-beneficiary send confirmation from the existing beneficiary address (default: false) - --new-beneficiary send confirmation from the new beneficiary address (default: false) - --help, -h show help -``` - -### sptool actor new-miner -```yaml -NAME: - sptool actor new-miner - Initializes a new miner actor - -USAGE: - sptool actor new-miner [command options] [arguments...] - -OPTIONS: - --worker value, -w value worker key to use for new miner initialisation - --owner value, -o value owner key to use for new miner initialisation - --from value, -f value address to send actor(miner) creation message from - --sector-size value specify sector size to use for new miner initialisation - --confidence value number of block confirmations to wait for (default: 5) - --help, -h show help -``` - -## sptool info -```yaml -NAME: - sptool info - Print miner actor info - -USAGE: - sptool info [command options] [arguments...] - -OPTIONS: - --help, -h show help -``` - -## sptool sectors -```yaml -NAME: - sptool sectors - interact with sector store - -USAGE: - sptool sectors command [command options] [arguments...] - -COMMANDS: - status Get the seal status of a sector by its number - list List sectors - precommits Print on-chain precommit info - check-expire Inspect expiring sectors - expired Get or cleanup expired sectors - extend Extend expiring sectors while not exceeding each sector's max life - terminate Forcefully terminate a sector (WARNING: This means losing power and pay a one-time termination penalty(including collateral) for the terminated sector) - compact-partitions removes dead sectors from partitions and reduces the number of partitions used if possible - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help -``` - -### sptool sectors status -```yaml -NAME: - sptool sectors status - Get the seal status of a sector by its number - -USAGE: - sptool sectors status [command options] - -OPTIONS: - --log, -l display event log (default: false) - --on-chain-info, -c show sector on chain info (default: false) - --partition-info, -p show partition related info (default: false) - --proof print snark proof bytes as hex (default: false) - --help, -h show help -``` - -### sptool sectors list -```yaml -NAME: - sptool sectors list - List sectors - -USAGE: - sptool sectors list [command options] [arguments...] - -OPTIONS: - --help, -h show help -``` - -### sptool sectors precommits -```yaml -NAME: - sptool sectors precommits - Print on-chain precommit info - -USAGE: - sptool sectors precommits [command options] [arguments...] - -OPTIONS: - --help, -h show help -``` - -### sptool sectors check-expire -```yaml -NAME: - sptool sectors check-expire - Inspect expiring sectors - -USAGE: - sptool sectors check-expire [command options] [arguments...] - -OPTIONS: - --cutoff value skip sectors whose current expiration is more than epochs from now, defaults to 60 days (default: 172800) - --help, -h show help -``` - -### sptool sectors expired -```yaml -NAME: - sptool sectors expired - Get or cleanup expired sectors - -USAGE: - sptool sectors expired [command options] [arguments...] - -OPTIONS: - --expired-epoch value epoch at which to check sector expirations (default: WinningPoSt lookback epoch) - --help, -h show help -``` - -### sptool sectors extend -```yaml -NAME: - sptool sectors extend - Extend expiring sectors while not exceeding each sector's max life - -USAGE: - sptool sectors extend [command options] - -OPTIONS: - --from value only consider sectors whose current expiration epoch is in the range of [from, to], defaults to: now + 120 (1 hour) (default: 0) - --to value only consider sectors whose current expiration epoch is in the range of [from, to], defaults to: now + 92160 (32 days) (default: 0) - --sector-file value provide a file containing one sector number in each line, ignoring above selecting criteria - --exclude value optionally provide a file containing excluding sectors - --extension value try to extend selected sectors by this number of epochs, defaults to 540 days (default: 1555200) - --new-expiration value try to extend selected sectors to this epoch, ignoring extension (default: 0) - --only-cc only extend CC sectors (useful for making sector ready for snap upgrade) (default: false) - --drop-claims drop claims for sectors that can be extended, but only by dropping some of their verified power claims (default: false) - --tolerance value don't try to extend sectors by fewer than this number of epochs, defaults to 7 days (default: 20160) - --max-fee value use up to this amount of FIL for one message. pass this flag to avoid message congestion. (default: "0") - --max-sectors value the maximum number of sectors contained in each message (default: 0) - --really-do-it pass this flag to really extend sectors, otherwise will only print out json representation of parameters (default: false) - --help, -h show help -``` - -### sptool sectors terminate -```yaml -NAME: - sptool sectors terminate - Forcefully terminate a sector (WARNING: This means losing power and pay a one-time termination penalty(including collateral) for the terminated sector) - -USAGE: - sptool sectors terminate [command options] [sectorNum1 sectorNum2 ...] - -OPTIONS: - --actor value specify the address of miner actor - --really-do-it pass this flag if you know what you are doing (default: false) - --from value specify the address to send the terminate message from - --help, -h show help -``` - -### sptool sectors compact-partitions -```yaml -NAME: - sptool sectors compact-partitions - removes dead sectors from partitions and reduces the number of partitions used if possible - -USAGE: - sptool sectors compact-partitions [command options] [arguments...] - -OPTIONS: - --deadline value the deadline to compact the partitions in (default: 0) - --partitions value [ --partitions value ] list of partitions to compact sectors in - --really-do-it Actually send transaction performing the action (default: false) - --help, -h show help -``` - -## sptool proving -```yaml -NAME: - sptool proving - View proving information - -USAGE: - sptool proving command [command options] [arguments...] - -COMMANDS: - info View current state information - deadlines View the current proving period deadlines information - deadline View the current proving period deadline information by its index - faults View the currently known proving faulty sectors information - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help -``` - -### sptool proving info -```yaml -NAME: - sptool proving info - View current state information - -USAGE: - sptool proving info [command options] [arguments...] - -OPTIONS: - --help, -h show help -``` - -### sptool proving deadlines -```yaml -NAME: - sptool proving deadlines - View the current proving period deadlines information - -USAGE: - sptool proving deadlines [command options] [arguments...] - -OPTIONS: - --all, -a Count all sectors (only live sectors are counted by default) (default: false) - --help, -h show help -``` - -### sptool proving deadline -```yaml -NAME: - sptool proving deadline - View the current proving period deadline information by its index - -USAGE: - sptool proving deadline [command options] - -OPTIONS: - --sector-nums, -n Print sector/fault numbers belonging to this deadline (default: false) - --bitfield, -b Print partition bitfield stats (default: false) - --help, -h show help -``` - -### sptool proving faults -```yaml -NAME: - sptool proving faults - View the currently known proving faulty sectors information - -USAGE: - sptool proving faults [command options] [arguments...] - -OPTIONS: - --help, -h show help -``` +命令: + actor 管理 Filecoin 矿工参与者元数据 + info 打印矿工参与者信息 + sectors 与扇区存储交互 + proving 查看证明信息 + help, h 显示命令列表或某个命令的帮助 + +全局选项: + --log-level value (默认: "info") + --actor value 要管理的矿工参与者 [$SP_ADDRESS] + --help, -h 显示帮助 + --version, -v 打印版本 + +## sptool actor 参与者 + +名称: + sptool actor - 管理Filecoin矿工Actor元数据 + +用法: + sptool actor 命令 [命令选项] [参数...] + +命令: + set-addresses, set-addrs 设置您的矿工可以公开拨号的地址 + withdraw 将可用余额提取到受益人 + repay-debt 偿还矿工的债务 + set-peer-id 设置您矿工的对等ID + set-owner 设置所有者地址(此命令应该被调用两次,首先使用旧所有者作为发送者地址,然后使用新所有者) + control 管理控制地址 + propose-change-worker 提议更改工作者地址 + confirm-change-worker 确认工作者地址更改 + compact-allocated 压缩已分配的扇区位域 + propose-change-beneficiary 提议更改受益人地址 + confirm-change-beneficiary 确认受益人地址更改 + new-miner 初始化新的矿工actor + help, h 显示命令列表或某个命令的帮助 + +选项: + --help, -h 显示帮助 + +### sptool actor set-addresses 设置地址 + +名称: + sptool actor set-addresses - 设置您的矿工可以公开拨号的地址 + +用法: + sptool actor set-addresses [命令选项] <多地址> + +选项: + --from value 可选择指定发送消息的账户 + --gas-limit value 设置燃气限制 (默认: 0) + --unset 取消设置地址 (默认: false) + --help, -h 显示帮助 + +### sptool actor withdraw 提现 + +名称: + sptool actor withdraw - 将可用余额提取到受益人 + +用法: + sptool actor withdraw [命令选项] [金额 (FIL)] + +选项: + --confidence value 等待的区块确认数 (默认: 5) + --beneficiary 从受益人地址发送提现消息 (默认: false) + --help, -h 显示帮助 + +### sptool actor repay-debt 偿还债务 +名称: + sptool actor repay-debt - 偿还矿工的债务 + +用法: + sptool actor repay-debt [命令选项] [金额 (FIL)] + +选项: + --from value 可选择指定发送资金的账户 + --help, -h 显示帮助 +### sptool actor set-peer-id 设置对等ID + +名称: + sptool actor set-peer-id - 设置您矿工的对等ID + +用法: + sptool actor set-peer-id [命令选项] <对等ID> + +选项: + --gas-limit value 设置燃气限制 (默认: 0) + --help, -h 显示帮助 + + +### sptool actor set-owner 设置所有者 + +名称: + sptool actor set-owner - 设置所有者地址(此命令应该被调用两次,首先使用旧所有者作为发送者地址,然后使用新所有者) + +用法: + sptool actor set-owner [命令选项] [新所有者地址 发送者地址] + +选项: + --really-do-it 实际发送执行操作的交易 (默认: false) + --help, -h 显示帮助 + + +### sptool actor control 管理控制 + +名称: + sptool actor control - 管理控制地址 + +用法: + sptool actor control 命令 [命令选项] [参数...] + +命令: + list 获取当前设置的控制地址。注意:这不包括大多数角色,因为它们在即时链状态中是未知的。 + set 设置控制地址 + help, h 显示命令列表或某个命令的帮助 + +选项: + --help, -h 显示帮助 + + +#### sptool actor control list 获取控制地址 + +名称: + sptool actor control list - 获取当前设置的控制地址。注意:这不包括大多数角色,因为它们在即时链状态中是未知的。 + +用法: + sptool actor control list [命令选项] [参数...] + +选项: + --verbose (默认: false) + --help, -h 显示帮助 + + +#### sptool actor control set 设置控制地址 + +名称: + sptool actor control set - 设置控制地址 + +用法: + sptool actor control set [命令选项] [...地址] + +选项: + --really-do-it 实际发送执行操作的交易 (默认: false) + --help, -h 显示帮助 + + +### sptool actor propose-change-worker 提议更改工作者 + +名称: + sptool actor propose-change-worker - 提议更改工作者地址 + +用法: + sptool actor propose-change-worker [命令选项] [地址] + +选项: + --really-do-it 实际发送执行操作的交易 (默认: false) + --help, -h 显示帮助 + + +### sptool actor confirm-change-worker 确认更改工作者 + +名称: + sptool actor confirm-change-worker - 确认工作者地址更改 + +用法: + sptool actor confirm-change-worker [命令选项] [地址] + +选项: + --really-do-it 实际发送执行操作的交易 (默认: false) + --help, -h 显示帮助 + + +### sptool actor compact-allocated 压缩已分配 + +名称: + sptool actor compact-allocated - 压缩已分配的扇区位域 + +用法: + sptool actor compact-allocated [命令选项] [参数...] + +选项: + --mask-last-offset value 从0到'最高分配 - 偏移量'掩蔽扇区ID (默认: 0) + --mask-upto-n value 从0到'n'掩蔽扇区ID (默认: 0) + --really-do-it 实际发送执行操作的交易 (默认: false) + --help, -h 显示帮助 + +### sptool actor propose-change-beneficiary 提议更改受益人 + +名称: + sptool actor propose-change-beneficiary - 提议更改受益人地址 + +用法: + sptool actor propose-change-beneficiary [命令选项] [受益人地址 配额 过期时间] + +选项: + --really-do-it 实际发送执行操作的交易 (默认: false) + --overwrite-pending-change 覆盖当前的受益人更改提议 (默认: false) + --actor value 指定矿工角色的地址 + --help, -h 显示帮助 + +### sptool actor confirm-change-beneficiary 确认更改受益人 + +名称: + sptool actor confirm-change-beneficiary - 确认受益人地址变更 + +用法: + sptool actor confirm-change-beneficiary [命令选项] [矿工ID] + +选项: + --really-do-it 实际发送执行操作的交易 (默认: false) + --existing-beneficiary 从现有受益人地址发送确认 (默认: false) + --new-beneficiary 从新受益人地址发送确认 (默认: false) + --help, -h 显示帮助 + + +### sptool actor new-miner 初始化新的矿工 + +名称: + sptool actor new-miner - 初始化新的矿工actor + +用法: + sptool actor new-miner [命令选项] [参数...] + +选项: + --worker value, -w value 用于新矿工初始化的worker密钥 + --owner value, -o value 用于新矿工初始化的owner密钥 + --from value, -f value 发送actor(矿工)创建消息的地址 + --sector-size value 指定用于新矿工初始化的扇区大小 + --confidence value 等待的区块确认数 (默认: 5) + --help, -h 显示帮助 + + +## sptool info 打印矿工信息 + +名称: + sptool info - 打印矿工actor信息 + +用法: + sptool info [命令选项] [参数...] + +选项: + --help, -h 显示帮助 + + +## sptool sectors 与扇区存储交互 + +名称: + sptool sectors - 与扇区存储交互 + +用法: + sptool sectors 命令 [命令选项] [参数...] + +命令: + status 通过扇区编号获取扇区的密封状态 + list 列出扇区 + precommits 打印链上预提交信息 + check-expire 检查即将到期的扇区 + expired 获取或清理已过期的扇区 + extend 延长即将到期的扇区,但不超过每个扇区的最大生命周期 + terminate 强制终止扇区(警告:这意味着失去算力并为终止的扇区支付一次性终止罚金(包括抵押品)) + compact-partitions 从分区中移除死亡扇区,并尽可能减少使用的分区数量 + help, h 显示命令列表或某个命令的帮助 + +选项: + --help, -h 显示帮助 + + +### sptool sectors status 获取扇区状态 + +名称: + sptool sectors status - 通过扇区编号获取扇区的密封状态 + +用法: + sptool sectors status [命令选项] <扇区编号> + +选项: + --log, -l 显示事件日志 (默认: false) + --on-chain-info, -c 显示扇区的链上信息 (默认: false) + --partition-info, -p 显示分区相关信息 (默认: false) + --proof 以十六进制打印snark证明字节 (默认: false) + --help, -h 显示帮助 + + +### sptool sectors list 列出扇区 + +名称: + sptool sectors list - 列出扇区 + +用法: + sptool sectors list [命令选项] [参数...] + +选项: + --help, -h 显示帮助 + + +### sptool sectors precommits 打印预提交信息 + +名称: + sptool sectors precommits - 打印链上预提交信息 + +用法: + sptool sectors precommits [命令选项] [参数...] + +选项: + --help, -h 显示帮助 + + +### sptool sectors check-expire 检查扇区到期 + +名称: + sptool sectors check-expire - 检查即将到期的扇区 + +用法: + sptool sectors check-expire [命令选项] [参数...] + +选项: + --cutoff value 跳过当前到期时间距离现在超过个纪元的扇区,默认为60天 (默认: 172800) + --help, -h 显示帮助 + + +### sptool sectors expired 获取或清理已过期扇区 + +名称: + sptool sectors expired - 获取或清理已过期的扇区 + +用法: + sptool sectors expired [命令选项] [参数...] + +选项: + --expired-epoch value 检查扇区到期的纪元 (默认: WinningPoSt回溯纪元) + --help, -h 显示帮助 + + +### sptool sectors extend 延长扇区 + +名称: + sptool sectors extend - 延长即将到期的扇区,但不超过每个扇区的最大生命周期 + +用法: + sptool sectors extend [命令选项] <扇区编号...(可选)> + +选项: + --from value 仅考虑当前到期纪元在[from, to]范围内的扇区,默认为:现在 + 120 (1小时) (默认: 0) + --to value 仅考虑当前到期纪元在[from, to]范围内的扇区,默认为:现在 + 92160 (32天) (默认: 0) + --sector-file value 提供一个文件,每行包含一个扇区编号,忽略上述选择标准 + --exclude value 可选提供一个包含要排除的扇区的文件 + --extension value 尝试将选定的扇区延长这个纪元数,默认为540天 (默认: 1555200) + --new-expiration value 尝试将选定的扇区延长到这个纪元,忽略extension (默认: 0) + --only-cc 仅延长CC扇区(对于准备扇区进行快照升级很有用) (默认: false) + --drop-claims 为可以延长但只能通过放弃一些验证算力声明的扇区放弃声明 (默认: false) + --tolerance value 不尝试延长少于这个纪元数的扇区,默认为7天 (默认: 20160) + --max-fee value 为一条消息最多使用这么多FIL。传递此标志以避免消息拥堵。 (默认: "0") + --max-sectors value 每条消息包含的最大扇区数 (默认: 0) + --really-do-it 传递此标志以真正延长扇区,否则只会打印参数的json表示 (默认: false) + --help, -h 显示帮助 + +### sptool sectors terminate 强制终止扇区 + +名称: + sptool sectors terminate - 强制终止扇区(警告:这意味着失去算力并为终止的扇区支付一次性终止罚金(包括抵押品)) + +用法: + sptool sectors terminate [命令选项] [扇区编号1 扇区编号2 ...] + +选项: + --actor value 指定矿工actor的地址 + --really-do-it 如果你知道你在做什么,请传递此标志 (默认: false) + --from value 指定发送终止消息的地址 + --help, -h 显示帮助 + +### sptool sectors compact-partitions 压缩分区 + +名称: + sptool sectors compact-partitions - 从分区中移除死亡扇区,并尽可能减少使用的分区数量 + +用法: + sptool sectors compact-partitions [命令选项] [参数...] + +选项: + --deadline value 要压缩分区的截止时间 (默认: 0) + --partitions value [ --partitions value ] 要压缩扇区的分区列表 + --really-do-it 实际发送执行操作的交易 (默认: false) + --help, -h 显示帮助 + +## sptool proving 查看证明信息 + +名称: + sptool proving - 查看证明信息 + +用法: + sptool proving 命令 [命令选项] [参数...] + +命令: + info 查看当前状态信息 + deadlines 查看当前证明期限的截止时间信息 + deadline 通过索引查看当前证明期限的截止时间信息 + faults 查看当前已知的证明故障扇区信息 + help, h 显示命令列表或某个命令的帮助 + +选项: + --help, -h 显示帮助 + +### sptool proving info 查看状态信息 + +名称: + sptool proving info - 查看当前状态信息 + +用法: + sptool proving info [命令选项] [参数...] + +选项: + --help, -h 显示帮助 + +### sptool proving deadlines 查看证明期限 + +名称: + sptool proving deadlines - 查看当前证明期限的截止时间信息 + +用法: + sptool proving deadlines [命令选项] [参数...] + +选项: + --all, -a 计算所有扇区(默认只计算活跃扇区) (默认: false) + --help, -h 显示帮助 + +### sptool proving deadline 查看证明期限索引 + +名称: + sptool proving deadline - 通过索引查看当前证明期限的截止时间信息 + +用法: + sptool proving deadline [命令选项] <截止时间索引> + +选项: + --sector-nums, -n 打印属于此截止时间的扇区/故障编号 (默认: false) + --bitfield, -b 打印分区位域统计信息 (默认: false) + --help, -h 显示帮助 + +### sptool proving faults 查看证明故障 + +名称: + sptool proving faults - 查看当前已知的证明故障扇区信息 + +用法: + sptool proving faults [命令选项] [参数...] + +选项: + --help, -h 显示帮助 diff --git a/documentation/zh/design/README.md b/documentation/zh/design/README.md index 01a39106c..e19fca771 100644 --- a/documentation/zh/design/README.md +++ b/documentation/zh/design/README.md @@ -11,11 +11,11 @@ description: >- Curio 的核心内部组件包括 HarmonyDB、HarmonyTask、ChainScheduler 以及配置和当前存储定义的数据库抽象。 -
Curio Node

Curio nodes

+
Curio Node

Curio nodes

Curio 集群是由多个连接到 YugabyteDB 集群和市场节点的 Curio 节点组成的集群。单个 Curio 集群可以根据需要为多个矿工 ID 提供服务,并在它们之间共享计算资源。 -
Curio cluster

Curio cluster

+
Curio cluster

Curio cluster

## HarmonyDB @@ -49,7 +49,7 @@ HarmonyTask 是纯粹的(无任务逻辑)分布式任务管理器。 * 贪婪工人:工人主动认领他们可以处理的任务。 * 轮询分配:在 Curio 节点认领任务后,HarmonyDB 尝试将剩余工作分配给其他机器。 -
Curio Tasks

Harmony tasks

+
Curio Tasks

Harmony tasks

### Model ### 模型 diff --git a/documentation/zh/design/sealing.md b/documentation/zh/design/sealing.md index 135739462..13974864a 100644 --- a/documentation/zh/design/sealing.md +++ b/documentation/zh/design/sealing.md @@ -62,7 +62,7 @@ type pollTask struct { SealPoller从数据库中检索所有`after_commit_msg_success`或`after_move_storage`不为真的`pollTasks`,并尝试在可能的情况下推进它们的状态。当一个`pollTask`的依赖项(由"after_"字段指示)完成,且任务本身尚未排队(其任务ID为nil)或完成(其"After"字段为false)时,就会推进该任务。每个pollTask的推进都会触发一个数据库事务,尝试用从HarmonyDB接收到的新任务ID更新任务ID。该事务确保在读取状态和更新任务ID之间,任务没有被其他人排队。这个轮询过程按顺序进行,每个阶段都有不同的条件,确保在继续之前满足所有先前的条件。如果一个任务由于其先前的依赖项未完成而无法继续,轮询器将在下一轮回来。大多数情况下,轮询器操作期间发生的错误会被记录,不会导致轮询器停止。但如果在数据库事务期间发生严重问题,它将被回滚,并给出详细的错误消息。通过这种方式组织工作,SealPoller确保密封程序中的每个步骤按正确的顺序发生,并在可能的情况下取得进展。它允许在考虑其他正在进行的任务的约束条件下,尽可能高效地密封扇区。 -
密封任务执行

Curio harmony任务执行

+
密封任务执行

Curio harmony任务执行

## Piece Park ## 数据块停放 diff --git a/scripts/documents/curio-cluster-translation-process.txt b/scripts/documents/curio-cluster-translation-process.txt new file mode 100644 index 000000000..813e9f6ca --- /dev/null +++ b/scripts/documents/curio-cluster-translation-process.txt @@ -0,0 +1,23 @@ +brew install xmlstarlet + +interesting but useless: + xmlstarlet sel -t -v "//@value" -n curio-cluster.drawio |sort -u | xmllint --html --xpath "string()" - 2>/dev/null >out.txt + +do this: + xmlstarlet sel -t -v "//@value" -n curio-cluster.drawio |sort -u >out.txt + prepend: {"message": " + append: "}, "translation": ""}, + +First lines: +{ + "language": "zh", + "messages": [ + +(and close with): + ]} + +AI: +Complete these translations, preserving html formatting. + +run: + go run replaceTranslations.go curio-cluster.drawio curio_cluster_translations.json \ No newline at end of file diff --git a/scripts/replaceTranslations/replaceTranslations.go b/scripts/replaceTranslations/replaceTranslations.go new file mode 100644 index 000000000..b394552fe --- /dev/null +++ b/scripts/replaceTranslations/replaceTranslations.go @@ -0,0 +1,61 @@ +// b/c GPT4o & Claude are too dumb to just translate value="" fields. +// (it'll get better and this will be useless then.) + +// This replaces specific fields in an XML file with translations. +// I used it to modify only the parts of the .drawio files for zh +// by using an xml tool to extract fields needing translation, +// formatting them as JS with simple CLI tools, using GPT tranlation, +// Then using this to modify only the value="" fields with their translation. +// +// Note, this was manual. The first portion should be wrapped-up in a script +// if we want to do this on a regular basis. + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "path" + + "github.com/snadrus/must" +) + +type Translation struct { + Message string `json:"message"` + Translation string `json:"translation"` +} + +func main() { + if len(os.Args) < 3 { + fmt.Println("Usage: go run replaceTranslations.go ") + fmt.Println("Outputs: input_xml_file_translated.xml") + return + } + + xmlBytes := must.One(os.ReadFile(os.Args[1])) + jsonFile := must.One(os.ReadFile(os.Args[2])) + + // Parse the JSON file into a struct + var translations struct { + Language string `json:"language"` + Messages []Translation `json:"messages"` + } + if err := json.Unmarshal(jsonFile, &translations); err != nil { + panic(err) + } + for _, t := range translations.Messages { // Replace exact match of the message with the translation + xmlBytes = bytes.ReplaceAll(xmlBytes, []byte(`"`+t.Message+`"`), []byte(`"`+t.Translation+`"`)) + } + + // Save the modified XML to a file + ext := path.Ext(os.Args[1]) + err := os.WriteFile(os.Args[1][:len(ext)-1]+"_translated."+ext, xmlBytes, 0644) + if err != nil { + fmt.Println("Error writing output XML:", err) + return + } + + fmt.Println("Translation applied successfully. Output saved") +}