DEV Community

EgorMajj
EgorMajj

Posted on

Руководство по использованию Aptos CLI

Утилита aptos - это интерфейс командной строки (CLI) для отладки, разработки и работы с нодой. В этом руководстве описано, как использовать утилиту aptos CLI.Чтобы установить CLI, см. руководство по установке Aptos CLI.

Справочник по командной строке

Доступные команды для вызова справочника. Введите aptos help или aptos --help, чтобы увидеть доступные варианты команды.

$ aptos 0.2.1
Aptos Labs <opensource@aptoslabs.com>
CLI tool for interacting with the Aptos blockchain and nodes

USAGE:
    aptos <SUBCOMMAND>

OPTIONS:
    -h, --help       Print help information
    -V, --version    Print version information

SUBCOMMANDS:
    account    CLI tool for interacting with accounts
    config     Tool for configuration of the CLI tool
    genesis    Tool for setting up and building the Genesis transaction
    help       Print this message or the help of the given subcommand(s)
    info       Show information about the build of the CLI
    init       Tool to initialize current directory for the aptos tool
    key        CLI tool for generating, inspecting, and interacting with keys
    move       CLI tool for performing Move tasks
    node       Tool for manipulating nodes
Enter fullscreen mode Exit fullscreen mode

Также справочник доступен по конкретным командам. Например, введите aptos move --help, чтобы получить справку по конкретной команде.

$ aptos-move 0.2.1
CLI tool for performing Move tasks

USAGE:
    aptos move <SUBCOMMAND>

OPTIONS:
    -h, --help       Print help information
    -V, --version    Print version information

SUBCOMMANDS:
    compile    Compiles a package and returns the [`ModuleId`]s
    help       Print this message or the help of the given subcommand(s)
    init       Creates a new Move package at the given location
    publish    Publishes the modules in a Move package
    run        Run a Move function
    test       Run Move unit tests against a package path
Enter fullscreen mode Exit fullscreen mode

Также доступен справочник по подкомандам. Например, введите aptos move compile --help, чтобы получить справку по конкретной команде.

$ aptos-move-compile 0.2.1
Compiles a package and returns the [`ModuleId`]s

USAGE:
    aptos move compile [OPTIONS]

OPTIONS:
    -h, --help
            Print help information

        --named-addresses <NAMED_ADDRESSES>
            Named addresses for the move binary

            Example: alice=0x1234, bob=0x5678

            Note: This will fail if there are duplicates in the Move.toml file remove those first.

            [default: ]

        --output-dir <OUTPUT_DIR>
            Path to save the compiled move package

            Defaults to `<package_dir>/build`

        --package-dir <PACKAGE_DIR>
            Path to a move package (the folder with a Move.toml file)

    -V, --version
            Print version information
Enter fullscreen mode Exit fullscreen mode

Информация о CLI

Чтобы получить информацию о CLI для отладки, можно выполнить команду aptos info:

$ aptos info
{
  "Result": {
    "build_branch": "main",
    "build_cargo_version": "cargo 1.61.0 (a028ae42f 2022-04-29)",
    "build_commit_hash": "9593a8d515b7c82886064812753b237d82075e35",
    "build_os": "macos-aarch64",
    "build_pkg_version": "0.2.1",
    "build_rust_channel": "1.61.0-aarch64-apple-darwin",
    "build_rust_version": "rustc 1.61.0 (fe5b13d68 2022-05-18)"
  }
}
Enter fullscreen mode Exit fullscreen mode

Примеры настроек

Настройка глобальной конфигурации

С помощью этой команды можно задать параметры глобальной конфигурации для CLI. Глобальная конфигурация находится в ~/.aptos/global_config.yaml. На данный момент единственным полем, которое можно настроить, является --config-type, которое позволяет вам установить, где будет установлена конфигурация профиля. По умолчанию это workspace, что означает, что текущий каталог (./.aptos/config.yaml), в котором запущен CLI, будет содержать конфигурацию. Если установлено значение global, то будет использоваться глобальное расположение папки (~/.aptos/config.yaml).

$ aptos config set-global-config --config-type global
{
  "Result": "Success"
}
Enter fullscreen mode Exit fullscreen mode

Вы также можете показать глобальную конфигурацию с помощью команды show-global-config.

$ aptos config show-global-config
{
  "Result": {
    "config_type": "Global"
  }
}
Enter fullscreen mode Exit fullscreen mode

Настройка выполнения shell
Вы можете настроить завершения shell с помощью команды generate-shell-completions. Пожалуйста, посмотрите конфигурацию для вашей конкретной shell. В настоящее время поддерживаются следующие shell [bash, zsh, fish, powershell, elvish]. Ниже приведен пример для oh my zsh.

$ aptos config generate-shell-completions --shell zsh --output-file ~/.oh-my-zsh/completions/_aptos
Enter fullscreen mode Exit fullscreen mode

Настройка локальной конфигурации и создание учетной записи

Будет создана локальная папка .aptos/ с конфигурацией config.yaml, которую можно использовать для хранения конфигурации между запусками CLI. Эта папка является локальной для вашего запуска, поэтому вам нужно будет продолжить запуск CLI из этой папки или повторно инициализировать в другой папке.

Шаг 1. Запустите Aptos init

Это инициализирует конфигурацию с заданным закрытым ключом.

$ aptos init
Configuring for profile default
Enter your rest endpoint [Current: None | No input: https://fullnode.devnet.aptoslabs.com]

No rest url given, using https://fullnode.devnet.aptoslabs.com...
Enter your faucet endpoint [Current: None | No input: https://faucet.devnet.aptoslabs.com]

No faucet url given, using https://faucet.devnet.aptoslabs.com...
Enter your private key as a hex literal (0x...) [Current: None | No input: Generate new key (or keep one if present)]

No key given, generating key...
Account 50A49D913AA6381C01579E3FC00784B49AFA3A771F06389EBC65F8FF3A4E9A7D doesn't exist, creating it and funding it with 10000 coins
Aptos is now set up for account 50A49D913AA6381C01579E3FC00784B49AFA3A771F06389EBC65F8FF3A4E9A7D!  Run `aptos help` for more information about commands

{
  "Result": "Success"
}
Enter fullscreen mode Exit fullscreen mode

Шаг 2. Изменение конфигурации

Чтобы изменить конфигурацию, вы можете либо выполнить команду aptos init, либо вручную отредактировать файл .aptos/config.yaml, который находится в вашем текущем рабочем каталоге.

Шаг 3. Создание других профилей

Вы также можете создавать другие профили для разных командных точек и разных ключей. Их можно создать, добавив аргумент --profile, и использовать в большинстве других команд для замены аргументов командной строки.

$ aptos init --profile superuser
Configuring for profile superuser
Enter your rest endpoint [Current: None | No input: https://fullnode.devnet.aptoslabs.com]

No rest url given, using https://fullnode.devnet.aptoslabs.com...
Enter your faucet endpoint [Current: None | No input: https://faucet.devnet.aptoslabs.com]

No faucet url given, using https://faucet.devnet.aptoslabs.com...
Enter your private key as a hex literal (0x...) [Current: None | No input: Generate new key (or keep one if present)]

No key given, generating key...
Account 18B61497FD290B02BB0751F44381CADA1657C2B3AA6194A00D9BC9A85FAD3B04 doesn't exist, creating it and funding it with 10000 coins
Aptos is now set up for account 18B61497FD290B02BB0751F44381CADA1657C2B3AA6194A00D9BC9A85FAD3B04!  Run `aptos help` for more information about commands
{
  "Result": "Success"
}
Enter fullscreen mode Exit fullscreen mode

Примеры учетных записей

Пополнение учетной записи с помощью faucet

Вы можете пополнить учетную запись на faucet через CLI, используя либо учетную запись, либо профиль:

$ aptos account fund --account B9BD2CFA58CA29BCE1D7ADD25FCE5C62220604CD0236FE3F90D9DE91ED9FB8CB
{
  "Result": "Added 10000 coins to account B9BD2CFA58CA29BCE1D7ADD25FCE5C62220604CD0236FE3F90D9DE91ED9FB8CB"
}
Enter fullscreen mode Exit fullscreen mode
$ aptos account fund --account default
{
  "Result": "Added 10000 coins to account B9BD2CFA58CA29BCE1D7ADD25FCE5C62220604CD0236FE3F90D9DE91ED9FB8CB"
}
Enter fullscreen mode Exit fullscreen mode

Просмотр баланса учетной записи и информации о переводах

Вы можете просматривать баланс и информацию о переводах (пополнение и снятие средств) с помощью:

$ aptos account list --query balance --account 0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb
Enter fullscreen mode Exit fullscreen mode

Приведенная выше команда выведет на ваш терминал следующую информацию:

{
  "Result": [
    {
      "coin": {
        "value": "10000"
      },
      "deposit_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "1"
          }
        }
      },
      "withdraw_events": {
        "counter": "0",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "2"
          }
        }
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Вызов ресурсов в учетной записи

Вы можете вызвать список ресурсов в учетной записи из командной строки. Например, смотрите ниже, как вызвать список ресурсов в учетной записи, которую вы только что создали выше:

$ aptos account list --query resources --account 0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb
Enter fullscreen mode Exit fullscreen mode

Приведенная выше команда выдаст на ваш терминал следующую информацию о списке ресурсов:

{
  "Result": [
    {
      "coin": {
        "value": "10000"
      },
      "deposit_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "1"
          }
        }
      },
      "withdraw_events": {
        "counter": "0",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "2"
          }
        }
      }
    },
    {
      "register_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "0"
          }
        }
      }
    },
    {
      "counter": "3"
    },
    {
      "authentication_key": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
      "self_address": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
      "sequence_number": "0"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Вы можете дополнительно указать профиль по умолчанию из конфигурации, в которой не указана учетная запись.

$ aptos account list
{
  "Result": [
    {
      "coin": {
        "value": "10000"
      },
      "deposit_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "1"
          }
        }
      },
      "withdraw_events": {
        "counter": "0",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "2"
          }
        }
      }
    },
    {
      "register_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
            "creation_num": "0"
          }
        }
      }
    },
    {
      "counter": "3"
    },
    {
      "authentication_key": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
      "self_address": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
      "sequence_number": "0"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Кроме того, любое место, где есть учетная запись, может использовать имя профиля:

$ aptos account list --query resources --account superuser
{
  "Result": [
    {
      "coin": {
        "value": "10000"
      },
      "deposit_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
            "creation_num": "1"
          }
        }
      },
      "withdraw_events": {
        "counter": "0",
        "guid": {
          "id": {
            "addr": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
            "creation_num": "2"
          }
        }
      }
    },
    {
      "register_events": {
        "counter": "1",
        "guid": {
          "id": {
            "addr": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
            "creation_num": "0"
          }
        }
      }
    },
    {
      "counter": "3"
    },
    {
      "authentication_key": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
      "self_address": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
      "sequence_number": "0"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Вызов модулей в учетной записи

Вы можете вызывать различные типы запросов для просмотра различных элементов под учетной записью. В настоящее время поддерживаются "ресурсы" и "модули", но в будущем появятся и другие типы запросов. Например, для получения модулей:

$ aptos account list --query modules                   
{
  "Result": [
    {
      "bytecode": "0xa11ceb0b050000000b01000a020a12031c2504410405452d0772da0108cc0240068c030a0a9603150cab03650d90040400000101010201030104000506000006080004070700020e0401060100080001000009020300010f0404000410060100031107000002120709010602130a030106050806080105010802020c0a02000103040508020802070801010a0201060c010800010b0301090002070b030109000900074d657373616765056572726f72056576656e74067369676e657206737472696e67124d6573736167654368616e67654576656e740d4d657373616765486f6c64657206537472696e670b6765745f6d6573736167650b7365745f6d6573736167650c66726f6d5f6d6573736167650a746f5f6d657373616765076d657373616765156d6573736167655f6368616e67655f6576656e74730b4576656e7448616e646c65096e6f745f666f756e6404757466380a616464726573735f6f66106e65775f6576656e745f68616e646c650a656d69745f6576656e74b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb0000000000000000000000000000000000000000000000000000000000000001030800000000000000000002020a08020b08020102020c08020d0b030108000001000101030b0a002901030607001102270b002b0110001402010104010105240b0111030c040e0011040c020a02290120030b05120e000b040e00380012012d0105230b022a010c050a051000140c030a050f010b030a04120038010b040b050f0015020100010100",
      "abi": {
        "address": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "name": "Message",
        "friends": [],
        "exposed_functions": [
          {
            "name": "get_message",
            "visibility": "public",
            "is_entry": false,
            "generic_type_params": [],
            "params": [
              "address"
            ],
            "return": [
              "0x1::string::String"
            ]
          },
          {
            "name": "set_message",
            "visibility": "public",
            "is_entry": true,
            "generic_type_params": [],
            "params": [
              "signer",
              "vector<u8>"
            ],
            "return": []
          }
        ],
        "structs": [
          {
            "name": "MessageChangeEvent",
            "is_native": false,
            "abilities": [
              "drop",
              "store"
            ],
            "generic_type_params": [],
            "fields": [
              {
                "name": "from_message",
                "type": "0x1::string::String"
              },
              {
                "name": "to_message",
                "type": "0x1::string::String"
              }
            ]
          },
          {
            "name": "MessageHolder",
            "is_native": false,
            "abilities": [
              "key"
            ],
            "generic_type_params": [],
            "fields": [
              {
                "name": "message",
                "type": "0x1::string::String"
              },
              {
                "name": "message_change_events",
                "type": "0x1::event::EventHandle<0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb::Message::MessageChangeEvent>"
              }
            ]
          }
        ]
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Перевод coins

Aptos CLI также является простым кошельком и может переводить монеты между учетными записями.

$ aptos account transfer --account superuser --amount 100
{
  "Result": {
    "gas_used": 73,
    "balance_changes": {
      "742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc": {
        "coin": {
          "value": "10100"
        },
        "deposit_events": {
          "counter": "2",
          "guid": {
            "id": {
              "addr": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
              "creation_num": "1"
            }
          }
        },
        "withdraw_events": {
          "counter": "0",
          "guid": {
            "id": {
              "addr": "0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc",
              "creation_num": "2"
            }
          }
        }
      },
      "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb": {
        "coin": {
          "value": "9827"
        },
        "deposit_events": {
          "counter": "1",
          "guid": {
            "id": {
              "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
              "creation_num": "1"
            }
          }
        },
        "withdraw_events": {
          "counter": "1",
          "guid": {
            "id": {
              "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
              "creation_num": "2"
            }
          }
        }
      }
    },
    "sender": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
    "success": true,
    "version": 1139,
    "vm_status": "Executed successfully"
  }
}
Enter fullscreen mode Exit fullscreen mode

Пример с ключами

Генерирование ключа

Чтобы разрешить генерацию закрытых ключей, можно использовать команду aptos key generate. Вы можете генерировать ключи x25519 или ed25519.

$ aptos key generate --key-type ed25519 --output-file output.key
{
  "Result": {
    "PrivateKey Path": "output.key",
    "PublicKey Path": "output.key.pub"
  }
}

Enter fullscreen mode Exit fullscreen mode

Генерация конфигурации Peer

Чтобы разрешить другим подключаться к вашей ноде, вам необходимо создать конфигурацию peer. Ниже показано, как можно использовать aptos CLI для создания конфигурации peer и записи ее в файл peer_config.yaml.

$ aptos key extract-peer --output-file peer_config.yaml
Enter fullscreen mode Exit fullscreen mode

Приведенная выше команда выведет на терминал следующий результат:

{
  "Result": {
    "8cfb85603080b13013b57e2e80887c695cfecd7ad8217d1cac22fa6f3b0b5752": {
      "addresses": [],
      "keys": [
        "0x8cfb85603080b13013b57e2e80887c695cfecd7ad8217d1cac22fa6f3b0b5752"
      ],
      "role": "Upstream"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Файл peer_config.yaml будет создан в вашей текущей рабочей папке, с содержимым, как показано в примере ниже:

---
8cfb85603080b13013b57e2e80887c695cfecd7ad8217d1cac22fa6f3b0b5752:
  addresses: []
  keys:
    - "0x8cfb85603080b13013b57e2e80887c695cfecd7ad8217d1cac22fa6f3b0b5752"
  role: Upstream
Enter fullscreen mode Exit fullscreen mode

Примечание: В строке адреса необходимо заполнить свой адрес.

Примеры MOVE

Сборка Move

Для локальной сборки пакета Move можно использовать aptos CLI. В приведенном ниже примере используется блокчейн HelloBlockchain в move-examples.

Адреса с именами могут быть либо адресом учетной записи, либо именем профиля.

$ aptos move compile --package-dir aptos-move/move-examples/hello_blockchain/ --named-addresses HelloBlockchain=superuser
Enter fullscreen mode Exit fullscreen mode

Приведенная выше команда выведет на терминал следующий результат:

{
  "Result": [
    "742854F7DCA56EA6309B51E8CEBB830B12623F9C9D76C72C3242E4CAD353DEDC::Message"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Сборка и модульное тестирование Move

aptos CLI также можно использовать для сборки и локального запуска модульных тестов. В этом примере мы будем использовать HelloBlockchain в move-examples.

$ aptos move test --package-dir aptos-move/move-examples/hello_blockchain/ --named-addresses HelloBlockchain=superuser
Enter fullscreen mode Exit fullscreen mode

Приведенная выше команда выведет на терминал следующий результат:

INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
Running Move unit tests
[ PASS    ] 0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc::MessageTests::sender_can_set_message
[ PASS    ] 0x742854f7dca56ea6309b51e8cebb830b12623f9c9d76c72c3242e4cad353dedc::Message::sender_can_set_message
Test result: OK. Total tests: 2; passed: 2; failed: 0
{
  "Result": "Success"
}
Enter fullscreen mode Exit fullscreen mode

Доказательство MOVE

С помощью aptos CLI можно запустить Move Prover, который является инструментом формальной верификации для языка Move. Приведенный ниже пример подтверждает пакет hello_prover в move-examples.

aptos move prove --package-dir aptos-move/move-examples/hello_prover/
Enter fullscreen mode Exit fullscreen mode

Приведенная выше команда выведет на терминал следующий результат:

SUCCESS proving 1 modules from package `hello_prover` in 1.649s
{
  "Result": "Success"
}
Enter fullscreen mode Exit fullscreen mode

Debug и вывод Stacktrace

В этом примере мы будем использовать DebugDemo в debug-move-example.

Во-первых, вам нужно включить Move nursery в файл Move toml.

Теперь вы можете использовать Debug::print и Debug::print_stack_trace в вашем файле DebugDemo Move.

Вы можете выполнить следующую команду:

$ aptos move test --package-dir crates/aptos/debug-move-example
Enter fullscreen mode Exit fullscreen mode

Команда выдаст следующий результат:

Running Move unit tests
[debug] 0000000000000000000000000000000000000000000000000000000000000001
Call Stack:
    [0] 0000000000000000000000000000000000000000000000000000000000000001::Message::sender_can_set_message

        Code:
            [4] CallGeneric(0)
            [5] MoveLoc(0)
            [6] LdConst(0)
          > [7] Call(1)
            [8] Ret

        Locals:
            [0] -
            [1] 0000000000000000000000000000000000000000000000000000000000000001


Operand Stack:
Enter fullscreen mode Exit fullscreen mode

Публикация пакета Move с названным адресом

В этом примере мы будем использовать HelloBlockchain в move-examples.

Опубликуйте пакет с адресом вашей учетной записи, установленным для HelloBlockchain.

Здесь необходимо изменить 8946741e5c907c43c9e042b3739993f32904723f8e2d1491564d38959b59ac71 на адрес вашей учетной записи.

$ aptos move publish --package-dir aptos-move/move-examples/hello_blockchain/ --named-addresses HelloBlockchain=8946741e5c907c43c9e042b3739993f32904723f8e2d1491564d38959b59ac71
Enter fullscreen mode Exit fullscreen mode

Вы можете дополнительно использовать названные профили для адресов. Первый держатель default

$ aptos move publish --package-dir aptos-move/move-examples/hello_blockchain/ --named-addresses HelloBlockchain=default
Enter fullscreen mode Exit fullscreen mode

Запуск функции Move

Теперь, когда вы опубликовали вышеуказанную функцию, вы можете запустить ее.

Аргументы должны иметь тип с двоеточием для разделения. В этом примере мы хотим, чтобы входные данные были разобраны как строка, поэтому мы поместили string:Hello!

$ aptos move run --function-id 0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb::message::set_message --args string:hello!
{
  "Result": {
    "changes": [
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "authentication_key": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
          "self_address": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
          "sequence_number": "3"
        },
        "event": "write_resource",
        "resource": "0x1::account::Account"
      },
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "coin": {
            "value": "9777"
          },
          "deposit_events": {
            "counter": "1",
            "guid": {
              "id": {
                "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
                "creation_num": "1"
              }
            }
          },
          "withdraw_events": {
            "counter": "1",
            "guid": {
              "id": {
                "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
                "creation_num": "2"
              }
            }
          }
        },
        "event": "write_resource",
        "resource": "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"
      },
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "counter": "4"
        },
        "event": "write_resource",
        "resource": "0x1::guid::Generator"
      },
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "message": "hello!",
          "message_change_events": {
            "counter": "0",
            "guid": {
              "id": {
                "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
                "creation_num": "3"
              }
            }
          }
        },
        "event": "write_resource",
        "resource": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb::Message::MessageHolder"
      }
    ],
    "gas_used": 41,
    "success": true,
    "version": 3488,
    "vm_status": "Executed successfully"
  }
} 
Enter fullscreen mode Exit fullscreen mode

Кроме того, профили могут заменять адреса в идентификаторе функции.

$ aptos move run --function-id default::message::set_message --args string:hello!
{
  "Result": {
    "changes": [
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "authentication_key": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
          "self_address": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
          "sequence_number": "3"
        },
        "event": "write_resource",
        "resource": "0x1::account::Account"
      },
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "coin": {
            "value": "9777"
          },
          "deposit_events": {
            "counter": "1",
            "guid": {
              "id": {
                "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
                "creation_num": "1"
              }
            }
          },
          "withdraw_events": {
            "counter": "1",
            "guid": {
              "id": {
                "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
                "creation_num": "2"
              }
            }
          }
        },
        "event": "write_resource",
        "resource": "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"
      },
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "counter": "4"
        },
        "event": "write_resource",
        "resource": "0x1::guid::Generator"
      },
      {
        "address": "b9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
        "data": {
          "message": "hello!",
          "message_change_events": {
            "counter": "0",
            "guid": {
              "id": {
                "addr": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb",
                "creation_num": "3"
              }
            }
          }
        },
        "event": "write_resource",
        "resource": "0xb9bd2cfa58ca29bce1d7add25fce5c62220604cd0236fe3f90d9de91ed9fb8cb::Message::MessageHolder"
      }
    ],
    "gas_used": 41,
    "success": true,
    "version": 3488,
    "vm_status": "Executed successfully"
  }
}
Enter fullscreen mode Exit fullscreen mode

Примеры команд Ноды

Запуск локальной тестовой сети

Вы можете запустить локальный тестнет из aptos CLI, который будет соответствовать версии, с которой он был собран. Кроме того, можно запустить faucet локальной одной нодой в тестнете.

$ aptos node run-local-testnet --with-faucet
Completed generating configuration:
        Log file: "/Users/greg/.aptos/testnet/validator.log"
        Test dir: "/Users/greg/.aptos/testnet"
        Aptos root key path: "/Users/greg/.aptos/testnet/mint.key"
        Waypoint: 0:d302c6b10e0fa68bfec9cdb383f24ef1189d8850d50b832365eea21ae52d8101
        ChainId: TESTING
        REST API endpoint: 0.0.0.0:8080
        FullNode network: /ip4/0.0.0.0/tcp/6181

Aptos is running, press ctrl-c to exit
Enter fullscreen mode Exit fullscreen mode

Это обеспечит стабильное состояние, если нода будет выключена, она начнет работу с предыдущего состояния. Если вы хотите перезапустить сеть из genesis, вы можете добавить флаг --force-restart.

$ aptos node run-local-testnet --with-faucet --force-restart
Are you sure you want to delete the existing chain? [yes/no] >
yes
Completed generating configuration:
        Log file: "/Users/greg/.aptos/testnet/validator.log"
        Test dir: "/Users/greg/.aptos/testnet"
        Aptos root key path: "/Users/greg/.aptos/testnet/mint.key"
        Waypoint: 0:649efc34c813d0db8db6fa5b1ffc9cc62f726bb5168e7f4b8730bb155d6213ea
        ChainId: TESTING
        REST API endpoint: 0.0.0.0:8080
        FullNode network: /ip4/0.0.0.0/tcp/6181

Aptos is running, press ctrl-c to exit
Enter fullscreen mode Exit fullscreen mode

Церемонии Genesis

Инструмент aptos поддерживает загрузку новых блокчейнов посредством так называемой церемонии генезиса. Результатом церемонии генезиса является вывод команд Move, которые подготавливают блокчейн к работе в режиме онлайн. Входные данные состоят из:

  • Набор валидаторов и их конфигурация
  • Начальный набор модулей Move, известный как фреймворк
  • Уникальный ChainId (u8), который отличает эту сеть от других развертываний.
  • Для тестовых сетей также существует учетная запись, которая управляет минтом AptosCoin

Генерирование Genesis

  • Органайзер genesis создает Layout и распределяет его.
  • Органайзер genesis подготавливает bytecode фреймворка Aptos и распределяет его.
  • Каждый участник создает свою конфигурацию ValidatorConfiguration и распределяет ее.
  • Каждый участник генерирует genesis.blob из полученных вкладов.
  • Организатор genesis выполняет genesis.blob для получения начальной путевой точки и распределяет ее.
  • Каждый участник создает свой aptos-node. При запуске aptos-node проверяет, что genesis.blob соответствует путевой точке, предоставленной организатором genesis.
  • Блокчейн начнет консенсус после того, как наберется необходимый stake.

Подготовка Aptos-core

Следующее руководство предполагает, что у вас есть доступ к репозиторию Aptos-core или связанным с ним инструментам. Вы можете загрузить и подготовить Aptos-core с GitHub:

git clone https://github.com/aptos-labs/aptos-core.git
cd aptos-core
git checkout --track origin/testnet
./scripts/dev_setup.sh
source ~/.cargo/env
Enter fullscreen mode Exit fullscreen mode

Файл Layout

Файл Layout содержит:

root_key: открытый ключ Ed25519 для управления AptosCoin.
users: набор участников
chain_id: ChainId или уникальное целое число, которое отличает данное развертывание от других сетей Aptos

Пример:

root_key: "0xca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575"
users:
  - alice
  - bob
chain_id: 8
Enter fullscreen mode Exit fullscreen mode

Создание Aptos фреймворк

Из репозитория Aptos-core создайте фреймворк и поместите его в папку:

cargo run --package framework
mkdir aptos-framework-release
cp aptos-framework/releases/artifacts/current/build/**/bytecode_modules/* aptos-framework-release
Enter fullscreen mode Exit fullscreen mode

Фреймворк будет храниться в каталоге aptos-framework-release.

*Файл ValidatorConfiguration *

Файл ValidatorConfiguration содержит:

  • account_address: Учетная запись, которая управляет этим валидатором. Он должен быть получен из ключа account_key, предоставленного в файле ValidatorConfiguration.
  • consensus_key: Открытый ключ для аутентификации сообщений консенсуса от валидатора.
  • account_key: Открытый ключ для учетной записи, которая управляет этим валидатором. Он используется для получения адреса account_address.
  • network_key: Открытый ключ для аутентификации и шифрования сети валидатора и fullnode.
  • validator_host: сетевой адрес, на котором находится валидатор. Он содержит поле host и port. host должен быть либо именем DNS, либо IP-адресом. В настоящее время поддерживается только IPv4.
  • full_node_host: необязательный сетевой адрес, на котором находится fullnode. Содержит поле host и port. host должен быть либо именем DNS, либо IP-адресом. В настоящее время поддерживается только IPv4.
  • stake_amount: Количество монет, на которые делает ставку данная нода. Ожидается, что это значение будет равно 1, если оно отличается, конфигурация будет считаться недействительной.

Пример:

account_address: ccd49f3ea764365ac21e99f029ca63a9b0fbfab1c8d8d5482900e4fa32c5448a
consensus_key: "0xa05b8f41057ac72f9ca99f5e3b1b787930f03ba5e448661f2a1fac98371775ee"
account_key: "0x3d15ab64c8b14c9aab95287fd0eb894aad0b4bd929a5581bcc8225b5688f053b"
network_key: "0x43ce1a4ac031b98bb1ee4a5cd72a4cca0fd72933d64b22cef4f1a61895c2e544"
validator_host:
  host: bobs_host
  port: 6180
full_node_host:
  host: bobs_host
  port: 6182
stake_amount: 1
Enter fullscreen mode Exit fullscreen mode

Чтобы создать его с помощью aptos CLI:

1.Сгенерируйте ключи валидатора:

cargo run --package aptos -- genesis generate-keys --output-dir bobs
Enter fullscreen mode Exit fullscreen mode

2.Создайте свою конфигурацию ValidatorConfiguration:

cargo run --package aptos -- \\
    genesis set-validator-configuration \\
    --keys-dir bobs \\
    --username bob \\
    --validator-host bobs_host:6180 \\
    --full-node-host bobs_host:6180 \\
    --local-repository-dir .
Enter fullscreen mode Exit fullscreen mode

3.Последняя команда создаст файл bob.yaml, который должен быть распределен среди других участников для генерации genesis.blob.

Генерация генезиса и путевой точки

genesis.blob и путевая точка могут быть сгенерированы после получения файла Layout, каждого из отдельных файлов ValidatorConfiguration и релиза фреймворка. Важно убедиться, что ValidatorConfiguration, предоставленный на предыдущем этапе, совпадает с дистрибутивом для генерации genesis.blob. Если есть несоответствие, сообщите об этом всем участникам.

Для генерации genesis.blob и путевой точки:

  • Поместите файл Layout в папку, например, genesis.
  • Поместите все файлы ValidatorConfiguration в папку genesis.
  • Убедитесь, что файлы ValidatorConfiguration перечислены под набором users в файле Layout.
  • Создайте папку framework в папке genesiss и поместите файлы .mv релиза framework в папку framework.
  • Используйте aptos CLI для генерации genesis и путевой точки:
cargo run --package aptos -- genesis generate-genesis --local-repository-dir genesis
Enter fullscreen mode Exit fullscreen mode

Запуск aptos-node

После генерации genesis.blob и путевой точки поместите их в каталог конфигурации вашего валидатора и fullnode и запустите ваш валидатор и fullnode.

Top comments (0)