Full Code of IBAX-io/go-ibax for AI

main 66f135846a10 cached
473 files
2.0 MB
559.9k tokens
3834 symbols
1 requests
Download .txt
Showing preview only (2,230K chars total). Download the full file or copy to clipboard to get everything.
Repository: IBAX-io/go-ibax
Branch: main
Commit: 66f135846a10
Files: 473
Total size: 2.0 MB

Directory structure:
gitextract_ogj7kazk/

├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.yml
│       ├── config.yml
│       └── feature_request.yml
├── .gitignore
├── .travis.yml
├── LICENSE
├── Makefile
├── README.md
├── build.sh
├── cmd/
│   ├── config.go
│   ├── generateFirstBlock.go
│   ├── generateKeys.go
│   ├── initDatabase.go
│   ├── rollback.go
│   ├── root.go
│   ├── start.go
│   ├── stopNetwork.go
│   └── version.go
├── go.mod
├── go.sum
├── main.go
├── packages/
│   ├── api/
│   │   ├── api.go
│   │   ├── api_test.go
│   │   ├── app_content.go
│   │   ├── app_content_test.go
│   │   ├── appparam.go
│   │   ├── appparams.go
│   │   ├── auth.go
│   │   ├── balance.go
│   │   ├── balance_test.go
│   │   ├── block.go
│   │   ├── block_test.go
│   │   ├── common_forms.go
│   │   ├── config.go
│   │   ├── content.go
│   │   ├── content_test.go
│   │   ├── context.go
│   │   ├── contract_test.go
│   │   ├── contracts.go
│   │   ├── data.go
│   │   ├── ecosystem.go
│   │   ├── ecosystem_params.go
│   │   ├── ecosystem_test.go
│   │   ├── errors.go
│   │   ├── getcontract.go
│   │   ├── getuid.go
│   │   ├── getuid_test.go
│   │   ├── history.go
│   │   ├── history_test.go
│   │   ├── import_test.go
│   │   ├── interface.go
│   │   ├── interface_test.go
│   │   ├── lang_test.go
│   │   ├── limit_test.go
│   │   ├── list.go
│   │   ├── list_test.go
│   │   ├── login.go
│   │   ├── member.go
│   │   ├── metrics.go
│   │   ├── middlewares.go
│   │   ├── network.go
│   │   ├── node.go
│   │   ├── platform_params.go
│   │   ├── read_test.go
│   │   ├── request.go
│   │   ├── route.go
│   │   ├── row.go
│   │   ├── sections.go
│   │   ├── send_tx.go
│   │   ├── smart_test.go
│   │   ├── table.go
│   │   ├── tables.go
│   │   ├── tables_test.go
│   │   ├── template_test.go
│   │   ├── trash.go
│   │   ├── tx_record.go
│   │   ├── txinfo.go
│   │   ├── txstatus.go
│   │   └── version.go
│   ├── block/
│   │   ├── block.go
│   │   ├── check.go
│   │   ├── db.go
│   │   ├── play.go
│   │   └── serialization.go
│   ├── chain/
│   │   ├── daemonsctl/
│   │   │   └── daemonsctl.go
│   │   ├── notandroid.go
│   │   ├── start.go
│   │   └── system/
│   │       ├── pid.go
│   │       ├── unix.go
│   │       └── windows.go
│   ├── clbmanager/
│   │   ├── config.go
│   │   └── manager.go
│   ├── common/
│   │   ├── crypto/
│   │   │   ├── asymalgo/
│   │   │   │   ├── asymalgo.go
│   │   │   │   ├── error.go
│   │   │   │   ├── p256.go
│   │   │   │   ├── secp256k1.go
│   │   │   │   └── sm2.go
│   │   │   ├── base58/
│   │   │   │   └── base58.go
│   │   │   ├── checksum.go
│   │   │   ├── converter.go
│   │   │   ├── crypto.go
│   │   │   ├── crypto.pb.go
│   │   │   ├── crypto_test.go
│   │   │   ├── ecies/
│   │   │   │   ├── ecccrypt.go
│   │   │   │   └── ecies.go
│   │   │   ├── hashalgo/
│   │   │   │   ├── hashalgo.go
│   │   │   │   ├── keccak256.go
│   │   │   │   ├── sha256.go
│   │   │   │   ├── sha3_256.go
│   │   │   │   └── sm3.go
│   │   │   ├── provider.go
│   │   │   ├── random.go
│   │   │   ├── symalgo/
│   │   │   │   └── aes/
│   │   │   │       ├── aes.go
│   │   │   │       └── aes_test.go
│   │   │   └── x509/
│   │   │       └── cert.go
│   │   ├── log/
│   │   │   ├── filename_hook.go
│   │   │   ├── hex_hook.go
│   │   │   ├── syslog_hook.go
│   │   │   └── syslog_hook_windows.go
│   │   ├── random/
│   │   │   ├── rand.go
│   │   │   └── rand_test.go
│   │   └── size.go
│   ├── conf/
│   │   ├── conf.go
│   │   ├── runmode.go
│   │   ├── syspar/
│   │   │   ├── honornode.go
│   │   │   ├── honornode_test.go
│   │   │   └── syspar.go
│   │   └── types.go
│   ├── consts/
│   │   ├── conf.go
│   │   ├── consts.go
│   │   ├── log_types.go
│   │   └── used_stop_certs.go
│   ├── converter/
│   │   ├── address.go
│   │   └── converter.go
│   ├── daemons/
│   │   ├── block_generator.go
│   │   ├── block_generator_candidate.go
│   │   ├── block_generator_tx.go
│   │   ├── blocks_collection.go
│   │   ├── candidate_node_votings.go
│   │   ├── common.go
│   │   ├── confirmations.go
│   │   ├── disseminator.go
│   │   ├── external_network.go
│   │   ├── genesis.go
│   │   ├── locking.go
│   │   ├── mode.go
│   │   ├── monitoring.go
│   │   ├── queue_parser_blocks.go
│   │   ├── queue_parser_tx.go
│   │   ├── scheduler.go
│   │   ├── stopdaemons.go
│   │   ├── upd_full_nodes.go
│   │   └── wait_for_signals.go
│   ├── language/
│   │   └── language.go
│   ├── migration/
│   │   ├── clb/
│   │   │   ├── applications_data.go
│   │   │   ├── clb_data_contracts.go
│   │   │   ├── data.go
│   │   │   ├── keys_data.go
│   │   │   ├── menu_data.go
│   │   │   ├── pages_data.go
│   │   │   ├── parameters_data.go
│   │   │   ├── platform_parameters_data.go
│   │   │   ├── roles_data.go
│   │   │   ├── scheme.go
│   │   │   ├── sections_data.go
│   │   │   ├── snippets_data.go
│   │   │   └── tables_data.go
│   │   ├── contracts/
│   │   │   ├── clb/
│   │   │   │   ├── EditCron.sim
│   │   │   │   ├── ListCLB.sim
│   │   │   │   ├── MainCondition.sim
│   │   │   │   ├── NewCLB.sim
│   │   │   │   ├── NewCron.sim
│   │   │   │   ├── RemoveCLB.sim
│   │   │   │   ├── RunCLB.sim
│   │   │   │   └── StopCLB.sim
│   │   │   ├── ecosystem/
│   │   │   │   ├── DeveloperCondition.sim
│   │   │   │   └── MainCondition.sim
│   │   │   └── first_ecosystem/
│   │   │       ├── AccessControlMode.sim
│   │   │       ├── AccessVoteTempRun.sim
│   │   │       ├── BindWallet.sim
│   │   │       ├── CallDelayedContract.sim
│   │   │       ├── CheckNodesBan.sim
│   │   │       ├── EditAppParam.sim
│   │   │       ├── EditApplication.sim
│   │   │       ├── EditColumn.sim
│   │   │       ├── EditContract.sim
│   │   │       ├── EditLang.sim
│   │   │       ├── EditMenu.sim
│   │   │       ├── EditPage.sim
│   │   │       ├── EditParameter.sim
│   │   │       ├── EditSnippet.sim
│   │   │       ├── EditTable.sim
│   │   │       ├── HonorNodeCondition.sim
│   │   │       ├── Import.sim
│   │   │       ├── ImportUpload.sim
│   │   │       ├── NewAppParam.sim
│   │   │       ├── NewApplication.sim
│   │   │       ├── NewBadBlock.sim
│   │   │       ├── NewContract.sim
│   │   │       ├── NewEcosystem.sim
│   │   │       ├── NewLang.sim
│   │   │       ├── NewMenu.sim
│   │   │       ├── NewPage.sim
│   │   │       ├── NewParameter.sim
│   │   │       ├── NewSnippet.sim
│   │   │       ├── NewTable.sim
│   │   │       ├── NewUser.sim
│   │   │       ├── NodeOwnerCondition.sim
│   │   │       ├── UnbindWallet.sim
│   │   │       ├── UpdatePlatformParam.sim
│   │   │       ├── UploadBinary.sim
│   │   │       └── UploadFile.sim
│   │   ├── contracts_data.go
│   │   ├── data.go
│   │   ├── ecosystem.go
│   │   ├── ecosystem_test.go
│   │   ├── first_delayed_contracts.go
│   │   ├── first_ecosys_contracts_data.go
│   │   ├── first_ecosys_pages_data.go
│   │   ├── first_ecosys_snippets_data.go
│   │   ├── first_ecosystem_schema.go
│   │   ├── first_ecosystems_data.go
│   │   ├── first_tables_data.go
│   │   ├── gen/
│   │   │   ├── contracts.go
│   │   │   └── contracts_test.go
│   │   ├── keys_data.go
│   │   ├── members_data.go
│   │   ├── menu_data.go
│   │   ├── migration.go
│   │   ├── migration_test.go
│   │   ├── pages_data.go
│   │   ├── parameters_data.go
│   │   ├── platform_parameters_data.go
│   │   ├── sections_data.go
│   │   ├── tables_data.go
│   │   ├── timezones.go
│   │   └── updates/
│   │       └── migration_update_exec.go
│   ├── modes/
│   │   ├── api.go
│   │   ├── client_tx.go
│   │   ├── daemons.go
│   │   ├── ecosystem_getter.go
│   │   ├── mode_fabrics.go
│   │   └── rpc.go
│   ├── network/
│   │   ├── httpserver/
│   │   │   └── max_body.go
│   │   ├── machineState.go
│   │   ├── protocol.go
│   │   ├── protocol_test.go
│   │   ├── tcpclient/
│   │   │   ├── blocks_collection.go
│   │   │   ├── candidate_node_voting.go
│   │   │   ├── client.go
│   │   │   ├── client_test.go
│   │   │   ├── confirmation.go
│   │   │   ├── disseminator.go
│   │   │   ├── max_block.go
│   │   │   ├── pools.go
│   │   │   ├── pools_test.go
│   │   │   └── stop_network.go
│   │   └── tcpserver/
│   │       ├── blocks_collection.go
│   │       ├── candidate_node_voting.go
│   │       ├── confirmation.go
│   │       ├── disseminate_tx.go
│   │       ├── disseminator.go
│   │       ├── max_block.go
│   │       ├── stop_network.go
│   │       └── tcpserver.go
│   ├── notificator/
│   │   ├── notificator.go
│   │   ├── queue.go
│   │   └── token_movements.go
│   ├── pb/
│   │   ├── Makefile
│   │   ├── block.proto
│   │   ├── crypto.proto
│   │   ├── gas.proto
│   │   ├── play.proto
│   │   ├── tx.proto
│   │   └── vm.proto
│   ├── pbgo/
│   │   └── tx.pb.go
│   ├── protocols/
│   │   ├── block_counter.go
│   │   ├── block_counter_mock.go
│   │   ├── block_time_calculator.go
│   │   ├── block_time_calculator_test.go
│   │   ├── block_time_counter_test.go
│   │   └── generation-queue.go
│   ├── publisher/
│   │   └── publisher.go
│   ├── rollback/
│   │   ├── block.go
│   │   ├── rollback.go
│   │   └── transaction.go
│   ├── scheduler/
│   │   ├── contract/
│   │   │   ├── request.go
│   │   │   └── task.go
│   │   ├── scheduler.go
│   │   ├── scheduler_test.go
│   │   └── task.go
│   ├── script/
│   │   ├── cmds_list.go
│   │   ├── code_block.go
│   │   ├── compile.go
│   │   ├── compile_test.go
│   │   ├── errors.go
│   │   ├── eval.go
│   │   ├── eval_test.go
│   │   ├── extend.go
│   │   ├── func.go
│   │   ├── handle.go
│   │   ├── lex.go
│   │   ├── lex_table.go
│   │   ├── lex_test.go
│   │   ├── lextable/
│   │   │   └── lextable.go
│   │   ├── runtime.go
│   │   ├── runtime_test.go
│   │   ├── stack.go
│   │   ├── state.go
│   │   ├── vm.go
│   │   ├── vm.pb.go
│   │   └── vminit.go
│   ├── service/
│   │   ├── gateway/
│   │   │   └── gateway.go
│   │   ├── jsonrpc/
│   │   │   ├── accounts.go
│   │   │   ├── api.go
│   │   │   ├── auth.go
│   │   │   ├── block.go
│   │   │   ├── callback.go
│   │   │   ├── common.go
│   │   │   ├── common_forms.go
│   │   │   ├── context.go
│   │   │   ├── data.go
│   │   │   ├── debug.go
│   │   │   ├── ecosystem_params.go
│   │   │   ├── errors.go
│   │   │   ├── handlers.go
│   │   │   ├── history.go
│   │   │   ├── http.go
│   │   │   ├── id.go
│   │   │   ├── jwt.go
│   │   │   ├── middlewares.go
│   │   │   ├── namespace.go
│   │   │   ├── namespace_debug.go
│   │   │   ├── namespace_ibax.go
│   │   │   ├── namespace_net.go
│   │   │   ├── params.go
│   │   │   ├── raw_response.go
│   │   │   ├── request.go
│   │   │   ├── response.go
│   │   │   ├── server.go
│   │   │   ├── service.go
│   │   │   ├── transaction.go
│   │   │   └── txinfo.go
│   │   ├── node/
│   │   │   ├── node_actualization.go
│   │   │   ├── node_ban.go
│   │   │   ├── node_paused.go
│   │   │   └── node_relevance.go
│   │   └── protos/
│   │       ├── build.sh
│   │       └── googleapis/
│   │           └── google/
│   │               └── api/
│   │                   ├── annotations.proto
│   │                   └── http.proto
│   ├── smart/
│   │   ├── builtin_excel.go
│   │   ├── contract.go
│   │   ├── datetime.go
│   │   ├── errors.go
│   │   ├── funcs.go
│   │   ├── gas.go
│   │   ├── gas.pb.go
│   │   ├── math.go
│   │   ├── selective.go
│   │   ├── smart.go
│   │   ├── smart_p.go
│   │   ├── smart_test.go
│   │   ├── sysrollback.go
│   │   └── utils.go
│   ├── statsd/
│   │   └── statsd.go
│   ├── storage/
│   │   ├── kvdb/
│   │   │   ├── leveldb/
│   │   │   │   └── leveldb.go
│   │   │   └── redis/
│   │   │       ├── goredis.go
│   │   │       └── maxblockid.go
│   │   ├── sqldb/
│   │   │   ├── app_param.go
│   │   │   ├── bad_blocks.go
│   │   │   ├── binary.go
│   │   │   ├── blockchain.go
│   │   │   ├── candidate_node.go
│   │   │   ├── confirmations.go
│   │   │   ├── contract.go
│   │   │   ├── cron.go
│   │   │   ├── database.go
│   │   │   ├── db.go
│   │   │   ├── delayed_contract.go
│   │   │   ├── ecosystem.go
│   │   │   ├── ecosystem_parameter.go
│   │   │   ├── external_blockchain.go
│   │   │   ├── history.go
│   │   │   ├── info_block.go
│   │   │   ├── install.go
│   │   │   ├── keys.go
│   │   │   ├── language.go
│   │   │   ├── log_transaction.go
│   │   │   ├── members.go
│   │   │   ├── menu.go
│   │   │   ├── metric.go
│   │   │   ├── migration_history.go
│   │   │   ├── node_ban_logs.go
│   │   │   ├── notification.go
│   │   │   ├── notification_test.go
│   │   │   ├── ordering.go
│   │   │   ├── pages.go
│   │   │   ├── platform_parameter.go
│   │   │   ├── queryBuilder/
│   │   │   │   ├── expression.go
│   │   │   │   ├── query_builder.go
│   │   │   │   ├── query_builder_test.go
│   │   │   │   └── where.go
│   │   │   ├── querycost/
│   │   │   │   ├── explain.go
│   │   │   │   ├── formula.go
│   │   │   │   ├── formula_test.go
│   │   │   │   └── querycost.go
│   │   │   ├── queue_block.go
│   │   │   ├── queue_tx.go
│   │   │   ├── responecode.go
│   │   │   ├── result.go
│   │   │   ├── role.go
│   │   │   ├── roles_participants.go
│   │   │   ├── rollback_tx.go
│   │   │   ├── schema.go
│   │   │   ├── send_tx.go
│   │   │   ├── signatures.go
│   │   │   ├── snippet.go
│   │   │   ├── spent_info.go
│   │   │   ├── stop_daemons.go
│   │   │   ├── tables.go
│   │   │   ├── transaction.go
│   │   │   ├── transaction_status.go
│   │   │   ├── transactions_attempts.go
│   │   │   ├── tx_record.go
│   │   │   ├── upd_full_nodes.go
│   │   │   └── utxo_token.go
│   │   └── storage.go
│   ├── system/
│   │   ├── system.go
│   │   ├── system_notwindows.go
│   │   └── system_windows.go
│   ├── template/
│   │   ├── calculate.go
│   │   ├── dbfind.go
│   │   ├── funcs.go
│   │   └── template.go
│   ├── transaction/
│   │   ├── ban.go
│   │   ├── builder.go
│   │   ├── cache.go
│   │   ├── contract.go
│   │   ├── db.go
│   │   ├── deliver.go
│   │   ├── first_block.go
│   │   ├── limits.go
│   │   ├── play.go
│   │   ├── process.go
│   │   ├── raw.go
│   │   ├── smart_contract.go
│   │   ├── stop_network.go
│   │   └── transaction.go
│   ├── types/
│   │   ├── api.go
│   │   ├── block.pb.go
│   │   ├── block_data.go
│   │   ├── compress.go
│   │   ├── custom_tx.go
│   │   ├── file.go
│   │   ├── map.go
│   │   ├── mode_interfaces.go
│   │   ├── notifications.go
│   │   └── play.pb.go
│   └── utils/
│       ├── ban_error.go
│       ├── ban_error_test.go
│       ├── clock.go
│       ├── clock_mock.go
│       ├── metric/
│       │   ├── collector.go
│       │   ├── collector_test.go
│       │   └── metrics.go
│       ├── ntp.go
│       ├── utils.go
│       └── utils_test.go
└── tools/
    └── desync_monitor/
        ├── config/
        │   └── config.go
        ├── config.toml.temp
        ├── main.go
        └── query/
            ├── query.go
            └── utils.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "\U0001F41E Bug report"
description: Report an issue with IBAX
labels: [pending triage]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: textarea
    id: bug-description
    attributes:
      label: Describe the bug
      description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks!
      placeholder: Bug description
    validations:
      required: true
  - type: textarea
    id: reproduction
    attributes:
      label: Reproduction
      description: Please provide a link to a repo that can reproduce the problem you ran into. A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is required unless you are absolutely sure that the issue is obvious and the provided information is enough to understand the problem. If a report is vague (e.g. just a generic error message) and has no reproduction, it will receive a "need reproduction" label. If no reproduction is provided after 3 days, it will be auto-closed.
      placeholder: Reproduction
    validations:
      required: true
  - type: textarea
    id: system-info
    attributes:
      label: System Info
      description: 
      render: shell
      placeholder: System, Binaries, Browsers
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: Logs
      description: |
        Optional if provided reproduction. Please try not to insert an image but copy paste the log text.

        1. Run `go-ibax` or `go-ibax start` with the `--test` flag.
        2. Provide the error log here.
      render: shell
  - type: checkboxes
    id: checkboxes
    attributes:
      label: Validations
      description: Before submitting the issue, please make sure you do the following
      options:
        - label: Read the [docs](https://docs.ibax.io).
          required: true
        - label: Check that there isn't [already an issue](https://github.com/IBAX-io/go-ibax/issues) that reports the same bug to avoid creating a duplicate.
          required: true
        - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/IBAX-io/go-ibax/discussions) or join our [Discord Chat Server](https://discord.com/invite/zRX6Mwafya).
          required: true
        - label: The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: IBAX Official English Group
    url: https://t.me/IBAXNetwork
    about: A Decentralized Commercial Cross-Chain infrastructure Network.
  - name: Discord Chat
    url: https://discord.com/invite/zRX6Mwafya
    about: Ask questions and discuss with other IBAX users in real time.
  - name: Questions & Discussions
    url: https://github.com/IBAX-io/go-ibax/discussions
    about: Use GitHub discussions for message-board style questions and discussions.



================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: "\U0001F680 New feature proposal"
description: Propose a new feature to be added to IBAX
labels: ["enhancement: pending triage"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for your interest in the project and taking the time to fill out this feature report!
  - type: textarea
    id: feature-description
    attributes:
      label: Clear and concise description of the problem
      description: "As a developer using IBAX I want [goal / wish] so that [benefit]. If you intend to submit a PR for this issue, tell us in the description. Thanks!"
    validations:
      required: true
  - type: textarea
    id: suggested-solution
    attributes:
      label: Suggested solution
      description: "In module [xy] we could provide following implementation..."
    validations:
      required: true
  - type: textarea
    id: alternative
    attributes:
      label: Alternative
      description: Clear and concise description of any alternative solutions or features you've considered.
  - type: textarea
    id: additional-context
    attributes:
      label: Additional context
      description: Any other context or screenshots about the feature request here.
  - type: checkboxes
    id: checkboxes
    attributes:
      label: Validations
      description: Before submitting the issue, please make sure you do the following
      options:
        - label: Read the [docs](https://docs.ibax.io).
          required: true
        - label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
          required: true


================================================
FILE: .gitignore
================================================
.directory

### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio

*.iml

## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:

# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries

# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml

# Gradle:
# .idea/gradle.xml
# .idea/libraries

# Mongo Explorer plugin:
# .idea/mongoSettings.xml

## File-based project format:
*.ipr
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
### Go template
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go
*.ffs_db
*.exe
*.test
*.prof
### OSX template
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk


packages/api/key
go-ibax
1block
NodePrivateKey
PrivateKey
NodePublicKey
PublicKey
KeyID
chain.pid
config.toml

packages/static/
public/

.vscode/

packages/api/helper_test.go
/tempdir/*
#/tools/
.scannerwork/
sonar-project.properties
tempdir/
ibax-log/
packages/api/key*
*.lock
*.pid
initDatabase.txt
.env
docker-compose.yml
Dockerfile
Dockerfile_src
test.log


================================================
FILE: .travis.yml
================================================
language: go

env: GO111MODULE=on

go:
  - 1.17.x
  - master

go_import_path: github.com/IBAX-io/go-ibax

install: true

script: go build github.com/IBAX-io/go-ibax


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2020 IBAX.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: Makefile
================================================
export GOPROXY=https://goproxy.io
export GO111MODULE=on

HOMEDIR := $(shell pwd)

all: mod build

mod:
	go mod tidy -v

build:
	bash $(HOMEDIR)/build.sh

try:
	go build
	go-ibax generateFirstBlock --test=true
	go-ibax initDatabase
	go-ibax start

init:
	go-ibax initDatabase

# avoid filename conflict and speed up build
.PHONY: all


================================================
FILE: README.md
================================================
# IBAX Blockchain System Platform

[![Go Reference](https://pkg.go.dev/badge/github.com/IBAX-io/go-ibax.svg)](https://pkg.go.dev/github.com/IBAX-io/go-ibax)
[![Go Report Card](https://goreportcard.com/badge/github.com/IBAX-io/go-ibax)](https://goreportcard.com/report/github.com/IBAX-io/go-ibax)

## The Most Powerful Infrastructure for Applications on Decentralized/Centralized Ecosystems

A powerful blockchain system platform with a new system framework and a simplified programming language, it is including
smart contract, database table and interface.

### Build from Source

#### Install Go

The build process for go-ibax requires Go 1.17 or higher. If you don't have it: [Download Go 1.17+](https://go.dev).

You'll need to add Go's bin directories to your `$PATH` environment variable e.g., by adding these lines to
your `/etc/profile` (for a system-wide installation) or `$HOME/.profile`:

```
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOPATH/bin
```

(If you run into trouble, see the [Go install instructions](https://go.dev/dl/)).

#### Compile

```
$ export GOPROXY=https://athens.azurefd.net
$ GO111MODULE=on go mod tidy -v

$ go build
```

### Run

1. Create the node configuration file:

```bash
$    go-ibax config
```

2. Generate node keys:

```bash
$    go-ibax generateKeys
```

3. Generate the first block. If you are creating your own blockchain network. You must use the `--test=true` option.
   Otherwise you will not be able to create new accounts.

```bash
$    go-ibax generateFirstBlock --test=true
```

4. Initialize the database.

```bash
$    go-ibax initDatabase
```

5.Starting go-ibax.

```bash
$    go-ibax start
```





================================================
FILE: build.sh
================================================
#!/bin/bash
set -e -x

HOMEDIR=$(pwd)

function buildpkg() {
    buildBin=$1
    buildModule=$2
    buildFile=$3
    buildBranch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo unknown)
    buildDate=$(date -u "+%Y-%m-%d-%H:%M:%S(UTC)")
    commitHash=$(git rev-parse --short HEAD 2>/dev/null || echo unknown)
    go build -o "$buildBin" -ldflags "-s -w -X $buildModule/cmd.buildBranch=$buildBranch -X $buildModule/cmd.buildDate=$buildDate -X $buildModule/cmd.commitHash=$commitHash" "$buildFile"
}

buildpkg go-ibax "github.com/IBAX-io/go-ibax" "$HOMEDIR/main.go"


================================================
FILE: cmd/config.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"fmt"
	"path/filepath"

	"github.com/IBAX-io/go-ibax/packages/types"

	"github.com/IBAX-io/go-ibax/packages/common/crypto"
	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"

	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

// configCmd represents the config command
var configCmd = &cobra.Command{
	Use:   "config",
	Short: "Initial config generation",
	Run: func(cmd *cobra.Command, args []string) {
		// Error omitted because we have default flag value
		configPath, _ := cmd.Flags().GetString("path")

		err := conf.FillRuntimePaths()
		if err != nil {
			log.WithError(err).Fatal("Filling config")
		}

		if configPath == "" {
			configPath = filepath.Join(conf.Config.DirPathConf.DataDir, consts.DefaultConfigFile)
		}
		err = viper.Unmarshal(&conf.Config)
		if err != nil {
			log.WithError(err).Fatal("Marshalling config to global struct variable")
		}

		err = conf.SaveConfig(configPath)
		if err != nil {
			log.WithError(err).Fatal("Saving config")
		}
		log.Infof("Config is saved to %s", configPath)
	},
}

func init() {

	cmdFlags := configCmd.Flags()
	// Command flags
	cmdFlags.String("path", "", "Generate config to (default dataDir/config.toml)")

	// Etc
	cmdFlags.StringVar(&conf.Config.DirPathConf.PidFilePath, "pid", "",
		fmt.Sprintf("ibax pid file name (default dataDir/%s)", consts.DefaultPidFilename),
	)
	cmdFlags.StringVar(&conf.Config.DirPathConf.LockFilePath, "lock", "",
		fmt.Sprintf("ibax lock file name (default dataDir/%s)", consts.DefaultLockFilename),
	)
	cmdFlags.StringVar(&conf.Config.DirPathConf.KeysDir, "keysDir", "", "Keys directory (default dataDir)")
	cmdFlags.StringVar(&conf.Config.DirPathConf.DataDir, "dataDir", "", "Data directory (default cwd/data)")
	cmdFlags.StringVar(&conf.Config.DirPathConf.TempDir, "tempDir", "", "Temporary directory (default temporary directory of OS)")
	cmdFlags.StringVar(&conf.Config.DirPathConf.FirstBlockPath, "firstBlock", "", "First block path (default dataDir/1block)")

	// tls
	cmdFlags.BoolVar(&conf.Config.TLSConf.Enabled, "tlsEnable", false, "Enable https")
	cmdFlags.StringVar(&conf.Config.TLSConf.TLSCert, "tlsCert", "", "Filepath to the fullchain of certificates")
	cmdFlags.StringVar(&conf.Config.TLSConf.TLSKey, "tlsKey", "", "Filepath to the private key")

	//Bootstrap
	cmdFlags.StringSliceVar(&conf.Config.BootNodes.NodesAddr, "bootNodes", []string{}, "List of addresses for downloading blockchain")

	//LocalConf
	cmdFlags.Int64Var(&conf.Config.LocalConf.MaxPageGenerationTime, "mpgt", 3000, "Max page generation time in ms")
	cmdFlags.Int64Var(&conf.Config.LocalConf.HTTPServerMaxBodySize, "mbs", 1<<20, "Max server body size in byte")
	cmdFlags.Int64Var(&conf.Config.LocalConf.NetworkID, "networkID", 1, "Network ID")
	cmdFlags.StringVar(&conf.Config.LocalConf.RunNodeMode, "runMode", consts.NoneCLB, "running node mode, example NONE|CLB|CLBMaster|SubNode")

	// TCP Server
	cmdFlags.StringVar(&conf.Config.TCPServer.Host, "tcpHost", "127.0.0.1", "Node TCP host")
	cmdFlags.IntVar(&conf.Config.TCPServer.Port, "tcpPort", 7078, "Node TCP port")

	// HTTP Server
	cmdFlags.StringVar(&conf.Config.HTTP.Host, "httpHost", "127.0.0.1", "Node HTTP host")
	cmdFlags.IntVar(&conf.Config.HTTP.Port, "httpPort", 7079, "Node HTTP port")

	// JSON-RPC Server
	cmdFlags.BoolVar(&conf.Config.JsonRPC.Enabled, "jsonRPCEnabled", false, "Node Json-RPC Enabled")
	cmdFlags.StringVar(&conf.Config.JsonRPC.Namespace, "jsonRPCNamespace", "ibax,net", "Node Json-RPC Namespace")

	// DB
	cmdFlags.StringVar(&conf.Config.DB.Host, "dbHost", "127.0.0.1", "DB host")
	cmdFlags.IntVar(&conf.Config.DB.Port, "dbPort", 5432, "DB port")
	cmdFlags.StringVar(&conf.Config.DB.Name, "dbName", "ibax", "DB name")
	cmdFlags.StringVar(&conf.Config.DB.User, "dbUser", "postgres", "DB username")
	cmdFlags.StringVar(&conf.Config.DB.Password, "dbPassword", "123456", "DB password")
	cmdFlags.IntVar(&conf.Config.DB.LockTimeout, "dbLockTimeout", 5000, "DB lock timeout")
	cmdFlags.IntVar(&conf.Config.DB.IdleInTxTimeout, "dbIdleInTxTimeout", 5000, "DB idle tx timeout")
	cmdFlags.IntVar(&conf.Config.DB.MaxIdleConns, "dbMaxIdleConns", 5, "DB sets the maximum number of connections in the idle connection pool")
	cmdFlags.IntVar(&conf.Config.DB.MaxOpenConns, "dbMaxOpenConns", 100, "sets the maximum number of open connections to the database")

	//Redis
	cmdFlags.BoolVar(&conf.Config.Redis.Enable, "redisEnable", false, "enable redis")
	cmdFlags.StringVar(&conf.Config.Redis.Host, "redisHost", "localhost", "redis host")
	cmdFlags.IntVar(&conf.Config.Redis.Port, "redisPort", 6379, "redis port")
	cmdFlags.IntVar(&conf.Config.Redis.DbName, "redisDb", 0, "redis db")
	cmdFlags.StringVar(&conf.Config.Redis.Password, "redisPassword", "123456", "redis password")

	// StatsD
	cmdFlags.StringVar(&conf.Config.StatsD.Host, "statsdHost", "127.0.0.1", "StatsD host")
	cmdFlags.IntVar(&conf.Config.StatsD.Port, "statsdPort", 8125, "StatsD port")
	cmdFlags.StringVar(&conf.Config.StatsD.Name, "statsdName", "chain", "StatsD name")

	// Centrifugo
	cmdFlags.StringVar(&conf.Config.Centrifugo.Secret, "centSecret", "127.0.0.1", "Centrifugo secret")
	cmdFlags.StringVar(&conf.Config.Centrifugo.URL, "centUrl", "127.0.0.1", "Centrifugo URL")
	cmdFlags.StringVar(&conf.Config.Centrifugo.Key, "centKey", "127.0.0.1", "Centrifugo API key")

	// Log
	cmdFlags.StringVar(&conf.Config.Log.LogTo, "logTo", "stdout", "Send logs to stdout|(filename)|syslog")
	cmdFlags.StringVar(&conf.Config.Log.LogLevel, "logLevel", "ERROR", "Log verbosity (DEBUG | INFO | WARN | ERROR)")
	cmdFlags.StringVar(&conf.Config.Log.LogFormat, "logFormat", "text", "log format, could be text|json")
	cmdFlags.StringVar(&conf.Config.Log.Syslog.Facility, "syslogFacility", "kern", "syslog facility")
	cmdFlags.StringVar(&conf.Config.Log.Syslog.Tag, "syslogTag", "go-ibax", "syslog program tag")

	// TokenMovement
	cmdFlags.StringVar(&conf.Config.TokenMovement.Host, "tmovHost", "", "Token movement host")
	cmdFlags.IntVar(&conf.Config.TokenMovement.Port, "tmovPort", 0, "Token movement port")
	cmdFlags.StringVar(&conf.Config.TokenMovement.Username, "tmovUser", "", "Token movement username")
	cmdFlags.StringVar(&conf.Config.TokenMovement.Password, "tmovPw", "", "Token movement password")
	cmdFlags.StringVar(&conf.Config.TokenMovement.To, "tmovTo", "", "Token movement to field")
	cmdFlags.StringVar(&conf.Config.TokenMovement.From, "tmovFrom", "", "Token movement from field")
	cmdFlags.StringVar(&conf.Config.TokenMovement.Subject, "tmovSubj", "", "Token movement subject")

	cmdFlags.IntVar(&conf.Config.BanKey.BadTime, "badTime", 5, "Period for bad tx (minutes)")
	cmdFlags.IntVar(&conf.Config.BanKey.BanTime, "banTime", 15, "Ban time in minutes")
	cmdFlags.IntVar(&conf.Config.BanKey.BadTx, "badTx", 5, "Maximum bad tx during badTime minutes")

	// CryptoSettings
	cmdFlags.StringVar(&conf.Config.CryptoSettings.Hasher, "hasher", crypto.HashAlgo_KECCAK256.String(), fmt.Sprintf("Hash Algorithm (%s | %s | %s | %s)", crypto.HashAlgo_SHA256, crypto.HashAlgo_KECCAK256, crypto.HashAlgo_SHA3_256, crypto.HashAlgo_SM3))
	cmdFlags.StringVar(&conf.Config.CryptoSettings.Cryptoer, "cryptoer", crypto.AsymAlgo_ECC_Secp256k1.String(), fmt.Sprintf("Key and Sign Algorithm (%s | %s | %s | %s)", crypto.AsymAlgo_ECC_P256, crypto.AsymAlgo_ECC_Secp256k1, crypto.AsymAlgo_ECC_P512, crypto.AsymAlgo_SM2))

	// BlockSyncMethod
	cmdFlags.StringVar(&conf.Config.BlockSyncMethod.Method, "sync", types.BlockSyncMethod_CONTRACTVM.String(), fmt.Sprintf("Block sync method (%s | %s)", types.BlockSyncMethod_CONTRACTVM, types.BlockSyncMethod_SQLDML))

	viper.BindPFlags(configCmd.PersistentFlags())
}


================================================
FILE: cmd/generateFirstBlock.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"os"
	"path/filepath"
	"time"

	"github.com/IBAX-io/go-ibax/packages/block"
	"github.com/IBAX-io/go-ibax/packages/common/crypto"
	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/transaction"
	"github.com/IBAX-io/go-ibax/packages/types"
	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
)

var stopNetworkBundleFilepath string
var testBlockchain bool
var privateBlockchain bool

// generateFirstBlockCmd represents the generateFirstBlock command
var generateFirstBlockCmd = &cobra.Command{
	Use:    "generateFirstBlock",
	Short:  "First generation",
	PreRun: loadConfigWKey,
	Run: func(cmd *cobra.Command, args []string) {
		block, err := genesisBlock()
		if err != nil {
			log.WithFields(log.Fields{"type": consts.MarshallingError, "error": err}).Fatal("first block marshalling")
		}
		os.WriteFile(conf.Config.DirPathConf.FirstBlockPath, block, 0644)
		log.Info("first block generated")
	},
}

func init() {
	generateFirstBlockCmd.Flags().StringVar(&stopNetworkBundleFilepath, "stopNetworkCert", "", "Filepath to the fullchain of certificates for network stopping")
	generateFirstBlockCmd.Flags().BoolVar(&testBlockchain, "test", false, "if true - test blockchain")
	generateFirstBlockCmd.Flags().BoolVar(&privateBlockchain, "private", false, "if true - all transactions will be free")
}

func genesisBlock() ([]byte, error) {
	now := time.Now().Unix()
	header := &types.BlockHeader{
		BlockId:       1,
		Timestamp:     now,
		EcosystemId:   0,
		KeyId:         conf.Config.KeyID,
		NetworkId:     conf.Config.LocalConf.NetworkID,
		NodePosition:  0,
		Version:       consts.BlockVersion,
		RollbacksHash: crypto.Hash([]byte(`0`)),
		ConsensusMode: consts.HonorNodeMode,
	}
	decodeKeyFile := func(kName string) []byte {
		filepath := filepath.Join(conf.Config.DirPathConf.KeysDir, kName)
		data, err := os.ReadFile(filepath)
		if err != nil {
			log.WithError(err).WithFields(log.Fields{"key": kName, "filepath": filepath}).Fatal("Reading key data")
		}

		decodedKey, err := crypto.HexToPub(string(data))
		if err != nil {
			log.WithError(err).Fatalf("converting %s from hex", kName)
		}

		return decodedKey
	}

	var stopNetworkCert []byte
	if len(stopNetworkBundleFilepath) > 0 {
		var err error
		fp := filepath.Join(conf.Config.DirPathConf.KeysDir, stopNetworkBundleFilepath)
		if stopNetworkCert, err = os.ReadFile(fp); err != nil {
			log.WithError(err).WithFields(log.Fields{"filepath": fp}).Fatal("Reading cert data")
		}
	}

	if len(stopNetworkCert) == 0 {
		log.Warn("the fullchain of certificates for a network stopping is not specified")
	}

	var test int64
	var pb uint64
	if testBlockchain == true {
		test = 1
	}
	if privateBlockchain == true {
		pb = 1
	}

	fbp := new(transaction.FirstBlockParser)
	tx, err := fbp.BinMarshal(&types.FirstBlock{
		KeyID:                 conf.Config.KeyID,
		Time:                  now,
		PublicKey:             decodeKeyFile(consts.PublicKeyFilename),
		NodePublicKey:         decodeKeyFile(consts.NodePublicKeyFilename),
		StopNetworkCertBundle: stopNetworkCert,
		Test:                  test,
		PrivateBlockchain:     pb,
	})
	if err != nil {
		log.WithFields(log.Fields{"type": consts.MarshallingError, "error": err}).Fatal("first block body bin marshalling")
	}
	return block.MarshallBlock(types.WithCurHeader(header),
		types.WithPrevHeader(&types.BlockHeader{
			BlockHash:     crypto.DoubleHash([]byte(`0`)),
			RollbacksHash: crypto.Hash([]byte(`0`)),
		}), types.WithTxFullData([][]byte{tx}))
}


================================================
FILE: cmd/generateKeys.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"encoding/hex"
	"os"
	"path/filepath"
	"strconv"

	"github.com/IBAX-io/go-ibax/packages/common/crypto"
	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/pkg/errors"
	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
)

const fileMode = 0600

// generateKeysCmd represents the generateKeys command
var generateKeysCmd = &cobra.Command{
	Use:    "generateKeys",
	Short:  "Keys generation",
	PreRun: loadConfig,
	Run: func(cmd *cobra.Command, args []string) {
		_, publicKey, err := createKeyPair(
			filepath.Join(conf.Config.DirPathConf.KeysDir, consts.PrivateKeyFilename),
			filepath.Join(conf.Config.DirPathConf.KeysDir, consts.PublicKeyFilename),
		)
		if err != nil {
			log.WithError(err).Fatal("generating user keys")
			return
		}
		_, _, err = createKeyPair(
			filepath.Join(conf.Config.DirPathConf.KeysDir, consts.NodePrivateKeyFilename),
			filepath.Join(conf.Config.DirPathConf.KeysDir, consts.NodePublicKeyFilename),
		)
		if err != nil {
			log.WithError(err).Fatal("generating node keys")
			return
		}
		address := crypto.Address(publicKey)
		keyIDPath := filepath.Join(conf.Config.DirPathConf.KeysDir, consts.KeyIDFilename)
		err = createFile(keyIDPath, []byte(strconv.FormatInt(address, 10)))
		if err != nil {
			log.WithFields(log.Fields{"error": err, "path": keyIDPath}).Fatal("generating node keys")
			return
		}
		log.Info("keys generated")
	},
}

func createFile(filename string, data []byte) error {
	dir := filepath.Dir(filename)
	if _, err := os.Stat(dir); os.IsNotExist(err) {
		err := os.Mkdir(dir, 0775)
		if err != nil {
			return errors.Wrapf(err, "creating dir %s", dir)
		}
	}

	return os.WriteFile(filename, data, fileMode)
}

func createKeyPair(privFilename, pubFilename string) (priv, pub []byte, err error) {
	priv, pub, err = crypto.GenKeyPair()
	if err != nil {
		log.WithError(err).Error("generate keys")
		return
	}

	err = createFile(privFilename, []byte(hex.EncodeToString(priv)))
	if err != nil {
		log.WithFields(log.Fields{"error": err, "path": privFilename}).Error("creating private key")
		return
	}

	err = createFile(pubFilename, []byte(crypto.PubToHex(pub)))
	if err != nil {
		log.WithFields(log.Fields{"error": err, "path": pubFilename}).Error("creating public key")
		return
	}
	return
}


================================================
FILE: cmd/initDatabase.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"

	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"
)

// initDatabaseCmd represents the initDatabase command
var initDatabaseCmd = &cobra.Command{
	Use:    "initDatabase",
	Short:  "Initializing database",
	PreRun: loadConfigWKey,
	Run: func(cmd *cobra.Command, args []string) {
		if err := sqldb.InitDB(conf.Config.DB); err != nil {
			log.WithError(err).Fatal("init db")
		}
		log.Info("initDatabase completed")
	},
}


================================================
FILE: cmd/rollback.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/conf/syspar"
	"github.com/IBAX-io/go-ibax/packages/rollback"
	"github.com/IBAX-io/go-ibax/packages/smart"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"
	"github.com/IBAX-io/go-ibax/packages/utils"

	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
)

var blockID int64

// rollbackCmd represents the rollback command
var rollbackCmd = &cobra.Command{
	Use:    "rollback",
	Short:  "Rollback blockchain to blockID",
	PreRun: loadConfigWKey,
	Run: func(cmd *cobra.Command, args []string) {
		f := utils.LockOrDie(conf.Config.DirPathConf.LockFilePath)
		defer f.Unlock()

		if err := sqldb.GormInit(conf.Config.DB); err != nil {
			log.WithError(err).Fatal("init db")
			return
		}
		if err := syspar.SysUpdate(nil); err != nil {
			log.WithError(err).Error("can't read platform parameters")
		}
		if err := syspar.SysTableColType(nil); err != nil {
			log.WithError(err).Error("updating sys table col type")
		}

		smart.InitVM()
		if err := smart.LoadContracts(); err != nil {
			log.WithError(err).Fatal("loading contracts")
			return
		}
		err := rollback.ToBlockID(blockID, nil, log.WithFields(log.Fields{}))
		if err != nil {
			log.WithError(err).Fatal("rollback to block id")
			return
		}

		// block id = 1, is a special case for full rollback
		if blockID != 1 {
			log.Info("Not full rollback, finishing work without checking")
			return
		}
	},
}

func init() {
	rollbackCmd.Flags().Int64Var(&blockID, "blockId", 1, "blockID to rollback")
	rollbackCmd.MarkFlagRequired("blockId")
}


================================================
FILE: cmd/root.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"fmt"

	"github.com/IBAX-io/go-ibax/packages/consts"
	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"

	"path/filepath"

	"github.com/IBAX-io/go-ibax/packages/conf"
)

var (
	buildBranch = ""
	buildDate   = ""
	commitHash  = ""
)

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
	Use:   "go-ibax",
	Short: "ibax application",
}

func init() {
	rootCmd.AddCommand(
		generateFirstBlockCmd,
		generateKeysCmd,
		initDatabaseCmd,
		rollbackCmd,
		startCmd,
		configCmd,
		stopNetworkCmd,
		versionCmd,
	)

	consts.BuildInfo = func() string {
		if buildBranch == "" {
			return fmt.Sprintf("branch.%s commit.%s time.%s", "unknown", "unknown", "unknown")
		}
		return fmt.Sprintf("branch.%s commit.%s time.%s", buildBranch, commitHash, buildDate)
	}()
	// This flags are visible for all child commands
	rootCmd.PersistentFlags().StringVar(&conf.Config.ConfigPath, "config", defautConfigPath(), "filepath to config.toml")
}

// Execute executes rootCmd command.
// This is called by main.main(). It only needs to happen once to the rootCmd
func Execute() {
	if err := rootCmd.Execute(); err != nil {
		log.WithError(err).Fatal("Executing root command")
	}
}

func defautConfigPath() string {
	//p, err := os.Getwd()
	//if err != nil {
	//	log.WithError(err).Fatal("getting cur wd")
	//}
	//
	//return filepath.Join(p, "data", "config.toml")
	return filepath.Join("data", "config.toml")
}

// Load the configuration from file
func loadConfig(cmd *cobra.Command, args []string) {
	err := conf.LoadConfig(conf.Config.ConfigPath)
	if err != nil {
		log.WithError(err).Fatal("Loading config")
	}
}

func loadConfigWKey(cmd *cobra.Command, args []string) {
	loadConfig(cmd, args)
	err := conf.FillRuntimeKey()
	if err != nil {
		log.WithError(err).Fatal("Filling keys")
	}
}


================================================
FILE: cmd/start.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"time"

	"github.com/IBAX-io/go-ibax/packages/chain"
	"github.com/IBAX-io/go-ibax/packages/conf"

	"github.com/spf13/cobra"
)

// startCmd is starting node
var startCmd = &cobra.Command{
	Use:    "start",
	Short:  "Starting node",
	PreRun: loadConfigWKey,
	Run: func(cmd *cobra.Command, args []string) {
		chain.Start()
	},
}

func init() {
	time.Local = time.UTC
	startCmd.Flags().BoolVar(&conf.Config.TestRollBack, "testRollBack", false, "Starts special set of daemons")
	startCmd.Flags().BoolVar(&conf.Config.FuncBench, "funcBench", false, "Disable access checking in some built-in functions for benchmarks")
}


================================================
FILE: cmd/stopNetwork.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"os"
	"path/filepath"

	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/network"
	"github.com/IBAX-io/go-ibax/packages/network/tcpclient"

	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
)

var (
	addrsForStopping        []string
	stopNetworkCertFilepath string
)

// stopNetworkCmd represents the stopNetworkCmd command
var stopNetworkCmd = &cobra.Command{
	Use:    "stopNetwork",
	Short:  "Sending a special transaction to stop the network",
	PreRun: loadConfigWKey,
	Run: func(cmd *cobra.Command, args []string) {
		fp := filepath.Join(conf.Config.DirPathConf.KeysDir, stopNetworkCertFilepath)
		stopNetworkCert, err := os.ReadFile(fp)
		if err != nil {
			log.WithFields(log.Fields{"error": err, "type": consts.IOError, "filepath": fp}).Fatal("Reading cert data")
		}

		req := &network.StopNetworkRequest{
			Data: stopNetworkCert,
		}

		errCount := 0
		for _, addr := range addrsForStopping {
			if err := tcpclient.SendStopNetwork(addr, req); err != nil {
				log.WithFields(log.Fields{"error": err, "type": consts.NetworkError, "addr": addr}).Errorf("Sending request")
				errCount++
				continue
			}

			log.WithFields(log.Fields{"addr": addr}).Info("Sending request")
		}

		log.WithFields(log.Fields{
			"successful": len(addrsForStopping) - errCount,
			"failed":     errCount,
		}).Info("Complete")
	},
}

func init() {
	stopNetworkCmd.Flags().StringVar(&stopNetworkCertFilepath, "stopNetworkCert", "", "Filepath to certificate for network stopping")
	stopNetworkCmd.Flags().StringArrayVar(&addrsForStopping, "addr", []string{}, "Node address")
	stopNetworkCmd.MarkFlagRequired("stopNetworkCert")
	stopNetworkCmd.MarkFlagRequired("addr")
}


================================================
FILE: cmd/version.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package cmd

import (
	"fmt"

	"github.com/IBAX-io/go-ibax/packages/consts"

	"github.com/spf13/cobra"
)

// versionCmd represents the version command
var versionCmd = &cobra.Command{
	Use:   "version",
	Short: "Show version",
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println(consts.Version())
	},
}


================================================
FILE: go.mod
================================================
module github.com/IBAX-io/go-ibax

go 1.20

require (
	github.com/360EntSecGroup-Skylar/excelize v1.4.1
	github.com/BurntSushi/toml v1.3.2
	github.com/btcsuite/btcd v0.24.2
	github.com/btcsuite/btcd/btcec/v2 v2.3.4
	github.com/btcsuite/btcd/btcutil v1.1.6
	github.com/cactus/go-statsd-client/v5 v5.1.0
	github.com/centrifugal/gocent v2.2.0+incompatible
	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0
	github.com/didip/tollbooth v4.0.2+incompatible
	github.com/go-redis/redis v6.15.9+incompatible
	github.com/gobuffalo/fizz v1.14.4
	github.com/gogo/protobuf v1.3.2
	github.com/golang-jwt/jwt/v4 v4.5.0
	github.com/gorilla/handlers v1.5.1
	github.com/gorilla/mux v1.8.0
	github.com/gorilla/schema v1.2.0
	github.com/ochinchina/go-ini v1.0.1
	github.com/ochinchina/supervisord/config v0.0.0-20230719054037-813956ff6a67
	github.com/ochinchina/supervisord/process v0.0.0-20230719054037-813956ff6a67
	github.com/pkg/errors v0.9.1
	github.com/robfig/cron/v3 v3.0.1
	github.com/shopspring/decimal v1.3.1
	github.com/sirupsen/logrus v1.9.3
	github.com/spf13/cobra v1.7.0
	github.com/spf13/viper v1.16.0
	github.com/stretchr/testify v1.9.0
	github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
	github.com/theckman/go-flock v0.8.1
	github.com/tjfoc/gmsm v1.4.1
	github.com/vmihailenco/msgpack/v5 v5.3.5
	golang.org/x/crypto v0.23.0
	gorm.io/driver/postgres v1.5.2
	gorm.io/gorm v1.25.2
)

require (
	github.com/Masterminds/semver/v3 v3.2.1 // indirect
	github.com/aymerick/douceur v0.2.0 // indirect
	github.com/beorn7/perks v1.0.1 // indirect
	github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect
	github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect
	github.com/cespare/xxhash/v2 v2.3.0 // indirect
	github.com/davecgh/go-spew v1.1.1 // indirect
	github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect
	github.com/fatih/structs v1.1.0 // indirect
	github.com/felixge/httpsnoop v1.0.3 // indirect
	github.com/fsnotify/fsnotify v1.6.0 // indirect
	github.com/gobuffalo/flect v1.0.2 // indirect
	github.com/gobuffalo/github_flavored_markdown v1.1.4 // indirect
	github.com/gobuffalo/helpers v0.6.7 // indirect
	github.com/gobuffalo/plush/v4 v4.1.19 // indirect
	github.com/gobuffalo/tags/v3 v3.1.4 // indirect
	github.com/gobuffalo/validate/v3 v3.3.3 // indirect
	github.com/gofrs/flock v0.8.1 // indirect
	github.com/gofrs/uuid v4.4.0+incompatible // indirect
	github.com/golang/protobuf v1.5.4 // indirect
	github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
	github.com/gorilla/css v1.0.0 // indirect
	github.com/gorilla/rpc v1.2.0 // indirect
	github.com/hashicorp/go-envparse v0.1.0 // indirect
	github.com/hashicorp/hcl v1.0.0 // indirect
	github.com/inconshreveable/mousetrap v1.1.0 // indirect
	github.com/jackc/pgpassfile v1.0.0 // indirect
	github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
	github.com/jackc/pgx/v5 v5.4.2 // indirect
	github.com/jinzhu/inflection v1.0.0 // indirect
	github.com/jinzhu/now v1.1.5 // indirect
	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
	github.com/magiconair/properties v1.8.7 // indirect
	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
	github.com/microcosm-cc/bluemonday v1.0.25 // indirect
	github.com/mitchellh/mapstructure v1.5.0 // indirect
	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
	github.com/ochinchina/filechangemonitor v0.3.1 // indirect
	github.com/ochinchina/gorilla-xmlrpc v0.0.0-20171012055324-ecf2fe693a2c // indirect
	github.com/ochinchina/supervisord/events v0.0.0-20230719054037-813956ff6a67 // indirect
	github.com/ochinchina/supervisord/faults v0.0.0-20230719054037-813956ff6a67 // indirect
	github.com/ochinchina/supervisord/logger v0.0.0-20230719054037-813956ff6a67 // indirect
	github.com/ochinchina/supervisord/signals v0.0.0-20230719054037-813956ff6a67 // indirect
	github.com/ochinchina/supervisord/util v0.0.0-20230719054037-813956ff6a67 // indirect
	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
	github.com/pelletier/go-toml/v2 v2.0.9 // indirect
	github.com/pmezard/go-difflib v1.0.0 // indirect
	github.com/prometheus/client_golang v1.16.0 // indirect
	github.com/prometheus/client_model v0.4.0 // indirect
	github.com/prometheus/common v0.44.0 // indirect
	github.com/prometheus/procfs v0.11.1 // indirect
	github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 // indirect
	github.com/sergi/go-diff v1.3.1 // indirect
	github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d // indirect
	github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e // indirect
	github.com/spf13/afero v1.9.5 // indirect
	github.com/spf13/cast v1.5.1 // indirect
	github.com/spf13/jwalterweatherman v1.1.0 // indirect
	github.com/spf13/pflag v1.0.5 // indirect
	github.com/stretchr/objx v0.5.2 // indirect
	github.com/subosito/gotenv v1.4.2 // indirect
	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
	golang.org/x/net v0.24.0 // indirect
	golang.org/x/sync v0.7.0 // indirect
	golang.org/x/sys v0.20.0 // indirect
	golang.org/x/text v0.15.0 // indirect
	golang.org/x/time v0.5.0 // indirect
	google.golang.org/protobuf v1.34.2 // indirect
	gopkg.in/ini.v1 v1.67.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)


================================================
FILE: go.sum
================================================
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks=
github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A=
github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY=
github.com/btcsuite/btcd v0.24.2/go.mod h1:5C8ChTkl5ejr3WHj8tkQSCmydiMEPB0ZhQhehpq7Dgg=
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ=
github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE=
github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00=
github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c=
github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ=
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/cactus/go-statsd-client/v5 v5.1.0 h1:sbbdfIl9PgisjEoXzvXI1lwUKWElngsjJKaZeC021P4=
github.com/cactus/go-statsd-client/v5 v5.1.0/go.mod h1:COEvJ1E+/E2L4q6QE5CkjWPi4eeDw9maJBMIuMPBZbY=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/centrifugal/gocent v2.2.0+incompatible h1:49oQLm1CDojd8vgz2w5RrECgW3Ew+Z5muIQGIggI2Vk=
github.com/centrifugal/gocent v2.2.0+incompatible/go.mod h1:gtbj3+fMApCIcaGmGvk2BinwEauUtGeu8YZPLcedOvQ=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/didip/tollbooth v4.0.2+incompatible h1:fVSa33JzSz0hoh2NxpwZtksAzAgd7zjmGO20HCZtF4M=
github.com/didip/tollbooth v4.0.2+incompatible/go.mod h1:A9b0665CE6l1KmzpDws2++elm/CsuWBMa5Jv4WY0PEY=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gobuffalo/fizz v1.14.4 h1:8uume7joF6niTNWN582IQ2jhGTUoa9g1fiV/tIoGdBs=
github.com/gobuffalo/fizz v1.14.4/go.mod h1:9/2fGNXNeIFOXEEgTPJwiK63e44RjG+Nc4hfMm1ArGM=
github.com/gobuffalo/flect v0.3.0/go.mod h1:5pf3aGnsvqvCj50AVni7mJJF8ICxGZ8HomberC3pXLE=
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
github.com/gobuffalo/github_flavored_markdown v1.1.3/go.mod h1:IzgO5xS6hqkDmUh91BW/+Qxo/qYnvfzoz3A7uLkg77I=
github.com/gobuffalo/github_flavored_markdown v1.1.4 h1:WacrEGPXUDX+BpU1GM/Y0ADgMzESKNWls9hOTG1MHVs=
github.com/gobuffalo/github_flavored_markdown v1.1.4/go.mod h1:Vl9686qrVVQou4GrHRK/KOG3jCZOKLUqV8MMOAYtlso=
github.com/gobuffalo/helpers v0.6.7 h1:C9CedoRSfgWg2ZoIkVXgjI5kgmSpL34Z3qdnzpfNVd8=
github.com/gobuffalo/helpers v0.6.7/go.mod h1:j0u1iC1VqlCaJEEVkZN8Ia3TEzfj/zoXANqyJExTMTA=
github.com/gobuffalo/plush/v4 v4.1.16/go.mod h1:6t7swVsarJ8qSLw1qyAH/KbrcSTwdun2ASEQkOznakg=
github.com/gobuffalo/plush/v4 v4.1.19 h1:o0E5gEJw+ozkAwQoCeiaWC6VOU2lEmX+GhtGkwpqZ8o=
github.com/gobuffalo/plush/v4 v4.1.19/go.mod h1:WiKHJx3qBvfaDVlrv8zT7NCd3dEMaVR/fVxW4wqV17M=
github.com/gobuffalo/tags/v3 v3.1.4 h1:X/ydLLPhgXV4h04Hp2xlbI2oc5MDaa7eub6zw8oHjsM=
github.com/gobuffalo/tags/v3 v3.1.4/go.mod h1:ArRNo3ErlHO8BtdA0REaZxijuWnWzF6PUXngmMXd2I0=
github.com/gobuffalo/validate/v3 v3.3.3 h1:o7wkIGSvZBYBd6ChQoLxkz2y1pfmhbI4jNJYh6PuNJ4=
github.com/gobuffalo/validate/v3 v3.3.3/go.mod h1:YC7FsbJ/9hW/VjQdmXPvFqvRis4vrRYFxr69WiNZw6g=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk=
github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc=
github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/hashicorp/go-envparse v0.1.0 h1:bE++6bhIsNCPLvgDZkYqo3nA+/PFI51pkrHdmPSDFPY=
github.com/hashicorp/go-envparse v0.1.0/go.mod h1:OHheN1GoygLlAkTlXLXvAdnXdZxy8JUweQ1rAXx1xnc=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.4.2 h1:u1gmGDwbdRUZiwisBm/Ky2M14uQyUP65bG8+20nnyrg=
github.com/jackc/pgx/v5 v5.4.2/go.mod h1:q6iHT8uDNXWiFNOlRqJzBTaSH3+2xCXkokxHZC5qWFY=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50=
github.com/microcosm-cc/bluemonday v1.0.22/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg=
github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/ochinchina/filechangemonitor v0.3.1 h1:Fyt8iE44kFwmI3ncNWAi21GZnmRBrAUSlMunpcDlMjQ=
github.com/ochinchina/filechangemonitor v0.3.1/go.mod h1:OLRTJMpgb3yP1zBKA2g5GMYsKzJUoLq01lNOsReEzbQ=
github.com/ochinchina/go-ini v1.0.1 h1:qrKGrgxJjY+4H8aV7B2HPohShzHGrymW+/X1Gx933zU=
github.com/ochinchina/go-ini v1.0.1/go.mod h1:Tqs5+JmccLSNMX1KXbbyG/B3ro4J9uXVYC5U5VOeRE8=
github.com/ochinchina/gorilla-xmlrpc v0.0.0-20171012055324-ecf2fe693a2c h1:6xgMUqscagnZicBedm1h4T3q6IQHbrrZp7bker+toOI=
github.com/ochinchina/gorilla-xmlrpc v0.0.0-20171012055324-ecf2fe693a2c/go.mod h1:/gFmJ8Das0jFgYxzt/RkvAO62T/ZPcyTaZlOkEBu/jw=
github.com/ochinchina/supervisord/config v0.0.0-20220721095143-c2527852d28f/go.mod h1:jMN/SL0T6GCWWG/dD7Les9iPqjQ2OjEVyBWx8c9RJqI=
github.com/ochinchina/supervisord/config v0.0.0-20230719054037-813956ff6a67 h1:u5/DJWJrK2k7uRPo2Oex1xam15ZKlIaRfmfYugeECS4=
github.com/ochinchina/supervisord/config v0.0.0-20230719054037-813956ff6a67/go.mod h1:jMN/SL0T6GCWWG/dD7Les9iPqjQ2OjEVyBWx8c9RJqI=
github.com/ochinchina/supervisord/events v0.0.0-20220721095143-c2527852d28f/go.mod h1:I+vx/d8jVSVe0nmhaJUPuouUnhpfUUiUbDciSDViL5I=
github.com/ochinchina/supervisord/events v0.0.0-20230719054037-813956ff6a67 h1:hAS+XSoEc3szEJKdlbP1BFWIivUOyAnBfm5Ee9tL+cI=
github.com/ochinchina/supervisord/events v0.0.0-20230719054037-813956ff6a67/go.mod h1:I+vx/d8jVSVe0nmhaJUPuouUnhpfUUiUbDciSDViL5I=
github.com/ochinchina/supervisord/faults v0.0.0-20220721095143-c2527852d28f/go.mod h1:kReR3fnUfV2OHFESJ9IDriCTg/VU1D0cFfNPNOnMQCs=
github.com/ochinchina/supervisord/faults v0.0.0-20230719054037-813956ff6a67 h1:dqmuzSF/uRe55HEcgHN5PtuKJGNVqZ54K7ucbiGQePw=
github.com/ochinchina/supervisord/faults v0.0.0-20230719054037-813956ff6a67/go.mod h1:kReR3fnUfV2OHFESJ9IDriCTg/VU1D0cFfNPNOnMQCs=
github.com/ochinchina/supervisord/logger v0.0.0-20220721095143-c2527852d28f/go.mod h1:DPIKvK0KqJdneJKrAqfLNgONWZ3m4cRAi96PG0A7deg=
github.com/ochinchina/supervisord/logger v0.0.0-20230719054037-813956ff6a67 h1:Oi6D5XysnDTRo0Di3D+1MLfhNAjHmv/+eflPSOUFFOU=
github.com/ochinchina/supervisord/logger v0.0.0-20230719054037-813956ff6a67/go.mod h1:DPIKvK0KqJdneJKrAqfLNgONWZ3m4cRAi96PG0A7deg=
github.com/ochinchina/supervisord/process v0.0.0-20230719054037-813956ff6a67 h1:SHEZn3Qhc5SdhSAASQ9OCJuQGIT04HAmml1gIIEhVhU=
github.com/ochinchina/supervisord/process v0.0.0-20230719054037-813956ff6a67/go.mod h1:QUKHvTSxsiZN56GSHhWN59LNropTaL5cwHtu97pvsVY=
github.com/ochinchina/supervisord/signals v0.0.0-20220721095143-c2527852d28f/go.mod h1:o2x4RZxVWzKvgbSOv7G8z94pITwuweY+ZkITvp/VqGY=
github.com/ochinchina/supervisord/signals v0.0.0-20230719054037-813956ff6a67 h1:ULpyG32Ravk2wnbqhMosCXvvmToSm3bTwRCstZ121Ms=
github.com/ochinchina/supervisord/signals v0.0.0-20230719054037-813956ff6a67/go.mod h1:o2x4RZxVWzKvgbSOv7G8z94pITwuweY+ZkITvp/VqGY=
github.com/ochinchina/supervisord/util v0.0.0-20220721095143-c2527852d28f/go.mod h1:V/yb0hfd2ax3Pzn83yoxBxww4HLJ5AXYH+rQBCieqcU=
github.com/ochinchina/supervisord/util v0.0.0-20230719054037-813956ff6a67 h1:TGe+60SSuWJGK+N8PtsEEQ3VzfrdNjK5fColmRHau64=
github.com/ochinchina/supervisord/util v0.0.0-20230719054037-813956ff6a67/go.mod h1:V/yb0hfd2ax3Pzn83yoxBxww4HLJ5AXYH+rQBCieqcU=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0=
github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 h1:DE4LcMKyqAVa6a0CGmVxANbnVb7stzMmPkQiieyNmfQ=
github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d h1:yKm7XZV6j9Ev6lojP2XaIshpT4ymkqhMeSghO5Ps00E=
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e h1:qpG93cPwA5f7s/ZPBJnGOYQNK/vKsaDaseuKT5Asee8=
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/theckman/go-flock v0.8.1 h1:kTixuOsFBOtGYSTLRLWK6GOs1hk/8OD11sR1pDd0dl4=
github.com/theckman/go-flock v0.8.1/go.mod h1:kjuth3y9VJ2aNlkNEO99G/8lp9fMIKaGyBmh84IBheM=
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0=
gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8=
gorm.io/gorm v1.25.2 h1:gs1o6Vsa+oVKG/a9ElL3XgyGfghFfkKA2SInQaCyMho=
gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=


================================================
FILE: main.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
package main

import (
	"runtime"

	"github.com/IBAX-io/go-ibax/cmd"
)

func main() {
	runtime.LockOSThread()
	cmd.Execute()
}


================================================
FILE: packages/api/api.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"encoding/hex"
	"encoding/json"
	"net/http"
	"strings"

	"github.com/gorilla/schema"

	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/types"

	log "github.com/sirupsen/logrus"
)

const (
	multipartBuf      = 100000 // the buffer size for ParseMultipartForm
	multipartFormData = "multipart/form-data"
	contentType       = "Content-Type"
)

type Mode struct {
	EcosystemGetter   types.EcosystemGetter
	ContractRunner    types.SmartContractRunner
	ClientTxProcessor types.ClientTxPreprocessor
}

// Client represents data of client
type Client struct {
	KeyID         int64
	AccountID     string
	EcosystemID   int64
	EcosystemName string
	RoleID        int64
}

func (c *Client) Prefix() string {
	return converter.Int64ToStr(c.EcosystemID)
}

func jsonResponse(w http.ResponseWriter, v any) {
	jsonResult, err := json.Marshal(v)
	if err != nil {
		log.WithFields(log.Fields{"type": consts.JSONMarshallError, "error": err}).Error("marhsalling http response to json")
		errorResponse(w, err, http.StatusInternalServerError)
		return
	}
	w.Header().Set("Content-Type", "application/json; charset=utf-8")
	w.Write(jsonResult)
}

func errorResponse(w http.ResponseWriter, err error, code ...int) {
	et, ok := err.(errType)
	if !ok {
		et = errServer
		et.Message = err.Error()
	}

	w.Header().Set("X-Content-Type-Options", "nosniff")
	if len(code) == 0 {
		w.WriteHeader(et.Status)
	} else {
		w.WriteHeader(code[0])
	}

	jsonResponse(w, et)
}

type formValidator interface {
	Validate(r *http.Request) error
}

type nopeValidator struct{}

func (np nopeValidator) Validate(r *http.Request) error {
	return nil
}

func parseForm(r *http.Request, f formValidator) (err error) {
	if isMultipartForm(r) {
		err = r.ParseMultipartForm(multipartBuf)
	} else {
		err = r.ParseForm()
	}
	if err != nil {
		return
	}

	decoder := schema.NewDecoder()
	decoder.IgnoreUnknownKeys(true)
	if err := decoder.Decode(f, r.Form); err != nil {
		return err
	}
	return f.Validate(r)
}

func isMultipartForm(r *http.Request) bool {
	return strings.HasPrefix(r.Header.Get(contentType), multipartFormData)
}

type hexValue struct {
	value []byte
}

func (hv hexValue) Bytes() []byte {
	return hv.value
}

func (hv *hexValue) UnmarshalText(v []byte) (err error) {
	hv.value, err = hex.DecodeString(string(v))
	return
}


================================================
FILE: packages/api/api_test.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"bytes"
	"encoding/hex"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"net/url"
	"os"
	"strconv"
	"strings"
	"testing"
	"time"

	"github.com/IBAX-io/go-ibax/packages/common/crypto"
	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/transaction"
	"github.com/IBAX-io/go-ibax/packages/types"
	"github.com/stretchr/testify/assert"
)

var apiAddress = "http://localhost:7079"

var (
	gAuth             string
	gAddress          string
	gPrivate, gPublic string
)

// PrivateToPublicHex returns the hex public key for the specified hex private key.
func PrivateToPublicHex(hexkey string) (string, error) {
	key, err := hex.DecodeString(hexkey)
	if err != nil {
		return ``, fmt.Errorf("Decode hex error")
	}
	pubKey, err := crypto.PrivateToPublic(key)
	if err != nil {
		return ``, err
	}
	return crypto.PubToHex(pubKey), nil
}

func sendRawRequest(rtype, url string, form *url.Values) ([]byte, error) {
	client := &http.Client{}
	var ioform io.Reader
	if form != nil {
		ioform = strings.NewReader(form.Encode())
	}
	req, err := http.NewRequest(rtype, apiAddress+consts.ApiPath+url, ioform)
	if err != nil {
		return nil, err
	}
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

	if len(gAuth) > 0 {
		req.Header.Set("Authorization", jwtPrefix+gAuth)
	}
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}

	defer resp.Body.Close()
	data, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}

	if resp.StatusCode != http.StatusOK {
		return nil, fmt.Errorf(`%d %s`, resp.StatusCode, strings.TrimSpace(string(data)))
	}

	return data, nil
}

func sendRequest(rtype, url string, form *url.Values, v any) error {
	data, err := sendRawRequest(rtype, url, form)
	if err != nil {
		return err
	}

	return json.Unmarshal(data, v)
}

func sendGet(url string, form *url.Values, v any) error {
	return sendRequest("GET", url, form, v)
}

func sendPost(url string, form *url.Values, v any) error {
	return sendRequest("POST", url, form, v)
}

func keyLogin(state int64) (err error) {
	var (
		key, sign []byte
	)

	key, err = os.ReadFile(`key`)
	if err != nil {
		return
	}
	if len(key) > 64 {
		key = key[:64]
	}
	var ret getUIDResult
	err = sendGet(`getuid`, nil, &ret)
	if err != nil {
		return
	}
	gAuth = ret.Token
	if len(ret.UID) == 0 {
		return fmt.Errorf(`getuid has returned empty uid`)
	}

	var pub string

	sign, err = crypto.SignString(string(key), `LOGIN`+ret.NetworkID+ret.UID)
	if err != nil {
		return
	}
	pub, err = PrivateToPublicHex(string(key))
	if err != nil {
		return
	}
	form := url.Values{"pubkey": {pub}, "signature": {hex.EncodeToString(sign)},
		`ecosystem`: {converter.Int64ToStr(state)}, "role_id": {"0"}}
	var logret loginResult
	err = sendPost(`login`, &form, &logret)
	if err != nil {
		return
	}
	gAddress = logret.Account
	gPrivate = string(key)
	gPublic, err = PrivateToPublicHex(gPrivate)
	gAuth = logret.Token
	if err != nil {
		return
	}
	return
}

func keyLoginToken(state int64) (err error) {
	var (
		key, sign []byte
	)

	str, _ := os.Getwd()
	fmt.Println("dir " + str)
	key, err = os.ReadFile(`key`)
	if err != nil {
		return
	}
	if len(key) > 64 {
		key = key[:64]
	}
	var ret getUIDResult
	err = sendGet(`getuid`, nil, &ret)
	if err != nil {
		return
	}
	gAuth = ret.Token
	if len(ret.UID) == 0 {
		return fmt.Errorf(`getuid has returned empty uid`)
	}

	var pub string

	sign, err = crypto.SignString(string(key), `LOGIN`+ret.NetworkID+ret.UID)
	if err != nil {
		return
	}
	pub, err = PrivateToPublicHex(string(key))
	if err != nil {
		return
	}
	form := url.Values{"pubkey": {pub}, "signature": {hex.EncodeToString(sign)},
		`ecosystem`: {converter.Int64ToStr(state)}, "role_id": {"0"}, "expire": {"5"}}
	var logret loginResult
	err = sendPost(`login`, &form, &logret)
	if err != nil {
		return
	}
	gAddress = logret.Account
	gPrivate = string(key)
	gPublic, err = PrivateToPublicHex(gPrivate)
	gAuth = logret.Token
	if err != nil {
		return
	}
	return
}

func keyLoginex(state int64, m ...string) (err error) {
	var (
		key, sign []byte
	)

	key, err = os.ReadFile(`key` + m[0])
	if err != nil {
		return
	}
	if len(key) > 64 {
		key = key[:64]
	}
	var ret getUIDResult
	err = sendGet(`getuid`, nil, &ret)
	if err != nil {
		return
	}
	gAuth = ret.Token
	if len(ret.UID) == 0 {
		return fmt.Errorf(`getuid has returned empty uid`)
	}

	var pub string

	sign, err = crypto.SignString(string(key), `LOGIN`+ret.NetworkID+ret.UID)
	if err != nil {
		return
	}
	pub, err = PrivateToPublicHex(string(key))
	if err != nil {
		return
	}
	form := url.Values{"pubkey": {pub}, "signature": {hex.EncodeToString(sign)},
		`ecosystem`: {converter.Int64ToStr(state)}, "role_id": {"0"}}
	var logret loginResult
	err = sendPost(`login`, &form, &logret)
	if err != nil {
		return
	}
	gAddress = logret.Account
	gPrivate = string(key)
	gPublic, err = PrivateToPublicHex(gPrivate)
	gAuth = logret.Token
	if err != nil {
		return
	}
	return
}

func waitTx(hash string) (blockid int64, penalty int64, err error) {
	data, err := json.Marshal(&txstatusRequest{
		Hashes: []string{hash},
	})
	if err != nil {
		return
	}

	for i := 0; i < 100; i++ {
		var multiRet multiTxStatusResult
		err = sendPost(`txstatus`, &url.Values{
			"data": {string(data)},
		}, &multiRet)
		if err != nil {
			return
		}

		ret := multiRet.Results[hash]
		var errtext []byte
		if len(ret.BlockID) > 0 {
			blockid = converter.StrToInt64(ret.BlockID)
			penalty = ret.Penalty
			if ret.Penalty == 1 {
				errtext, err = json.Marshal(ret.Message)
				if err != nil {
					return
				}
				err = errors.New(string(errtext))
				return
			} else {
				err = fmt.Errorf(ret.Result)
				return
			}
		}
		if ret.Message != nil {
			errtext, err = json.Marshal(ret.Message)
			if err != nil {
				return
			}
			err = errors.New(string(errtext))
			return
		}
		time.Sleep(time.Second)
	}

	return 0, 0, fmt.Errorf(`TxStatus timeout`)
}

func randName(prefix string) string {
	return fmt.Sprintf(`%s%d`, prefix, time.Now().Unix())
}

type getter interface {
	Get(string) string
}

type contractParams map[string]any

func (cp *contractParams) Get(key string) string {
	if _, ok := (*cp)[key]; !ok {
		return ""
	}
	return fmt.Sprintf("%v", (*cp)[key])
}

func (cp *contractParams) GetRaw(key string) any {
	return (*cp)[key]
}

func postTxResult(name string, form getter) (id int64, msg string, err error) {
	var contract getContractResult
	if err = sendGet("contract/"+name, nil, &contract); err != nil {
		return
	}

	params := make(map[string]any)
	for _, field := range contract.Fields {
		name := field.Name
		value := form.Get(name)

		if len(value) == 0 {
			continue
		}

		switch field.Type {
		case "bool":
			params[name], err = strconv.ParseBool(value)
		case "int", "address":
			params[name], err = strconv.ParseInt(value, 10, 64)
		case "float":
			params[name], err = strconv.ParseFloat(value, 64)
		case "array":
			var v any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "map":
			var v map[string]any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "string", "money":
			params[name] = value
		case "file", "bytes":
			if cp, ok := form.(*contractParams); !ok {
				err = fmt.Errorf("Form is not *contractParams type")
			} else {
				params[name] = cp.GetRaw(name)
			}
		}

		if err != nil {
			err = fmt.Errorf("Parse param '%s': %s", name, err)
			return
		}
	}

	var privateKey, publicKey []byte
	if privateKey, err = hex.DecodeString(gPrivate); err != nil {
		return
	}
	if publicKey, err = crypto.PrivateToPublic(privateKey); err != nil {
		return
	}

	data, hash, err := transaction.NewTransactionInProc(types.SmartTransaction{
		Header: &types.Header{
			ID:          int(contract.ID),
			EcosystemID: 1,
			Time:        time.Now().Unix(),
			KeyID:       crypto.Address(publicKey),
			NetworkID:   conf.Config.LocalConf.NetworkID,
		},
		Params: params,
		Lang:   "en",
	}, privateKey)
	if err != nil {
		return 0, "", err
	}

	ret := &sendTxResult{}
	err = sendMultipart("sendTx", map[string][]byte{
		hex.EncodeToString(hash): data,
	}, &ret)
	if err != nil {
		return
	}

	if len(form.Get("nowait")) > 0 {
		return
	}
	id, penalty, err := waitTx(ret.Hashes[hex.EncodeToString(hash)])
	if id != 0 && err != nil {
		if penalty == 1 {
			return
		}
		msg = err.Error()
		err = nil
	}

	return
}

func postTxResultMultipart(name string, form getter) (id int64, msg string, err error) {
	var contract getContractResult
	if err = sendGet("contract/"+name, nil, &contract); err != nil {
		return
	}

	params := make(map[string]any)
	for _, field := range contract.Fields {
		name := field.Name
		value := form.Get(name)

		if len(value) == 0 {
			continue
		}

		switch field.Type {
		case "bool":
			params[name], err = strconv.ParseBool(value)
		case "int", "address":
			params[name], err = strconv.ParseInt(value, 10, 64)
		case "float":
			params[name], err = strconv.ParseFloat(value, 64)
		case "array":
			var v any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "map":
			var v map[string]any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "string", "money":
			params[name] = value
		case "file", "bytes":
			if cp, ok := form.(*contractParams); !ok {
				err = fmt.Errorf("Form is not *contractParams type")
			} else {
				params[name] = cp.GetRaw(name)
			}
		}

		if err != nil {
			err = fmt.Errorf("Parse param '%s': %s", name, err)
			return
		}
	}

	var privateKey, publicKey []byte
	if privateKey, err = hex.DecodeString(gPrivate); err != nil {
		return
	}
	if publicKey, err = crypto.PrivateToPublic(privateKey); err != nil {
		return
	}
	arrData := make(map[string][]byte)

	for i := 0; i < 1; i++ {
		conname := crypto.RandSeq(10)
		params["ApplicationId"] = int64(1)
		params["Conditions"] = "1"
		//params["TokenEcosystem"] = int64(2)
		params["Value"] = fmt.Sprintf(`contract rnd%v%d  { action { }}`, conname, i)
		expedite := strconv.Itoa(1)
		data, txhash, _ := transaction.NewTransactionInProc(types.SmartTransaction{
			Header: &types.Header{
				ID:          int(contract.ID),
				Time:        time.Now().Unix(),
				EcosystemID: 1,
				KeyID:       crypto.Address(publicKey),
				NetworkID:   conf.Config.LocalConf.NetworkID,
			},
			Params:   params,
			Expedite: expedite,
		}, privateKey)
		arrData[fmt.Sprintf("%x", txhash)] = data
		fmt.Println(fmt.Sprintf("%x", txhash))
	}
	ret := &sendTxResult{}
	err = sendMultipart("sendTx", arrData, &ret)
	//err = sendMultipart("sendTx", map[string][]byte{
	//	"data": data,
	//}, &ret)
	if err != nil {
		return
	}

	if len(form.Get("nowait")) > 0 {
		return
	}

	//var ids, ps []int64
	//
	//for s := range arrData {
	//	id, penalty, err := waitTx(ret.Hashes[s])
	//	ids = append(ids, id)
	//	ps = append(ps, penalty)
	//	if id != 0 && err != nil {
	//		if penalty == 1 {
	//			//return
	//		}
	//		msg = err.Error()
	//		err = nil
	//	}
	//}
	//fmt.Println(ids, ps)

	return
}

func postSignTxResult(name string, form getter) (id int64, msg string, err error) {
	var contract getContractResult
	if err = sendGet("contract/"+name, nil, &contract); err != nil {
		return
	}

	params := make(map[string]any)
	for _, field := range contract.Fields {
		name := field.Name
		value := form.Get(name)

		if len(value) == 0 {
			continue
		}

		switch field.Type {
		case "bool":
			params[name], err = strconv.ParseBool(value)
		case "int", "address":
			params[name], err = strconv.ParseInt(value, 10, 64)
		case "float":
			params[name], err = strconv.ParseFloat(value, 64)
		case "array":
			var v any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "map":
			var v map[string]any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "string", "money":
			params[name] = value
		case "file", "bytes":
			if cp, ok := form.(*contractParams); !ok {
				err = fmt.Errorf("Form is not *contractParams type")
			} else {
				params[name] = cp.GetRaw(name)
			}
		}

		if err != nil {
			err = fmt.Errorf("Parse param '%s': %s", name, err)
			return
		}
	}

	var privateKey, publicKey []byte
	if privateKey, err = hex.DecodeString(gPrivate); err != nil {
		return
	}
	if publicKey, err = crypto.PrivateToPublic(privateKey); err != nil {
		return
	}

	data, _, err := transaction.NewTransactionInProc(types.SmartTransaction{
		Header: &types.Header{
			ID:          int(contract.ID),
			EcosystemID: 1,
			Time:        time.Now().Unix(),
			KeyID:       crypto.Address(publicKey),
			NetworkID:   conf.Config.LocalConf.NetworkID,
		},
		Params: params,
	}, privateKey)
	if err != nil {
		return 0, "", err
	}

	ret := &sendTxResult{}
	err = sendMultipart("sendSignTx", map[string][]byte{
		"data": data,
	}, &ret)
	if err != nil {
		return
	}

	if len(form.Get("nowait")) > 0 {
		return
	}
	id, penalty, err := waitTx(ret.Hashes["data"])
	if id != 0 && err != nil {
		if penalty == 1 {
			return
		}
		msg = err.Error()
		err = nil
	}
	return
}

func postTxResult2(name string, form getter) (id int64, msg string, err error) {
	var contract getContractResult
	if err = sendGet("contract/"+name, nil, &contract); err != nil {
		return
	}

	params := make(map[string]any)
	for _, field := range contract.Fields {
		name := field.Name
		value := form.Get(name)

		if len(value) == 0 {
			continue
		}

		switch field.Type {
		case "bool":
			params[name], err = strconv.ParseBool(value)
		case "int", "address":
			params[name], err = strconv.ParseInt(value, 10, 64)
		case "float":
			params[name], err = strconv.ParseFloat(value, 64)
		case "array":
			var v any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "map":
			var v map[string]any
			err = json.Unmarshal([]byte(value), &v)
			params[name] = v
		case "string", "money":
			params[name] = value
		case "file", "bytes":
			if cp, ok := form.(*contractParams); !ok {
				err = fmt.Errorf("Form is not *contractParams type")
			} else {
				params[name] = cp.GetRaw(name)
			}
		}

		if err != nil {
			err = fmt.Errorf("Parse param '%s': %s", name, err)
			return
		}
	}

	var privateKey, publicKey []byte
	if privateKey, err = hex.DecodeString(gPrivate); err != nil {
		return
	}
	if publicKey, err = crypto.PrivateToPublic(privateKey); err != nil {
		return
	}

	data, _, err := transaction.NewTransactionInProc(types.SmartTransaction{
		Header: &types.Header{
			ID:          int(contract.ID),
			EcosystemID: 2,
			Time:        time.Now().Unix(),
			KeyID:       crypto.Address(publicKey),
			NetworkID:   conf.Config.LocalConf.NetworkID,
		},
		Params: params,
	}, privateKey)
	if err != nil {
		return 0, "", err
	}

	ret := &sendTxResult{}
	err = sendMultipart("sendTx", map[string][]byte{
		"data": data,
	}, &ret)
	if err != nil {
		return
	}

	if len(form.Get("nowait")) > 0 {
		return
	}
	id, penalty, err := waitTx(ret.Hashes["data"])
	if id != 0 && err != nil {
		if penalty == 1 {
			return
		}
		msg = err.Error()
		err = nil
	}
	return
}

func RawToString(input json.RawMessage) string {
	out := strings.Trim(string(input), `"`)
	return strings.Replace(out, `\"`, `"`, -1)
}

func postTx(txname string, form *url.Values) error {
	_, _, err := postTxResult(txname, form)
	return err
}

func postTxMultipart(txname string, form *url.Values) error {
	_, _, err := postTxResultMultipart(txname, form)
	return err
}

func postTransferSelfTxMultipart(form *url.Values) error {
	_, _, err := postTransferSelfTxResult(form)
	return err
}

func postUTXOTxMultipart(form *url.Values) error {
	_, _, err := postUTXOTxResult(form)
	return err
}

func postTransferSelfTxResult(form getter) (id int64, msg string, err error) {

	var privateKey, publicKey []byte
	if privateKey, err = hex.DecodeString(gPrivate); err != nil {
		return
	}
	if publicKey, err = crypto.PrivateToPublic(privateKey); err != nil {
		return
	}

	data, _, err := transaction.NewTransactionInProc(types.SmartTransaction{
		Header: &types.Header{
			ID:          int(1),
			EcosystemID: 1,
			Time:        time.Now().Unix(),
			KeyID:       crypto.Address(publicKey),
			NetworkID:   conf.Config.LocalConf.NetworkID,
		},
		TransferSelf: &types.TransferSelf{
			Value: "1000000000000000000",
			//Asset:  "IBAX",
			Source: "UTXO",
			Target: "Account",
		},
	}, privateKey)
	if err != nil {
		return 0, "", err
	}

	ret := &sendTxResult{}
	err = sendMultipart("sendTx", map[string][]byte{
		"data": data,
	}, &ret)
	if err != nil {
		return
	}

	if len(form.Get("nowait")) > 0 {
		return
	}
	id, penalty, err := waitTx(ret.Hashes["data"])
	if id != 0 && err != nil {
		if penalty == 1 {
			return
		}
		msg = err.Error()
		err = nil
	}
	return
}

func postUTXOTxResult(form getter) (id int64, msg string, err error) {

	var privateKey, publicKey []byte
	if privateKey, err = hex.DecodeString(gPrivate); err != nil {
		return
	}
	if publicKey, err = crypto.PrivateToPublic(privateKey); err != nil {
		return
	}

	data, _, err := transaction.NewTransactionInProc(types.SmartTransaction{
		Header: &types.Header{
			ID:          int(1),
			EcosystemID: 1,
			Time:        time.Now().Unix(),
			KeyID:       crypto.Address(publicKey),
			NetworkID:   conf.Config.LocalConf.NetworkID,
		},
		UTXO: &types.UTXO{
			Value: "1000000000000000",
			ToID:  -8055926748644556208,
		},
	}, privateKey)
	if err != nil {
		return 0, "", err
	}

	ret := &sendTxResult{}
	err = sendMultipart("sendTx", map[string][]byte{
		"data": data,
	}, &ret)
	if err != nil {
		return
	}

	if len(form.Get("nowait")) > 0 {
		return
	}
	id, penalty, err := waitTx(ret.Hashes["data"])
	if id != 0 && err != nil {
		if penalty == 1 {
			return
		}
		msg = err.Error()
		err = nil
	}
	return
}

func postSignTx(txname string, form *url.Values) error {
	_, _, err := postSignTxResult(txname, form)
	return err
}

func cutErr(err error) string {
	out := err.Error()
	if off := strings.IndexByte(out, '('); off != -1 {
		out = out[:off]
	}
	return strings.TrimSpace(out)
}

func TestGetAvatar(t *testing.T) {

	err := keyLogin(1)
	assert.NoError(t, err)

	url := `http://localhost:7079` + consts.ApiPath + "avatar/-1744264011260937456"
	req, err := http.NewRequest(http.MethodGet, url, nil)
	assert.NoError(t, err)

	if len(gAuth) > 0 {
		req.Header.Set("Authorization", jwtPrefix+gAuth)
	}

	cli := http.DefaultClient
	resp, err := cli.Do(req)
	assert.NoError(t, err)

	defer resp.Body.Close()
	mime := resp.Header.Get("Content-Type")
	expectedMime := "image/png"
	assert.Equal(t, expectedMime, mime, "content type must be a '%s' but returns '%s'", expectedMime, mime)
}

func sendMultipart(url string, files map[string][]byte, v any) error {
	body := new(bytes.Buffer)
	writer := multipart.NewWriter(body)

	for key, data := range files {
		part, err := writer.CreateFormFile(key, key)
		if err != nil {
			return err
		}
		if _, err := part.Write(data); err != nil {
			return err
		}
	}

	if err := writer.Close(); err != nil {
		return err
	}

	req, err := http.NewRequest("POST", apiAddress+consts.ApiPath+url, body)
	if err != nil {
		return err
	}

	req.Header.Set("Content-Type", writer.FormDataContentType())

	if len(gAuth) > 0 {
		req.Header.Set("Authorization", jwtPrefix+gAuth)
	}

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return err
	}
	defer resp.Body.Close()

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		return err
	}

	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf(`%d %s`, resp.StatusCode, strings.TrimSpace(string(data)))
	}

	return json.Unmarshal(data, &v)
}


================================================
FILE: packages/api/app_content.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"net/http"

	"github.com/gorilla/mux"

	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"

	log "github.com/sirupsen/logrus"
)

type appContentResult struct {
	Snippets  []sqldb.Snippet  `json:"snippets"`
	Pages     []sqldb.Page     `json:"pages"`
	Contracts []sqldb.Contract `json:"contracts"`
}

func (m Mode) getAppContentHandler(w http.ResponseWriter, r *http.Request) {
	form := &appParamsForm{
		ecosystemForm: ecosystemForm{
			Validator: m.EcosystemGetter,
		},
	}

	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	logger := getLogger(r)
	params := mux.Vars(r)

	sni := &sqldb.Snippet{}
	p := &sqldb.Page{}
	c := &sqldb.Contract{}
	appID := converter.StrToInt64(params["appID"])
	ecosystemID := converter.StrToInt64(form.EcosystemPrefix)

	snippets, err := sni.GetByApp(appID, ecosystemID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("Getting block interfaces by appID")
		errorResponse(w, err)
		return
	}

	pages, err := p.GetByApp(appID, ecosystemID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("Getting pages by appID")
		errorResponse(w, err)
		return
	}

	contracts, err := c.GetByApp(appID, ecosystemID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("Getting pages by appID")
		errorResponse(w, err)
		return
	}

	jsonResponse(w, &appContentResult{
		Snippets:  snippets,
		Pages:     pages,
		Contracts: contracts,
	})
}


================================================
FILE: packages/api/app_content_test.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestAppContent(t *testing.T) {
	assert.NoError(t, keyLogin(1))

	var ret appContentResult
	err := sendGet(`appcontent/1`, nil, &ret)
	if err != nil {
		t.Error(err)
		return
	}

	if len(ret.Snippets) == 0 {
		t.Error("incorrect snippets count")
	}

	if len(ret.Contracts) == 0 {
		t.Error("incorrect contracts count")
	}

	if len(ret.Pages) == 0 {
		t.Error("incorrent pages count")
	}
}


================================================
FILE: packages/api/appparam.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"net/http"

	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"

	"github.com/gorilla/mux"
	log "github.com/sirupsen/logrus"
)

func (m Mode) GetAppParamHandler(w http.ResponseWriter, r *http.Request) {
	logger := getLogger(r)

	form := &ecosystemForm{
		Validator: m.EcosystemGetter,
	}
	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	params := mux.Vars(r)

	ap := &sqldb.AppParam{}
	ap.SetTablePrefix(form.EcosystemPrefix)
	name := params["name"]
	found, err := ap.Get(nil, converter.StrToInt64(params["appID"]), name)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("Getting app parameter by name")
		errorResponse(w, err)
		return
	}
	if !found {
		logger.WithFields(log.Fields{"type": consts.NotFound, "key": name}).Debug("app parameter not found")
		errorResponse(w, errParamNotFound.Errorf(name))
		return
	}

	jsonResponse(w, &paramResult{
		ID:         converter.Int64ToStr(ap.ID),
		Name:       ap.Name,
		Value:      ap.Value,
		Conditions: ap.Conditions,
	})
}


================================================
FILE: packages/api/appparams.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"net/http"

	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"

	"github.com/gorilla/mux"

	log "github.com/sirupsen/logrus"
)

type appParamsResult struct {
	App  string        `json:"app_id"`
	List []paramResult `json:"list"`
}

type appParamsForm struct {
	ecosystemForm
	paramsForm
}

func (f *appParamsForm) Validate(r *http.Request) error {
	return f.ecosystemForm.Validate(r)
}

func (m Mode) getAppParamsHandler(w http.ResponseWriter, r *http.Request) {
	form := &appParamsForm{
		ecosystemForm: ecosystemForm{
			Validator: m.EcosystemGetter,
		},
	}

	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	params := mux.Vars(r)
	logger := getLogger(r)

	ap := &sqldb.AppParam{}
	ap.SetTablePrefix(form.EcosystemPrefix)

	list, err := ap.GetAllAppParameters(converter.StrToInt64(params["appID"]), nil, nil, nil)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("Getting all app parameters")
	}

	result := &appParamsResult{
		App:  params["appID"],
		List: make([]paramResult, 0),
	}

	acceptNames := form.AcceptNames()
	for _, item := range list {
		if len(acceptNames) > 0 && !acceptNames[item.Name] {
			continue
		}
		result.List = append(result.List, paramResult{
			ID:         converter.Int64ToStr(item.ID),
			Name:       item.Name,
			Value:      item.Value,
			Conditions: item.Conditions,
		})
	}

	jsonResponse(w, result)
}


================================================
FILE: packages/api/auth.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"errors"
	"fmt"
	"net/http"
	"strings"

	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/types"

	"github.com/golang-jwt/jwt/v4"
)

var (
	jwtSecret       []byte
	jwtPrefix       = "Bearer "
	jwtExpire       = 28800 // By default, seconds
	jwtrefeshExpire = 600   // By default, seconds
	//jwtrefeshExpire = 10   // By default, seconds  test

	errJWTAuthValue      = errors.New("wrong authorization value")
	errEcosystemNotFound = errors.New("ecosystem not found")
)

// JWTClaims is storing jwt claims
type JWTClaims struct {
	UID         string `json:"uid,omitempty"`
	EcosystemID string `json:"ecosystem_id,omitempty"`
	KeyID       string `json:"key_id,omitempty"`
	AccountID   string `json:"account_id,omitempty"`
	RoleID      string `json:"role_id,omitempty"`
	jwt.RegisteredClaims
}

func generateJWTToken(claims JWTClaims) (string, error) {
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString(jwtSecret)
}

func parseJWTToken(header string) (*jwt.Token, error) {
	if len(header) == 0 {
		return nil, nil
	}

	if strings.HasPrefix(header, jwtPrefix) {
		header = header[len(jwtPrefix):]
	} else {
		return nil, errJWTAuthValue
	}

	return jwt.ParseWithClaims(header, &JWTClaims{}, func(token *jwt.Token) (any, error) {
		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
			return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
		}
		return []byte(jwtSecret), nil
	})
}

func getClientFromToken(token *jwt.Token, ecosysNameService types.EcosystemGetter) (*Client, error) {
	claims, ok := token.Claims.(*JWTClaims)
	if !ok {
		return nil, nil
	}
	if len(claims.KeyID) == 0 {
		return nil, nil
	}

	client := &Client{
		EcosystemID: converter.StrToInt64(claims.EcosystemID),
		KeyID:       converter.StrToInt64(claims.KeyID),
		AccountID:   claims.AccountID,
		RoleID:      converter.StrToInt64(claims.RoleID),
	}

	sID := converter.StrToInt64(claims.EcosystemID)
	name, err := ecosysNameService.GetEcosystemName(sID)
	if err != nil {
		return nil, err
	}

	client.EcosystemName = name
	return client, nil
}

type authStatusResponse struct {
	IsActive  bool  `json:"active"`
	ExpiresAt int64 `json:"exp,omitempty"`
}

func getAuthStatus(w http.ResponseWriter, r *http.Request) {
	result := new(authStatusResponse)
	defer jsonResponse(w, result)

	token := getToken(r)
	if token == nil {
		return
	}

	claims, ok := token.Claims.(*JWTClaims)
	if !ok {
		return
	}

	result.IsActive = true
	result.ExpiresAt = claims.ExpiresAt.Unix()
}

func InitJwtSecret(secret []byte) {
	if secret == nil {
		panic("jwt secret invalid")
	}
	jwtSecret = secret
}


================================================
FILE: packages/api/balance.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"net/http"

	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"
	"github.com/gorilla/mux"
	"github.com/shopspring/decimal"
	log "github.com/sirupsen/logrus"
)

type balanceResult struct {
	Amount      string `json:"amount"`
	Digits      int64  `json:"digits"`
	Total       string `json:"total"`
	Utxo        string `json:"utxo"`
	TokenSymbol string `json:"token_symbol"`
	TokenName   string `json:"token_name"`
}

func (m Mode) getBalanceHandler(w http.ResponseWriter, r *http.Request) {
	logger := getLogger(r)
	form := &ecosystemForm{
		Validator: m.EcosystemGetter,
	}

	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	params := mux.Vars(r)

	keyID := converter.StringToAddress(params["wallet"])
	if keyID == 0 {
		logger.WithFields(log.Fields{"type": consts.ConversionError, "value": params["wallet"]}).Error("converting wallet to address")
		errorResponse(w, errInvalidWallet.Errorf(params["wallet"]))
		return
	}

	key := &sqldb.Key{}
	key.SetTablePrefix(form.EcosystemID)
	_, err := key.Get(nil, keyID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting Key for wallet")
		errorResponse(w, err)
		return
	}
	accountAmount, _ := decimal.NewFromString(key.Amount)

	sp := &sqldb.SpentInfo{}
	utxoAmount, err := sp.GetBalance(nil, keyID, form.EcosystemID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting UTXO Key for wallet")
		errorResponse(w, err)
		return
	}
	total := utxoAmount.Add(accountAmount)

	eco := sqldb.Ecosystem{}
	_, err = eco.Get(nil, form.EcosystemID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting key balance token symbol")
		errorResponse(w, err)
		return
	}
	jsonResponse(w, &balanceResult{
		Amount:      key.Amount,
		Digits:      eco.Digits,
		Total:       total.String(),
		Utxo:        utxoAmount.String(),
		TokenSymbol: eco.TokenSymbol,
		TokenName:   eco.TokenName,
	})
}


================================================
FILE: packages/api/balance_test.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"fmt"
	"net/url"
	"testing"
)

func TestBalance(t *testing.T) {
	if err := keyLogin(1); err != nil {
		t.Error(err)
		return
	}
	var ret balanceResult
	err := sendGet(`balance/`+gAddress, nil, &ret)
	if err != nil {
		t.Error(err)
		return
	}
	if len(ret.Amount) < 10 {
		t.Error(`too low balance`, ret)
	}
	err = sendGet(`balance/3434341`, nil, &ret)
	if err != nil {
		t.Error(err)
		return
	}
	if len(ret.Amount) > 0 {
		t.Error(fmt.Errorf(`wrong balance %s`, ret.Amount))
		return
	}
}

func TestMoneyMoreSend(t *testing.T) {
	if err := keyLogin(1); err != nil {
		t.Error(err)
		return
	}
	//for i := 0; i < 100; i++ {
	//	form := url.Values{`Amount`: {`1`}, `Recipient`: {`1088-3972-0775-1704-9008`}, `Comment`: {`Test`}}
	//	if err := postSignTx(`TokensSend`, &form); err != nil {
	//		t.Error(err)
	//		return
	//	}
	//	time.Sleep(2 * time.Second)
	//}
	//for i := 0; i < 2; i++ {
	//	form := url.Values{`Amount`: {`-1`}, `Recipient`: {`1088-3972-0775-1704-9008`}, `Comment`: {`Test`}}
	//	if err := postTx(`TokensSend`, &form); err != nil {
	//		t.Error(err)
	//		return
	//	}
	//	time.Sleep(2 * time.Second)
	//}

	form := url.Values{`Amount`: {`-1`}, `Account`: {`0323-3625-0280-2110-5478`}, `Type`: {`1`}}
	if err := postTx(`AddAssignMember`, &form); err != nil {
		t.Error(err)
		return
	}

}


================================================
FILE: packages/api/block.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"bytes"
	"errors"
	"net/http"

	"github.com/IBAX-io/go-ibax/packages/block"
	"github.com/IBAX-io/go-ibax/packages/common"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"
	"github.com/IBAX-io/go-ibax/packages/types"
	"github.com/gorilla/mux"
	log "github.com/sirupsen/logrus"
)

type maxBlockResult struct {
	MaxBlockID int64 `json:"max_block_id"`
}

func getMaxBlockHandler(w http.ResponseWriter, r *http.Request) {
	logger := getLogger(r)

	block := &sqldb.BlockChain{}
	found, err := block.GetMaxBlock()
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting max block")
		errorResponse(w, err)
		return
	}
	if !found {
		logger.WithFields(log.Fields{"type": consts.NotFound}).Debug("last block not found")
		errorResponse(w, errNotFound)
		return
	}

	jsonResponse(w, &maxBlockResult{block.ID})
}

type blockInfoResult struct {
	Hash          []byte `json:"hash"`
	EcosystemID   int64  `json:"ecosystem_id"`
	KeyID         int64  `json:"key_id"`
	Time          int64  `json:"time"`
	Tx            int32  `json:"tx_count"`
	RollbacksHash []byte `json:"rollbacks_hash"`
	NodePosition  int64  `json:"node_position"`
	ConsensusMode int32  `json:"consensus_mode"`
}

func getBlockInfoHandler(w http.ResponseWriter, r *http.Request) {
	logger := getLogger(r)
	params := mux.Vars(r)

	blockID := converter.StrToInt64(params["id"])
	block := sqldb.BlockChain{}
	found, err := block.Get(blockID)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting block")
		errorResponse(w, err)
		return
	}
	if !found {
		logger.WithFields(log.Fields{"type": consts.NotFound, "id": blockID}).Debug("block with id not found")
		errorResponse(w, errNotFound)
		return
	}

	jsonResponse(w, &blockInfoResult{
		Hash:          block.Hash,
		EcosystemID:   block.EcosystemID,
		KeyID:         block.KeyID,
		Time:          block.Time,
		Tx:            block.Tx,
		RollbacksHash: block.RollbacksHash,
		NodePosition:  block.NodePosition,
		ConsensusMode: block.ConsensusMode,
	})
}

type TxInfo struct {
	Hash         []byte         `json:"hash"`
	ContractName string         `json:"contract_name"`
	Params       map[string]any `json:"params"`
	KeyID        int64          `json:"key_id"`
}

type blocksTxInfoForm struct {
	BlockID int64 `schema:"block_id"`
	Count   int64 `schema:"count"`
}

func (f *blocksTxInfoForm) Validate(r *http.Request) error {
	if f.BlockID > 0 {
		f.BlockID--
	}
	if f.Count <= 0 {
		f.Count = defaultPaginatorLimit
	}

	if f.Count > maxPaginatorLimit {
		f.Count = maxPaginatorLimit
	}
	return nil
}

func getBlocksTxInfoHandler(w http.ResponseWriter, r *http.Request) {
	form := &blocksTxInfoForm{}
	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	if form.BlockID < 0 || form.Count < 0 {
		err := errors.New("parameter is invalid")
		errorResponse(w, err, http.StatusBadRequest)
		return
	}
	logger := getLogger(r)

	blocks, err := sqldb.GetBlockchain(form.BlockID, form.BlockID+form.Count, sqldb.OrderASC)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("on getting blocks range")
		errorResponse(w, err)
		return
	}

	if len(blocks) == 0 {
		errorResponse(w, errNotFound)
		return
	}

	result := map[int64][]TxInfo{}
	for _, blockModel := range blocks {
		blck, err := block.UnmarshallBlock(bytes.NewBuffer(blockModel.Data), false)
		if err != nil {
			logger.WithFields(log.Fields{"type": consts.UnmarshallingError, "error": err, "bolck_id": blockModel.ID}).Error("on unmarshalling block")
			errorResponse(w, err)
			return
		}

		txInfoCollection := make([]TxInfo, 0, len(blck.Transactions))
		for _, tx := range blck.Transactions {
			txInfo := TxInfo{
				Hash: tx.Hash(),
			}

			if tx.IsSmartContract() {
				if tx.SmartContract().TxContract != nil {
					txInfo.ContractName = tx.SmartContract().TxContract.Name
				}
				txInfo.Params = tx.SmartContract().TxData
			}

			if blck.IsGenesis() {
				txInfo.KeyID = blck.Header.KeyId
			} else {
				txInfo.KeyID = tx.KeyID()
			}

			txInfoCollection = append(txInfoCollection, txInfo)

			logger.WithFields(log.Fields{"block_id": blockModel.ID, "tx hash": txInfo.Hash, "contract_name": txInfo.ContractName, "key_id": txInfo.KeyID, "params": txInfoCollection}).Debug("BlockChain Transactions Information")
		}

		result[blockModel.ID] = txInfoCollection
	}

	jsonResponse(w, &result)
}

type TxDetailedInfo struct {
	Hash         []byte         `json:"hash"`
	ContractName string         `json:"contract_name"`
	Params       map[string]any `json:"params"`
	KeyID        int64          `json:"key_id"`
	Time         int64          `json:"time"`
	Type         byte           `json:"type"`
	Size         string         `json:"size"`
}

type BlockHeaderInfo struct {
	BlockID      int64  `json:"block_id"`
	Time         int64  `json:"time"`
	EcosystemID  int64  `json:"-"`
	KeyID        int64  `json:"key_id"`
	NodePosition int64  `json:"node_position"`
	Sign         []byte `json:"-"`
	Hash         []byte `json:"-"`
	Version      int    `json:"version"`
}

type BlockDetailedInfo struct {
	Header        BlockHeaderInfo  `json:"header"`
	Hash          []byte           `json:"hash"`
	EcosystemID   int64            `json:"-"`
	NodePosition  int64            `json:"node_position"`
	KeyID         int64            `json:"key_id"`
	Time          int64            `json:"time"`
	Tx            int32            `json:"tx_count"`
	Size          string           `json:"size"`
	RollbacksHash []byte           `json:"rollbacks_hash"`
	MerkleRoot    []byte           `json:"merkle_root"`
	BinData       []byte           `json:"bin_data"`
	SysUpdate     bool             `json:"-"`
	GenBlock      bool             `json:"-"`
	StopCount     int              `json:"stop_count"`
	Transactions  []TxDetailedInfo `json:"transactions"`
}

func getBlocksDetailedInfoHandler(w http.ResponseWriter, r *http.Request) {
	form := &blocksTxInfoForm{}
	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}
	if form.BlockID < 0 || form.Count < 0 {
		err := errors.New("parameter is invalid")
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	logger := getLogger(r)

	blocks, err := sqldb.GetBlockchain(form.BlockID, form.BlockID+form.Count, sqldb.OrderASC)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("on getting blocks range")
		errorResponse(w, err)
		return
	}

	if len(blocks) == 0 {
		errorResponse(w, errNotFound)
		return
	}

	result := map[int64]BlockDetailedInfo{}
	for _, blockModel := range blocks {
		blck, err := block.UnmarshallBlock(bytes.NewBuffer(blockModel.Data), false)
		if err != nil {
			logger.WithFields(log.Fields{"type": consts.UnmarshallingError, "error": err, "block_id": blockModel.ID}).Error("on unmarshalling block")
			errorResponse(w, err)
			return
		}

		txDetailedInfoCollection := make([]TxDetailedInfo, 0, len(blck.Transactions))
		for _, tx := range blck.Transactions {
			txDetailedInfo := TxDetailedInfo{
				Hash:  tx.Hash(),
				KeyID: tx.KeyID(),
				Time:  tx.Timestamp(),
				Type:  tx.Type(),
				Size:  common.StorageSize(len(tx.Payload())).TerminalString(),
			}

			if tx.IsSmartContract() {
				if tx.SmartContract().TxContract != nil {
					txDetailedInfo.ContractName = tx.SmartContract().TxContract.Name
				}
				txDetailedInfo.Params = tx.SmartContract().TxData
				if tx.Type() == types.TransferSelfTxType {
					txDetailedInfo.Params = make(map[string]any)
					txDetailedInfo.Params["TransferSelf"] = tx.SmartContract().TxSmart.TransferSelf
				}
				if tx.Type() == types.UtxoTxType {
					txDetailedInfo.Params = make(map[string]any)
					txDetailedInfo.Params["UTXO"] = tx.SmartContract().TxSmart.UTXO
				}
			}

			txDetailedInfoCollection = append(txDetailedInfoCollection, txDetailedInfo)

			logger.WithFields(log.Fields{"block_id": blockModel.ID, "tx hash": txDetailedInfo.Hash, "contract_name": txDetailedInfo.ContractName, "key_id": txDetailedInfo.KeyID, "time": txDetailedInfo.Time, "type": txDetailedInfo.Type, "params": txDetailedInfoCollection}).Debug("BlockChain Transactions Information")
		}

		header := BlockHeaderInfo{
			BlockID:      blck.Header.BlockId,
			Time:         blck.Header.Timestamp,
			EcosystemID:  blck.Header.EcosystemId,
			KeyID:        blck.Header.KeyId,
			NodePosition: blck.Header.NodePosition,
			Sign:         blck.Header.Sign,
			Hash:         blck.Header.BlockHash,
			Version:      int(blck.Header.Version),
		}

		bdi := BlockDetailedInfo{
			Header:        header,
			Hash:          blockModel.Hash,
			EcosystemID:   blockModel.EcosystemID,
			NodePosition:  blockModel.NodePosition,
			KeyID:         blockModel.KeyID,
			Time:          blockModel.Time,
			Tx:            blockModel.Tx,
			RollbacksHash: blockModel.RollbacksHash,
			MerkleRoot:    blck.MerkleRoot,
			BinData:       blck.BinData,
			Size:          common.StorageSize(len(blockModel.Data)).TerminalString(),
			SysUpdate:     blck.SysUpdate,
			GenBlock:      blck.GenBlock,
			Transactions:  txDetailedInfoCollection,
		}
		result[blockModel.ID] = bdi
	}

	jsonResponse(w, &result)
}


================================================
FILE: packages/api/block_test.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestGetMaxBlockID(t *testing.T) {
	var ret maxBlockResult
	err := sendGet(`maxblockid`, nil, &ret)
	assert.NoError(t, err)
}

func TestGetBlockInfo(t *testing.T) {
	var ret blockInfoResult
	err := sendGet(`block/1`, nil, &ret)
	assert.NoError(t, err)
}


================================================
FILE: packages/api/common_forms.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"net/http"
	"strings"

	"github.com/IBAX-io/go-ibax/packages/types"

	"github.com/IBAX-io/go-ibax/packages/converter"
)

const (
	defaultPaginatorLimit = 25
	maxPaginatorLimit     = 1000
)

type paginatorForm struct {
	defaultLimit int

	Limit  int `schema:"limit"`
	Offset int `schema:"offset"`
}

func (f *paginatorForm) Validate(r *http.Request) error {
	if f.Limit <= 0 {
		f.Limit = f.defaultLimit
		if f.Limit == 0 {
			f.Limit = defaultPaginatorLimit
		}
	}

	if f.Limit > maxPaginatorLimit {
		f.Limit = maxPaginatorLimit
	}

	return nil
}

type paramsForm struct {
	nopeValidator
	Names string `schema:"names"`
}

func (f *paramsForm) AcceptNames() map[string]bool {
	names := make(map[string]bool)
	for _, item := range strings.Split(f.Names, ",") {
		if len(item) == 0 {
			continue
		}
		names[item] = true
	}
	return names
}

type ecosystemForm struct {
	EcosystemID     int64  `schema:"ecosystem"`
	EcosystemPrefix string `schema:"-"`
	Validator       types.EcosystemGetter
}

func (f *ecosystemForm) Validate(r *http.Request) error {
	if f.Validator == nil {
		panic("ecosystemForm.Validator should not be empty")
	}

	client := getClient(r)
	logger := getLogger(r)

	ecosysID, err := f.Validator.ValidateId(f.EcosystemID, client.EcosystemID, logger)
	if err != nil {
		if err == ErrEcosystemNotFound {
			err = errEcosystem.Errorf(f.EcosystemID)
		}
		return err
	}

	f.EcosystemID = ecosysID
	f.EcosystemPrefix = converter.Int64ToStr(f.EcosystemID)

	return nil
}


================================================
FILE: packages/api/config.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"net/http"
	"strings"

	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/publisher"

	"github.com/gorilla/mux"
	log "github.com/sirupsen/logrus"
)

type configOptionHandler func(w http.ResponseWriter, option string) error

func getConfigOptionHandler(w http.ResponseWriter, r *http.Request) {
	params := mux.Vars(r)
	logger := getLogger(r)

	if len(params["option"]) == 0 {
		logger.WithFields(log.Fields{"type": consts.EmptyObject, "error": "option not specified"}).Error("on getting option in config handler")
		errorResponse(w, errNotFound)
		return
	}

	switch params["option"] {
	case "centrifugo":
		centrifugoAddressHandler(w, r)
		return
	}

	errorResponse(w, errNotFound)
}

func replaceHttpSchemeToWs(centrifugoURL string) string {
	if strings.HasPrefix(centrifugoURL, "http:") {
		return strings.Replace(centrifugoURL, "http:", "ws:", -1)
	} else if strings.HasPrefix(centrifugoURL, "https:") {
		return strings.Replace(centrifugoURL, "https:", "wss:", -1)
	}
	return centrifugoURL
}

func centrifugoAddressHandler(w http.ResponseWriter, r *http.Request) {
	logger := getLogger(r)

	if _, err := publisher.GetStats(); err != nil {
		logger.WithFields(log.Fields{"type": consts.CentrifugoError, "error": err}).Warn("on getting centrifugo stats")
		errorResponse(w, err)
		return
	}

	jsonResponse(w, replaceHttpSchemeToWs(conf.Config.Centrifugo.URL))
}


================================================
FILE: packages/api/content.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"encoding/hex"
	"encoding/json"
	"errors"
	"fmt"
	"net/http"
	"strconv"
	"strings"
	"sync"
	"time"

	"github.com/IBAX-io/go-ibax/packages/common/crypto"

	"github.com/IBAX-io/go-ibax/packages/conf"
	"github.com/IBAX-io/go-ibax/packages/consts"
	"github.com/IBAX-io/go-ibax/packages/converter"
	"github.com/IBAX-io/go-ibax/packages/storage/sqldb"
	"github.com/IBAX-io/go-ibax/packages/template"

	"github.com/gorilla/mux"
	log "github.com/sirupsen/logrus"
)

type contentResult struct {
	Menu       string          `json:"menu,omitempty"`
	MenuTree   json.RawMessage `json:"menutree,omitempty"`
	Title      string          `json:"title,omitempty"`
	Tree       json.RawMessage `json:"tree"`
	NodesCount int64           `json:"nodesCount,omitempty"`
}

type hashResult struct {
	Hash string `json:"hash"`
}

const (
	strTrue = `true`
	strOne  = `1`
)

var errEmptyTemplate = errors.New("Empty template")

func initVars(r *http.Request) *map[string]string {
	client := getClient(r)
	r.ParseMultipartForm(multipartBuf)

	vars := make(map[string]string)
	for name := range r.Form {
		vars[name] = r.FormValue(name)
	}
	vars["_full"] = "0"
	vars["current_time"] = fmt.Sprintf("%d", time.Now().Unix())
	vars["guest_key"] = consts.GuestKey
	vars["guest_account"] = consts.GuestAddress
	vars["black_hole_key"] = strconv.FormatInt(converter.HoleAddrMap[converter.BlackHoleAddr].K, 10)
	vars["black_hole_account"] = converter.HoleAddrMap[converter.BlackHoleAddr].S
	vars["white_hole_key"] = strconv.FormatInt(converter.HoleAddrMap[converter.WhiteHoleAddr].K, 10)
	vars["white_hole_account"] = converter.HoleAddrMap[converter.WhiteHoleAddr].S
	if client.KeyID != 0 {
		vars["ecosystem_id"] = converter.Int64ToStr(client.EcosystemID)
		vars["key_id"] = converter.Int64ToStr(client.KeyID)
		vars["account_id"] = client.AccountID
		vars["role_id"] = converter.Int64ToStr(client.RoleID)
		vars["ecosystem_name"] = client.EcosystemName
	} else {
		vars["ecosystem_id"] = vars["ecosystem"]
		delete(vars, "ecosystem")
		if len(vars["keyID"]) > 0 {
			vars["key_id"] = vars["keyID"]
			vars["account_id"] = converter.AddressToString(converter.StrToInt64(vars["keyID"]))
		} else {
			vars["key_id"] = "0"
			vars["account_id"] = ""
		}
		if len(vars["roleID"]) > 0 {
			vars["role_id"] = vars["roleID"]
		} else {
			vars["role_id"] = "0"
		}
		if len(vars["ecosystem_id"]) != 0 {
			ecosystems := sqldb.Ecosystem{}
			if found, _ := ecosystems.Get(nil, converter.StrToInt64(vars["ecosystem_id"])); found {
				vars["ecosystem_name"] = ecosystems.Name
			}
		}
	}
	if _, ok := vars["lang"]; !ok {
		vars["lang"] = r.Header.Get("Accept-Language")
	}

	return &vars
}

func parseEcosystem(in string) (string, string) {
	ecosystem, name := converter.ParseName(in)
	if ecosystem == 0 {
		return ``, name
	}
	return converter.Int64ToStr(ecosystem), name
}

func pageValue(r *http.Request) (*sqldb.Page, string, error) {
	params := mux.Vars(r)
	logger := getLogger(r)
	client := getClient(r)

	var ecosystem string
	page := &sqldb.Page{}
	name := params["name"]
	if strings.HasPrefix(name, `@`) {
		ecosystem, name = parseEcosystem(name)
		if len(name) == 0 {
			logger.WithFields(log.Fields{
				"type":  consts.NotFound,
				"value": params["name"],
			}).Debug("page not found")
			return nil, ``, errNotFound
		}
	} else {
		ecosystem = client.Prefix()
	}
	page.SetTablePrefix(ecosystem)
	found, err := page.Get(name)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting page")
		return nil, ``, err
	}
	if !found {
		logger.WithFields(log.Fields{"type": consts.NotFound}).Debug("page not found")
		return nil, ``, errNotFound
	}
	return page, ecosystem, nil
}

func getPage(r *http.Request) (result *contentResult, err error) {
	page, _, err := pageValue(r)
	if err != nil {
		return nil, err
	}

	logger := getLogger(r)

	client := getClient(r)
	menu := &sqldb.Menu{}
	menu.SetTablePrefix(client.Prefix())
	_, err = menu.Get(page.Menu)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting page menu")
		return nil, errServer
	}
	var wg sync.WaitGroup
	var timeout bool
	wg.Add(2)
	success := make(chan bool, 1)
	go func() {
		defer wg.Done()

		vars := initVars(r)
		(*vars)["app_id"] = converter.Int64ToStr(page.AppID)

		ret := template.Template2JSON(page.Value, &timeout, vars)
		if timeout {
			return
		}
		retmenu := template.Template2JSON(menu.Value, &timeout, vars)
		if timeout {
			return
		}
		result = &contentResult{
			Tree:       ret,
			Menu:       page.Menu,
			MenuTree:   retmenu,
			NodesCount: page.ValidateCount,
		}
		success <- true
	}()
	go func() {
		defer wg.Done()
		if conf.Config.LocalConf.MaxPageGenerationTime == 0 {
			return
		}
		select {
		case <-time.After(time.Duration(conf.Config.LocalConf.MaxPageGenerationTime) * time.Millisecond):
			timeout = true
		case <-success:
		}
	}()
	wg.Wait()
	close(success)

	if timeout {
		logger.WithFields(log.Fields{"type": consts.InvalidObject}).Error(page.Name + " is a heavy page")
		return nil, errHeavyPage
	}

	return result, nil
}

func getPageHandler(w http.ResponseWriter, r *http.Request) {
	result, err := getPage(r)
	if err != nil {
		errorResponse(w, err)
		return
	}

	jsonResponse(w, result)
}

func getPageHashHandler(w http.ResponseWriter, r *http.Request) {
	logger := getLogger(r)
	params := mux.Vars(r)

	if ecosystem := r.FormValue("ecosystem"); len(ecosystem) > 0 &&
		!strings.HasPrefix(params["name"], "@") {
		params["name"] = "@" + ecosystem + params["name"]
	}
	result, err := getPage(r)
	if err != nil {
		errorResponse(w, err)
		return
	}

	out, err := json.Marshal(result)
	if err != nil {
		logger.WithFields(log.Fields{"type": consts.JSONMarshallError, "error": err}).Error("getting string for hash")
		errorResponse(w, errServer)
		return
	}

	jsonResponse(w, &hashResult{Hash: hex.EncodeToString(crypto.Hash(out))})
}

func getMenuHandler(w http.ResponseWriter, r *http.Request) {
	params := mux.Vars(r)
	client := getClient(r)
	logger := getLogger(r)

	var ecosystem string
	menu := &sqldb.Menu{}
	name := params["name"]
	if strings.HasPrefix(name, `@`) {
		ecosystem, name = parseEcosystem(name)
		if len(name) == 0 {
			logger.WithFields(log.Fields{
				"type":  consts.NotFound,
				"value": params["name"],
			}).Debug("page not found")
			errorResponse(w, errNotFound)
			return
		}
	} else {
		ecosystem = client.Prefix()
	}

	menu.SetTablePrefix(ecosystem)
	found, err := menu.Get(name)

	if err != nil {
		logger.WithFields(log.Fields{"type": consts.DBError, "error": err}).Error("getting menu")
		errorResponse(w, err)
		return
	}
	if !found {
		logger.WithFields(log.Fields{"type": consts.NotFound}).Debug("menu not found")
		errorResponse(w, errNotFound)
		return
	}
	var timeout bool
	ret := template.Template2JSON(menu.Value, &timeout, initVars(r))
	jsonResponse(w, &contentResult{Tree: ret, Title: menu.Title})
}

type jsonContentForm struct {
	Template string `schema:"template"`
	Source   bool   `schema:"source"`
}

func (f *jsonContentForm) Validate(r *http.Request) error {
	if len(f.Template) == 0 {
		return errEmptyTemplate
	}
	return nil
}

func jsonContentHandler(w http.ResponseWriter, r *http.Request) {
	form := &jsonContentForm{}
	if err := parseForm(r, form); err != nil {
		errorResponse(w, err, http.StatusBadRequest)
		return
	}

	var timeout bool
	vars := initVars(r)

	if form.Source {
		(*vars)["_full"] = strOne
	}

	ret := template.Template2JSON(form.Template, &timeout, vars)
	jsonResponse(w, &contentResult{Tree: ret})
}

func getSourceHandler(w http.ResponseWriter, r *http.Request) {
	page, _, err := pageValue(r)
	if err != nil {
		errorResponse(w, err)
		return
	}
	var timeout bool
	vars := initVars(r)
	(*vars)["_full"] = strOne
	ret := template.Template2JSON(page.Value, &timeout, vars)

	jsonResponse(w, &contentResult{Tree: ret})
}

func getPageValidatorsCountHandler(w http.ResponseWriter, r *http.Request) {
	page, _, err := pageValue(r)
	if err != nil {
		errorResponse(w, err)
		return
	}

	res := map[string]int64{"validate_count": page.ValidateCount}
	jsonResponse(w, &res)
}


================================================
FILE: packages/api/content_test.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"encoding/hex"
	"encoding/json"
	"net/url"
	"testing"

	"github.com/IBAX-io/go-ibax/packages/common/crypto"
	"github.com/stretchr/testify/assert"
)

func TestContentHash(t *testing.T) {
	assert.NoError(t, keyLogin(1))

	name := randName(`page`)
	assert.NoError(t, postTx(`NewPage`, &url.Values{
		"ApplicationId": {`1`},
		"Name":          {name},
		"Value":         {`Div(Body: "New value of parameter - test")`},
		"Menu":          {`default_menu`},
		"Conditions":    {"true"},
	}))
	urls := "content/page/" + name
	var ret contentResult
	assert.NoError(t, sendPost(urls, &url.Values{}, &ret))
	out, err := json.Marshal(ret)
	assert.NoError(t, err)
	hash := crypto.Hash(out)
	urls = "content/hash/" + name
	var hret hashResult
	assert.NoError(t, sendPost(urls, &url.Values{}, &hret))
	if hex.EncodeToString(hash) != hret.Hash {
		t.Error(`wrong hash`, hex.EncodeToString(hash), hret.Hash)
	}
}

func TestContent(t *testing.T) {
	assert.NoError(t, keyLogin(1))

	name := randName(`page`)
	assert.NoError(t, postTx(`NewPage`, &url.Values{
		"ApplicationId": {`1`},
		"Name":          {name},
		"Value":         {`If(true){Div(){Span(My text)Address()}}.Else{Div(Body: Hidden text)}`},
		"Menu":          {`default_menu`},
		"Conditions":    {"true"},
	}))

	cases := []struct {
		url      string
		form     url.Values
		expected string
	}{
		{
			"content/source/" + name,
			url.Values{},
			`[{"tag":"if","attr":{"condition":"true"},"children":[{"tag":"div","children":[{"tag":"span","children":[{"tag":"text","text":"My text"}]},{"tag":"address"}]}],"tail":[{"tag":"else","children":[{"tag":"div","children":[{"tag":"text","text":"Hidden text"}]}]}]}]`,
		},
		{
			"content",
			url.Values{
				"template": {"input Div(myclass, #mytest# Div(mypar) the Div)"},
				"mytest":   {"test value"},
			},
			`[{"tag":"text","text":"input "},{"tag":"div","attr":{"class":"myclass"},"children":[{"tag":"text","text":"test value "},{"tag":"div","attr":{"class":"mypar"}},{"tag":"text","text":" the Div"}]}]`,
		},
		{
			"content",
			url.Values{
				"template":  {"#test_page# input Div(myclass, #test_page# ok) #test_page#"},
				"test_page": {"7"},
			},
			`[{"tag":"text","text":"7 input "},{"tag":"div","attr":{"class":"myclass"},"children":[{"tag":"text","text":"7 ok"}]},{"tag":"text","text":" 7"}]`,
		},
		{
			"content",
			url.Values{
				"template": {"SetVar(mytest, myvar)Div(myclass, Span(#mytest#) Div(mypar){Span(test)}#mytest#)"},
				"source":   {"true"},
			},
			`[{"tag":"setvar","attr":{"name":"mytest","value":"myvar"}},{"tag":"div","attr":{"class":"myclass"},"children":[{"tag":"span","children":[{"tag":"text","text":"#mytest#"}]},{"tag":"div","attr":{"class":"mypar"},"children":[{"tag":"span","children":[{"tag":"text","text":"test"}]}]},{"tag":"text","text":"#mytest#"}]}]`,
		},
		{
			"content",
			url.Values{
				"template": {`DBFind(Name: pages, Source: src).Custom(custom_col){
				Span(Body: "test")
			}`},
				"lang":   {"ru"},
				"source": {"true"},
			},
			`[{"tag":"dbfind","attr":{"name":"pages","source":"src"},"tail":[{"tag":"custom","attr":{"column":"custom_col"},"children":[{"tag":"span","children":[{"tag":"text","text":"test"}]}]}]}]`,
		},
		{
			"content",
			url.Values{
				"template": {`Data(Source: src).Custom(custom_col){
				Span(Body: "test")
			}`},
				"lang":   {"ru"},
				"source": {"true"},
			},
			`[{"tag":"data","attr":{"source":"src"},"tail":[{"tag":"custom","attr":{"column":"custom_col"},"children":[{"tag":"span","children":[{"tag":"text","text":"test"}]}]}]}]`,
		},
		{
			"content",
			url.Values{
				"template": {`Data(myforlist,"id,name",
					"1",Test message 1
					2,"Test message 2"
					3,"Test message 3"
					)`},
				"source": {"true"},
			},
			`[{"tag":"data","attr":{"columns":"id,name","data":"1,Test message 1\n\t\t\t\t\t2,\"Test message 2\"\n\t\t\t\t\t3,\"Test message 3\"","source":"myforlist"}}]`,
		},
		{
			"content",
			url.Values{
				"template": {`
					Data(src_test,"type"){
						text
					}
					ForList(src_test){
					If(#type#==text){
						Span(:#type#)
					}
				}`},
			},
			`[{"tag":"data","attr":{"columns":["type"],"data":[["text"]],"source":"src_test","types":["text"]}},{"tag":"forlist","attr":{"source":"src_test"},"children":[{"tag":"span","attr":{"":"text"}}]}]`,
		},
	}

	var ret contentResult
	for _, v := range cases {
		assert.NoError(t, sendPost(v.url, &v.form, &ret))
		assert.Equal(t, v.expected, string(ret.Tree))
	}
}


================================================
FILE: packages/api/context.go
================================================
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) IBAX. All rights reserved.
 *  See LICENSE in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

package api

import (
	"context"
	"net/http"

	"github.com/golang-jwt/jwt/v4"
	log "github.com/sirupsen/logrus"
)

type contextKey int

const (
	contextKeyLogger contextKey = iota
	contextKeyToken
	contextKeyClient
)

func setContext(r *http.Request, key, value any) *http.Request {
	return r.WithContext(context.WithValue(r.Context(), key, value))
}

func getContext(r *http.Request, key any) any {
	return r.Context().Value(key)
}

func setLogger(r *http.Request, log *log.Entry
Download .txt
gitextract_ogj7kazk/

├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.yml
│       ├── config.yml
│       └── feature_request.yml
├── .gitignore
├── .travis.yml
├── LICENSE
├── Makefile
├── README.md
├── build.sh
├── cmd/
│   ├── config.go
│   ├── generateFirstBlock.go
│   ├── generateKeys.go
│   ├── initDatabase.go
│   ├── rollback.go
│   ├── root.go
│   ├── start.go
│   ├── stopNetwork.go
│   └── version.go
├── go.mod
├── go.sum
├── main.go
├── packages/
│   ├── api/
│   │   ├── api.go
│   │   ├── api_test.go
│   │   ├── app_content.go
│   │   ├── app_content_test.go
│   │   ├── appparam.go
│   │   ├── appparams.go
│   │   ├── auth.go
│   │   ├── balance.go
│   │   ├── balance_test.go
│   │   ├── block.go
│   │   ├── block_test.go
│   │   ├── common_forms.go
│   │   ├── config.go
│   │   ├── content.go
│   │   ├── content_test.go
│   │   ├── context.go
│   │   ├── contract_test.go
│   │   ├── contracts.go
│   │   ├── data.go
│   │   ├── ecosystem.go
│   │   ├── ecosystem_params.go
│   │   ├── ecosystem_test.go
│   │   ├── errors.go
│   │   ├── getcontract.go
│   │   ├── getuid.go
│   │   ├── getuid_test.go
│   │   ├── history.go
│   │   ├── history_test.go
│   │   ├── import_test.go
│   │   ├── interface.go
│   │   ├── interface_test.go
│   │   ├── lang_test.go
│   │   ├── limit_test.go
│   │   ├── list.go
│   │   ├── list_test.go
│   │   ├── login.go
│   │   ├── member.go
│   │   ├── metrics.go
│   │   ├── middlewares.go
│   │   ├── network.go
│   │   ├── node.go
│   │   ├── platform_params.go
│   │   ├── read_test.go
│   │   ├── request.go
│   │   ├── route.go
│   │   ├── row.go
│   │   ├── sections.go
│   │   ├── send_tx.go
│   │   ├── smart_test.go
│   │   ├── table.go
│   │   ├── tables.go
│   │   ├── tables_test.go
│   │   ├── template_test.go
│   │   ├── trash.go
│   │   ├── tx_record.go
│   │   ├── txinfo.go
│   │   ├── txstatus.go
│   │   └── version.go
│   ├── block/
│   │   ├── block.go
│   │   ├── check.go
│   │   ├── db.go
│   │   ├── play.go
│   │   └── serialization.go
│   ├── chain/
│   │   ├── daemonsctl/
│   │   │   └── daemonsctl.go
│   │   ├── notandroid.go
│   │   ├── start.go
│   │   └── system/
│   │       ├── pid.go
│   │       ├── unix.go
│   │       └── windows.go
│   ├── clbmanager/
│   │   ├── config.go
│   │   └── manager.go
│   ├── common/
│   │   ├── crypto/
│   │   │   ├── asymalgo/
│   │   │   │   ├── asymalgo.go
│   │   │   │   ├── error.go
│   │   │   │   ├── p256.go
│   │   │   │   ├── secp256k1.go
│   │   │   │   └── sm2.go
│   │   │   ├── base58/
│   │   │   │   └── base58.go
│   │   │   ├── checksum.go
│   │   │   ├── converter.go
│   │   │   ├── crypto.go
│   │   │   ├── crypto.pb.go
│   │   │   ├── crypto_test.go
│   │   │   ├── ecies/
│   │   │   │   ├── ecccrypt.go
│   │   │   │   └── ecies.go
│   │   │   ├── hashalgo/
│   │   │   │   ├── hashalgo.go
│   │   │   │   ├── keccak256.go
│   │   │   │   ├── sha256.go
│   │   │   │   ├── sha3_256.go
│   │   │   │   └── sm3.go
│   │   │   ├── provider.go
│   │   │   ├── random.go
│   │   │   ├── symalgo/
│   │   │   │   └── aes/
│   │   │   │       ├── aes.go
│   │   │   │       └── aes_test.go
│   │   │   └── x509/
│   │   │       └── cert.go
│   │   ├── log/
│   │   │   ├── filename_hook.go
│   │   │   ├── hex_hook.go
│   │   │   ├── syslog_hook.go
│   │   │   └── syslog_hook_windows.go
│   │   ├── random/
│   │   │   ├── rand.go
│   │   │   └── rand_test.go
│   │   └── size.go
│   ├── conf/
│   │   ├── conf.go
│   │   ├── runmode.go
│   │   ├── syspar/
│   │   │   ├── honornode.go
│   │   │   ├── honornode_test.go
│   │   │   └── syspar.go
│   │   └── types.go
│   ├── consts/
│   │   ├── conf.go
│   │   ├── consts.go
│   │   ├── log_types.go
│   │   └── used_stop_certs.go
│   ├── converter/
│   │   ├── address.go
│   │   └── converter.go
│   ├── daemons/
│   │   ├── block_generator.go
│   │   ├── block_generator_candidate.go
│   │   ├── block_generator_tx.go
│   │   ├── blocks_collection.go
│   │   ├── candidate_node_votings.go
│   │   ├── common.go
│   │   ├── confirmations.go
│   │   ├── disseminator.go
│   │   ├── external_network.go
│   │   ├── genesis.go
│   │   ├── locking.go
│   │   ├── mode.go
│   │   ├── monitoring.go
│   │   ├── queue_parser_blocks.go
│   │   ├── queue_parser_tx.go
│   │   ├── scheduler.go
│   │   ├── stopdaemons.go
│   │   ├── upd_full_nodes.go
│   │   └── wait_for_signals.go
│   ├── language/
│   │   └── language.go
│   ├── migration/
│   │   ├── clb/
│   │   │   ├── applications_data.go
│   │   │   ├── clb_data_contracts.go
│   │   │   ├── data.go
│   │   │   ├── keys_data.go
│   │   │   ├── menu_data.go
│   │   │   ├── pages_data.go
│   │   │   ├── parameters_data.go
│   │   │   ├── platform_parameters_data.go
│   │   │   ├── roles_data.go
│   │   │   ├── scheme.go
│   │   │   ├── sections_data.go
│   │   │   ├── snippets_data.go
│   │   │   └── tables_data.go
│   │   ├── contracts/
│   │   │   ├── clb/
│   │   │   │   ├── EditCron.sim
│   │   │   │   ├── ListCLB.sim
│   │   │   │   ├── MainCondition.sim
│   │   │   │   ├── NewCLB.sim
│   │   │   │   ├── NewCron.sim
│   │   │   │   ├── RemoveCLB.sim
│   │   │   │   ├── RunCLB.sim
│   │   │   │   └── StopCLB.sim
│   │   │   ├── ecosystem/
│   │   │   │   ├── DeveloperCondition.sim
│   │   │   │   └── MainCondition.sim
│   │   │   └── first_ecosystem/
│   │   │       ├── AccessControlMode.sim
│   │   │       ├── AccessVoteTempRun.sim
│   │   │       ├── BindWallet.sim
│   │   │       ├── CallDelayedContract.sim
│   │   │       ├── CheckNodesBan.sim
│   │   │       ├── EditAppParam.sim
│   │   │       ├── EditApplication.sim
│   │   │       ├── EditColumn.sim
│   │   │       ├── EditContract.sim
│   │   │       ├── EditLang.sim
│   │   │       ├── EditMenu.sim
│   │   │       ├── EditPage.sim
│   │   │       ├── EditParameter.sim
│   │   │       ├── EditSnippet.sim
│   │   │       ├── EditTable.sim
│   │   │       ├── HonorNodeCondition.sim
│   │   │       ├── Import.sim
│   │   │       ├── ImportUpload.sim
│   │   │       ├── NewAppParam.sim
│   │   │       ├── NewApplication.sim
│   │   │       ├── NewBadBlock.sim
│   │   │       ├── NewContract.sim
│   │   │       ├── NewEcosystem.sim
│   │   │       ├── NewLang.sim
│   │   │       ├── NewMenu.sim
│   │   │       ├── NewPage.sim
│   │   │       ├── NewParameter.sim
│   │   │       ├── NewSnippet.sim
│   │   │       ├── NewTable.sim
│   │   │       ├── NewUser.sim
│   │   │       ├── NodeOwnerCondition.sim
│   │   │       ├── UnbindWallet.sim
│   │   │       ├── UpdatePlatformParam.sim
│   │   │       ├── UploadBinary.sim
│   │   │       └── UploadFile.sim
│   │   ├── contracts_data.go
│   │   ├── data.go
│   │   ├── ecosystem.go
│   │   ├── ecosystem_test.go
│   │   ├── first_delayed_contracts.go
│   │   ├── first_ecosys_contracts_data.go
│   │   ├── first_ecosys_pages_data.go
│   │   ├── first_ecosys_snippets_data.go
│   │   ├── first_ecosystem_schema.go
│   │   ├── first_ecosystems_data.go
│   │   ├── first_tables_data.go
│   │   ├── gen/
│   │   │   ├── contracts.go
│   │   │   └── contracts_test.go
│   │   ├── keys_data.go
│   │   ├── members_data.go
│   │   ├── menu_data.go
│   │   ├── migration.go
│   │   ├── migration_test.go
│   │   ├── pages_data.go
│   │   ├── parameters_data.go
│   │   ├── platform_parameters_data.go
│   │   ├── sections_data.go
│   │   ├── tables_data.go
│   │   ├── timezones.go
│   │   └── updates/
│   │       └── migration_update_exec.go
│   ├── modes/
│   │   ├── api.go
│   │   ├── client_tx.go
│   │   ├── daemons.go
│   │   ├── ecosystem_getter.go
│   │   ├── mode_fabrics.go
│   │   └── rpc.go
│   ├── network/
│   │   ├── httpserver/
│   │   │   └── max_body.go
│   │   ├── machineState.go
│   │   ├── protocol.go
│   │   ├── protocol_test.go
│   │   ├── tcpclient/
│   │   │   ├── blocks_collection.go
│   │   │   ├── candidate_node_voting.go
│   │   │   ├── client.go
│   │   │   ├── client_test.go
│   │   │   ├── confirmation.go
│   │   │   ├── disseminator.go
│   │   │   ├── max_block.go
│   │   │   ├── pools.go
│   │   │   ├── pools_test.go
│   │   │   └── stop_network.go
│   │   └── tcpserver/
│   │       ├── blocks_collection.go
│   │       ├── candidate_node_voting.go
│   │       ├── confirmation.go
│   │       ├── disseminate_tx.go
│   │       ├── disseminator.go
│   │       ├── max_block.go
│   │       ├── stop_network.go
│   │       └── tcpserver.go
│   ├── notificator/
│   │   ├── notificator.go
│   │   ├── queue.go
│   │   └── token_movements.go
│   ├── pb/
│   │   ├── Makefile
│   │   ├── block.proto
│   │   ├── crypto.proto
│   │   ├── gas.proto
│   │   ├── play.proto
│   │   ├── tx.proto
│   │   └── vm.proto
│   ├── pbgo/
│   │   └── tx.pb.go
│   ├── protocols/
│   │   ├── block_counter.go
│   │   ├── block_counter_mock.go
│   │   ├── block_time_calculator.go
│   │   ├── block_time_calculator_test.go
│   │   ├── block_time_counter_test.go
│   │   └── generation-queue.go
│   ├── publisher/
│   │   └── publisher.go
│   ├── rollback/
│   │   ├── block.go
│   │   ├── rollback.go
│   │   └── transaction.go
│   ├── scheduler/
│   │   ├── contract/
│   │   │   ├── request.go
│   │   │   └── task.go
│   │   ├── scheduler.go
│   │   ├── scheduler_test.go
│   │   └── task.go
│   ├── script/
│   │   ├── cmds_list.go
│   │   ├── code_block.go
│   │   ├── compile.go
│   │   ├── compile_test.go
│   │   ├── errors.go
│   │   ├── eval.go
│   │   ├── eval_test.go
│   │   ├── extend.go
│   │   ├── func.go
│   │   ├── handle.go
│   │   ├── lex.go
│   │   ├── lex_table.go
│   │   ├── lex_test.go
│   │   ├── lextable/
│   │   │   └── lextable.go
│   │   ├── runtime.go
│   │   ├── runtime_test.go
│   │   ├── stack.go
│   │   ├── state.go
│   │   ├── vm.go
│   │   ├── vm.pb.go
│   │   └── vminit.go
│   ├── service/
│   │   ├── gateway/
│   │   │   └── gateway.go
│   │   ├── jsonrpc/
│   │   │   ├── accounts.go
│   │   │   ├── api.go
│   │   │   ├── auth.go
│   │   │   ├── block.go
│   │   │   ├── callback.go
│   │   │   ├── common.go
│   │   │   ├── common_forms.go
│   │   │   ├── context.go
│   │   │   ├── data.go
│   │   │   ├── debug.go
│   │   │   ├── ecosystem_params.go
│   │   │   ├── errors.go
│   │   │   ├── handlers.go
│   │   │   ├── history.go
│   │   │   ├── http.go
│   │   │   ├── id.go
│   │   │   ├── jwt.go
│   │   │   ├── middlewares.go
│   │   │   ├── namespace.go
│   │   │   ├── namespace_debug.go
│   │   │   ├── namespace_ibax.go
│   │   │   ├── namespace_net.go
│   │   │   ├── params.go
│   │   │   ├── raw_response.go
│   │   │   ├── request.go
│   │   │   ├── response.go
│   │   │   ├── server.go
│   │   │   ├── service.go
│   │   │   ├── transaction.go
│   │   │   └── txinfo.go
│   │   ├── node/
│   │   │   ├── node_actualization.go
│   │   │   ├── node_ban.go
│   │   │   ├── node_paused.go
│   │   │   └── node_relevance.go
│   │   └── protos/
│   │       ├── build.sh
│   │       └── googleapis/
│   │           └── google/
│   │               └── api/
│   │                   ├── annotations.proto
│   │                   └── http.proto
│   ├── smart/
│   │   ├── builtin_excel.go
│   │   ├── contract.go
│   │   ├── datetime.go
│   │   ├── errors.go
│   │   ├── funcs.go
│   │   ├── gas.go
│   │   ├── gas.pb.go
│   │   ├── math.go
│   │   ├── selective.go
│   │   ├── smart.go
│   │   ├── smart_p.go
│   │   ├── smart_test.go
│   │   ├── sysrollback.go
│   │   └── utils.go
│   ├── statsd/
│   │   └── statsd.go
│   ├── storage/
│   │   ├── kvdb/
│   │   │   ├── leveldb/
│   │   │   │   └── leveldb.go
│   │   │   └── redis/
│   │   │       ├── goredis.go
│   │   │       └── maxblockid.go
│   │   ├── sqldb/
│   │   │   ├── app_param.go
│   │   │   ├── bad_blocks.go
│   │   │   ├── binary.go
│   │   │   ├── blockchain.go
│   │   │   ├── candidate_node.go
│   │   │   ├── confirmations.go
│   │   │   ├── contract.go
│   │   │   ├── cron.go
│   │   │   ├── database.go
│   │   │   ├── db.go
│   │   │   ├── delayed_contract.go
│   │   │   ├── ecosystem.go
│   │   │   ├── ecosystem_parameter.go
│   │   │   ├── external_blockchain.go
│   │   │   ├── history.go
│   │   │   ├── info_block.go
│   │   │   ├── install.go
│   │   │   ├── keys.go
│   │   │   ├── language.go
│   │   │   ├── log_transaction.go
│   │   │   ├── members.go
│   │   │   ├── menu.go
│   │   │   ├── metric.go
│   │   │   ├── migration_history.go
│   │   │   ├── node_ban_logs.go
│   │   │   ├── notification.go
│   │   │   ├── notification_test.go
│   │   │   ├── ordering.go
│   │   │   ├── pages.go
│   │   │   ├── platform_parameter.go
│   │   │   ├── queryBuilder/
│   │   │   │   ├── expression.go
│   │   │   │   ├── query_builder.go
│   │   │   │   ├── query_builder_test.go
│   │   │   │   └── where.go
│   │   │   ├── querycost/
│   │   │   │   ├── explain.go
│   │   │   │   ├── formula.go
│   │   │   │   ├── formula_test.go
│   │   │   │   └── querycost.go
│   │   │   ├── queue_block.go
│   │   │   ├── queue_tx.go
│   │   │   ├── responecode.go
│   │   │   ├── result.go
│   │   │   ├── role.go
│   │   │   ├── roles_participants.go
│   │   │   ├── rollback_tx.go
│   │   │   ├── schema.go
│   │   │   ├── send_tx.go
│   │   │   ├── signatures.go
│   │   │   ├── snippet.go
│   │   │   ├── spent_info.go
│   │   │   ├── stop_daemons.go
│   │   │   ├── tables.go
│   │   │   ├── transaction.go
│   │   │   ├── transaction_status.go
│   │   │   ├── transactions_attempts.go
│   │   │   ├── tx_record.go
│   │   │   ├── upd_full_nodes.go
│   │   │   └── utxo_token.go
│   │   └── storage.go
│   ├── system/
│   │   ├── system.go
│   │   ├── system_notwindows.go
│   │   └── system_windows.go
│   ├── template/
│   │   ├── calculate.go
│   │   ├── dbfind.go
│   │   ├── funcs.go
│   │   └── template.go
│   ├── transaction/
│   │   ├── ban.go
│   │   ├── builder.go
│   │   ├── cache.go
│   │   ├── contract.go
│   │   ├── db.go
│   │   ├── deliver.go
│   │   ├── first_block.go
│   │   ├── limits.go
│   │   ├── play.go
│   │   ├── process.go
│   │   ├── raw.go
│   │   ├── smart_contract.go
│   │   ├── stop_network.go
│   │   └── transaction.go
│   ├── types/
│   │   ├── api.go
│   │   ├── block.pb.go
│   │   ├── block_data.go
│   │   ├── compress.go
│   │   ├── custom_tx.go
│   │   ├── file.go
│   │   ├── map.go
│   │   ├── mode_interfaces.go
│   │   ├── notifications.go
│   │   └── play.pb.go
│   └── utils/
│       ├── ban_error.go
│       ├── ban_error_test.go
│       ├── clock.go
│       ├── clock_mock.go
│       ├── metric/
│       │   ├── collector.go
│       │   ├── collector_test.go
│       │   └── metrics.go
│       ├── ntp.go
│       ├── utils.go
│       └── utils_test.go
└── tools/
    └── desync_monitor/
        ├── config/
        │   └── config.go
        ├── config.toml.temp
        ├── main.go
        └── query/
            ├── query.go
            └── utils.go
Download .txt
Showing preview only (324K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3834 symbols across 363 files)

FILE: cmd/config.go
  function init (line 52) | func init() {

FILE: cmd/generateFirstBlock.go
  function init (line 42) | func init() {
  function genesisBlock (line 48) | func genesisBlock() ([]byte, error) {

FILE: cmd/generateKeys.go
  constant fileMode (line 22) | fileMode = 0600
  function createFile (line 57) | func createFile(filename string, data []byte) error {
  function createKeyPair (line 69) | func createKeyPair(privFilename, pubFilename string) (priv, pub []byte, ...

FILE: cmd/rollback.go
  function init (line 61) | func init() {

FILE: cmd/root.go
  function init (line 32) | func init() {
  function Execute (line 56) | func Execute() {
  function defautConfigPath (line 62) | func defautConfigPath() string {
  function loadConfig (line 73) | func loadConfig(cmd *cobra.Command, args []string) {
  function loadConfigWKey (line 80) | func loadConfigWKey(cmd *cobra.Command, args []string) {

FILE: cmd/start.go
  function init (line 27) | func init() {

FILE: cmd/stopNetwork.go
  function init (line 60) | func init() {

FILE: main.go
  function main (line 13) | func main() {

FILE: packages/api/api.go
  constant multipartBuf (line 24) | multipartBuf      = 100000
  constant multipartFormData (line 25) | multipartFormData = "multipart/form-data"
  constant contentType (line 26) | contentType       = "Content-Type"
  type Mode (line 29) | type Mode struct
  type Client (line 36) | type Client struct
    method Prefix (line 44) | func (c *Client) Prefix() string {
  function jsonResponse (line 48) | func jsonResponse(w http.ResponseWriter, v any) {
  function errorResponse (line 59) | func errorResponse(w http.ResponseWriter, err error, code ...int) {
  type formValidator (line 76) | type formValidator interface
  type nopeValidator (line 80) | type nopeValidator struct
    method Validate (line 82) | func (np nopeValidator) Validate(r *http.Request) error {
  function parseForm (line 86) | func parseForm(r *http.Request, f formValidator) (err error) {
  function isMultipartForm (line 104) | func isMultipartForm(r *http.Request) bool {
  type hexValue (line 108) | type hexValue struct
    method Bytes (line 112) | func (hv hexValue) Bytes() []byte {
    method UnmarshalText (line 116) | func (hv *hexValue) UnmarshalText(v []byte) (err error) {

FILE: packages/api/api_test.go
  function PrivateToPublicHex (line 42) | func PrivateToPublicHex(hexkey string) (string, error) {
  function sendRawRequest (line 54) | func sendRawRequest(rtype, url string, form *url.Values) ([]byte, error) {
  function sendRequest (line 87) | func sendRequest(rtype, url string, form *url.Values, v any) error {
  function sendGet (line 96) | func sendGet(url string, form *url.Values, v any) error {
  function sendPost (line 100) | func sendPost(url string, form *url.Values, v any) error {
  function keyLogin (line 104) | func keyLogin(state int64) (err error) {
  function keyLoginToken (line 153) | func keyLoginToken(state int64) (err error) {
  function keyLoginex (line 204) | func keyLoginex(state int64, m ...string) (err error) {
  function waitTx (line 253) | func waitTx(hash string) (blockid int64, penalty int64, err error) {
  function randName (line 301) | func randName(prefix string) string {
  type getter (line 305) | type getter interface
  type contractParams (line 309) | type contractParams
    method Get (line 311) | func (cp *contractParams) Get(key string) string {
    method GetRaw (line 318) | func (cp *contractParams) GetRaw(key string) any {
  function postTxResult (line 322) | func postTxResult(name string, form getter) (id int64, msg string, err e...
  function postTxResultMultipart (line 414) | func postTxResultMultipart(name string, form getter) (id int64, msg stri...
  function postSignTxResult (line 522) | func postSignTxResult(name string, form getter) (id int64, msg string, e...
  function postTxResult2 (line 612) | func postTxResult2(name string, form getter) (id int64, msg string, err ...
  function RawToString (line 702) | func RawToString(input json.RawMessage) string {
  function postTx (line 707) | func postTx(txname string, form *url.Values) error {
  function postTxMultipart (line 712) | func postTxMultipart(txname string, form *url.Values) error {
  function postTransferSelfTxMultipart (line 717) | func postTransferSelfTxMultipart(form *url.Values) error {
  function postUTXOTxMultipart (line 722) | func postUTXOTxMultipart(form *url.Values) error {
  function postTransferSelfTxResult (line 727) | func postTransferSelfTxResult(form getter) (id int64, msg string, err er...
  function postUTXOTxResult (line 778) | func postUTXOTxResult(form getter) (id int64, msg string, err error) {
  function postSignTx (line 827) | func postSignTx(txname string, form *url.Values) error {
  function cutErr (line 832) | func cutErr(err error) string {
  function TestGetAvatar (line 840) | func TestGetAvatar(t *testing.T) {
  function sendMultipart (line 863) | func sendMultipart(url string, files map[string][]byte, v any) error {

FILE: packages/api/app_content.go
  type appContentResult (line 20) | type appContentResult struct
  method getAppContentHandler (line 26) | func (m Mode) getAppContentHandler(w http.ResponseWriter, r *http.Reques...

FILE: packages/api/app_content_test.go
  function TestAppContent (line 14) | func TestAppContent(t *testing.T) {

FILE: packages/api/appparam.go
  method GetAppParamHandler (line 19) | func (m Mode) GetAppParamHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/appparams.go
  type appParamsResult (line 20) | type appParamsResult struct
  type appParamsForm (line 25) | type appParamsForm struct
    method Validate (line 30) | func (f *appParamsForm) Validate(r *http.Request) error {
  method getAppParamsHandler (line 34) | func (m Mode) getAppParamsHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/auth.go
  type JWTClaims (line 32) | type JWTClaims struct
  function generateJWTToken (line 41) | func generateJWTToken(claims JWTClaims) (string, error) {
  function parseJWTToken (line 46) | func parseJWTToken(header string) (*jwt.Token, error) {
  function getClientFromToken (line 65) | func getClientFromToken(token *jwt.Token, ecosysNameService types.Ecosys...
  type authStatusResponse (line 91) | type authStatusResponse struct
  function getAuthStatus (line 96) | func getAuthStatus(w http.ResponseWriter, r *http.Request) {
  function InitJwtSecret (line 114) | func InitJwtSecret(secret []byte) {

FILE: packages/api/balance.go
  type balanceResult (line 19) | type balanceResult struct
  method getBalanceHandler (line 28) | func (m Mode) getBalanceHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/balance_test.go
  function TestBalance (line 14) | func TestBalance(t *testing.T) {
  function TestMoneyMoreSend (line 39) | func TestMoneyMoreSend(t *testing.T) {

FILE: packages/api/block.go
  type maxBlockResult (line 23) | type maxBlockResult struct
  function getMaxBlockHandler (line 27) | func getMaxBlockHandler(w http.ResponseWriter, r *http.Request) {
  type blockInfoResult (line 46) | type blockInfoResult struct
  function getBlockInfoHandler (line 57) | func getBlockInfoHandler(w http.ResponseWriter, r *http.Request) {
  type TxInfo (line 87) | type TxInfo struct
  type blocksTxInfoForm (line 94) | type blocksTxInfoForm struct
    method Validate (line 99) | func (f *blocksTxInfoForm) Validate(r *http.Request) error {
  function getBlocksTxInfoHandler (line 113) | func getBlocksTxInfoHandler(w http.ResponseWriter, r *http.Request) {
  type TxDetailedInfo (line 178) | type TxDetailedInfo struct
  type BlockHeaderInfo (line 188) | type BlockHeaderInfo struct
  type BlockDetailedInfo (line 199) | type BlockDetailedInfo struct
  function getBlocksDetailedInfoHandler (line 217) | func getBlocksDetailedInfoHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/block_test.go
  function TestGetMaxBlockID (line 14) | func TestGetMaxBlockID(t *testing.T) {
  function TestGetBlockInfo (line 20) | func TestGetBlockInfo(t *testing.T) {

FILE: packages/api/common_forms.go
  constant defaultPaginatorLimit (line 18) | defaultPaginatorLimit = 25
  constant maxPaginatorLimit (line 19) | maxPaginatorLimit     = 1000
  type paginatorForm (line 22) | type paginatorForm struct
    method Validate (line 29) | func (f *paginatorForm) Validate(r *http.Request) error {
  type paramsForm (line 44) | type paramsForm struct
    method AcceptNames (line 49) | func (f *paramsForm) AcceptNames() map[string]bool {
  type ecosystemForm (line 60) | type ecosystemForm struct
    method Validate (line 66) | func (f *ecosystemForm) Validate(r *http.Request) error {

FILE: packages/api/config.go
  type configOptionHandler (line 20) | type configOptionHandler
  function getConfigOptionHandler (line 22) | func getConfigOptionHandler(w http.ResponseWriter, r *http.Request) {
  function replaceHttpSchemeToWs (line 41) | func replaceHttpSchemeToWs(centrifugoURL string) string {
  function centrifugoAddressHandler (line 50) | func centrifugoAddressHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/content.go
  type contentResult (line 31) | type contentResult struct
  type hashResult (line 39) | type hashResult struct
  constant strTrue (line 44) | strTrue = `true`
  constant strOne (line 45) | strOne  = `1`
  function initVars (line 50) | func initVars(r *http.Request) *map[string]string {
  function parseEcosystem (line 101) | func parseEcosystem(in string) (string, string) {
  function pageValue (line 109) | func pageValue(r *http.Request) (*sqldb.Page, string, error) {
  function getPage (line 142) | func getPage(r *http.Request) (result *contentResult, err error) {
  function getPageHandler (line 206) | func getPageHandler(w http.ResponseWriter, r *http.Request) {
  function getPageHashHandler (line 216) | func getPageHashHandler(w http.ResponseWriter, r *http.Request) {
  function getMenuHandler (line 240) | func getMenuHandler(w http.ResponseWriter, r *http.Request) {
  type jsonContentForm (line 280) | type jsonContentForm struct
    method Validate (line 285) | func (f *jsonContentForm) Validate(r *http.Request) error {
  function jsonContentHandler (line 292) | func jsonContentHandler(w http.ResponseWriter, r *http.Request) {
  function getSourceHandler (line 310) | func getSourceHandler(w http.ResponseWriter, r *http.Request) {
  function getPageValidatorsCountHandler (line 324) | func getPageValidatorsCountHandler(w http.ResponseWriter, r *http.Reques...

FILE: packages/api/content_test.go
  function TestContentHash (line 18) | func TestContentHash(t *testing.T) {
  function TestContent (line 43) | func TestContent(t *testing.T) {

FILE: packages/api/context.go
  type contextKey (line 16) | type contextKey
  constant contextKeyLogger (line 19) | contextKeyLogger contextKey = iota
  constant contextKeyToken (line 20) | contextKeyToken
  constant contextKeyClient (line 21) | contextKeyClient
  function setContext (line 24) | func setContext(r *http.Request, key, value any) *http.Request {
  function getContext (line 28) | func getContext(r *http.Request, key any) any {
  function setLogger (line 32) | func setLogger(r *http.Request, log *log.Entry) *http.Request {
  function getLogger (line 36) | func getLogger(r *http.Request) *log.Entry {
  function setToken (line 43) | func setToken(r *http.Request, token *jwt.Token) *http.Request {
  function getToken (line 47) | func getToken(r *http.Request) *jwt.Token {
  function setClient (line 54) | func setClient(r *http.Request, client *Client) *http.Request {
  function getClient (line 58) | func getClient(r *http.Request) *Client {

FILE: packages/api/contract_test.go
  function init (line 22) | func init() {
  function TestBin (line 26) | func TestBin(t *testing.T) {
  function TestTransferSelf (line 34) | func TestTransferSelf(t *testing.T) {
  function TestUTXO (line 41) | func TestUTXO(t *testing.T) {
  function TestMath (line 48) | func TestMath(t *testing.T) {
  function TestArray (line 68) | func TestArray(t *testing.T) {
  function TestCheckCondition (line 76) | func TestCheckCondition(t *testing.T) {
  function TestDBFindContract (line 95) | func TestDBFindContract(t *testing.T) {
  function TestErrorContract (line 155) | func TestErrorContract(t *testing.T) {
  function TestUpdate_HonorNodes (line 190) | func TestUpdate_HonorNodes(t *testing.T) {
  function TestCrashContract (line 206) | func TestCrashContract(t *testing.T) {
  function TestHardContract (line 234) | func TestHardContract(t *testing.T) {
  function TestExistContract (line 258) | func TestExistContract(t *testing.T) {
  function TestDataContract (line 279) | func TestDataContract(t *testing.T) {
  function TestTypesContract (line 306) | func TestTypesContract(t *testing.T) {
  function TestNewContracts (line 329) | func TestNewContracts(t *testing.T) {
  function timeMustParse (line 808) | func timeMustParse(value string) string {
  function TestEditContracts (line 813) | func TestEditContracts(t *testing.T) {
  function TestNewTableWithEmptyName (line 883) | func TestNewTableWithEmptyName(t *testing.T) {
  function TestContracts (line 923) | func TestContracts(t *testing.T) {
  function TestSignature (line 938) | func TestSignature(t *testing.T) {
  function TestImport (line 1063) | func TestImport(t *testing.T) {
  function TestEditContracts_ChangeWallet (line 1078) | func TestEditContracts_ChangeWallet(t *testing.T) {
  function TestUpdateFunc (line 1151) | func TestUpdateFunc(t *testing.T) {
  function TestGlobalVars (line 1247) | func TestGlobalVars(t *testing.T) {
  function TestContractChain (line 1336) | func TestContractChain(t *testing.T) {
  function TestLoopCond (line 1416) | func TestLoopCond(t *testing.T) {
  function TestRand (line 1486) | func TestRand(t *testing.T) {
  function TestKillNode (line 1516) | func TestKillNode(t *testing.T) {
  function TestLoopCondExt (line 1524) | func TestLoopCondExt(t *testing.T) {
  function TestBlockTransactions (line 1575) | func TestBlockTransactions(t *testing.T) {
  function TestCost (line 1597) | func TestCost(t *testing.T) {
  function TestHard (line 1652) | func TestHard(t *testing.T) {
  function TestInsert (line 1676) | func TestInsert(t *testing.T) {
  function TestErrors (line 1704) | func TestErrors(t *testing.T) {
  function TestExternalNetwork (line 1768) | func TestExternalNetwork(t *testing.T) {
  function TestApos (line 1851) | func TestApos(t *testing.T) {
  function TestCondition (line 1874) | func TestCondition(t *testing.T) {
  function TestCurrentKeyFromAccount (line 1924) | func TestCurrentKeyFromAccount(t *testing.T) {

FILE: packages/api/contracts.go
  type contractsResult (line 18) | type contractsResult struct
  function getContractsHandler (line 23) | func getContractsHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/data.go
  constant binaryColumn (line 26) | binaryColumn = "data"
  function compareHash (line 28) | func compareHash(data []byte, urlHash string) bool {
  function getDataHandler (line 43) | func getDataHandler(w http.ResponseWriter, r *http.Request) {
  function getBinaryHandler (line 73) | func getBinaryHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/ecosystem.go
  function getEcosystemNameHandler (line 18) | func getEcosystemNameHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/ecosystem_params.go
  type paramResult (line 21) | type paramResult struct
  type paramsResult (line 28) | type paramsResult struct
  method getEcosystemParamsHandler (line 32) | func (m Mode) getEcosystemParamsHandler(w http.ResponseWriter, r *http.R...
  method getEcosystemParamHandler (line 69) | func (m Mode) getEcosystemParamHandler(w http.ResponseWriter, r *http.Re...

FILE: packages/api/ecosystem_test.go
  function TestNewEcosystem (line 18) | func TestNewEcosystem(t *testing.T) {
  function TestEditEcosystem (line 38) | func TestEditEcosystem(t *testing.T) {
  function TestPlatformParams (line 105) | func TestPlatformParams(t *testing.T) {
  function TestSystemParams (line 120) | func TestSystemParams(t *testing.T) {
  function TestSomeSystemParam (line 138) | func TestSomeSystemParam(t *testing.T) {
  function TestEcosystemParam (line 156) | func TestEcosystemParam(t *testing.T) {
  function TestAppParams (line 182) | func TestAppParams(t *testing.T) {

FILE: packages/api/errors.go
  type errType (line 61) | type errType struct
    method Error (line 67) | func (et errType) Error() string {
    method Errorf (line 71) | func (et errType) Errorf(v ...any) errType {

FILE: packages/api/getcontract.go
  type contractField (line 20) | type contractField struct
  type getContractResult (line 26) | type getContractResult struct
  function getContractInfoHandler (line 40) | func getContractInfoHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/getuid.go
  constant jwtUIDExpire (line 21) | jwtUIDExpire = time.Second * 5
  type getUIDResult (line 23) | type getUIDResult struct
  function getUIDHandler (line 35) | func getUIDHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/getuid_test.go
  function TestGetUID (line 19) | func TestGetUID(t *testing.T) {
  function TestNetwork (line 49) | func TestNetwork(t *testing.T) {

FILE: packages/api/history.go
  constant rollbackHistoryLimit (line 19) | rollbackHistoryLimit = 100
  type historyResult (line 21) | type historyResult struct
  function getHistoryHandler (line 25) | func getHistoryHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/history_test.go
  function TestHistory (line 13) | func TestHistory(t *testing.T) {

FILE: packages/api/import_test.go
  function ImportApps (line 22) | func ImportApps(path, appname string) error {
  function TestImportApps (line 58) | func TestImportApps(t *testing.T) {

FILE: packages/api/interface.go
  type componentModel (line 18) | type componentModel interface
  function getPageRowHandler (line 23) | func getPageRowHandler(w http.ResponseWriter, r *http.Request) {
  function getMenuRowHandler (line 27) | func getMenuRowHandler(w http.ResponseWriter, r *http.Request) {
  function getSnippetRowHandler (line 31) | func getSnippetRowHandler(w http.ResponseWriter, r *http.Request) {
  function getInterfaceRow (line 35) | func getInterfaceRow(w http.ResponseWriter, r *http.Request, c component...

FILE: packages/api/interface_test.go
  function TestGetInterfaceRow (line 18) | func TestGetInterfaceRow(t *testing.T) {
  function TestNewMenuNoError (line 56) | func TestNewMenuNoError(t *testing.T) {
  function TestEditMenuNoError (line 69) | func TestEditMenuNoError(t *testing.T) {
  function TestAppendMenuNoError (line 82) | func TestAppendMenuNoError(t *testing.T) {

FILE: packages/api/lang_test.go
  function TestLang (line 17) | func TestLang(t *testing.T) {

FILE: packages/api/limit_test.go
  function TestLimit (line 20) | func TestLimit(t *testing.T) {

FILE: packages/api/list.go
  type listResult (line 30) | type listResult struct
  type sumResult (line 35) | type sumResult struct
  type listForm (line 39) | type listForm struct
    method Validate (line 55) | func (f *listForm) Validate(r *http.Request) error {
  type listWhereForm (line 44) | type listWhereForm struct
  type SumWhereForm (line 50) | type SumWhereForm struct
    method Validate (line 62) | func (f *SumWhereForm) Validate(r *http.Request) error {
  function checkAccess (line 69) | func checkAccess(tableName, columns string, client *Client) (table strin...
  function getListHandler (line 85) | func getListHandler(w http.ResponseWriter, r *http.Request) {
  function getListWhereHandler (line 135) | func getListWhereHandler(w http.ResponseWriter, r *http.Request) {
  function getsumWhereHandler (line 247) | func getsumWhereHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/list_test.go
  function TestList (line 16) | func TestList(t *testing.T) {

FILE: packages/api/login.go
  function nonceSalt (line 31) | func nonceSalt() string {
  type loginForm (line 35) | type loginForm struct
    method Validate (line 54) | func (f *loginForm) Validate(r *http.Request) error {
  type publicKeyValue (line 44) | type publicKeyValue struct
    method UnmarshalText (line 48) | func (pk *publicKeyValue) UnmarshalText(v []byte) (err error) {
  type loginResult (line 62) | type loginResult struct
  type rolesResult (line 75) | type rolesResult struct
  method loginHandler (line 80) | func (m Mode) loginHandler(w http.ResponseWriter, r *http.Request) {
  function getUID (line 339) | func getUID(r *http.Request) (string, error) {
  function checkRoleFromParam (line 356) | func checkRoleFromParam(role, ecosystemID int64, account string) (int64,...
  function allowCreateUser (line 383) | func allowCreateUser(c *Client) bool {

FILE: packages/api/member.go
  function getAvatarHandler (line 20) | func getAvatarHandler(w http.ResponseWriter, r *http.Request) {
  function getMemberHandler (line 79) | func getMemberHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/metrics.go
  type blockMetric (line 24) | type blockMetric struct
  type blockMetricByNode (line 28) | type blockMetricByNode struct
  type txMetric (line 33) | type txMetric struct
  type ecosysMetric (line 37) | type ecosysMetric struct
  type keyMetric (line 41) | type keyMetric struct
  type honorNodeMetric (line 45) | type honorNodeMetric struct
  type memMetric (line 49) | type memMetric struct
  type banMetric (line 54) | type banMetric struct
  function blocksCountHandler (line 59) | func blocksCountHandler(w http.ResponseWriter, r *http.Request) {
  function blocksCountByNodeHandler (line 79) | func blocksCountByNodeHandler(w http.ResponseWriter, r *http.Request) {
  function txCountHandler (line 115) | func txCountHandler(w http.ResponseWriter, r *http.Request) {
  function ecosysCountHandler (line 127) | func ecosysCountHandler(w http.ResponseWriter, r *http.Request) {
  function keysCountHandler (line 139) | func keysCountHandler(w http.ResponseWriter, r *http.Request) {
  function honorNodesCountHandler (line 151) | func honorNodesCountHandler(w http.ResponseWriter, _ *http.Request) {
  function memStatHandler (line 159) | func memStatHandler(w http.ResponseWriter, _ *http.Request) {
  function banStatHandler (line 166) | func banStatHandler(w http.ResponseWriter, _ *http.Request) {

FILE: packages/api/middlewares.go
  function authRequire (line 23) | func authRequire(next func(w http.ResponseWriter, r *http.Request)) func...
  function loggerFromRequest (line 37) | func loggerFromRequest(r *http.Request) *log.Entry {
  function loggerMiddleware (line 45) | func loggerMiddleware(next http.Handler) http.Handler {
  function recoverMiddleware (line 54) | func recoverMiddleware(next http.Handler) http.Handler {
  function nodeStateMiddleware (line 72) | func nodeStateMiddleware(next http.Handler) http.Handler {
  function tokenMiddleware (line 92) | func tokenMiddleware(next http.Handler) http.Handler {
  method clientMiddleware (line 109) | func (m Mode) clientMiddleware(next http.Handler) http.Handler {
  function statsdMiddleware (line 129) | func statsdMiddleware(next http.Handler) http.Handler {

FILE: packages/api/network.go
  type HonorNodeJSON (line 18) | type HonorNodeJSON struct
  type NetworkResult (line 26) | type NetworkResult struct
  function GetNodesJSON (line 34) | func GetNodesJSON() []HonorNodeJSON {
  function getNetworkHandler (line 47) | func getNetworkHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/node.go
  function nodeContractHandler (line 13) | func nodeContractHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/platform_params.go
  function getPlatformParamsHandler (line 17) | func getPlatformParamsHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/read_test.go
  function TestRead (line 17) | func TestRead(t *testing.T) {

FILE: packages/api/request.go
  type Connect (line 29) | type Connect struct
    method SendGet (line 83) | func (connect *Connect) SendGet(url string, form *url.Values, v any) e...
    method SendPost (line 87) | func (connect *Connect) SendPost(url string, form *url.Values, v any) ...
    method SendMultipart (line 91) | func (connect *Connect) SendMultipart(url string, files map[string][]b...
    method WaitTx (line 139) | func (connect *Connect) WaitTx(hash string) (int64, error) {
    method WaitTxList (line 173) | func (connect *Connect) WaitTxList(hashes []string) (map[string]WaitRe...
    method PostTxResult (line 212) | func (connect *Connect) PostTxResult(name string, form *url.Values) (i...
    method Login (line 295) | func (connect *Connect) Login() error {
  type WaitResult (line 36) | type WaitResult struct
  function SendRawRequest (line 41) | func SendRawRequest(rtype, url, auth string, form *url.Values) ([]byte, ...
  function SendRequest (line 74) | func SendRequest(rtype, url, auth string, form *url.Values, v any) error {

FILE: packages/api/route.go
  constant corsMaxAge (line 15) | corsMaxAge = 600
  type Router (line 17) | type Router struct
    method GetAPI (line 22) | func (r Router) GetAPI() *mux.Router {
    method GetAPIVersion (line 26) | func (r Router) GetAPIVersion(preffix string) *mux.Router {
    method NewVersion (line 30) | func (r Router) NewVersion(preffix string) *mux.Router {
  method SetCommonRoutes (line 37) | func (m Mode) SetCommonRoutes(r Router) {
  method SetBlockchainRoutes (line 84) | func (m Mode) SetBlockchainRoutes(r Router) {
  function NoneMiddlewareRoutes (line 105) | func NoneMiddlewareRoutes(api *mux.Router, m Mode) {
  function SetOtherCommonRoutes (line 109) | func SetOtherCommonRoutes(api *mux.Router, m Mode) {
  function setOtherBlockChainRoutes (line 117) | func setOtherBlockChainRoutes(api *mux.Router, m Mode) {
  method SetSubNodeRoutes (line 121) | func (m Mode) SetSubNodeRoutes(r Router) {}
  function NewRouter (line 123) | func NewRouter(m Mode) Router {
  function WithCors (line 136) | func WithCors(h http.Handler) http.Handler {

FILE: packages/api/row.go
  type rowResult (line 20) | type rowResult struct
  type rowForm (line 24) | type rowForm struct
    method Validate (line 28) | func (f *rowForm) Validate(r *http.Request) error {
  function getRowHandler (line 40) | func getRowHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/sections.go
  constant defaultSectionsLimit (line 19) | defaultSectionsLimit = 100
  type sectionsForm (line 21) | type sectionsForm struct
    method Validate (line 26) | func (f *sectionsForm) Validate(r *http.Request) error {
  function getSectionsHandler (line 38) | func getSectionsHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/send_tx.go
  type sendTxResult (line 21) | type sendTxResult struct
  function getTxData (line 25) | func getTxData(r *http.Request, key string) ([]byte, error) {
  method sendTxHandler (line 44) | func (m Mode) sendTxHandler(w http.ResponseWriter, r *http.Request) {
  function txHandlerBatches (line 88) | func txHandlerBatches(r *http.Request, m Mode, mtx map[string][]byte) ([...

FILE: packages/api/smart_test.go
  type smartParams (line 25) | type smartParams struct
  type smartContract (line 30) | type smartContract struct
  function TestUpperName (line 36) | func TestUpperName(t *testing.T) {
  function TestSmartFields (line 69) | func TestSmartFields(t *testing.T) {
  function TestMoneyTransfer (line 95) | func TestMoneyTransfer(t *testing.T) {
  function TestRoleAccess (line 129) | func TestRoleAccess(t *testing.T) {
  function TestDBFind (line 149) | func TestDBFind(t *testing.T) {
  function TestPage (line 182) | func TestPage(t *testing.T) {
  function TestNewTableOnly (line 319) | func TestNewTableOnly(t *testing.T) {
  function TestUpperTable (line 334) | func TestUpperTable(t *testing.T) {
  function TestNewTable (line 352) | func TestNewTable(t *testing.T) {
  type invalidPar (line 429) | type invalidPar struct
  function TestUpdatePlatformParam (line 434) | func TestUpdatePlatformParam(t *testing.T) {
  function TestUpdateHonorNodesWithEmptyArray (line 508) | func TestUpdateHonorNodesWithEmptyArray(t *testing.T) {
  function TestValidateConditions (line 555) | func TestValidateConditions(t *testing.T) {
  function TestPartitialEdit (line 579) | func TestPartitialEdit(t *testing.T) {
  function TestContractEdit (line 639) | func TestContractEdit(t *testing.T) {
  function TestDelayedContracts (line 702) | func TestDelayedContracts(t *testing.T) {
  function TestJSON (line 736) | func TestJSON(t *testing.T) {
  function TestBytesToString (line 785) | func TestBytesToString(t *testing.T) {
  function TestMoneyDigits (line 810) | func TestMoneyDigits(t *testing.T) {
  function TestMemoryLimit (line 836) | func TestMemoryLimit(t *testing.T) {
  function TestStack (line 860) | func TestStack(t *testing.T) {
  function TestPageHistory (line 894) | func TestPageHistory(t *testing.T) {

FILE: packages/api/table.go
  type columnInfo (line 21) | type columnInfo struct
  type tableResult (line 27) | type tableResult struct
  function getTableHandler (line 39) | func getTableHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/tables.go
  type tableInfo (line 18) | type tableInfo struct
  type tablesResult (line 23) | type tablesResult struct
  function getTablesHandler (line 28) | func getTablesHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/tables_test.go
  function TestTables (line 16) | func TestTables(t *testing.T) {
  function TestTable (line 33) | func TestTable(t *testing.T) {
  function TestTableName (line 55) | func TestTableName(t *testing.T) {
  function TestJSONTable (line 134) | func TestJSONTable(t *testing.T) {
  function TestTableDesc (line 280) | func TestTableDesc(t *testing.T) {

FILE: packages/api/template_test.go
  type tplItem (line 27) | type tplItem struct
  type tplList (line 32) | type tplList
  function TestAPI (line 34) | func TestAPI(t *testing.T) {
  function TestMoney (line 196) | func TestMoney(t *testing.T) {
  function TestCutoff (line 218) | func TestCutoff(t *testing.T) {
  function TestBinary (line 299) | func TestBinary(t *testing.T) {
  function TestStringToBinary (line 365) | func TestStringToBinary(t *testing.T) {

FILE: packages/api/trash.go
  function getContract (line 15) | func getContract(r *http.Request, name string) *smart.Contract {
  function getContractInfo (line 28) | func getContractInfo(contract *smart.Contract) *script.ContractInfo {

FILE: packages/api/tx_record.go
  function getTxRecord (line 17) | func getTxRecord(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/txinfo.go
  type txinfoResult (line 25) | type txinfoResult struct
  type txInfoForm (line 31) | type txInfoForm struct
  type multiTxInfoResult (line 37) | type multiTxInfoResult struct
  function getTxInfo (line 41) | func getTxInfo(r *http.Request, txHash string, getInfo bool) (*txinfoRes...
  function getTxInfoHandler (line 76) | func getTxInfoHandler(w http.ResponseWriter, r *http.Request) {
  function getTxInfoMultiHandler (line 93) | func getTxInfoMultiHandler(w http.ResponseWriter, r *http.Request) {
  function transactionData (line 115) | func transactionData(blockId int64, txHash string) (*smart.TxInfo, error) {

FILE: packages/api/txstatus.go
  type txstatusError (line 20) | type txstatusError struct
  type txstatusResult (line 26) | type txstatusResult struct
  function getTxStatus (line 33) | func getTxStatus(r *http.Request, hash string) (*txstatusResult, error) {
  type multiTxStatusResult (line 76) | type multiTxStatusResult struct
  type txstatusRequest (line 80) | type txstatusRequest struct
  function getTxStatusHandler (line 84) | func getTxStatusHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/api/version.go
  function getVersionHandler (line 15) | func getVersionHandler(w http.ResponseWriter, r *http.Request) {

FILE: packages/block/block.go
  type Block (line 24) | type Block struct
    method GetLogger (line 37) | func (b *Block) GetLogger() *log.Entry {
    method IsGenesis (line 42) | func (b *Block) IsGenesis() bool {
    method limitMode (line 46) | func (b *Block) limitMode() transaction.LimitMode {
  function InsertBlockWOForksNew (line 57) | func InsertBlockWOForksNew(data []byte, classifyTxsMap map[int][]*transa...

FILE: packages/block/check.go
  method Check (line 25) | func (b *Block) Check() error {
  method CheckSign (line 100) | func (b *Block) CheckSign() error {

FILE: packages/block/db.go
  function ProcessBlockByBinData (line 30) | func ProcessBlockByBinData(data []byte, checkSize bool) (*Block, error) {
  method GetRollbacksHash (line 49) | func (b *Block) GetRollbacksHash(dbTx *sqldb.DbTransaction) ([]byte, err...
  function GetRollbacksHashWithDiffArr (line 58) | func GetRollbacksHashWithDiffArr(dbTx *sqldb.DbTransaction, bId int64) (...
  method InsertIntoBlockchain (line 89) | func (b *Block) InsertIntoBlockchain(dbTx *sqldb.DbTransaction) error {
  function GetBlockHeaderFromBlockChain (line 154) | func GetBlockHeaderFromBlockChain(blockID int64) (*types.BlockHeader, er...
  function GetDataFromFirstBlock (line 173) | func GetDataFromFirstBlock() (data *types.FirstBlock, ok bool) {
  method upsertInfoBlock (line 209) | func (b *Block) upsertInfoBlock(dbTx *sqldb.DbTransaction, block *sqldb....
  type AfterTxs (line 239) | type AfterTxs struct
  method GenAfterTxs (line 246) | func (b *Block) GenAfterTxs() *AfterTxs {
  method AfterPlayTxs (line 287) | func (b *Block) AfterPlayTxs(dbTx *sqldb.DbTransaction) error {

FILE: packages/block/play.go
  method PlaySafe (line 29) | func (b *Block) PlaySafe() error {
  type badTxStruct (line 62) | type badTxStruct struct
  method ProcessTxs (line 69) | func (b *Block) ProcessTxs(dbTx *sqldb.DbTransaction) (err error) {
  method serialExecuteTxs (line 239) | func (b *Block) serialExecuteTxs(dbTx *sqldb.DbTransaction, txBadChan ch...
  function groupUtxoTxs (line 343) | func groupUtxoTxs(txs []*transaction.Transaction, walletAddress map[int6...
  function groupTransferSelfTxs (line 396) | func groupTransferSelfTxs(txs []*transaction.Transaction, walletAddress ...

FILE: packages/block/serialization.go
  method repeatMarshallBlock (line 20) | func (b *Block) repeatMarshallBlock() error {
  function MarshallBlock (line 42) | func MarshallBlock(opts ...types.BlockDataOption) ([]byte, error) {
  function UnmarshallBlock (line 50) | func UnmarshallBlock(blockBuffer *bytes.Buffer, fill bool) (*Block, erro...

FILE: packages/chain/daemonsctl/daemonsctl.go
  function RunAllDaemons (line 15) | func RunAllDaemons(ctx context.Context) error {

FILE: packages/chain/notandroid.go
  function httpListener (line 19) | func httpListener(ListenHTTPHost string, route http.Handler) {

FILE: packages/chain/start.go
  function init (line 39) | func init() {
  function Start (line 46) | func Start() {
  function initStatsd (line 133) | func initStatsd() {
  function initLogs (line 139) | func initLogs() error {
  function initRoutes (line 192) | func initRoutes(listenHost string) {

FILE: packages/chain/system/pid.go
  function CreatePidFile (line 24) | func CreatePidFile() error {
  function RemovePidFile (line 40) | func RemovePidFile() error {
  function ReadPidFile (line 45) | func ReadPidFile() (int, error) {
  function killOldPid (line 64) | func killOldPid() {

FILE: packages/chain/system/unix.go
  function KillPid (line 19) | func KillPid(pid string) error {

FILE: packages/chain/system/windows.go
  function KillPid (line 23) | func KillPid(pid string) error {

FILE: packages/clbmanager/config.go
  constant inidDBCommand (line 14) | inidDBCommand  = "initDatabase"
  constant genKeysCommand (line 15) | genKeysCommand = "generateKeys"
  constant startCommand (line 16) | startCommand   = "start"
  type ChildCLBConfig (line 20) | type ChildCLBConfig struct
    method configCommand (line 32) | func (c ChildCLBConfig) configCommand() *exec.Cmd {
    method initDBCommand (line 51) | func (c ChildCLBConfig) initDBCommand() *exec.Cmd {
    method generateKeysCommand (line 55) | func (c ChildCLBConfig) generateKeysCommand() *exec.Cmd {
    method startCommand (line 59) | func (c ChildCLBConfig) startCommand() *exec.Cmd {
    method configPath (line 63) | func (c ChildCLBConfig) configPath() string {
    method getCommand (line 67) | func (c ChildCLBConfig) getCommand(commandName string) *exec.Cmd {

FILE: packages/clbmanager/manager.go
  constant childFolder (line 28) | childFolder        = "configs"
  constant createRoleTemplate (line 29) | createRoleTemplate = `CREATE ROLE %s WITH ENCRYPTED PASSWORD '%s' NOSUPE...
  constant createDBTemplate (line 30) | createDBTemplate   = `CREATE DATABASE %s OWNER %s`
  constant dropDBTemplate (line 32) | dropDBTemplate     = `DROP DATABASE IF EXISTS %s`
  constant dropOwnedTemplate (line 33) | dropOwnedTemplate  = `DROP OWNED BY %s CASCADE`
  constant dropDBRoleTemplate (line 34) | dropDBRoleTemplate = `DROP ROLE IF EXISTS %s`
  constant commandTemplate (line 35) | commandTemplate    = `%s start --config=%s`
  constant alreadyExistsErrorTemplate (line 37) | alreadyExistsErrorTemplate = `clb '%s' already exists`
  type CLBManager (line 46) | type CLBManager struct
    method CreateCLB (line 70) | func (mgr *CLBManager) CreateCLB(name, dbUser, dbPassword string, port...
    method ListProcess (line 161) | func (mgr *CLBManager) ListProcess() (map[string]string, error) {
    method ListProcessWithPorts (line 176) | func (mgr *CLBManager) ListProcessWithPorts() (map[string]string, erro...
    method DeleteCLB (line 197) | func (mgr *CLBManager) DeleteCLB(name string) error {
    method StartCLB (line 223) | func (mgr *CLBManager) StartCLB(name string) error {
    method StopCLB (line 252) | func (mgr *CLBManager) StopCLB(name string) error {
    method createCLBDB (line 279) | func (mgr *CLBManager) createCLBDB(clbName, login, pass string) error {
    method initCLBDir (line 299) | func (mgr *CLBManager) initCLBDir(clbName string) error {
    method configByName (line 406) | func (mgr *CLBManager) configByName(name string) (*conf.GlobalConfig, ...
  function prepareWorkDir (line 56) | func prepareWorkDir() (string, error) {
  function InitCLBManager (line 312) | func InitCLBManager() {
  function dropDb (line 358) | func dropDb(name, role string) error {
  function dropCLBDir (line 370) | func dropCLBDir(configsPath, clbName string) error {
  function directoryExists (line 380) | func directoryExists(path string) bool {
  function checkCLBName (line 390) | func checkCLBName(name string) error {

FILE: packages/common/crypto/asymalgo/asymalgo.go
  function ParseSign (line 11) | func ParseSign(sign string) (*big.Int, *big.Int, error) {
  function FillLeft (line 55) | func FillLeft(slice []byte) []byte {

FILE: packages/common/crypto/asymalgo/p256.go
  type P256 (line 14) | type P256 struct
    method GenKeyPair (line 16) | func (e *P256) GenKeyPair() ([]byte, []byte, error) {
    method Sign (line 26) | func (e *P256) Sign(privateKey, hash []byte) ([]byte, error) {
    method Verify (line 40) | func (e *P256) Verify(public, hash, signature []byte) (bool, error) {
    method PrivateToPublic (line 69) | func (e *P256) PrivateToPublic(key []byte) ([]byte, error) {

FILE: packages/common/crypto/asymalgo/secp256k1.go
  type Secp256k1 (line 15) | type Secp256k1 struct
    method GenKeyPair (line 17) | func (s *Secp256k1) GenKeyPair() ([]byte, []byte, error) {
    method Sign (line 26) | func (s *Secp256k1) Sign(privateKey, hash []byte) ([]byte, error) {
    method Verify (line 44) | func (s *Secp256k1) Verify(public, hash, signature []byte) (bool, erro...
    method PrivateToPublic (line 73) | func (s *Secp256k1) PrivateToPublic(key []byte) ([]byte, error) {

FILE: packages/common/crypto/asymalgo/sm2.go
  type SM2 (line 12) | type SM2 struct
    method GenKeyPair (line 14) | func (s *SM2) GenKeyPair() ([]byte, []byte, error) {
    method Sign (line 22) | func (s *SM2) Sign(privateKey, hash []byte) ([]byte, error) {
    method Verify (line 32) | func (s *SM2) Verify(public, hash, signature []byte) (bool, error) {
    method PrivateToPublic (line 56) | func (s *SM2) PrivateToPublic(key []byte) ([]byte, error) {

FILE: packages/common/crypto/base58/base58.go
  function ToHexAddress (line 12) | func ToHexAddress(address string) string {
  function FromHexAddress (line 16) | func FromHexAddress(hexAddress string) (string, error) {
  function base58Encode (line 34) | func base58Encode(input []byte) []byte {
  function base58Decode (line 48) | func base58Decode(input []byte) []byte {
  function reverseBytes (line 62) | func reverseBytes(data []byte) {

FILE: packages/common/crypto/checksum.go
  function init (line 13) | func init() {
  function CalcChecksum (line 18) | func CalcChecksum(input []byte) uint64 {

FILE: packages/common/crypto/converter.go
  function CutPub (line 18) | func CutPub(pubKey []byte) []byte {
  function Address (line 26) | func Address(pubKey []byte) int64 {
  function AddressSeed (line 36) | func AddressSeed(seed string) int64 {
  function buildChecksumConvert (line 43) | func buildChecksumConvert(crc uint64) int64 {
  function RepeatPrefixed (line 52) | func RepeatPrefixed(input string) []byte {
  function KeyToAddress (line 61) | func KeyToAddress(pubKey []byte) string {
  function GetWalletIDByPublicKey (line 66) | func GetWalletIDByPublicKey(publicKey []byte) (int64, error) {
  function HexToPub (line 72) | func HexToPub(pub string) ([]byte, error) {
  function PubToHex (line 81) | func PubToHex(pub []byte) string {

FILE: packages/common/crypto/crypto.go
  function NewAsymAlgo (line 22) | func NewAsymAlgo(a AsymAlgo) AsymProvider {
  function InitAsymAlgo (line 34) | func InitAsymAlgo(s string) {
  function GetAsymProvider (line 43) | func GetAsymProvider() AsymProvider {
  function NewHashAlgo (line 47) | func NewHashAlgo(a HashAlgo) HashProvider {
  function InitHashAlgo (line 61) | func InitHashAlgo(s string) {
  function GetHashProvider (line 70) | func GetHashProvider() HashProvider {
  function GenKeyPair (line 75) | func GenKeyPair() ([]byte, []byte, error) {
  function GenHexKeys (line 80) | func GenHexKeys() (string, string, error) {
  function Sign (line 88) | func Sign(privateKey, data []byte) ([]byte, error) {
  function Verify (line 92) | func Verify(public, data, signature []byte) (bool, error) {
  function PrivateToPublic (line 97) | func PrivateToPublic(key []byte) ([]byte, error) {
  function SignString (line 101) | func SignString(privateKeyHex, data string) ([]byte, error) {
  function GetHMAC (line 109) | func GetHMAC(secret string, message string) ([]byte, error) {
  function Hash (line 113) | func Hash(msg []byte) []byte {
  function DoubleHash (line 117) | func DoubleHash(msg []byte) []byte {
  function HashHex (line 121) | func HashHex(input []byte) string {

FILE: packages/common/crypto/crypto.pb.go
  constant _ (line 21) | _ = proto.GoGoProtoPackageIsVersion3
  type AsymAlgo (line 24) | type AsymAlgo
    method String (line 47) | func (x AsymAlgo) String() string {
    method EnumDescriptor (line 51) | func (AsymAlgo) EnumDescriptor() ([]byte, []int) {
  constant AsymAlgo_ECC_P256 (line 27) | AsymAlgo_ECC_P256      AsymAlgo = 0
  constant AsymAlgo_ECC_Secp256k1 (line 28) | AsymAlgo_ECC_Secp256k1 AsymAlgo = 1
  constant AsymAlgo_SM2 (line 29) | AsymAlgo_SM2           AsymAlgo = 2
  constant AsymAlgo_ECC_P512 (line 30) | AsymAlgo_ECC_P512      AsymAlgo = 3
  type SymAlgo (line 56) | type SymAlgo
    method String (line 73) | func (x SymAlgo) String() string {
    method EnumDescriptor (line 77) | func (SymAlgo) EnumDescriptor() ([]byte, []int) {
  constant SymAlgo_AES (line 59) | SymAlgo_AES SymAlgo = 0
  constant SymAlgo_SM4 (line 60) | SymAlgo_SM4 SymAlgo = 1
  type HashAlgo (line 82) | type HashAlgo
    method String (line 105) | func (x HashAlgo) String() string {
    method EnumDescriptor (line 109) | func (HashAlgo) EnumDescriptor() ([]byte, []int) {
  constant HashAlgo_SHA256 (line 85) | HashAlgo_SHA256    HashAlgo = 0
  constant HashAlgo_KECCAK256 (line 86) | HashAlgo_KECCAK256 HashAlgo = 1
  constant HashAlgo_SM3 (line 87) | HashAlgo_SM3       HashAlgo = 2
  constant HashAlgo_SHA3_256 (line 88) | HashAlgo_SHA3_256  HashAlgo = 3
  function init (line 113) | func init() {
  function init (line 119) | func init() { proto.RegisterFile("crypto.proto", fileDescriptor_527278fb...

FILE: packages/common/crypto/crypto_test.go
  function TestGetCryptoer (line 10) | func TestGetCryptoer(t *testing.T) {

FILE: packages/common/crypto/ecies/ecccrypt.go
  function init (line 22) | func init() {
  function EccPubEncrypt (line 40) | func EccPubEncrypt(plainText []byte, pub *ecdsa.PublicKey) (cryptText []...
  function EccPriDeCrypt (line 62) | func EccPriDeCrypt(cryptText []byte, priv *ecdsa.PrivateKey) (msg []byte...
  function EccCryptoKey (line 71) | func EccCryptoKey(plainText []byte, publickey string) (cryptoText []byte...
  function EccDeCrypto (line 83) | func EccDeCrypto(cryptoText []byte, prikey []byte) ([]byte, error) {
  function GetPrivateKeys (line 92) | func GetPrivateKeys(privateKey []byte) (ret *ecdsa.PrivateKey, err error) {
  function GetPublicKeys (line 103) | func GetPublicKeys(public []byte) (*ecdsa.PublicKey, error) {

FILE: packages/common/crypto/ecies/ecies.go
  type PublicKey (line 35) | type PublicKey struct
    method ExportECDSA (line 43) | func (pub *PublicKey) ExportECDSA() *ecdsa.PublicKey {
  function ImportECDSAPublic (line 48) | func ImportECDSAPublic(pub *ecdsa.PublicKey) *PublicKey {
  type PrivateKey (line 58) | type PrivateKey struct
    method ExportECDSA (line 64) | func (prv *PrivateKey) ExportECDSA() *ecdsa.PrivateKey {
    method GenerateShared (line 102) | func (prv *PrivateKey) GenerateShared(pub *PublicKey, skLen, macLen in...
    method Decrypt (line 276) | func (prv *PrivateKey) Decrypt(c, s1, s2 []byte) (m []byte, err error) {
  function ImportECDSA (line 71) | func ImportECDSA(prv *ecdsa.PrivateKey) *PrivateKey {
  function GenerateKey (line 78) | func GenerateKey(rand io.Reader, curve elliptic.Curve, params *ECIESPara...
  function MaxSharedKeyLength (line 97) | func MaxSharedKeyLength(pub *PublicKey) int {
  function incCounter (line 132) | func incCounter(ctr []byte) {
  function concatKDF (line 148) | func concatKDF(hash hash.Hash, z, s1 []byte, kdLen int) (k []byte, err e...
  function messageTag (line 177) | func messageTag(hash func() hash.Hash, km, msg, shared []byte) []byte {
  function generateIV (line 186) | func generateIV(params *ECIESParams, rand io.Reader) (iv []byte, err err...
  function symEncrypt (line 194) | func symEncrypt(rand io.Reader, params *ECIESParams, key, m []byte) (ct ...
  function symDecrypt (line 214) | func symDecrypt(params *ECIESParams, key, ct []byte) (m []byte, err erro...
  function Encrypt (line 232) | func Encrypt(rand io.Reader, pub *PublicKey, m, s1, s2 []byte) (ct []byt...
  function ParamsFromCurve (line 350) | func ParamsFromCurve(curve elliptic.Curve) (params *ECIESParams) {
  type ECIESParams (line 394) | type ECIESParams struct

FILE: packages/common/crypto/hashalgo/keccak256.go
  type Keccak256 (line 8) | type Keccak256 struct
    method GetHMAC (line 10) | func (k *Keccak256) GetHMAC(secret string, message string) ([]byte, er...
    method GetHash (line 16) | func (k *Keccak256) GetHash(msg []byte) []byte {
    method DoubleHash (line 20) | func (k *Keccak256) DoubleHash(msg []byte) []byte {
    method usingKeccak256 (line 24) | func (k *Keccak256) usingKeccak256(data []byte) []byte {

FILE: packages/common/crypto/hashalgo/sha256.go
  type SHA256 (line 8) | type SHA256 struct
    method GetHMAC (line 10) | func (s *SHA256) GetHMAC(secret string, message string) ([]byte, error) {
    method GetHash (line 15) | func (s *SHA256) GetHash(msg []byte) []byte {
    method DoubleHash (line 19) | func (s *SHA256) DoubleHash(msg []byte) []byte {
    method usingSha256 (line 23) | func (s *SHA256) usingSha256(data []byte) []byte {

FILE: packages/common/crypto/hashalgo/sha3_256.go
  type Sha3256 (line 9) | type Sha3256 struct
    method GetHMAC (line 11) | func (s *Sha3256) GetHMAC(secret string, message string) ([]byte, erro...
    method GetHash (line 17) | func (s *Sha3256) GetHash(msg []byte) []byte {
    method DoubleHash (line 21) | func (s *Sha3256) DoubleHash(msg []byte) []byte {
    method usingSha3 (line 25) | func (s *Sha3256) usingSha3(data []byte) []byte {

FILE: packages/common/crypto/hashalgo/sm3.go
  type SM3 (line 9) | type SM3 struct
    method GetHMAC (line 11) | func (s *SM3) GetHMAC(secret string, message string) ([]byte, error) {
    method GetHash (line 17) | func (s *SM3) GetHash(msg []byte) []byte {
    method DoubleHash (line 21) | func (s *SM3) DoubleHash(msg []byte) []byte {
    method usingSM3 (line 25) | func (s *SM3) usingSM3(data []byte) []byte {

FILE: packages/common/crypto/provider.go
  type AsymProvider (line 3) | type AsymProvider interface
  type HashProvider (line 11) | type HashProvider interface

FILE: packages/common/crypto/random.go
  function RandSeq (line 13) | func RandSeq(n int) string {

FILE: packages/common/crypto/symalgo/aes/aes.go
  function Encrypt (line 19) | func Encrypt(msg []byte, key []byte, iv []byte) ([]byte, error) {
  function Decrypt (line 24) | func Decrypt(msg []byte, key []byte, iv []byte) ([]byte, error) {
  function encryptCBC (line 44) | func encryptCBC(text, key, iv []byte) ([]byte, error) {
  function decryptCBC (line 69) | func decryptCBC(ciphertext, key, iv []byte) ([]byte, error) {
  function pKCS7Padding (line 93) | func pKCS7Padding(src []byte, blockSize int) []byte {
  function pKCS7UnPadding (line 99) | func pKCS7UnPadding(src []byte) ([]byte, error) {
  function PKCS5Padding (line 109) | func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
  function PKCS5UnPadding (line 115) | func PKCS5UnPadding(origData []byte) []byte {
  function AesEncrypt (line 121) | func AesEncrypt(origData, key []byte) ([]byte, error) {
  function AesDecrypt (line 134) | func AesDecrypt(crypted, key []byte) ([]byte, error) {

FILE: packages/common/crypto/symalgo/aes/aes_test.go
  function TestAesEncryptAndDecrypt (line 14) | func TestAesEncryptAndDecrypt(t *testing.T) {

FILE: packages/common/crypto/x509/cert.go
  type Cert (line 18) | type Cert struct
    method Validate (line 22) | func (c *Cert) Validate(pem []byte) error {
    method EqualBytes (line 35) | func (c *Cert) EqualBytes(bs ...[]byte) bool {
  function parseCert (line 50) | func parseCert(b []byte) (*x509.Certificate, error) {
  function ParseCert (line 64) | func ParseCert(b []byte) (c *Cert, err error) {

FILE: packages/common/log/filename_hook.go
  type ContextHook (line 20) | type ContextHook struct
    method Levels (line 23) | func (hook ContextHook) Levels() []logrus.Level {
    method Fire (line 28) | func (hook ContextHook) Fire(entry *logrus.Entry) error {

FILE: packages/common/log/hex_hook.go
  type HexHook (line 14) | type HexHook struct
    method Levels (line 17) | func (hook HexHook) Levels() []logrus.Level {
    method Fire (line 22) | func (hook HexHook) Fire(entry *logrus.Entry) error {

FILE: packages/common/log/syslog_hook.go
  function init (line 18) | func init() {
  function NewSyslogHook (line 43) | func NewSyslogHook(priority string, tag string) (*lSyslog.SyslogHook, er...

FILE: packages/common/log/syslog_hook_windows.go
  type SyslogHook (line 15) | type SyslogHook struct
    method Fire (line 24) | func (hook *SyslogHook) Fire(entry *logrus.Entry) error {
    method Levels (line 28) | func (hook *SyslogHook) Levels() []logrus.Level {
  function NewSyslogHook (line 20) | func NewSyslogHook(appName, facility string) (*SyslogHook, error) {

FILE: packages/common/random/rand.go
  type Rand (line 14) | type Rand struct
    method BytesSeed (line 18) | func (r *Rand) BytesSeed(b []byte) *rand.Rand {
  function NewRand (line 24) | func NewRand(seed int64) *Rand {
  function RandInt (line 30) | func RandInt(min, max int) int {
  constant KC_RAND_KIND_NUM (line 38) | KC_RAND_KIND_NUM   = 0
  constant KC_RAND_KIND_LOWER (line 39) | KC_RAND_KIND_LOWER = 1
  constant KC_RAND_KIND_UPPER (line 40) | KC_RAND_KIND_UPPER = 2
  constant KC_RAND_KIND_ALL (line 41) | KC_RAND_KIND_ALL   = 3
  function Krand (line 45) | func Krand(size int64, kind int) []byte {
  function RandNumber (line 60) | func RandNumber(size int64) string {

FILE: packages/common/random/rand_test.go
  function TestRand (line 13) | func TestRand(t *testing.T) {

FILE: packages/common/size.go
  type StorageSize (line 14) | type StorageSize
    method String (line 17) | func (s StorageSize) String() string {
    method TerminalString (line 33) | func (s StorageSize) TerminalString() string {

FILE: packages/conf/conf.go
  method Str (line 26) | func (h HostPort) Str() string {
  method GetPidPath (line 31) | func (c *GlobalConfig) GetPidPath() string {
  function LoadConfig (line 37) | func LoadConfig(path string) error {
  function LoadConfigToVar (line 47) | func LoadConfigToVar(path string, v *GlobalConfig) error {
  function GetConfigFromPath (line 67) | func GetConfigFromPath(path string) (*GlobalConfig, error) {
  function SaveConfig (line 91) | func SaveConfig(path string) error {
  function FillRuntimePaths (line 115) | func FillRuntimePaths() error {
  function FillRuntimeKey (line 150) | func FillRuntimeKey() error {
  function GetNodesAddr (line 168) | func GetNodesAddr() []string {
  function registerCrypto (line 172) | func registerCrypto(c CryptoSettings) {

FILE: packages/conf/runmode.go
  type RunMode (line 8) | type RunMode
    method IsCLBMaster (line 19) | func (rm RunMode) IsCLBMaster() bool {
    method IsCLB (line 24) | func (rm RunMode) IsCLB() bool {
    method IsNode (line 29) | func (rm RunMode) IsNode() bool {
    method IsSupportingCLB (line 34) | func (rm RunMode) IsSupportingCLB() bool {
    method IsSubNode (line 38) | func (rm RunMode) IsSubNode() bool {
  constant node (line 12) | node      RunMode = "NONE"
  constant clbMaster (line 13) | clbMaster RunMode = "CLBMaster"
  constant clb (line 14) | clb       RunMode = "CLB"
  constant subNode (line 15) | subNode   RunMode = "SubNode"
  method IsCLB (line 43) | func (c GlobalConfig) IsCLB() bool {
  method IsCLBMaster (line 48) | func (c GlobalConfig) IsCLBMaster() bool {
  method IsSupportingCLB (line 53) | func (c GlobalConfig) IsSupportingCLB() bool {
  method IsNode (line 58) | func (c GlobalConfig) IsNode() bool {
  method IsSubNode (line 63) | func (c GlobalConfig) IsSubNode() bool {

FILE: packages/conf/syspar/honornode.go
  constant publicKeyLength (line 23) | publicKeyLength = 64
  type honorNodeJSON (line 32) | type honorNodeJSON struct
  type HonorNode (line 41) | type HonorNode struct
    method UnmarshalJSON (line 50) | func (fn *HonorNode) UnmarshalJSON(b []byte) (err error) {
    method MarshalJSON (line 73) | func (fn *HonorNode) MarshalJSON() ([]byte, error) {
    method Validate (line 109) | func (fn *HonorNode) Validate() error {
  function validateURL (line 91) | func validateURL(rawurl string) error {
  function DuplicateHonorNode (line 122) | func DuplicateHonorNode(fn []*HonorNode) error {

FILE: packages/conf/syspar/honornode_test.go
  function TestHonorNode (line 16) | func TestHonorNode(t *testing.T) {

FILE: packages/conf/syspar/syspar.go
  constant NumberNodes (line 31) | NumberNodes = `number_of_nodes`
  constant FuelRate (line 33) | FuelRate = `fuel_rate`
  constant HonorNodes (line 35) | HonorNodes = `honor_nodes`
  constant GapsBetweenBlocks (line 37) | GapsBetweenBlocks = `gap_between_blocks`
  constant MaxBlockSize (line 39) | MaxBlockSize = `max_block_size`
  constant MaxTxSize (line 41) | MaxTxSize = `max_tx_size`
  constant MaxForsignSize (line 43) | MaxForsignSize = `max_forsign_size`
  constant MaxBlockFuel (line 45) | MaxBlockFuel = `max_fuel_block`
  constant MaxTxFuel (line 47) | MaxTxFuel = `max_fuel_tx`
  constant MaxTxCount (line 49) | MaxTxCount = `max_tx_block`
  constant MaxBlockGenerationTime (line 51) | MaxBlockGenerationTime = `max_block_generation_time`
  constant MaxColumns (line 53) | MaxColumns = `max_columns`
  constant MaxIndexes (line 55) | MaxIndexes = `max_indexes`
  constant MaxBlockUserTx (line 57) | MaxBlockUserTx = `max_tx_block_per_user`
  constant SizeFuel (line 59) | SizeFuel = `price_tx_data`
  constant TaxesWallet (line 61) | TaxesWallet = `taxes_wallet`
  constant RbBlocks1 (line 63) | RbBlocks1 = `rollback_blocks`
  constant BlockReward (line 65) | BlockReward = "block_reward"
  constant IncorrectBlocksPerDay (line 67) | IncorrectBlocksPerDay = `incorrect_blocks_per_day`
  constant NodeBanTime (line 69) | NodeBanTime = `node_ban_time`
  constant LocalNodeBanTime (line 71) | LocalNodeBanTime = `local_node_ban_time`
  constant TaxesSize (line 73) | TaxesSize = `taxes_size`
  constant PriceTxSize (line 75) | PriceTxSize = `price_tx_size`
  constant PriceCreateRate (line 77) | PriceCreateRate = `price_create_rate`
  constant Test (line 79) | Test = `test`
  constant PrivateBlockchain (line 81) | PrivateBlockchain = `private_blockchain`
  constant CostDefault (line 84) | CostDefault = int64(20000000)
  constant PriceExec (line 86) | PriceExec       = "price_exec_"
  constant AccessExec (line 87) | AccessExec      = "access_exec_"
  constant PriceCreateExec (line 88) | PriceCreateExec = "price_create_exec_"
  constant PayFreeContract (line 89) | PayFreeContract = "pay_free_contract"
  function ReadNodeKeys (line 109) | func ReadNodeKeys() (err error) {
  function GetSysParCache (line 131) | func GetSysParCache() map[string]string {
  function GetNodePubKey (line 139) | func GetNodePubKey() []byte {
  function GetNodePrivKey (line 143) | func GetNodePrivKey() []byte {
  function SysUpdate (line 148) | func SysUpdate(dbTx *sqldb.DbTransaction) error {
  function updateNodes (line 189) | func updateNodes() (err error) {
  function addHonorNodeKeys (line 218) | func addHonorNodeKeys(publicKey []byte) {
  function GetNodes (line 224) | func GetNodes() []HonorNode {
  function GetThisNodePosition (line 236) | func GetThisNodePosition() (int64, error) {
  function GetHonorNodeType (line 240) | func GetHonorNodeType() bool {
  function GetNodePositionByPublicKey (line 252) | func GetNodePositionByPublicKey(publicKey []byte) (int64, error) {
  function GetCountOfActiveNodes (line 273) | func GetCountOfActiveNodes() int64 {
  function GetNumberOfNodes (line 278) | func GetNumberOfNodes() int64 {
  function GetNumberOfNodesFromDB (line 282) | func GetNumberOfNodesFromDB(transaction *sqldb.DbTransaction) int64 {
  function GetNodeByPosition (line 319) | func GetNodeByPosition(position int64) (*HonorNode, error) {
  function GetNodeByHost (line 328) | func GetNodeByHost(host string) (HonorNode, error) {
  function GetNodeHostByPosition (line 341) | func GetNodeHostByPosition(position int64) (string, error) {
  function GetNodePublicKeyByPosition (line 367) | func GetNodePublicKeyByPosition(position int64) ([]byte, error) {
  function SysInt64 (line 396) | func SysInt64(name string) int64 {
  function SysInt (line 401) | func SysInt(name string) int {
  function GetSizeFuel (line 406) | func GetSizeFuel() int64 {
  function GetFuelRate (line 411) | func GetFuelRate(ecosystem int64) string {
  function HasFuelRate (line 421) | func HasFuelRate(ecosystem int64) (string, bool) {
  function GetTaxesWallet (line 431) | func GetTaxesWallet(ecosystem int64) string {
  function HasTaxesWallet (line 441) | func HasTaxesWallet(ecosystem int64) (string, bool) {
  function GetMaxBlockSize (line 451) | func GetMaxBlockSize() int64 {
  function GetMaxBlockFuel (line 456) | func GetMaxBlockFuel() int64 {
  function GetMaxTxFuel (line 461) | func GetMaxTxFuel() int64 {
  function GetMaxBlockGenerationTime (line 466) | func GetMaxBlockGenerationTime() int64 {
  function GetGapsBetweenBlocks (line 471) | func GetGapsBetweenBlocks() int64 {
  function GetMaxBlockTimeDuration (line 476) | func GetMaxBlockTimeDuration() time.Duration {
  function GetMaxTxSize (line 481) | func GetMaxTxSize() int64 {
  function GetMaxForsignSize (line 486) | func GetMaxForsignSize() int64 {
  function GetMaxTxCount (line 491) | func GetMaxTxCount() int {
  function GetMaxColumns (line 496) | func GetMaxColumns() int {
  function GetMaxIndexes (line 501) | func GetMaxIndexes() int {
  function GetMaxBlockUserTx (line 506) | func GetMaxBlockUserTx() int {
  function IsTestMode (line 510) | func IsTestMode() bool {
  function GetIncorrectBlocksPerDay (line 514) | func GetIncorrectBlocksPerDay() int {
  function GetNodeBanTime (line 518) | func GetNodeBanTime() time.Duration {
  function GetLocalNodeBanTime (line 522) | func GetLocalNodeBanTime() time.Duration {
  function GetDefaultRemoteHosts (line 527) | func GetDefaultRemoteHosts() []string {
  function GetRemoteHosts (line 546) | func GetRemoteHosts() []string {
  function SysString (line 562) | func SysString(name string) string {
  function GetRbBlocks1 (line 570) | func GetRbBlocks1() int64 {
  function HasSys (line 575) | func HasSys(name string) bool {
  function SetFirstBlockTimestamp (line 582) | func SetFirstBlockTimestamp(data int64) {
  function SetFirstBlockData (line 589) | func SetFirstBlockData(data *types.FirstBlock) {
  function GetFirstBlockTimestamp (line 606) | func GetFirstBlockTimestamp() int64 {
  function GetFirstBlockData (line 614) | func GetFirstBlockData() (*types.FirstBlock, error) {
  function IsPrivateBlockchain (line 626) | func IsPrivateBlockchain() bool {
  function GetMaxCost (line 631) | func GetMaxCost() int64 {
  function GetAccessExec (line 639) | func GetAccessExec(s string) string {
  function GetPriceExec (line 643) | func GetPriceExec(s string) (price int64, ok bool) {
  function GetPriceCreateExec (line 651) | func GetPriceCreateExec(s string) (price int64) {
  function SysTableColType (line 660) | func SysTableColType(dbTx *sqldb.DbTransaction) error {
  function GetTableColType (line 673) | func GetTableColType() []map[string]string {
  function IsByteColumn (line 679) | func IsByteColumn(table, column string) bool {
  function SetRunModel (line 688) | func SetRunModel(setVal uint8) {
  function IsHonorNodeMode (line 692) | func IsHonorNodeMode() bool {
  function IsCandidateNodeMode (line 696) | func IsCandidateNodeMode() bool {

FILE: packages/conf/types.go
  type HostPort (line 5) | type HostPort struct
  type DBConfig (line 11) | type DBConfig struct
  type RedisConfig (line 24) | type RedisConfig struct
  type StatsDConfig (line 33) | type StatsDConfig struct
  type CentrifugoConfig (line 40) | type CentrifugoConfig struct
  type Syslog (line 47) | type Syslog struct
  type LogConfig (line 53) | type LogConfig struct
  type TokenMovementConfig (line 61) | type TokenMovementConfig struct
  type BanKeyConfig (line 72) | type BanKeyConfig struct
  type TLSConfig (line 78) | type TLSConfig struct
  type DirectoryConfig (line 84) | type DirectoryConfig struct
  type BootstrapNodeConfig (line 93) | type BootstrapNodeConfig struct
  type CryptoSettings (line 97) | type CryptoSettings struct
  type LocalConfig (line 103) | type LocalConfig struct
  type BlockSyncMethod (line 109) | type BlockSyncMethod struct
  type GlobalConfig (line 113) | type GlobalConfig struct

FILE: packages/consts/conf.go
  constant DefaultConfigFile (line 10) | DefaultConfigFile = "config.toml"
  constant DefaultTempDirName (line 13) | DefaultTempDirName = "ibax-temp"
  constant DefaultWorkdirName (line 16) | DefaultWorkdirName = "data"
  constant DefaultPidFilename (line 19) | DefaultPidFilename = "go-ibax.pid"
  constant DefaultLockFilename (line 22) | DefaultLockFilename = "go-ibax.lock"
  constant FirstBlockFilename (line 25) | FirstBlockFilename = "1block"
  constant PrivateKeyFilename (line 28) | PrivateKeyFilename = "PrivateKey"
  constant PublicKeyFilename (line 31) | PublicKeyFilename = "PublicKey"
  constant NodePrivateKeyFilename (line 34) | NodePrivateKeyFilename = "NodePrivateKey"
  constant NodePublicKeyFilename (line 37) | NodePublicKeyFilename = "NodePublicKey"
  constant KeyIDFilename (line 40) | KeyIDFilename = "KeyID"

FILE: packages/consts/consts.go
  constant VERSION (line 15) | VERSION = "1.4.3"
  constant BvRollbackHash (line 17) | BvRollbackHash = 2
  constant BvIncludeRollbackHash (line 18) | BvIncludeRollbackHash = 3
  constant BlockVersion (line 21) | BlockVersion = BvIncludeRollbackHash
  constant DefaultTcpPort (line 24) | DefaultTcpPort = 7078
  constant FounderAmount (line 27) | FounderAmount = 5250000
  constant MoneyDigits (line 30) | MoneyDigits = 12
  constant WaitConfirmedNodes (line 33) | WaitConfirmedNodes = 10
  constant MinConfirmedNodes (line 36) | MinConfirmedNodes = 0
  constant MaxTxForw (line 39) | MaxTxForw = 600
  constant MaxTxBack (line 42) | MaxTxBack = 86400
  constant RoundFix (line 45) | RoundFix = 0.00000000001
  constant ReadTimeout (line 48) | ReadTimeout = 20
  constant WriteTimeout (line 51) | WriteTimeout = 20
  constant AddressLength (line 54) | AddressLength = 20
  constant PubkeySizeLength (line 57) | PubkeySizeLength = 64
  constant PrivkeyLength (line 60) | PrivkeyLength = 32
  constant BlockSize (line 63) | BlockSize = 16
  constant HashSize (line 66) | HashSize = 32
  constant AvailableBCGap (line 68) | AvailableBCGap = 4
  constant DefaultNodesConnectDelay (line 70) | DefaultNodesConnectDelay = 6
  constant MaxTXAttempt (line 72) | MaxTXAttempt = 10
  constant ChainSize (line 75) | ChainSize = 1 << 20
  constant DefaultTokenSymbol (line 78) | DefaultTokenSymbol = "IBXC"
  constant DefaultTokenName (line 81) | DefaultTokenName = "IBAX Coin"
  constant DefaultEcosystemName (line 84) | DefaultEcosystemName = "platform ecosystem"
  constant RollbackResultFilename (line 94) | RollbackResultFilename = "rollback_result"
  constant FromToPerDayLimit (line 97) | FromToPerDayLimit = 10000
  constant TokenMovementQtyPerBlockLimit (line 100) | TokenMovementQtyPerBlockLimit = 100
  constant TCPConnTimeout (line 103) | TCPConnTimeout = 5 * time.Second
  constant TxRequestExpire (line 106) | TxRequestExpire = 1 * time.Minute
  constant DefaultCLB (line 109) | DefaultCLB = 1
  constant MoneyLength (line 112) | MoneyLength = 30
  constant DefaultTokenEcosystem (line 114) | DefaultTokenEcosystem = 1
  constant ShiftContractID (line 117) | ShiftContractID = 5000
  constant ContractList (line 120) | ContractList = 200
  constant GuestPublic (line 123) | GuestPublic  = "ef0ab117793962b7b3ee8d2ae94b58bbd7db1aa856a7dc623fdb28ad...
  constant GuestKey (line 124) | GuestKey     = "-110277540701013350"
  constant GuestAddress (line 125) | GuestAddress = "1833-6466-5330-0853-8266"
  constant StatusMainPage (line 128) | StatusMainPage = `2`
  constant NoneCLB (line 130) | NoneCLB     = "none"
  constant DBFindLimit (line 131) | DBFindLimit = 10000
  constant HonorNodeMode (line 133) | HonorNodeMode     = 1
  constant CandidateNodeMode (line 134) | CandidateNodeMode = 2
  constant SavePointMarkBlock (line 138) | SavePointMarkBlock = "block"
  constant SavePointMarkTx (line 139) | SavePointMarkTx    = "tx"
  function Version (line 142) | func Version() string {
  function SetSavePointMarkBlock (line 146) | func SetSavePointMarkBlock(idTx string) string {
  constant UTXO_Type_First_Block (line 151) | UTXO_Type_First_Block  = 1
  constant UTXO_Type_Self_UTXO (line 152) | UTXO_Type_Self_UTXO    = 11
  constant UTXO_Type_Self_Account (line 153) | UTXO_Type_Self_Account = 12
  constant UTXO_Type_Packaging (line 154) | UTXO_Type_Packaging    = 20
  constant UTXO_Type_Taxes (line 155) | UTXO_Type_Taxes        = 21
  constant UTXO_Type_Output (line 156) | UTXO_Type_Output       = 22
  constant UTXO_Type_Combustion (line 157) | UTXO_Type_Combustion   = 23
  constant UTXO_Type_Transfer (line 158) | UTXO_Type_Transfer     = 26

FILE: packages/consts/log_types.go
  type LogEventType (line 9) | type LogEventType
  constant NetworkError (line 13) | NetworkError             = "Network"
  constant JSONMarshallError (line 14) | JSONMarshallError        = "JSONMarshall"
  constant JSONUnmarshallError (line 15) | JSONUnmarshallError      = "JSONUnmarshall"
  constant CommandExecutionError (line 16) | CommandExecutionError    = "CommandExecution"
  constant ConversionError (line 17) | ConversionError          = "Conversion"
  constant TypeError (line 18) | TypeError                = "Type"
  constant ProtocolError (line 19) | ProtocolError            = "Protocol"
  constant MarshallingError (line 20) | MarshallingError         = "Marshall"
  constant UnmarshallingError (line 21) | UnmarshallingError       = "Unmarshall"
  constant ParseError (line 22) | ParseError               = "Parse"
  constant IOError (line 23) | IOError                  = "IO"
  constant CryptoError (line 24) | CryptoError              = "Crypto"
  constant ContractError (line 25) | ContractError            = "Contract"
  constant DBError (line 26) | DBError                  = "DB"
  constant PanicRecoveredError (line 27) | PanicRecoveredError      = "Panic"
  constant ConnectionError (line 28) | ConnectionError          = "Connection"
  constant ConfigError (line 29) | ConfigError              = "Config"
  constant VMError (line 30) | VMError                  = "VM"
  constant JustWaiting (line 31) | JustWaiting              = "JustWaiting"
  constant Ntpdate (line 32) | Ntpdate                  = "Ntpdate"
  constant BlockError (line 33) | BlockError               = "Block"
  constant ParserError (line 34) | ParserError              = "Parser"
  constant ContextError (line 35) | ContextError             = "Context"
  constant SessionError (line 36) | SessionError             = "Session"
  constant RouteError (line 37) | RouteError               = "Route"
  constant NotFound (line 38) | NotFound                 = "NotFound"
  constant Found (line 39) | Found                    = "Found"
  constant EmptyObject (line 40) | EmptyObject              = "EmptyObject"
  constant InvalidObject (line 41) | InvalidObject            = "InvalidObject"
  constant DuplicateObject (line 42) | DuplicateObject          = "DuplicateObject"
  constant UnknownObject (line 43) | UnknownObject            = "UnknownObject"
  constant ParameterExceeded (line 44) | ParameterExceeded        = "ParameterExceeded"
  constant DivisionByZero (line 45) | DivisionByZero           = "DivisionByZero"
  constant EvalError (line 46) | EvalError                = "Eval"
  constant JWTError (line 47) | JWTError                 = "JWT"
  constant AccessDenied (line 48) | AccessDenied             = "AccessDenied"
  constant SizeDoesNotMatch (line 49) | SizeDoesNotMatch         = "SizeDoesNotMatch"
  constant NoIndex (line 50) | NoIndex                  = "NoIndex"
  constant NoFunds (line 51) | NoFunds                  = "NoFunds"
  constant BlockIsFirst (line 52) | BlockIsFirst             = "BlockIsFirst"
  constant IncorrectCallingContract (line 53) | IncorrectCallingContract = "IncorrectCallingContract"
  constant WritingFile (line 54) | WritingFile              = "WritingFile"
  constant CentrifugoError (line 55) | CentrifugoError          = "CentrifugoError"
  constant StatsdError (line 56) | StatsdError              = "StatsdError"
  constant MigrationError (line 57) | MigrationError           = "MigrationError"
  constant AutoupdateError (line 58) | AutoupdateError          = "AutoupdateError"
  constant BCRelevanceError (line 59) | BCRelevanceError         = "BCRelevanceError"
  constant BCActualizationError (line 60) | BCActualizationError     = "BCActualizationError"
  constant SchedulerError (line 61) | SchedulerError           = "SchedulerError"
  constant SyncProcess (line 62) | SyncProcess              = "SyncProcess"
  constant WrongModeError (line 63) | WrongModeError           = "WrongModeError"
  constant CLBManagerError (line 64) | CLBManagerError          = "CLBManagerError"
  constant TCPClientError (line 65) | TCPClientError           = "TCPClientError"
  constant BadTxError (line 66) | BadTxError               = "BadTxError"
  constant TimeCalcError (line 67) | TimeCalcError            = "BlockTimeCounterError"
  constant RegisterError (line 68) | RegisterError            = "RegisterError"
  constant JsonRpcError (line 69) | JsonRpcError             = "JsonRpcError"

FILE: packages/converter/address.go
  type Hole (line 15) | type Hole struct
  constant BlackHoleAddr (line 21) | BlackHoleAddr = "BlackHole"
  constant WhiteHoleAddr (line 22) | WhiteHoleAddr = "WhiteHole"
  function AddressToID (line 33) | func AddressToID(input string) (addr int64) {
  function IDToAddress (line 60) | func IDToAddress(id int64) (out string) {
  function AddressToString (line 69) | func AddressToString(int int64) (str string) {
  function AddressToStringUint64 (line 73) | func AddressToStringUint64(uint uint64) (str string) {
  function StringToAddress (line 88) | func StringToAddress(str string) (result int64) {
  function IsValidAddress (line 123) | func IsValidAddress(address string) bool {
  function CheckSum (line 135) | func CheckSum(val []byte) int {
  function has4LineContain (line 152) | func has4LineContain(str string) bool {

FILE: packages/converter/converter.go
  function EncodeLenInt64 (line 54) | func EncodeLenInt64(data *[]byte, x int64) *[]byte {
  function EncodeLenInt64InPlace (line 64) | func EncodeLenInt64InPlace(x int64) []byte {
  function EncodeLenByte (line 75) | func EncodeLenByte(out *[]byte, buf []byte) *[]byte {
  function EncodeLength (line 86) | func EncodeLength(length int64) []byte {
  function DecodeLenInt64 (line 101) | func DecodeLenInt64(data *[]byte) (int64, error) {
  function DecodeLenInt64Buf (line 117) | func DecodeLenInt64Buf(buf *bytes.Buffer) (int64, error) {
  function DecodeLength (line 145) | func DecodeLength(buf *[]byte) (ret int64, err error) {
  function DecodeLengthBuf (line 165) | func DecodeLengthBuf(buf *bytes.Buffer) (int, error) {
  function DecodeBytesBuf (line 194) | func DecodeBytesBuf(buf *bytes.Buffer) ([]byte, error) {
  function BinMarshal (line 206) | func BinMarshal(out *[]byte, v any) (*[]byte, error) {
  function BinUnmarshalBuff (line 265) | func BinUnmarshalBuff(buf *bytes.Buffer, v any) error {
  function BinUnmarshal (line 361) | func BinUnmarshal(out *[]byte, v any) error {
  function Sanitize (line 442) | func Sanitize(name string, available string) string {
  function SanitizeScript (line 454) | func SanitizeScript(input string) string {
  function SanitizeName (line 459) | func SanitizeName(input string) string {
  function SanitizeNumber (line 464) | func SanitizeNumber(input string) string {
  function EscapeSQL (line 468) | func EscapeSQL(name string) string {
  function EscapeName (line 474) | func EscapeName(name string) string {
  function float2Bytes (line 491) | func float2Bytes(float float64) []byte {
  function bytes2Float (line 498) | func bytes2Float(bytes []byte) float64 {
  function UInt32ToStr (line 503) | func UInt32ToStr(num uint32) string {
  function Int64ToStr (line 508) | func Int64ToStr(num int64) string {
  function Int64ToByte (line 513) | func Int64ToByte(num int64) []byte {
  function IntToStr (line 518) | func IntToStr(num int) string {
  function DecToBin (line 523) | func DecToBin(v any, sizeBytes int64) []byte {
  function BinToHex (line 540) | func BinToHex(v any) []byte {
  function HexToBin (line 554) | func HexToBin(ihexdata any) []byte {
  function BinToDec (line 574) | func BinToDec(bin []byte) int64 {
  function BinToDecBytesShift (line 585) | func BinToDecBytesShift(bin *[]byte, num int64) int64 {
  function BytesShift (line 590) | func BytesShift(str *[]byte, index int64) (ret []byte) {
  function InterfaceToStr (line 600) | func InterfaceToStr(v any) (string, error) {
  function InterfaceSliceToStr (line 633) | func InterfaceSliceToStr(i []any) (strs []string, err error) {
  function InterfaceToFloat64 (line 646) | func InterfaceToFloat64(i any) float64 {
  function BytesShiftReverse (line 664) | func BytesShiftReverse(str *[]byte, v any) []byte {
  function StrToInt64 (line 684) | func StrToInt64(s string) int64 {
  function BytesToInt64 (line 690) | func BytesToInt64(s []byte) int64 {
  function StrToUint64 (line 696) | func StrToUint64(s string) uint64 {
  function StrToInt (line 702) | func StrToInt(s string) int {
  function Float64ToStr (line 708) | func Float64ToStr(f float64) string {
  function StrToFloat64 (line 713) | func StrToFloat64(s string) float64 {
  function BytesToFloat64 (line 719) | func BytesToFloat64(s []byte) float64 {
  function BytesToInt (line 725) | func BytesToInt(s []byte) int {
  function StrToMoney (line 731) | func StrToMoney(str string) float64 {
  function EncodeLengthPlusData (line 747) | func EncodeLengthPlusData(idata any) []byte {
  function FormatMoney (line 763) | func FormatMoney(exp string, digit int32) (string, error) {
  function EscapeForJSON (line 784) | func EscapeForJSON(data string) string {
  function ValidateEmail (line 789) | func ValidateEmail(email string) bool {
  function ParseName (line 796) | func ParseName(in string) (id int64, name string) {
  function ParseTable (line 809) | func ParseTable(tblname string, defaultEcosystem int64) string {
  function SubNodeParseTable (line 822) | func SubNodeParseTable(tblname string, defaultEcosystem int64) string {
  function SliceReverse (line 837) | func SliceReverse(s []int64) []int64 {
  function SortMap (line 845) | func SortMap(m map[int64]string) []map[int64]string {
  function RSortMap (line 859) | func RSortMap(m map[int64]string) []map[int64]string {
  function InSliceString (line 874) | func InSliceString(search string, slice []string) bool {
  function StripTags (line 884) | func StripTags(value string) string {
  function IsLatin (line 889) | func IsLatin(name string) bool {
  function Escape (line 900) | func Escape(data string) string {
  function FieldToBytes (line 914) | func FieldToBytes(v any, num int) []byte {
  function NumString (line 939) | func NumString(in string) string {
  function Round (line 953) | func Round(num float64) int64 {
  function RoundWithPrecision (line 962) | func RoundWithPrecision(num float64, precision int) float64 {
  function RoundWithoutPrecision (line 969) | func RoundWithoutPrecision(num float64) int64 {
  function ValueToInt (line 978) | func ValueToInt(v any) (ret int64, err error) {
  function ValueToDecimal (line 1015) | func ValueToDecimal(v any) (ret decimal.Decimal, err error) {
  function Int64ToDateStr (line 1034) | func Int64ToDateStr(date int64, format string) string {
  function Int64Toint (line 1039) | func Int64Toint(dat int64) (int, error) {
  function MarshalJson (line 1044) | func MarshalJson(v any) string {

FILE: packages/daemons/block_generator.go
  function BlockGenerator (line 31) | func BlockGenerator(ctx context.Context, d *daemon) error {
  function generateNextBlock (line 157) | func generateNextBlock(blockHeader, prevBlock *types.BlockHeader, trs []...
  function processTransactionsNew (line 164) | func processTransactionsNew(logger *log.Entry, txs []*sqldb.Transaction,...

FILE: packages/daemons/block_generator_candidate.go
  function BlockGeneratorCandidate (line 30) | func BlockGeneratorCandidate(ctx context.Context, d *daemon) error {
  function GetThisNodePosition (line 126) | func GetThisNodePosition(candidateNodes sqldb.CandidateNodes, prevBlock ...
  function agreeCount (line 262) | func agreeCount(candidateNodes int64, replyCount int64) bool {

FILE: packages/daemons/block_generator_tx.go
  constant callDelayedContract (line 25) | callDelayedContract = "CallDelayedContract"
  constant firstEcosystemID (line 26) | firstEcosystemID    = 1
  type DelayedTx (line 30) | type DelayedTx struct
    method RunForDelayBlockID (line 38) | func (dtx *DelayedTx) RunForDelayBlockID(blockID int64) ([]*sqldb.Tran...
    method createDelayTxByItem (line 57) | func (dtx *DelayedTx) createDelayTxByItem(name string, keyID, highRate...

FILE: packages/daemons/blocks_collection.go
  function BlocksCollection (line 33) | func BlocksCollection(ctx context.Context, d *daemon) error {
  function blocksCollection (line 42) | func blocksCollection(ctx context.Context, d *daemon) (err error) {
  function UpdateChain (line 86) | func UpdateChain(ctx context.Context, d *daemon, host string, maxBlockID...
  function banNodePause (line 187) | func banNodePause(host string, blockID, blockTime int64, err error) {
  function getHostWithMaxID (line 209) | func getHostWithMaxID(ctx context.Context, logger *log.Entry) (host stri...
  function ReplaceBlocksFromHost (line 228) | func ReplaceBlocksFromHost(ctx context.Context, host string, blockID, re...
  function getBlocks (line 275) | func getBlocks(ctx context.Context, host string, blockID, minCount int64...
  function processBlocks (line 333) | func processBlocks(blocks []*block.Block) error {

FILE: packages/daemons/candidate_node_votings.go
  type VotingRes (line 21) | type VotingRes struct
  type VotingTotal (line 26) | type VotingTotal struct
  function ToUpdateMachineStatus (line 33) | func ToUpdateMachineStatus(currentTcpAddress, tcpAddress string, ch chan...
  function ToBroadcastNodeConnInfo (line 59) | func ToBroadcastNodeConnInfo(votingTotal VotingTotal, tcpAddress string,...
  function CandidateNodeVoting (line 72) | func CandidateNodeVoting(ctx context.Context, d *daemon) error {
  function checkServerSign (line 169) | func checkServerSign(serverVoteMsg network.VoteMsg) error {

FILE: packages/daemons/common.go
  type daemon (line 38) | type daemon struct
  function daemonLoop (line 62) | func daemonLoop(ctx context.Context, goRoutineName string, handler func(...
  function StartDaemons (line 101) | func StartDaemons(ctx context.Context, daemonsToStart []string) {
  function getHostPort (line 139) | func getHostPort(h string) string {
  function Ntp_Work (line 147) | func Ntp_Work(ctx context.Context) {
  function generateProcessBlockNew (line 183) | func generateProcessBlockNew(blockHeader, prevBlock *types.BlockHeader, ...
  function GetRemoteGoodHosts (line 198) | func GetRemoteGoodHosts() ([]string, error) {

FILE: packages/daemons/confirmations.go
  function Confirmations (line 25) | func Confirmations(ctx context.Context, d *daemon) error {
  function confirmationsBlocks (line 74) | func confirmationsBlocks(ctx context.Context, d *daemon, lastBlockID, st...
  function IsReachable (line 142) | func IsReachable(host string, blockID int64, ch0 chan string, logger *lo...

FILE: packages/daemons/disseminator.go
  function Disseminator (line 25) | func Disseminator(ctx context.Context, d *daemon) error {
  function sendTransactions (line 56) | func sendTransactions(ctx context.Context, logger *log.Entry) error {
  function sendBlockWithTxHashes (line 102) | func sendBlockWithTxHashes(ctx context.Context, honorNodeID int64, logge...

FILE: packages/daemons/external_network.go
  constant errExternalNone (line 29) | errExternalNone    = iota
  constant errExternalTx (line 30) | errExternalTx
  constant errExternalAttempt (line 31) | errExternalAttempt
  constant errExternalTimeout (line 32) | errExternalTimeout
  constant maxAttempts (line 34) | maxAttempts           = 10
  constant statusTimeout (line 35) | statusTimeout         = 60
  constant externalDeamonTimeout (line 36) | externalDeamonTimeout = 2
  constant apiExt (line 37) | apiExt                = `/api/v2/`
  function loginNetwork (line 47) | func loginNetwork(urlPath string) (connect *api.Connect, err error) {
  function SendExternalTransaction (line 69) | func SendExternalTransaction() error {
  function ExternalNetwork (line 190) | func ExternalNetwork(ctx context.Context, d *daemon) error {

FILE: packages/daemons/genesis.go
  function InitialLoad (line 18) | func InitialLoad(logger *log.Entry) error {
  function loadFirstBlock (line 43) | func loadFirstBlock(logger *log.Entry) error {
  function firstLoad (line 73) | func firstLoad(logger *log.Entry) error {
  function needLoad (line 80) | func needLoad(logger *log.Entry) (bool, error) {

FILE: packages/daemons/locking.go
  function WaitDB (line 23) | func WaitDB(ctx context.Context) error {
  function CheckDB (line 46) | func CheckDB() bool {
  function DBLock (line 62) | func DBLock() {
  function DBUnlock (line 67) | func DBUnlock() {

FILE: packages/daemons/mode.go
  type Model (line 14) | type Model interface
  type HonorNodeMode (line 19) | type HonorNodeMode struct
    method GetThisNodePosition (line 22) | func (honorNodeMode *HonorNodeMode) GetThisNodePosition() (int64, erro...
    method GetHostWithMaxID (line 25) | func (honorNodeMode *HonorNodeMode) GetHostWithMaxID() ([]string, erro...
  type CandidateNodeMode (line 35) | type CandidateNodeMode struct
    method GetThisNodePosition (line 38) | func (candidateNodeMode *CandidateNodeMode) GetThisNodePosition() (int...
    method GetHostWithMaxID (line 41) | func (candidateNodeMode *CandidateNodeMode) GetHostWithMaxID() ([]stri...
  type SelectModel (line 55) | type SelectModel struct
    method GetThisNodePosition (line 58) | func (s *SelectModel) GetThisNodePosition() (int64, error) {
    method GetHostWithMaxID (line 61) | func (s *SelectModel) GetHostWithMaxID() ([]string, error) {
    method GetWorkMode (line 65) | func (s SelectModel) GetWorkMode() Model {
  function GetCandidateNodePositionByPublicKey (line 72) | func GetCandidateNodePositionByPublicKey() (int64, error) {
  function GetCandidateNodes (line 87) | func GetCandidateNodes() (sqldb.CandidateNodes, error) {

FILE: packages/daemons/monitoring.go
  function Monitoring (line 22) | func Monitoring(w http.ResponseWriter, r *http.Request) {
  function addKey (line 65) | func addKey(buf *bytes.Buffer, key string, value any) error {
  function logError (line 75) | func logError(w http.ResponseWriter, err error) {

FILE: packages/daemons/queue_parser_blocks.go
  function QueueParserBlocks (line 33) | func QueueParserBlocks(ctx context.Context, d *daemon) error {

FILE: packages/daemons/queue_parser_tx.go
  function QueueParserTx (line 16) | func QueueParserTx(ctx context.Context, d *daemon) error {

FILE: packages/daemons/scheduler.go
  function loadContractTasks (line 22) | func loadContractTasks() error {
  function Scheduler (line 60) | func Scheduler(ctx context.Context, d *daemon) error {

FILE: packages/daemons/stopdaemons.go
  function WaitStopTime (line 21) | func WaitStopTime() {

FILE: packages/daemons/wait_for_signals.go
  function go_callback_int (line 44) | func go_callback_int() {
  function waitSig (line 51) | func waitSig() {
  function WaitForSignals (line 56) | func WaitForSignals() {

FILE: packages/language/language.go
  type cacheLang (line 23) | type cacheLang struct
  function IsLang (line 35) | func IsLang(code string) bool {
  function DefLang (line 48) | func DefLang() string {
  function UpdateLang (line 56) | func UpdateLang(state int, name, value string) error {
  function loadLang (line 78) | func loadLang(transaction *sqldb.DbTransaction, state int) error {
  function LangText (line 114) | func LangText(transaction *sqldb.DbTransaction, in string, state int, ac...
  function LangMacro (line 170) | func LangMacro(input string, state int, accept string) string {
  function GetLang (line 217) | func GetLang(state int, accept string) (lng string) {

FILE: packages/migration/clb/scheme.go
  function GetCLBScript (line 13) | func GetCLBScript() string {

FILE: packages/migration/ecosystem.go
  type SqlData (line 19) | type SqlData struct
  constant sqlPrimary (line 36) | sqlPrimary = "primary"
  constant sqlUnique (line 37) | sqlUnique  = "unique"
  constant sqlIndex (line 38) | sqlIndex   = "index"
  constant sqlSeq (line 39) | sqlSeq     = "seq"
  function sqlHeadSequence (line 42) | func sqlHeadSequence(name string) string {
  function sqlHead (line 49) | func sqlHead(name string) string {
  function sqlEnd (line 55) | func sqlEnd(options ...string) (ret string) {
  function sqlConvert (line 101) | func sqlConvert(in []string) (ret string, err error) {
  function sqlTemplate (line 130) | func sqlTemplate(input []string, data any) (ret string, err error) {
  function GetEcosystemScript (line 149) | func GetEcosystemScript(data SqlData) (string, error) {
  function GetFirstEcosystemScript (line 162) | func GetFirstEcosystemScript(data SqlData) (ret string, err error) {
  function GetFirstTableScript (line 188) | func GetFirstTableScript(data SqlData) (string, error) {
  function GetCommonEcosystemScript (line 195) | func GetCommonEcosystemScript() (string, error) {

FILE: packages/migration/ecosystem_test.go
  function TestGetEcosystemScript (line 14) | func TestGetEcosystemScript(t *testing.T) {

FILE: packages/migration/gen/contracts.go
  constant ext (line 21) | ext = ".sim"
  constant defaultPackageName (line 23) | defaultPackageName = "migration"
  type scenario (line 53) | type scenario struct
  type contract (line 61) | type contract struct
  type meta (line 68) | type meta struct
  function main (line 92) | func main() {
  function escape (line 100) | func escape(data string) template.HTML {
  function loadSource (line 107) | func loadSource(srcPath string) (*contract, error) {
  function loadSources (line 143) | func loadSources(srcPaths []string) ([]*contract, error) {
  function generate (line 172) | func generate(s scenario) error {

FILE: packages/migration/gen/contracts_test.go
  function TestEscape (line 18) | func TestEscape(t *testing.T) {
  function tempContract (line 33) | func tempContract(appID int, conditions, value string) (string, error) {
  function TestLoadSource (line 47) | func TestLoadSource(t *testing.T) {

FILE: packages/migration/migration.go
  constant eVer (line 22) | eVer = `Wrong version %s`
  type migration (line 37) | type migration struct
  type database (line 43) | type database interface
  function compareVer (line 48) | func compareVer(a, b string) (int, error) {
  function migrate (line 77) | func migrate(db database, appVer string, migrations []*migration) error {
  function runMigrations (line 116) | func runMigrations(db database, migrationList []*migration) error {
  function InitMigrate (line 121) | func InitMigrate(db database) error {
  function UpdateMigrate (line 133) | func UpdateMigrate(db database) error {

FILE: packages/migration/migration_test.go
  type dbMock (line 12) | type dbMock struct
    method CurrentVersion (line 16) | func (dbm *dbMock) CurrentVersion() (string, error) {
    method ApplyMigration (line 20) | func (dbm *dbMock) ApplyMigration(version, query string) error {
  function createDBMock (line 25) | func createDBMock(version string) *dbMock {
  function TestMockMigration (line 29) | func TestMockMigration(t *testing.T) {

FILE: packages/modes/api.go
  function RegisterRoutes (line 15) | func RegisterRoutes() http.Handler {
  type JsonRpcRoutes (line 37) | type JsonRpcRoutes struct
    method ServeHTTP (line 42) | func (s *JsonRpcRoutes) ServeHTTP(w http.ResponseWriter, r *http.Reque...
  function RegisterJsonRPCRoutes (line 50) | func RegisterJsonRPCRoutes(next http.Handler) http.Handler {

FILE: packages/modes/client_tx.go
  type blockchainTxPreprocessor (line 23) | type blockchainTxPreprocessor struct
    method ProcessClientTxBatches (line 25) | func (p blockchainTxPreprocessor) ProcessClientTxBatches(txDatas [][]b...
  type ClbTxPreprocessor (line 39) | type ClbTxPreprocessor struct
    method ProcessClientTxBatches (line 77) | func (p ClbTxPreprocessor) ProcessClientTxBatches(txData [][]byte, key...
  function GetClientTxPreprocessor (line 81) | func GetClientTxPreprocessor() types.ClientTxPreprocessor {
  type BlockchainSCRunner (line 90) | type BlockchainSCRunner struct
    method RunContract (line 93) | func (runner BlockchainSCRunner) RunContract(data, hash []byte, keyID,...
  type CLBSCRunner (line 103) | type CLBSCRunner struct
    method RunContract (line 106) | func (runner CLBSCRunner) RunContract(data, hash []byte, keyID, tnow i...
  function GetSmartContractRunner (line 118) | func GetSmartContractRunner() types.SmartContractRunner {

FILE: packages/modes/ecosystem_getter.go
  function GetEcosystemGetter (line 12) | func GetEcosystemGetter() types.EcosystemGetter {
  type BCEcosystemGetter (line 20) | type BCEcosystemGetter struct
    method GetEcosystemName (line 24) | func (ng BCEcosystemGetter) GetEcosystemName(id int64) (string, error) {
    method GetEcosystemLookup (line 40) | func (g BCEcosystemGetter) GetEcosystemLookup() ([]int64, []string, er...
    method ValidateId (line 44) | func (v BCEcosystemGetter) ValidateId(formEcosysID, clientEcosysID int...
  type CLBEcosystemGetter (line 63) | type CLBEcosystemGetter struct
    method GetEcosystemLookup (line 65) | func (g CLBEcosystemGetter) GetEcosystemLookup() ([]int64, []string, e...
    method ValidateId (line 69) | func (CLBEcosystemGetter) ValidateId(id, clientID int64, le *log.Entry...
    method GetEcosystemName (line 73) | func (ng CLBEcosystemGetter) GetEcosystemName(id int64) (string, error) {

FILE: packages/modes/mode_fabrics.go
  function GetDaemonLoader (line 24) | func GetDaemonLoader() types.DaemonFactory {
  type BCDaemonFactory (line 43) | type BCDaemonFactory struct
    method Load (line 48) | func (l BCDaemonFactory) Load(ctx context.Context) error {
    method GetDaemonsList (line 98) | func (BCDaemonFactory) GetDaemonsList() []string {
  type SNDaemonFactory (line 113) | type SNDaemonFactory struct
    method Load (line 118) | func (l SNDaemonFactory) Load(ctx context.Context) error {
    method GetDaemonsList (line 163) | func (SNDaemonFactory) GetDaemonsList() []string {
  type CLBDaemonFactory (line 170) | type CLBDaemonFactory struct
    method Load (line 175) | func (l CLBDaemonFactory) Load(ctx context.Context) error {
    method GetDaemonsList (line 203) | func (CLBDaemonFactory) GetDaemonsList() []string {
  function logMode (line 209) | func logMode(logger *log.Entry, mode string) {

FILE: packages/modes/rpc.go
  constant stopTimeout (line 19) | stopTimeout = 5 * time.Second
  type rpcServer (line 21) | type rpcServer struct
    method rpcIsEnable (line 82) | func (r *rpcServer) rpcIsEnable() bool {
    method getApis (line 86) | func (r *rpcServer) getApis(namespace string) []any {
    method enableRpc (line 105) | func (r *rpcServer) enableRpc(namespaces string) error {
    method ServeHTTP (line 129) | func (s *rpcServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    method disableRPC (line 147) | func (r *rpcServer) disableRPC() {
  type rpcHandler (line 27) | type rpcHandler struct
  type adminAPI (line 32) | type adminAPI struct
    method GetApis (line 36) | func (a *adminAPI) GetApis() []any {
  function newAdminApi (line 48) | func newAdminApi(r *rpcServer) *adminAPI {
  type serverApi (line 54) | type serverApi struct
    method StartJsonRpc (line 62) | func (s *serverApi) StartJsonRpc(ctx jsonrpc.RequestContext, namespace...
    method StopJsonRpc (line 75) | func (s *serverApi) StopJsonRpc() (bool, *jsonrpc.Error) {
  function newServerApi (line 58) | func newServerApi(r *rpcServer) *serverApi {
  function newRpcServer (line 139) | func newRpcServer(m jsonrpc.Mode) *rpcServer {

FILE: packages/network/httpserver/max_body.go
  type MaxBodyReader (line 9) | type MaxBodyReader struct
    method ServeHTTP (line 14) | func (h *MaxBodyReader) ServeHTTP(w http.ResponseWriter, r *http.Reque...
  function NewMaxBodyReader (line 19) | func NewMaxBodyReader(h http.Handler, n int64) http.Handler {

FILE: packages/network/machineState.go
  type VoteMsg (line 5) | type VoteMsg struct
    method VoteForSign (line 17) | func (voteMsg *VoteMsg) VoteForSign() string {
    method VerifyVoteForSign (line 21) | func (voteMsg *VoteMsg) VerifyVoteForSign() string {

FILE: packages/network/protocol.go
  type ReqTypesFlag (line 20) | type ReqTypesFlag
  constant RequestTypeHonorNode (line 24) | RequestTypeHonorNode ReqTypesFlag = iota + 1
  constant RequestTypeNotHonorNode (line 25) | RequestTypeNotHonorNode
  constant RequestTypeStopNetwork (line 26) | RequestTypeStopNetwork
  constant RequestTypeConfirmation (line 27) | RequestTypeConfirmation
  constant RequestTypeBlockCollection (line 28) | RequestTypeBlockCollection
  constant RequestTypeMaxBlock (line 29) | RequestTypeMaxBlock
  constant RequestTypeVoting (line 30) | RequestTypeVoting
  constant RequestSyncMatchineState (line 31) | RequestSyncMatchineState
  constant BlocksPerRequest (line 34) | BlocksPerRequest int = 10
  type SelfReaderWriter (line 41) | type SelfReaderWriter interface
  type RequestType (line 47) | type RequestType struct
    method Read (line 52) | func (rt *RequestType) Read(r io.Reader) error {
    method Write (line 56) | func (rt *RequestType) Write(w io.Writer) error {
  type MaxBlockResponse (line 61) | type MaxBlockResponse struct
    method Read (line 65) | func (resp *MaxBlockResponse) Read(r io.Reader) error {
    method Write (line 69) | func (resp *MaxBlockResponse) Write(w io.Writer) error {
  type GetBodiesRequest (line 74) | type GetBodiesRequest struct
    method Read (line 79) | func (req *GetBodiesRequest) Read(r io.Reader) error {
    method Write (line 94) | func (req *GetBodiesRequest) Write(w io.Writer) error {
  type GetBodyResponse (line 110) | type GetBodyResponse struct
    method Read (line 114) | func (resp *GetBodyResponse) Read(r io.Reader) error {
    method Write (line 125) | func (resp *GetBodyResponse) Write(w io.Writer) error {
  type ConfirmRequest (line 130) | type ConfirmRequest struct
    method Read (line 134) | func (req *ConfirmRequest) Read(r io.Reader) error {
    method Write (line 138) | func (req *ConfirmRequest) Write(w io.Writer) error {
  type ConfirmResponse (line 143) | type ConfirmResponse struct
    method Read (line 148) | func (resp *ConfirmResponse) Read(r io.Reader) error {
    method Write (line 159) | func (resp *ConfirmResponse) Write(w io.Writer) error {
  type DisRequest (line 169) | type DisRequest struct
    method Read (line 173) | func (req *DisRequest) Read(r io.Reader) error {
    method Write (line 184) | func (req *DisRequest) Write(w io.Writer) error {
  type DisHashResponse (line 194) | type DisHashResponse struct
    method Read (line 198) | func (resp *DisHashResponse) Read(r io.Reader) error {
    method Write (line 208) | func (resp *DisHashResponse) Write(w io.Writer) error {
  type StopNetworkRequest (line 212) | type StopNetworkRequest struct
    method Read (line 216) | func (req *StopNetworkRequest) Read(r io.Reader) error {
    method Write (line 226) | func (req *StopNetworkRequest) Write(w io.Writer) error {
  type StopNetworkResponse (line 230) | type StopNetworkResponse struct
    method Read (line 234) | func (resp *StopNetworkResponse) Read(r io.Reader) error {
    method Write (line 244) | func (resp *StopNetworkResponse) Write(w io.Writer) error {
  function readBool (line 248) | func readBool(r io.Reader) (bool, error) {
  function writeBool (line 257) | func writeBool(w io.Writer, val bool) error {
  function ReadSlice (line 266) | func ReadSlice(r io.Reader) ([]byte, error) {
  function ReadSliceWithMaxSize (line 288) | func ReadSliceWithMaxSize(r io.Reader, maxSize uint64) ([]byte, error) {
  function readSliceToBuf (line 314) | func readSliceToBuf(r io.Reader, buf []byte) ([]byte, error) {
  function writeSlice (line 335) | func writeSlice(w io.Writer, slice []byte) error {
  function readSliceWithSize (line 345) | func readSliceWithSize(r io.Reader, size int) ([]byte, error) {
  function writeSliceWithSize (line 356) | func writeSliceWithSize(w io.Writer, value []byte, size int32) error {
  function SendRequestType (line 365) | func SendRequestType(reqType int64, w io.Writer) error {
  function ReadInt (line 370) | func ReadInt(r io.Reader) (int64, error) {
  function WriteInt (line 381) | func WriteInt(value int64, w io.Writer) error {
  type CandidateNodeVotingRequest (line 390) | type CandidateNodeVotingRequest struct
    method Read (line 394) | func (req *CandidateNodeVotingRequest) Read(r io.Reader) error {
    method Write (line 405) | func (req *CandidateNodeVotingRequest) Write(w io.Writer) error {
  type CandidateNodeVotingResponse (line 414) | type CandidateNodeVotingResponse struct
    method Read (line 418) | func (resp *CandidateNodeVotingResponse) Read(r io.Reader) error {
    method Write (line 428) | func (resp *CandidateNodeVotingResponse) Write(w io.Writer) error {
  type BroadcastNodeConnInfoRequest (line 432) | type BroadcastNodeConnInfoRequest struct
    method Read (line 436) | func (req *BroadcastNodeConnInfoRequest) Read(r io.Reader) error {
    method Write (line 447) | func (req *BroadcastNodeConnInfoRequest) Write(w io.Writer) error {
  type BroadcastNodeConnInfoResponse (line 456) | type BroadcastNodeConnInfoResponse struct
    method Read (line 460) | func (resp *BroadcastNodeConnInfoResponse) Read(r io.Reader) error {
    method Write (line 470) | func (resp *BroadcastNodeConnInfoResponse) Write(w io.Writer) error {

FILE: packages/network/protocol_test.go
  function TestEmptyGetBodyResponse (line 17) | func TestEmptyGetBodyResponse(t *testing.T) {
  function TestWriteReadInts (line 28) | func TestWriteReadInts(t *testing.T) {
  function TestRequestType (line 41) | func TestRequestType(t *testing.T) {
  function TestGetBodyResponse (line 54) | func TestGetBodyResponse(t *testing.T) {
  function TestBodyResponse (line 67) | func TestBodyResponse(t *testing.T) {

FILE: packages/network/tcpclient/blocks_collection.go
  constant hasVal (line 23) | hasVal = "has value"
  constant hasntVal (line 24) | hasntVal = "has not value"
  constant sizeBytesLength (line 26) | sizeBytesLength = 4
  function GetBlocksBodies (line 29) | func GetBlocksBodies(ctx context.Context, host string, blockID int64, re...
  function GetBlockBodiesChan (line 74) | func GetBlockBodiesChan(ctx context.Context, src io.ReadCloser, blocksCo...

FILE: packages/network/tcpclient/candidate_node_voting.go
  function UpdateMachineStatus (line 15) | func UpdateMachineStatus(localAddress, tcpAddress string, logger *log.En...
  function BroadcastNodeConnInfo (line 79) | func BroadcastNodeConnInfo(tcpAddress string, data []byte, logger *log.E...

FILE: packages/network/tcpclient/client.go
  function NormalizeHostAddress (line 22) | func NormalizeHostAddress(address string, defaultPort int64) (string, er...
  function newConnection (line 36) | func newConnection(addr string) (net.Conn, error) {

FILE: packages/network/tcpclient/client_test.go
  function init (line 21) | func init() {
  type BufCloser (line 27) | type BufCloser struct
    method Close (line 31) | func (bc BufCloser) Close() error {
  function BenchmarkGetBlockBodiesWithChanReadAll (line 36) | func BenchmarkGetBlockBodiesWithChanReadAll(t *testing.B) {
  function BenchmarkGetBlockBodiesChanByBlockWithSyncPool (line 74) | func BenchmarkGetBlockBodiesChanByBlockWithSyncPool(t *testing.B) {
  function BenchmarkGetBlockBodiesChanByBlockWithBytePool (line 110) | func BenchmarkGetBlockBodiesChanByBlockWithBytePool(t *testing.B) {
  function BenchmarkGetBlockBodiesWithChanReadToStruct (line 154) | func BenchmarkGetBlockBodiesWithChanReadToStruct(t *testing.B) {
  function BenchmarkGetBlockBodiesAsSlice (line 188) | func BenchmarkGetBlockBodiesAsSlice(t *testing.B) {

FILE: packages/network/tcpclient/confirmation.go
  function CheckConfirmation (line 15) | func CheckConfirmation(host string, blockID int64, logger *log.Entry) (h...

FILE: packages/network/tcpclient/disseminator.go
  function sendRawTransacitionsToHost (line 32) | func sendRawTransacitionsToHost(host string, packet []byte) error {
  function SendTransacitionsToAll (line 48) | func SendTransacitionsToAll(ctx context.Context, hosts []string, txes []...
  function SendFullBlockToAll (line 85) | func SendFullBlockToAll(ctx context.Context, hosts []string, block *sqld...
  function sendFullBlockRequest (line 163) | func sendFullBlockRequest(con net.Conn, data []byte) (response []byte, e...
  function MarshalTxPacket (line 174) | func MarshalTxPacket(txes []sqldb.Transaction) ([]byte, error) {
  function prepareFullBlockRequest (line 192) | func prepareFullBlockRequest(block *sqldb.InfoBlock, trs []sqldb.Transac...
  function resieveRequiredTransactions (line 213) | func resieveRequiredTransactions(con net.Conn) (response []byte, err err...
  function parseTxHashesFromResponse (line 231) | func parseTxHashesFromResponse(resp []byte) (hashes [][]byte) {
  function sendDisseminatorRequest (line 240) | func sendDisseminatorRequest(con net.Conn, requestType network.ReqTypesF...

FILE: packages/network/tcpclient/max_block.go
  function HostWithMaxBlock (line 19) | func HostWithMaxBlock(ctx context.Context, hosts []string) (bestHost str...
  function GetMaxBlockID (line 27) | func GetMaxBlockID(host string) (blockID int64, err error) {
  function getMaxBlock (line 31) | func getMaxBlock(host string) (blockID int64, err error) {
  function hostWithMaxBlock (line 61) | func hostWithMaxBlock(ctx context.Context, hosts []string) (bestHost str...

FILE: packages/network/tcpclient/pools.go
  function powerOfTwo (line 12) | func powerOfTwo(v int) int64 {
  function init (line 25) | func init() {
  type bytePool (line 31) | type bytePool struct
    method Get (line 35) | func (p *bytePool) Get(size int64) []byte {
    method Put (line 49) | func (p *bytePool) Put(buf []byte) {

FILE: packages/network/tcpclient/pools_test.go
  function TestBytesPoolGet (line 15) | func TestBytesPoolGet(t *testing.T) {
  function TestBytesPoolPut (line 21) | func TestBytesPoolPut(t *testing.T) {
  function TestBytesPoolCicle (line 34) | func TestBytesPoolCicle(t *testing.T) {

FILE: packages/network/tcpclient/stop_network.go
  function SendStopNetwork (line 12) | func SendStopNetwork(addr string, req *network.StopNetworkRequest) error {

FILE: packages/network/tcpserver/blocks_collection.go
  function BlockCollection (line 19) | func BlockCollection(request *network.GetBodiesRequest, w net.Conn) error {
  function lenOfBlockData (line 58) | func lenOfBlockData(blocks []sqldb.BlockChain) int64 {

FILE: packages/network/tcpserver/candidate_node_voting.go
  function CandidateNodeVoting (line 16) | func CandidateNodeVoting(r *network.CandidateNodeVotingRequest) (*networ...
  type VotingRes (line 38) | type VotingRes struct
  type VotingTotal (line 42) | type VotingTotal struct
  function SyncMatchineStateRes (line 49) | func SyncMatchineStateRes(request *network.BroadcastNodeConnInfoRequest)...
  function checkClientVote (line 75) | func checkClientVote(r *network.CandidateNodeVotingRequest, voteMsgParam...
  function sign (line 138) | func sign(voteMsg *network.VoteMsg) ([]byte, error) {

FILE: packages/network/tcpserver/confirmation.go
  function Confirmation (line 17) | func Confirmation(r *network.ConfirmRequest) (*network.ConfirmResponse, ...

FILE: packages/network/tcpserver/disseminate_tx.go
  function DisseminateTxs (line 30) | func DisseminateTxs(rw io.ReadWriter) error {
  function DecryptData (line 113) | func DecryptData(binaryTx *[]byte) ([]byte, []byte, []byte, error) {
  function UnmarshalTxPacket (line 182) | func UnmarshalTxPacket(dat []byte) ([][]byte, error) {

FILE: packages/network/tcpserver/disseminator.go
  function Disseminator (line 30) | func Disseminator(rw io.ReadWriter) error {
  function resieveTxBodies (line 109) | func resieveTxBodies(con io.Reader) ([]byte, error) {
  function processBlock (line 126) | func processBlock(buf *bytes.Buffer, honorNodeID int64) error {
  function getUnknownTransactions (line 165) | func getUnknownTransactions(buf *bytes.Buffer) ([]byte, error) {
  function readHashes (line 213) | func readHashes(buf *bytes.Buffer) ([][]byte, error) {
  function saveNewTransactions (line 228) | func saveNewTransactions(binaryTxs []byte) error {

FILE: packages/network/tcpserver/max_block.go
  function MaxBlock (line 18) | func MaxBlock() (*network.MaxBlockResponse, error) {

FILE: packages/network/tcpserver/stop_network.go
  function StopNetwork (line 29) | func StopNetwork(req *network.StopNetworkRequest, w net.Conn) error {
  function processStopNetwork (line 44) | func processStopNetwork(b []byte) ([]byte, error) {

FILE: packages/network/tcpserver/tcpserver.go
  function HandleTCPRequest (line 20) | func HandleTCPRequest(rw net.Conn) {
  function TcpListener (line 97) | func TcpListener(laddr string) error {

FILE: packages/notificator/notificator.go
  type notificationRecord (line 18) | type notificationRecord struct
  function UpdateNotifications (line 25) | func UpdateNotifications(ecosystemID int64, accounts []string) {
  function UpdateRolesNotifications (line 37) | func UpdateRolesNotifications(ecosystemID int64, roles []int64) {
  function getEcosystemNotificationStats (line 42) | func getEcosystemNotificationStats(ecosystemID int64, users []string) (m...
  function parseRecipientNotification (line 52) | func parseRecipientNotification(rows []sqldb.NotificationsCount, systemI...
  function sendUserStats (line 82) | func sendUserStats(account string, stats []notificationRecord) {

FILE: packages/notificator/queue.go
  type Queue (line 11) | type Queue struct
    method Size (line 26) | func (q *Queue) Size() int {
    method AddAccounts (line 30) | func (q *Queue) AddAccounts(ecosystem int64, list ...string) {
    method AddRoles (line 37) | func (q *Queue) AddRoles(ecosystem int64, list ...int64) {
    method Send (line 44) | func (q *Queue) Send() {
  type Accounts (line 16) | type Accounts struct
  type Roles (line 21) | type Roles struct
  function NewQueue (line 54) | func NewQueue() types.Notifications {

FILE: packages/notificator/token_movements.go
  constant networkPerDayLimit (line 24) | networkPerDayLimit            = 100000000
  constant networkPerDayMsgTemplate (line 25) | networkPerDayMsgTemplate      = "day chain movement volume =  %s"
  constant fromToDayLimitMsgTemplate (line 26) | fromToDayLimitMsgTemplate     = "from %d to %d sended volume = %s"
  constant perBlockTokenMovementTemplate (line 27) | perBlockTokenMovementTemplate = "from wallet %d token movement count = %...
  constant networkPerDayEvent (line 29) | networkPerDayEvent         = 1
  constant fromToDayLimitEvent (line 30) | fromToDayLimitEvent        = 2
  constant perBlockTokenMovementEvent (line 31) | perBlockTokenMovementEvent = 3
  function init (line 36) | func init() {
  function sendEmail (line 40) | func sendEmail(conf conf.TokenMovementConfig, message string) error {
  function CheckTokenMovementLimits (line 56) | func CheckTokenMovementLimits(tx *sqldb.DbTransaction, conf conf.TokenMo...
  function needCheck (line 101) | func needCheck(event uint8) bool {

FILE: packages/pbgo/tx.pb.go
  constant _ (line 23) | _ = proto.GoGoProtoPackageIsVersion3
  type TransactionTypes (line 26) | type TransactionTypes
    method String (line 46) | func (x TransactionTypes) String() string {
    method EnumDescriptor (line 50) | func (TransactionTypes) EnumDescriptor() ([]byte, []int) {
  constant TransactionTypes_SMARTCONTRACT (line 29) | TransactionTypes_SMARTCONTRACT TransactionTypes = 0
  constant TransactionTypes_FIRSTBLOCK (line 30) | TransactionTypes_FIRSTBLOCK    TransactionTypes = 1
  constant TransactionTypes_STOPNETWORK (line 31) | TransactionTypes_STOPNETWORK   TransactionTypes = 2
  type TxInvokeStatusCode (line 55) | type TxInvokeStatusCode
    method String (line 78) | func (x TxInvokeStatusCode) String() string {
    method EnumDescriptor (line 82) | func (TxInvokeStatusCode) EnumDescriptor() ([]byte, []int) {
  constant TxInvokeStatusCode_SUCCESS (line 58) | TxInvokeStatusCode_SUCCESS TxInvokeStatusCode = 0
  constant TxInvokeStatusCode_PENALTY (line 59) | TxInvokeStatusCode_PENALTY TxInvokeStatusCode = 1
  constant TxInvokeStatusCode_FAILED (line 60) | TxInvokeStatusCode_FAILED  TxInvokeStatusCode = 2
  constant TxInvokeStatusCode_PENDING (line 61) | TxInvokeStatusCode_PENDING TxInvokeStatusCode = 3
  type FirstBlock (line 86) | type FirstBlock struct
    method Reset (line 96) | func (m *FirstBlock) Reset()         { *m = FirstBlock{} }
    method String (line 97) | func (m *FirstBlock) String() string { return proto.CompactTextString(...
    method ProtoMessage (line 98) | func (*FirstBlock) ProtoMessage()    {}
    method Descriptor (line 99) | func (*FirstBlock) Descriptor() ([]byte, []int) {
    method XXX_Unmarshal (line 102) | func (m *FirstBlock) XXX_Unmarshal(b []byte) error {
    method XXX_Marshal (line 105) | func (m *FirstBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte...
    method XXX_Merge (line 117) | func (m *FirstBlock) XXX_Merge(src proto.Message) {
    method XXX_Size (line 120) | func (m *FirstBlock) XXX_Size() int {
    method XXX_DiscardUnknown (line 123) | func (m *FirstBlock) XXX_DiscardUnknown() {
    method GetKeyId (line 129) | func (m *FirstBlock) GetKeyId() int64 {
    method GetTimestamp (line 136) | func (m *FirstBlock) GetTimestamp() int64 {
    method GetPublicKey (line 143) | func (m *FirstBlock) GetPublicKey() []byte {
    method GetNodePublicKey (line 150) | func (m *FirstBlock) GetNodePublicKey() []byte {
    method GetStopNetworkCertBundle (line 157) | func (m *FirstBlock) GetStopNetworkCertBundle() []byte {
    method GetTest (line 164) | func (m *FirstBlock) GetTest() int64 {
    method GetPrivateBlockchain (line 171) | func (m *FirstBlock) GetPrivateBlockchain() uint64 {
    method Marshal (line 361) | func (m *FirstBlock) Marshal() (dAtA []byte, err error) {
    method MarshalTo (line 371) | func (m *FirstBlock) MarshalTo(dAtA []byte) (int, error) {
    method MarshalToSizedBuffer (line 376) | func (m *FirstBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    method Size (line 530) | func (m *FirstBlock) Size() (n int) {
    method Unmarshal (line 615) | func (m *FirstBlock) Unmarshal(dAtA []byte) error {
  type StopNetwork (line 178) | type StopNetwork struct
    method Reset (line 184) | func (m *StopNetwork) Reset()         { *m = StopNetwork{} }
    method String (line 185) | func (m *StopNetwork) String() string { return proto.CompactTextString...
    method ProtoMessage (line 186) | func (*StopNetwork) ProtoMessage()    {}
    method Descriptor (line 187) | func (*StopNetwork) Descriptor() ([]byte, []int) {
    method XXX_Unmarshal (line 190) | func (m *StopNetwork) XXX_Unmarshal(b []byte) error {
    method XXX_Marshal (line 193) | func (m *StopNetwork) XXX_Marshal(b []byte, deterministic bool) ([]byt...
    method XXX_Merge (line 205) | func (m *StopNetwork) XXX_Merge(src proto.Message) {
    method XXX_Size (line 208) | func (m *StopNetwork) XXX_Size() int {
    method XXX_DiscardUnknown (line 211) | func (m *StopNetwork) XXX_DiscardUnknown() {
    method GetKeyId (line 217) | func (m *StopNetwork) GetKeyId() int64 {
    method GetTimestamp (line 224) | func (m *StopNetwork) GetTimestamp() int64 {
    method GetStopNetworkCert (line 231) | func (m *StopNetwork) GetStopNetworkCert() []byte {
    method Marshal (line 425) | func (m *StopNetwork) Marshal() (dAtA []byte, err error) {
    method MarshalTo (line 435) | func (m *StopNetwork) MarshalTo(dAtA []byte) (int, error) {
    method MarshalToSizedBuffer (line 440) | func (m *StopNetwork) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    method Size (line 563) | func (m *StopNetwork) Size() (n int) {
    method Unmarshal (line 843) | func (m *StopNetwork) Unmarshal(dAtA []byte) error {
  type TxResult (line 238) | type TxResult struct
    method Reset (line 246) | func (m *TxResult) Reset()         { *m = TxResult{} }
    method String (line 247) | func (m *TxResult) String() string { return proto.CompactTextString(m) }
    method ProtoMessage (line 248) | func (*TxResult) ProtoMessage()    {}
    method Descriptor (line 249) | func (*TxResult) Descriptor() ([]byte, []int) {
    method XXX_Unmarshal (line 252) | func (m *TxResult) XXX_Unmarshal(b []byte) error {
    method XXX_Marshal (line 255) | func (m *TxResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, ...
    method XXX_Merge (line 267) | func (m *TxResult) XXX_Merge(src proto.Message) {
    method XXX_Size (line 270) | func (m *TxResult) XXX_Size() int {
    method XXX_DiscardUnknown (line 273) | func (m *TxResult) XXX_DiscardUnknown() {
    method GetHash (line 279) | func (m *TxResult) GetHash() []byte {
    method GetBlockId (line 286) | func (m *TxResult) GetBlockId() int64 {
    method GetCode (line 293) | func (m *TxResult) GetCode() TxInvokeStatusCode {
    method GetResult (line 300) | func (m *TxResult) GetResult() string {
    method GetError (line 307) | func (m *TxResult) GetError() string {
    method Marshal (line 465) | func (m *TxResult) Marshal() (dAtA []byte, err error) {
    method MarshalTo (line 475) | func (m *TxResult) MarshalTo(dAtA []byte) (int, error) {
    method MarshalToSizedBuffer (line 480) | func (m *TxResult) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    method Size (line 582) | func (m *TxResult) Size() (n int) {
    method Unmarshal (line 965) | func (m *TxResult) Unmarshal(dAtA []byte) error {
  function init (line 314) | func init() {
  function init (line 322) | func init() { proto.RegisterFile("tx.proto", fileDescriptor_0fd2153dc07d...
  function encodeVarintTx (line 519) | func encodeVarintTx(dAtA []byte, offset int, v uint64) int {
  function sovTx (line 609) | func sovTx(x uint64) (n int) {
  function sozTx (line 612) | func sozTx(x uint64) (n int) {
  function skipTx (line 1151) | func skipTx(dAtA []byte) (n int, err error) {

FILE: packages/protocols/block_counter.go
  type intervalBlocksCounter (line 9) | type intervalBlocksCounter interface
  type blocksCounter (line 13) | type blocksCounter struct
    method count (line 16) | func (bc *blocksCounter) count(state blockGenerationState) (int, error) {

FILE: packages/protocols/block_counter_mock.go
  type mockIntervalBlocksCounter (line 10) | type mockIntervalBlocksCounter struct
    method count (line 15) | func (_m *mockIntervalBlocksCounter) count(state blockGenerationState)...

FILE: packages/protocols/block_time_calculator.go
  type BlockTimeCalculator (line 18) | type BlockTimeCalculator struct
    method TimeToGenerate (line 48) | func (btc *BlockTimeCalculator) TimeToGenerate(nodePosition int64) (bo...
    method ValidateBlock (line 66) | func (btc *BlockTimeCalculator) ValidateBlock(nodePosition int64, at t...
    method SetClock (line 84) | func (btc *BlockTimeCalculator) SetClock(clock utils.Clock) *BlockTime...
    method setBlockCounter (line 89) | func (btc *BlockTimeCalculator) setBlockCounter(counter intervalBlocks...
    method countBlockTime (line 94) | func (btc *BlockTimeCalculator) countBlockTime(blockTime time.Time) (b...
  type blockGenerationState (line 29) | type blockGenerationState struct
  function NewBlockTimeCalculator (line 36) | func NewBlockTimeCalculator(firstBlockTime time.Time, generationTime, bl...
  function BuildBlockTimeCalculator (line 121) | func BuildBlockTimeCalculator(transaction *sqldb.DbTransaction) (BlockTi...

FILE: packages/protocols/block_time_calculator_test.go
  function TestBlockTimeCalculator_TimeToGenerate (line 17) | func TestBlockTimeCalculator_TimeToGenerate(t *testing.T) {
  function TestBlockTimeCalculator_ValidateBlock (line 111) | func TestBlockTimeCalculator_ValidateBlock(t *testing.T) {
  function TestBlockTImeCalculator_countBlockTime (line 191) | func TestBlockTImeCalculator_countBlockTime(t *testing.T) {

FILE: packages/protocols/block_time_counter_test.go
  function TestBlockTimeCounter (line 16) | func TestBlockTimeCounter(t *testing.T) {
  function TestRangeByTime (line 44) | func TestRangeByTime(t *testing.T) {
  function TestBlockOnlineTime (line 69) | func TestBlockOnlineTime(t *testing.T) {

FILE: packages/protocols/generation-queue.go
  type BlockTimeChecker (line 17) | type BlockTimeChecker interface
  type BlockTimeCounter (line 29) | type BlockTimeCounter struct
    method queue (line 36) | func (btc *BlockTimeCounter) queue(t time.Time) (int, error) {
    method nodePosition (line 47) | func (btc *BlockTimeCounter) nodePosition(t time.Time) (int, error) {
    method NodeTimeExists (line 56) | func (btc *BlockTimeCounter) NodeTimeExists(t time.Time, nodePosition ...
    method BlockForTimeExists (line 75) | func (btc *BlockTimeCounter) BlockForTimeExists(t time.Time, nodePosit...
    method nextTime (line 91) | func (btc *BlockTimeCounter) nextTime(t time.Time, nodePosition int) (...
    method RangeByTime (line 111) | func (btc *BlockTimeCounter) RangeByTime(t time.Time) (start, end time...
    method TimeToGenerate (line 124) | func (btc *BlockTimeCounter) TimeToGenerate(at time.Time, nodePosition...
  function NewBlockTimeCounter (line 134) | func NewBlockTimeCounter() *BlockTimeCounter {

FILE: packages/publisher/publisher.go
  type ClientsChannels (line 22) | type ClientsChannels struct
    method Set (line 27) | func (cn *ClientsChannels) Set(id int64, s string) {
    method Get (line 33) | func (cn *ClientsChannels) Get(id int64) string {
  type CentJWT (line 46) | type CentJWT struct
  function InitCentrifugo (line 52) | func InitCentrifugo(cfg conf.CentrifugoConfig) {
  function GetJWTCent (line 60) | func GetJWTCent(userID, expire int64) (string, string, error) {
  function Write (line 80) | func Write(account string, data string) error {
  function GetStats (line 87) | func GetStats() (gocent.InfoResult, error) {

FILE: packages/rollback/block.go
  function RollbackBlock (line 26) | func RollbackBlock(data []byte) error {
  function rollbackBlock (line 91) | func rollbackBlock(dbTx *sqldb.DbTransaction, block *block.Block) error {

FILE: packages/rollback/rollback.go
  function ToBlockID (line 23) | func ToBlockID(blockID int64, dbTx *sqldb.DbTransaction, logger *log.Ent...

FILE: packages/rollback/transaction.go
  function rollbackUpdatedRow (line 22) | func rollbackUpdatedRow(tx map[string]string, where string, dbTx *sqldb....
  function rollbackInsertedRow (line 47) | func rollbackInsertedRow(tx map[string]string, where string, dbTx *sqldb...
  function rollbackTransaction (line 55) | func rollbackTransaction(txHash []byte, dbTx *sqldb.DbTransaction, logge...

FILE: packages/scheduler/contract/request.go
  constant headerAuthPrefix (line 27) | headerAuthPrefix = "Bearer "
  type authResult (line 30) | type authResult struct
  type contractResult (line 35) | type contractResult struct
  function NodeContract (line 47) | func NodeContract(Name string) (result contractResult, err error) {
  function sendAPIRequest (line 89) | func sendAPIRequest(rtype, url string, form *url.Values, v any, auth str...

FILE: packages/scheduler/contract/task.go
  type ContractHandler (line 15) | type ContractHandler struct
    method Run (line 20) | func (ch *ContractHandler) Run(t *scheduler.Task) {

FILE: packages/scheduler/scheduler.go
  function init (line 16) | func init() {
  type Scheduler (line 21) | type Scheduler struct
    method AddTask (line 26) | func (s *Scheduler) AddTask(t *Task) error {
    method UpdateTask (line 39) | func (s *Scheduler) UpdateTask(t *Task) error {
  function NewScheduler (line 68) | func NewScheduler() *Scheduler {
  function AddTask (line 75) | func AddTask(t *Task) error {
  function UpdateTask (line 80) | func UpdateTask(t *Task) error {
  function Parse (line 85) | func Parse(cronSpec string) (cron.Schedule, error) {

FILE: packages/scheduler/scheduler_test.go
  function TestParse (line 12) | func TestParse(t *testing.T) {
  type mockHandler (line 36) | type mockHandler struct
    method Run (line 40) | func (mh *mockHandler) Run(t *Task) {
  function TestTask (line 46) | func TestTask(t *testing.T) {

FILE: packages/scheduler/task.go
  type Handler (line 17) | type Handler interface
  type Task (line 22) | type Task struct
    method String (line 32) | func (t *Task) String() string {
    method ParseCron (line 37) | func (t *Task) ParseCron() error {
    method Next (line 48) | func (t *Task) Next(tm time.Time) time.Time {
    method Run (line 56) | func (t *Task) Run() {

FILE: packages/script/cmds_list.go
  constant cmdPush (line 10) | cmdPush         = iota + 1
  constant cmdVar (line 11) | cmdVar
  constant cmdExtend (line 12) | cmdExtend
  constant cmdCallExtend (line 13) | cmdCallExtend
  constant cmdPushStr (line 14) | cmdPushStr
  constant cmdCall (line 15) | cmdCall
  constant cmdCallVariadic (line 16) | cmdCallVariadic
  constant cmdReturn (line 17) | cmdReturn
  constant cmdIf (line 18) | cmdIf
  constant cmdElse (line 19) | cmdElse
  constant cmdAssignVar (line 20) | cmdAssignVar
  constant cmdAssign (line 21) | cmdAssign
  constant cmdLabel (line 22) | cmdLabel
  constant cmdContinue (line 23) | cmdContinue
  constant cmdWhile (line 24) | cmdWhile
  constant cmdBreak (line 25) | cmdBreak
  constant cmdIndex (line 26) | cmdIndex
  constant cmdSetIndex (line 27) | cmdSetIndex
  constant cmdFuncName (line 28) | cmdFuncName
  constant cmdUnwrapArr (line 29) | cmdUnwrapArr
  constant cmdMapInit (line 30) | cmdMapInit
  constant cmdArrayInit (line 31) | cmdArrayInit
  constant cmdError (line 32) | cmdError
  constant cmdNot (line 37) | cmdNot = iota | 0x0100
  constant cmdSign (line 38) | cmdSign
  constant cmdAdd (line 42) | cmdAdd = iota | 0x0200
  constant cmdSub (line 43) | cmdSub
  constant cmdMul (line 44) | cmdMul
  constant cmdDiv (line 45) | cmdDiv
  constant cmdAnd (line 46) | cmdAnd
  constant cmdOr (line 47) | cmdOr
  constant cmdEqual (line 48) | cmdEqual
  constant cmdNotEq (line 49) | cmdNotEq
  constant cmdLess (line 50) | cmdLess
  constant cmdNotLess (line 51) | cmdNotLess
  constant cmdGreat (line 52) | cmdGreat
  constant cmdNotGreat (line 53) | cmdNotGreat
  constant cmdSys (line 55) | cmdSys          = 0xff
  constant cmdUnary (line 56) | cmdUnary uint16 = 50

FILE: packages/script/code_block.go
  type CodeBlock (line 26) | type CodeBlock struct
    method GetInfo (line 47) | func (m *CodeBlock) GetInfo() isCodeBlockInfo {
    method GetFuncInfo (line 54) | func (m *CodeBlock) GetFuncInfo() *FuncInfo {
    method GetContractInfo (line 61) | func (m *CodeBlock) GetContractInfo() *ContractInfo {
    method isObjInfoValue (line 148) | func (*CodeBlock) isObjInfoValue()              {}
    method Extend (line 199) | func (b *CodeBlock) Extend(ext *ExtendData) {
    method getObjByNameExt (line 227) | func (b *CodeBlock) getObjByNameExt(name string, state uint32) (ret *O...
    method getObjByName (line 235) | func (block *CodeBlock) getObjByName(name string) (ret *ObjInfo) {
    method contractBaseCost (line 254) | func (cb *CodeBlock) contractBaseCost() int64 {
    method isParentContract (line 267) | func (block *CodeBlock) isParentContract() bool {
  type isCodeBlockInfo (line 40) | type isCodeBlockInfo interface
  method isCodeBlockInfo (line 44) | func (*FuncInfo) isCodeBlockInfo()     {}
  method isCodeBlockInfo (line 45) | func (*ContractInfo) isCodeBlockInfo() {}
  type ByteCode (line 69) | type ByteCode struct
  type CodeBlocks (line 76) | type CodeBlocks
    method push (line 78) | func (bs *CodeBlocks) push(x any) {
    method peek (line 82) | func (bs *CodeBlocks) peek() *CodeBlock {
    method get (line 90) | func (bs *CodeBlocks) get(idx int) *CodeBlock {
  type ByteCodes (line 98) | type ByteCodes
    method push (line 100) | func (bs *ByteCodes) push(x any) {
    method peek (line 104) | func (bs *ByteCodes) peek() *ByteCode {
  function newByteCode (line 112) | func newByteCode(cmd uint16, line uint16, value any) *ByteCode {
  type OwnerInfo (line 117) | type OwnerInfo struct
  type ObjInfo (line 126) | type ObjInfo struct
    method GetValue (line 153) | func (m *ObjInfo) GetValue() isObjInfoValue {
    method GetCodeBlock (line 160) | func (m *ObjInfo) GetCodeBlock() *CodeBlock {
    method GetExtFuncInfo (line 167) | func (m *ObjInfo) GetExtFuncInfo() *ExtFuncInfo {
    method GetVariable (line 174) | func (m *ObjInfo) GetVariable() *ObjInfo_Variable {
    method GetExtendVariable (line 181) | func (m *ObjInfo) GetExtendVariable() *ObjInfo_ExtendVariable {
    method getInParams (line 285) | func (ret *ObjInfo) getInParams() int {
  type isObjInfoValue (line 136) | type isObjInfoValue interface
  type ObjInfo_Variable (line 139) | type ObjInfo_Variable struct
    method isObjInfoValue (line 150) | func (*ObjInfo_Variable) isObjInfoValue()       {}
  type ObjInfo_ExtendVariable (line 143) | type ObjInfo_ExtendVariable struct
    method isObjInfoValue (line 151) | func (*ObjInfo_ExtendVariable) isObjInfoValue() {}
  method isObjInfoValue (line 149) | func (*ExtFuncInfo) isObjInfoValue()            {}
  function NewCodeBlock (line 188) | func NewCodeBlock() *CodeBlock {
  function setWritable (line 274) | func setWritable(block *CodeBlocks) {

FILE: packages/script/compile.go
  type operPrior (line 18) | type operPrior struct
  type compileState (line 24) | type compileState struct
  function newCompileState (line 30) | func newCompileState(newState stateTypes, funcFlag int) compileState {
  constant mapConst (line 35) | mapConst = iota
  constant mapVar (line 36) | mapVar
  constant mapMap (line 37) | mapMap
  constant mapExtend (line 38) | mapExtend
  constant mapArray (line 39) | mapArray
  constant mustKey (line 41) | mustKey
  constant mustColon (line 42) | mustColon
  constant mustComma (line 43) | mustComma
  constant mustValue (line 44) | mustValue
  type mapItem (line 47) | type mapItem struct
  constant errUnknownCmd (line 59) | errUnknownCmd = iota + 1
  constant errMustName (line 60) | errMustName
  constant errMustLCurly (line 61) | errMustLCurly
  constant errMustRCurly (line 62) | errMustRCurly
  constant errParams (line 63) | errParams
  constant errVars (line 64) | errVars
  constant errVarType (line 65) | errVarType
  constant errAssign (line 66) | errAssign
  constant errStrNum (line 67) | errStrNum
  function StateName (line 93) | func StateName(state uint32, name string) string {
  method CompileBlock (line 103) | func (vm *VM) CompileBlock(input []rune, owner *OwnerInfo) (*CodeBlock, ...
  method FlushBlock (line 213) | func (vm *VM) FlushBlock(root *CodeBlock) {
  method FlushExtern (line 253) | func (vm *VM) FlushExtern() {
  method Compile (line 259) | func (vm *VM) Compile(input []rune, owner *OwnerInfo) error {
  function findVar (line 267) | func findVar(name string, block *CodeBlocks) (ret *ObjInfo, owner *CodeB...
  method findObj (line 279) | func (vm *VM) findObj(name string, block *CodeBlocks) (ret *ObjInfo, own...
  method getInitValue (line 295) | func (vm *VM) getInitValue(lexemes *Lexemes, ind *int, block *CodeBlocks...
  method getInitMap (line 332) | func (vm *VM) getInitMap(lexemes *Lexemes, ind *int, block *CodeBlocks, ...
  method getInitArray (line 405) | func (vm *VM) getInitArray(lexemes *Lexemes, ind *int, block *CodeBlocks...
  method compileEval (line 452) | func (vm *VM) compileEval(lexemes *Lexemes, ind *int, block *CodeBlocks)...
  function ContractsList (line 829) | func ContractsList(value string) ([]string, error) {

FILE: packages/script/compile_test.go
  type TestVM (line 19) | type TestVM struct
  method String (line 25) | func (block *CodeBlock) String() (ret string) {
  function getMap (line 40) | func getMap() *types.Map {
  function getArray (line 47) | func getArray() []any {
  function str (line 56) | func str(v any) (ret string) {
  function lenArray (line 60) | func lenArray(par []any) int64 {
  function Money (line 64) | func Money(v any) (ret decimal.Decimal) {
  function outMap (line 69) | func outMap(v *types.Map) string {
  function TestVMCompile (line 73) | func TestVMCompile(t *testing.T) {
  function TestContractList (line 723) | func TestContractList(t *testing.T) {
  function TestVM_CompileBlock (line 763) | func TestVM_CompileBlock(t *testing.T) {

FILE: packages/script/errors.go
  constant eContractLoop (line 10) | eContractLoop         = `there is loop in %s contract`
  constant eSysVar (line 11) | eSysVar               = `system variable $%s cannot be changed`
  constant eSysFunc (line 12) | eSysFunc              = `system function '%s' cannot be changed`
  constant eDataParamVarCollides (line 13) | eDataParamVarCollides = `param variable '%s' in the data section of the ...
  constant eTypeParam (line 14) | eTypeParam            = `parameter %d has wrong type`
  constant eUndefinedParam (line 15) | eUndefinedParam       = `%s is not defined`
  constant eUnknownContract (line 16) | eUnknownContract      = `unknown contract %s`
  constant eWrongParams (line 17) | eWrongParams          = `function %s must have %d parameters`
  constant eArrIndex (line 18) | eArrIndex             = `index of array cannot be type %s`
  constant eMapIndex (line 19) | eMapIndex             = `index of map cannot be type %s`
  constant eUnknownIdent (line 20) | eUnknownIdent         = `unknown identifier %s`
  constant eWrongVar (line 21) | eWrongVar             = `wrong var %v`
  constant eDataType (line 22) | eDataType             = `expecting type of the data field [Ln:%d Col:%d]`
  constant eDataName (line 23) | eDataName             = `expecting name of the data field [Ln:%d Col:%d]`
  constant eDataTag (line 24) | eDataTag              = `unexpected tag [Ln:%d Col:%d]`
  constant eConditionNotAllowed (line 25) | eConditionNotAllowed  = `condition %s is not allowed`

FILE: packages/script/eval.go
  type evalCode (line 14) | type evalCode struct
  method CompileEval (line 24) | func (vm *VM) CompileEval(input string, state uint32) error {
  method EvalIf (line 47) | func (vm *VM) EvalIf(input string, state uint32, vars map[string]any) (b...

FILE: packages/script/eval_test.go
  type TestComp (line 12) | type TestComp struct
  function Multi (line 17) | func Multi(a, b int64) (int64, error) {
  function TestEvalIf (line 21) | func TestEvalIf(t *testing.T) {

FILE: packages/script/extend.go
  constant Extend_type (line 4) | Extend_type                = `type`
  constant Extend_time (line 5) | Extend_time                = `time`
  constant Extend_ecosystem_id (line 6) | Extend_ecosystem_id        = `ecosystem_id`
  constant Extend_node_position (line 7) | Extend_node_position       = `node_position`
  constant Extend_block (line 8) | Extend_block               = `block`
  constant Extend_key_id (line 9) | Extend_key_id              = `key_id`
  constant Extend_account_id (line 10) | Extend_account_id          = `account_id`
  constant Extend_block_key_id (line 11) | Extend_block_key_id        = `block_key_id`
  constant Extend_parent (line 12) | Extend_parent              = `parent`
  constant Extend_txcost (line 13) | Extend_txcost              = `txcost`
  constant Extend_txhash (line 14) | Extend_txhash              = `txhash`
  constant Extend_result (line 15) | Extend_result              = `result`
  constant Extend_sc (line 16) | Extend_sc                  = `sc`
  constant Extend_contract (line 17) | Extend_contract            = `contract`
  constant Extend_block_time (line 18) | Extend_block_time          = `block_time`
  constant Extend_original_contract (line 19) | Extend_original_contract   = `original_contract`
  constant Extend_this_contract (line 20) | Extend_this_contract       = `this_contract`
  constant Extend_guest_key (line 21) | Extend_guest_key           = `guest_key`
  constant Extend_guest_account (line 22) | Extend_guest_account       = `guest_account`
  constant Extend_black_hole_key (line 23) | Extend_black_hole_key      = `black_hole_key`
  constant Extend_black_hole_account (line 24) | Extend_black_hole_account  = `black_hole_account`
  constant Extend_white_hole_key (line 25) | Extend_white_hole_key      = `white_hole_key`
  constant Extend_white_hole_account (line 26) | Extend_white_hole_account  = `white_hole_account`
  constant Extend_pre_block_data_hash (line 27) | Extend_pre_block_data_hash = `pre_block_data_hash`
  constant Extend_gen_block (line 28) | Extend_gen_block           = `gen_block`
  constant Extend_time_limit (line 29) | Extend_time_limit          = `time_limit`
  constant Extend_rt_state (line 31) | Extend_rt_state = `rt_state`
  constant Extend_rt (line 32) | Extend_rt       = `rt`
  constant Extend_stack (line 33) | Extend_stack    = `stack`
  constant Extend_loop (line 34) | Extend_loop     = `loop_`
  constant sysVars_block (line 38) | sysVars_block               = `block`
  constant sysVars_block_key_id (line 39) | sysVars_block_key_id        = `block_key_id`
  constant sysVars_block_time (line 40) | sysVars_block_time          = `block_time`
  constant sysVars_data (line 41) | sysVars_data                = `data`
  constant sysVars_ecosystem_id (line 42) | sysVars_ecosystem_id        = `ecosystem_id`
  constant sysVars_key_id (line 43) | sysVars_key_id              = `key_id`
  constant sysVars_account_id (line 44) | sysVars_account_id          = `account_id`
  constant sysVars_node_position (line 45) | sysVars_node_position       = `node_position`
  constant sysVars_parent (line 46) | sysVars_parent              = `parent`
  constant sysVars_original_contract (line 47) | sysVars_original_contract   = `original_contract`
  constant sysVars_sc (line 48) | sysVars_sc                  = `sc`
  constant sysVars_contract (line 49) | sysVars_contract            = `contract`
  constant sysVars_stack (line 50) | sysVars_stack               = `stack`
  constant sysVars_this_contract (line 51) | sysVars_this_contract       = `this_contract`
  constant sysVars_time (line 52) | sysVars_time                = `time`
  constant sysVars_type (line 53) | sysVars_type                = `type`
  constant sysVars_txcost (line 54) | sysVars_txcost              = `txcost`
  constant sysVars_txhash (line 55) | sysVars_txhash              = `txhash`
  constant sysVars_guest_key (line 56) | sysVars_guest_key           = `guest_key`
  constant sysVars_guest_account (line 57) | sysVars_guest_account       = `guest_account`
  constant sysVars_black_hole_key (line 58) | sysVars_black_hole_key      = `black_hole_key`
  constant sysVars_white_hole_key (line 59) | sysVars_white_hole_key      = `white_hole_key`
  constant sysVars_black_hole_account (line 60) | sysVars_black_hole_account  = `black_hole_account`
  constant sysVars_white_hole_account (line 61) | sysVars_white_hole_account  = `white_hole_account`
  constant sysVars_gen_block (line 62) | sysVars_gen_block           = `gen_block`
  constant sysVars_time_limit (line 63) | sysVars_time_limit          = `time_limit`
  constant sysVars_pre_block_data_hash (line 64) | sysVars_pre_block_data_hash = `pre_block_data_hash`

FILE: packages/script/func.go
  type ExtendData (line 15) | type ExtendData struct
  function NewExtendData (line 21) | func NewExtendData() *ExtendData {
  function ExecContract (line 39) | func ExecContract(rt *RunTime, name, txs string, params ...any) (any, er...
  function ExContract (line 169) | func ExContract(rt *RunTime, state uint32, name string, params *types.Ma...
  function GetSettings (line 204) | func GetSettings(rt *RunTime, cntname, name string) (any, error) {
  function MemoryUsage (line 220) | func MemoryUsage(rt *RunTime) int64 {

FILE: packages/script/handle.go
  type compileFunc (line 12) | type compileFunc
  constant cfNothing (line 17) | cfNothing = iota
  constant cfError (line 18) | cfError
  constant cfNameBlock (line 19) | cfNameBlock
  constant cfFResult (line 20) | cfFResult
  constant cfReturn (line 21) | cfReturn
  constant cfIf (line 22) | cfIf
  constant cfElse (line 23) | cfElse
  constant cfFParam (line 24) | cfFParam
  constant cfFType (line 25) | cfFType
  constant cfFTail (line 26) | cfFTail
  constant cfFNameParam (line 27) | cfFNameParam
  constant cfAssignVar (line 28) | cfAssignVar
  constant cfAssign (line 29) | cfAssign
  constant cfTX (line 30) | cfTX
  constant cfSettings (line 31) | cfSettings
  constant cfConstName (line 32) | cfConstName
  constant cfConstValue (line 33) | cfConstValue
  constant cfField (line 34) | cfField
  constant cfFieldType (line 35) | cfFieldType
  constant cfFieldTag (line 36) | cfFieldTag
  constant cfFields (line 37) | cfFields
  constant cfFieldComma (line 38) | cfFieldComma
  constant cfFieldLine (line 39) | cfFieldLine
  constant cfWhile (line 40) | cfWhile
  constant cfContinue (line 41) | cfContinue
  constant cfBreak (line 42) | cfBreak
  constant cfCmdError (line 43) | cfCmdError
  function fError (line 84) | func fError(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fNameBlock (line 105) | func fNameBlock(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFuncResult (line 129) | func fFuncResult(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fReturn (line 135) | func fReturn(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fCmdError (line 140) | func fCmdError(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFparam (line 145) | func fFparam(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFtype (line 185) | func fFtype(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFtail (line 216) | func fFtail(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFNameParam (line 260) | func fFNameParam(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fIf (line 277) | func fIf(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fWhile (line 282) | func fWhile(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fContinue (line 288) | func fContinue(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fBreak (line 293) | func fBreak(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fAssignVar (line 298) | func fAssignVar(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fAssign (line 332) | func fAssign(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fTx (line 337) | func fTx(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fSettings (line 348) | func fSettings(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fConstName (line 359) | func fConstName(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fConstValue (line 365) | func fConstValue(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fField (line 376) | func fField(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFields (line 400) | func fFields(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFieldComma (line 408) | func fFieldComma(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFieldLine (line 417) | func fFieldLine(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFieldType (line 430) | func fFieldType(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fFieldTag (line 444) | func fFieldTag(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {
  function fElse (line 459) | func fElse(buf *CodeBlocks, state stateTypes, lexeme *Lexeme) error {

FILE: packages/script/lex.go
  constant lexUnknown (line 26) | lexUnknown = iota
  constant lexSys (line 27) | lexSys
  constant lexOper (line 28) | lexOper
  constant lexNumber (line 29) | lexNumber
  constant lexIdent (line 30) | lexIdent
  constant lexNewLine (line 31) | lexNewLine
  constant lexString (line 32) | lexString
  constant lexComment (line 33) | lexComment
  constant lexKeyword (line 34) | lexKeyword
  constant lexType (line 35) | lexType
  constant lexExtend (line 36) | lexExtend
  constant lexError (line 38) | lexError = 0xff
  constant lexfNext (line 40) | lexfNext = 1
  constant lexfPush (line 41) | lexfPush = 2
  constant lexfPop (line 42) | lexfPop  = 4
  constant lexfSkip (line 43) | lexfSkip = 8
  constant isLPar (line 46) | isLPar   = 0x2801
  constant isRPar (line 47) | isRPar   = 0x2901
  constant isComma (line 48) | isComma  = 0x2c01
  constant isDot (line 49) | isDot    = 0x2e01
  constant isColon (line 50) | isColon  = 0x3a01
  constant isEq (line 51) | isEq     = 0x3d01
  constant isLCurly (line 52) | isLCurly = 0x7b01
  constant isRCurly (line 53) | isRCurly = 0x7d01
  constant isLBrack (line 54) | isLBrack = 0x5b01
  constant isRBrack (line 55) | isRBrack = 0x5d01
  constant isNot (line 58) | isNot      = 0x0021
  constant isAsterisk (line 59) | isAsterisk = 0x002a
  constant isPlus (line 60) | isPlus     = 0x002b
  constant isMinus (line 61) | isMinus    = 0x002d
  constant isSign (line 62) | isSign     = 0x012d
  constant isSolidus (line 63) | isSolidus  = 0x002f
  constant isLess (line 64) | isLess     = 0x003c
  constant isGreat (line 65) | isGreat    = 0x003e
  constant isNotEq (line 66) | isNotEq    = 0x213d
  constant isAnd (line 67) | isAnd      = 0x2626
  constant isLessEq (line 68) | isLessEq   = 0x3c3d
  constant isEqEq (line 69) | isEqEq     = 0x3d3d
  constant isGrEq (line 70) | isGrEq     = 0x3e3d
  constant isOr (line 71) | isOr       = 0x7c7c
  constant keyContract (line 79) | keyContract = iota + 1
  constant keyFunc (line 80) | keyFunc
  constant keyReturn (line 81) | keyReturn
  constant keyIf (line 82) | keyIf
  constant keyElif (line 83) | keyElif
  constant keyElse (line 84) | keyElse
  constant keyWhile (line 85) | keyWhile
  constant keyTrue (line 86) | keyTrue
  constant keyFalse (line 87) | keyFalse
  constant keyVar (line 88) | keyVar
  constant keyTX (line 89) | keyTX
  constant keySettings (line 90) | keySettings
  constant keyBreak (line 91) | keyBreak
  constant keyContinue (line 92) | keyContinue
  constant keyWarning (line 93) | keyWarning
  constant keyInfo (line 94) | keyInfo
  constant keyNil (line 95) | keyNil
  constant keyAction (line 96) | keyAction
  constant keyCond (line 97) | keyCond
  constant keyTail (line 98) | keyTail
  constant keyError (line 99) | keyError
  constant msgWarning (line 103) | msgWarning = `warning`
  constant msgError (line 104) | msgError   = `error`
  constant msgInfo (line 105) | msgInfo    = `info`
  constant DtBool (line 109) | DtBool uint32 = iota + 1
  constant DtBytes (line 110) | DtBytes
  constant DtInt (line 111) | DtInt
  constant DtAddress (line 112) | DtAddress
  constant DtArray (line 113) | DtArray
  constant DtMap (line 114) | DtMap
  constant DtMoney (line 115) | DtMoney
  constant DtFloat (line 116) | DtFloat
  constant DtString (line 117) | DtString
  constant DtFile (line 118) | DtFile
  type typeInfo (line 121) | type typeInfo struct
  function GetFieldDefaultValue (line 167) | func GetFieldDefaultValue(fieldType uint32) any {
  type Lexeme (line 192) | type Lexeme struct
    method GetLogger (line 205) | func (l *Lexeme) GetLogger() *log.Entry {
  function NewLexeme (line 200) | func NewLexeme(t uint32, ext uint32, value any, line uint16, column uint...
  type ifBuf (line 209) | type ifBuf struct
  type Lexemes (line 216) | type Lexemes
  function lexParser (line 223) | func lexParser(input []rune) (Lexemes, error) {
  function OriginalToString (line 408) | func OriginalToString(original uint32) string {

FILE: packages/script/lex_test.go
  type TestLexeme (line 12) | type TestLexeme struct
  method String (line 17) | func (lexemes Lexemes) String(source []rune) (ret string) {
  function TestLexParser (line 28) | func TestLexParser(t *testing.T) {

FILE: packages/script/lextable/lextable.go
  type Action (line 17) | type Action
  type States (line 20) | type States
  constant AlphaSize (line 24) | AlphaSize = 34
  function main (line 197) | func main() {

FILE: packages/script/runtime.go
  constant statusNormal (line 25) | statusNormal = iota
  constant statusReturn (line 26) | statusReturn
  constant statusContinue (line 27) | statusContinue
  constant statusBreak (line 28) | statusBreak
  constant Decimal (line 31) | Decimal = `decimal.Decimal`
  constant Interface (line 33) | Interface = `interface`
  constant File (line 34) | File      = `*types.Map`
  constant brackets (line 36) | brackets = `[]`
  constant maxArrayIndex (line 38) | maxArrayIndex = 1000000
  constant maxMapCount (line 39) | maxMapCount   = 100000
  constant maxCallDepth (line 40) | maxCallDepth  = 1000
  constant memoryLimit (line 41) | memoryLimit   = 128 << 20
  constant MaxErrLen (line 42) | MaxErrLen     = 150
  type VMError (line 82) | type VMError struct
  type blockStack (line 87) | type blockStack struct
  type ErrInfo (line 93) | type ErrInfo struct
  type RunTime (line 99) | type RunTime struct
    method callFunc (line 132) | func (rt *RunTime) callFunc(cmd uint16, obj *ObjInfo) (err error) {
    method extendFunc (line 300) | func (rt *RunTime) extendFunc(name string) error {
    method setExtendVar (line 369) | func (rt *RunTime) setExtendVar(k string, v any) {
    method recalcMemExtendVar (line 374) | func (rt *RunTime) recalcMemExtendVar(k string) {
    method addVar (line 380) | func (rt *RunTime) addVar(v any) {
    method setVar (line 387) | func (rt *RunTime) setVar(k int, v any) {
    method recalcMemVar (line 392) | func (rt *RunTime) recalcMemVar(k int) {
    method SetCost (line 473) | func (rt *RunTime) SetCost(cost int64) {
    method SubCost (line 477) | func (rt *RunTime) SubCost(cost int64) error {
    method Cost (line 488) | func (rt *RunTime) Cost() int64 {
    method getResultValue (line 506) | func (rt *RunTime) getResultValue(item mapItem) (value any, err error) {
    method getResultArray (line 537) | func (rt *RunTime) getResultArray(cmd []mapItem) ([]any, error) {
    method getResultMap (line 549) | func (rt *RunTime) getResultMap(cmd *types.Map) (*types.Map, error) {
    method RunCode (line 590) | func (rt *RunTime) RunCode(block *CodeBlock) (status int, err error) {
    method Run (line 1392) | func (rt *RunTime) Run(block *CodeBlock, params []any, extend map[stri...
  function NewRunTime (line 116) | func NewRunTime(vm *VM, cost int64) *RunTime {
  function isSysVar (line 125) | func isSysVar(name string) bool {
  function calcMem (line 331) | func calcMem(v any) (mem int64) {
  function valueToBool (line 398) | func valueToBool(v any) bool {
  function ValueToFloat (line 434) | func ValueToFloat(v any) (ret float64) {
  function ValueToDecimal (line 453) | func ValueToDecimal(v any) (ret decimal.Decimal, err error) {
  function SetVMError (line 493) | func SetVMError(eType string, eText any) error {
  function isSelfAssignment (line 562) | func isSelfAssignment(dest, value any) bool {

FILE: packages/script/runtime_test.go
  function TestCalcMem (line 13) | func TestCalcMem(t *testing.T) {

FILE: packages/script/stack.go
  method Stack (line 3) | func (rt *RunTime) Stack() []any {
  method push (line 7) | func (rt *RunTime) push(d any) {
  method pop (line 11) | func (rt *RunTime) pop() (ret any) {
  method len (line 17) | func (rt *RunTime) len() int {
  method swap (line 21) | func (rt *RunTime) swap(n int) {
  method dup (line 25) | func (rt *RunTime) dup(n int) {
  method peek (line 29) | func (rt *RunTime) peek() any {
  method getStack (line 33) | func (rt *RunTime) getStack(idx int) any {
  method resetByIdx (line 40) | func (rt *RunTime) resetByIdx(idx int) {
  method popBlock (line 44) | func (rt *RunTime) popBlock() (ret *blockStack) {

FILE: packages/script/state.go
  type stateTypes (line 4) | type stateTypes
  type stateLine (line 5) | type stateLine
  type compileStates (line 7) | type compileStates
  constant stateRoot (line 12) | stateRoot stateTypes = iota
  constant stateBody (line 13) | stateBody
  constant stateBlock (line 14) | stateBlock
  constant stateContract (line 15) | stateContract
  constant stateFunc (line 16) | stateFunc
  constant stateFParams (line 17) | stateFParams
  constant stateFParam (line 18) | stateFParam
  constant stateFParamTYPE (line 19) | stateFParamTYPE
  constant stateFTail (line 20) | stateFTail
  constant stateFResult (line 21) | stateFResult
  constant stateFDot (line 22) | stateFDot
  constant stateVar (line 23) | stateVar
  constant stateVarType (line 24) | stateVarType
  constant stateAssignEval (line 25) | stateAssignEval
  constant stateAssign (line 26) | stateAssign
  constant stateTX (line 27) | stateTX
  constant stateSettings (line 28) | stateSettings
  constant stateConsts (line 29) | stateConsts
  constant stateConstsAssign (line 30) | stateConstsAssign
  constant stateConstsValue (line 31) | stateConstsValue
  constant stateFields (line 32) | stateFields
  constant stateEval (line 33) | stateEval
  constant statePush (line 36) | statePush     = 0x0100
  constant statePop (line 37) | statePop      = 0x0200
  constant stateStay (line 38) | stateStay     = 0x0400
  constant stateToBlock (line 39) | stateToBlock  = 0x0800
  constant stateToBody (line 40) | stateToBody   = 0x1000
  constant stateFork (line 41) | stateFork     = 0x2000
  constant stateToFork (line 42) | stateToFork   = 0x4000
  constant stateLabel (line 43) | stateLabel    = 0x8000
  constant stateMustEval (line 44) | stateMustEval = 0x010000
  constant flushMark (line 46) | flushMark = 0x100000

FILE: packages/script/vm.go
  type GlobalVm (line 20) | type GlobalVm struct
  function init (line 25) | func init() {
  function newVM (line 33) | func newVM() *GlobalVm {
  function GetVM (line 41) | func GetVM() *VM {
  function SavepointSmartVMObjects (line 50) | func SavepointSmartVMObjects() {
  function RollbackSmartVMObjects (line 58) | func RollbackSmartVMObjects() {
  function ReleaseSmartVMObjects (line 68) | func ReleaseSmartVMObjects() {
  function VMCompileEval (line 73) | func VMCompileEval(vm *VM, src string, prefix uint32) error {
  function getContractList (line 103) | func getContractList(src string) (list []string) {
  function VMGetContractByID (line 117) | func VMGetContractByID(vm *VM, id int32) *ContractInfo {
  function RunContractById (line 136) | func RunContractById(vm *VM, id int32, methods []string, extend map[stri...
  function RunContractByName (line 144) | func RunContractByName(vm *VM, name string, methods []string, extend map...
  function VMRun (line 177) | func VMRun(vm *VM, block *CodeBlock, params []any, extend map[string]any...
  function VMObjectExists (line 197) | func VMObjectExists(vm *VM, name string, state uint32) bool {
  method SetExtendCost (line 204) | func (vm *VM) SetExtendCost(ext func(string) int64) {
  method SetFuncCallsDB (line 209) | func (vm *VM) SetFuncCallsDB(funcCallsDB map[string]struct{}) {
  function LoadSysFuncs (line 213) | func LoadSysFuncs(vm *VM, state int) error {

FILE: packages/script/vm.pb.go
  constant _ (line 21) | _ = proto.GoGoProtoPackageIsVersion3
  type VMType (line 24) | type VMType
    method String (line 51) | func (x VMType) String() string {
    method EnumDescriptor (line 55) | func (VMType) EnumDescriptor() ([]byte, []int) {
  constant VMType_INVALID (line 28) | VMType_INVALID VMType = 0
  constant VMType_Smart (line 30) | VMType_Smart VMType = 1
  constant VMType_CLB (line 32) | VMType_CLB VMType = 2
  constant VMType_CLBMaster (line 34) | VMType_CLBMaster VMType = 3
  type ObjectType (line 60) | type ObjectType
    method String (line 95) | func (x ObjectType) String() string {
    method EnumDescriptor (line 99) | func (ObjectType) EnumDescriptor() ([]byte, []int) {
  constant ObjectType_Unknown (line 64) | ObjectType_Unknown ObjectType = 0
  constant ObjectType_Contract (line 66) | ObjectType_Contract ObjectType = 1
  constant ObjectType_Func (line 68) | ObjectType_Func ObjectType = 2
  constant ObjectType_ExtFunc (line 70) | ObjectType_ExtFunc ObjectType = 3
  constant ObjectType_Var (line 72) | ObjectType_Var ObjectType = 4
  constant ObjectType_ExtVar (line 74) | ObjectType_ExtVar ObjectType = 5
  function init (line 103) | func init() {
  function init (line 108) | func init() { proto.RegisterFile("vm.proto", fileDescriptor_cab246c8c7c5...

FILE: packages/script/vminit.go
  constant CostCall (line 20) | CostCall = 50
  constant CostContract (line 22) | CostContract = 100
  constant CostExtend (line 24) | CostExtend = 10
  constant TagFile (line 26) | TagFile      = "file"
  constant TagAddress (line 27) | TagAddress   = "address"
  constant TagSignature (line 28) | TagSignature = "signature"
  constant TagOptional (line 29) | TagOptional  = "optional"
  type ExtFuncInfo (line 33) | type ExtFuncInfo struct
  type FieldInfo (line 44) | type FieldInfo struct
    method ContainsTag (line 52) | func (fi *FieldInfo) ContainsTag(tag string) bool {
  type ContractInfo (line 57) | type ContractInfo struct
    method TxMap (line 67) | func (c *ContractInfo) TxMap() map[string]*FieldInfo {
  type FuncNameCmd (line 79) | type FuncNameCmd struct
  type FuncName (line 85) | type FuncName struct
  type FuncInfo (line 92) | type FuncInfo struct
  type VarInfo (line 104) | type VarInfo struct
  type IndexInfo (line 110) | type IndexInfo struct
  type VM (line 117) | type VM struct
    method Call (line 155) | func (vm *VM) Call(name string, params []any, extend map[string]any) (...
  type Stacker (line 127) | type Stacker interface
  function NewVM (line 133) | func NewVM() *VM {
  function getNameByObj (line 143) | func getNameByObj(obj *ObjInfo) (name string) {

FILE: packages/service/jsonrpc/accounts.go
  type accountsApi (line 18) | type accountsApi struct
    method GetKeysCount (line 26) | func (c *accountsApi) GetKeysCount(ctx RequestContext) (*int64, *Error) {
    method GetBalance (line 96) | func (b *accountsApi) GetBalance(ctx RequestContext, info *AccountOrKe...
  function newAccountsApi (line 22) | func newAccountsApi(m Mode) *accountsApi {
  type BalanceResult (line 38) | type BalanceResult struct
  type AccountOrKeyId (line 47) | type AccountOrKeyId struct
    method Validate (line 52) | func (bh *AccountOrKeyId) Validate(r *http.Request) error {
    method UnmarshalJSON (line 64) | func (bh *AccountOrKeyId) UnmarshalJSON(data []byte) error {

FILE: packages/service/jsonrpc/api.go
  constant multipartBuf (line 17) | multipartBuf      = 100000
  constant multipartFormData (line 18) | multipartFormData = "multipart/form-data"
  type Mode (line 21) | type Mode struct
  type UserClient (line 27) | type UserClient struct
    method Prefix (line 35) | func (c *UserClient) Prefix() string {
  type formValidator (line 39) | type formValidator interface
  function parameterValidator (line 43) | func parameterValidator(r *http.Request, f formValidator) (err error) {
  function isMultipartForm (line 47) | func isMultipartForm(r *http.Request) bool {
  type hexValue (line 51) | type hexValue struct
    method Bytes (line 55) | func (hv hexValue) Bytes() []byte {
    method UnmarshalText (line 59) | func (hv *hexValue) UnmarshalText(v []byte) (err error) {

FILE: packages/service/jsonrpc/auth.go
  type AuthStatusResponse (line 31) | type AuthStatusResponse struct
  type Auth (line 36) | type Auth struct
  function authRequire (line 40) | func authRequire(r *http.Request) *Error {
  type authApi (line 51) | type authApi struct
    method GetAuthStatus (line 62) | func (a *authApi) GetAuthStatus(ctx RequestContext) (*AuthStatusRespon...
    method GetUid (line 93) | func (a *authApi) GetUid(ctx RequestContext) (*GetUIDResult, *Error) {
    method Login (line 182) | func (a authApi) Login(ctx RequestContext, form *loginForm) (*LoginRes...
  function newAuthApi (line 55) | func newAuthApi(mode Mode) *authApi {
  type GetUIDResult (line 81) | type GetUIDResult struct
  function nonceSalt (line 130) | func nonceSalt() string {
  type loginForm (line 134) | type loginForm struct
    method Validate (line 153) | func (f *loginForm) Validate(r *http.Request) error {
  type publicKeyValue (line 143) | type publicKeyValue struct
    method UnmarshalText (line 147) | func (pk *publicKeyValue) UnmarshalText(v []byte) (err error) {
  type LoginResult (line 164) | type LoginResult struct
  type rolesResult (line 177) | type rolesResult struct
  function getUID (line 412) | func getUID(r *http.Request) (string, error) {
  function checkRoleFromParam (line 429) | func checkRoleFromParam(role, ecosystemID int64, account string) (int64,...
  function allowCreateUser (line 456) | func allowCreateUser(c *UserClient) bool {

FILE: packages/service/jsonrpc/block.go
  type blockChainApi (line 29) | type blockChainApi struct
    method MaxBlockId (line 36) | func (b *blockChainApi) MaxBlockId(ctx RequestContext) (*int64, *Error) {
    method GetBlockInfo (line 65) | func (b *blockChainApi) GetBlockInfo(blockID int64) (*BlockInfoResult,...
    method HonorNodesCount (line 89) | func (b *blockChainApi) HonorNodesCount() (*int64, *Error) {
    method AppParams (line 116) | func (b *blockChainApi) AppParams(ctx RequestContext, auth Auth, appId...
    method GetAppContent (line 172) | func (b *blockChainApi) GetAppContent(ctx RequestContext, auth Auth, a...
    method History (line 217) | func (b *blockChainApi) History(ctx RequestContext, auth Auth, tableNa...
    method GetBlocksTxInfo (line 281) | func (b *blockChainApi) GetBlocksTxInfo(ctx RequestContext, blockId, c...
    method DetailedBlocks (line 380) | func (b *blockChainApi) DetailedBlocks(ctx RequestContext, blockId, co...
    method DetailedBlock (line 550) | func (b *blockChainApi) DetailedBlock(ctx RequestContext, bh *BlockIdO...
    method GetTransactionCount (line 644) | func (b *blockChainApi) GetTransactionCount(ctx RequestContext, bh *Bl...
    method GetEcosystemParams (line 670) | func (b *blockChainApi) GetEcosystemParams(ctx RequestContext, auth Au...
    method EcosystemInfo (line 735) | func (b *blockChainApi) EcosystemInfo(ctx RequestContext, ecosystemId ...
    method SystemParams (line 837) | func (b *blockChainApi) SystemParams(ctx RequestContext, auth Auth, na...
    method GetMember (line 891) | func (b *blockChainApi) GetMember(ctx RequestContext, account string, ...
    method GetBlocksCountByNode (line 944) | func (b *blockChainApi) GetBlocksCountByNode(ctx RequestContext, nodeP...
    method GetOpenEcosystem (line 988) | func (b *blockChainApi) GetOpenEcosystem(ctx RequestContext, verbosity...
  function newBlockChainApi (line 32) | func newBlockChainApi() *blockChainApi {
  type BlockInfoResult (line 54) | type BlockInfoResult struct
  type AppParamsForm (line 94) | type AppParamsForm struct
    method Validate (line 100) | func (f *AppParamsForm) Validate(r *http.Request) error {
  type AppParamsResult (line 111) | type AppParamsResult struct
  type AppContentResult (line 166) | type AppContentResult struct
  type blocksTxInfoForm (line 252) | type blocksTxInfoForm struct
    method Validate (line 257) | func (f *blocksTxInfoForm) Validate(r *http.Request) error {
  type TxInfo (line 274) | type TxInfo struct
  type TxDetailedInfo (line 341) | type TxDetailedInfo struct
  type BlockHeaderInfo (line 351) | type BlockHeaderInfo struct
  type BlockDetailedInfo (line 362) | type BlockDetailedInfo struct
  type BlockIdOrHash (line 477) | type BlockIdOrHash struct
    method GetHash (line 483) | func (bh *BlockIdOrHash) GetHash() ([]byte, bool) {
    method GetBlock (line 494) | func (bh *BlockIdOrHash) GetBlock() (int64, bool) {
    method Validate (line 501) | func (bh *BlockIdOrHash) Validate(r *http.Request) error {
    method UnmarshalJSON (line 516) | func (bh *BlockIdOrHash) UnmarshalJSON(data []byte) error {
  type EcosystemInfo (line 717) | type EcosystemInfo struct
  type MemberInfo (line 884) | type MemberInfo struct
  type ListWhereForm (line 926) | type ListWhereForm struct
    method Validate (line 932) | func (f *ListWhereForm) Validate(r *http.Request) error {
  type blockMetricByNode (line 939) | type blockMetricByNode struct
  type openSystemInfo (line 975) | type openSystemInfo struct
  type openSystemList (line 980) | type openSystemList struct

FILE: packages/service/jsonrpc/callback.go
  type callback (line 22) | type callback struct
    method getArgsTypes (line 32) | func (c *callback) getArgsTypes() {
    method call (line 58) | func (c *callback) call(ctx RequestContext, m Mode, args []reflect.Val...
  function suitableCallbacks (line 109) | func suitableCallbacks(receiver reflect.Value) map[string]*callback {
  function newCallback (line 128) | func newCallback(receiver, fn reflect.Value) *callback {
  function isErrorType (line 158) | func isErrorType(t reflect.Type) bool {
  function formatName (line 166) | func formatName(name string) string {

FILE: packages/service/jsonrpc/common.go
  type commonApi (line 35) | type commonApi struct
    method GetContractInfo (line 82) | func (c *commonApi) GetContractInfo(ctx RequestContext, auth Auth, con...
    method GetContracts (line 136) | func (c *commonApi) GetContracts(ctx RequestContext, auth Auth, offset...
    method GetKeyInfo (line 229) | func (c *commonApi) GetKeyInfo(ctx RequestContext, accountAddress stri...
    method GetList (line 357) | func (c *commonApi) GetList(ctx RequestContext, auth Auth, form *ListW...
    method GetSections (line 511) | func (c *commonApi) GetSections(ctx RequestContext, auth Auth, params ...
    method GetRow (line 593) | func (c *commonApi) GetRow(ctx RequestContext, auth Auth, tableName st...
    method GetPageRow (line 686) | func (c *commonApi) GetPageRow(ctx RequestContext, auth Auth, name str...
    method GetMenuRow (line 693) | func (c *commonApi) GetMenuRow(ctx RequestContext, auth Auth, name str...
    method GetSnippetRow (line 700) | func (c *commonApi) GetSnippetRow(ctx RequestContext, auth Auth, name ...
    method GetTable (line 725) | func (c *commonApi) GetTable(ctx RequestContext, auth Auth, name strin...
    method GetTableCount (line 790) | func (c *commonApi) GetTableCount(ctx RequestContext, auth Auth, offse...
    method GetVersion (line 846) | func (c *commonApi) GetVersion() string {
    method GetConfig (line 870) | func (c *commonApi) GetConfig(ctx RequestContext, option string) (map[...
    method GetPageValidatorsCount (line 931) | func (c *commonApi) GetPageValidatorsCount(ctx RequestContext, name st...
    method GetSource (line 1007) | func (c *commonApi) GetSource(ctx RequestContext, auth Auth, name stri...
    method GetPage (line 1088) | func (c *commonApi) GetPage(ctx RequestContext, auth Auth, name string...
    method GetPageHash (line 1101) | func (c *commonApi) GetPageHash(ctx RequestContext, name string, ecosy...
    method GetMenu (line 1122) | func (c *commonApi) GetMenu(ctx RequestContext, auth Auth, name string...
    method GetContent (line 1171) | func (c *commonApi) GetContent(ctx RequestContext, form *jsonContentFo...
    method GetTxCount (line 1189) | func (c *commonApi) GetTxCount(ctx RequestContext) (*int64, *Error) {
    method GetEcosystemCount (line 1201) | func (c *commonApi) GetEcosystemCount(ctx RequestContext) (*int64, *Er...
  function newCommonApi (line 39) | func newCommonApi(m Mode) *commonApi {
  type contractField (line 45) | type contractField struct
  type GetContractResult (line 51) | type GetContractResult struct
  function getContract (line 65) | func getContract(r *http.Request, name string) *smart.Contract {
  function getContractInfo (line 78) | func getContractInfo(contract *smart.Contract) *script.ContractInfo {
  type ListResult (line 131) | type ListResult struct
  type roleInfo (line 185) | type roleInfo struct
  type notifyInfo (line 190) | type notifyInfo struct
  type KeyInfoResult (line 195) | type KeyInfoResult struct
  type keyEcosystemInfo (line 201) | type keyEcosystemInfo struct
  function getNotifications (line 209) | func getNotifications(ecosystemID int64, key *sqldb.Key) ([]notifyInfo, ...
  type ListForm (line 309) | type ListForm struct
    method Validate (line 315) | func (f *ListForm) Validate(r *http.Request) error {
  type rowForm (line 325) | type rowForm struct
    method Validate (line 329) | func (f *rowForm) Validate(r *http.Request) error {
  function checkAccess (line 341) | func checkAccess(tableName, columns string, client *UserClient) (table s...
  type HonorNodeJSON (line 460) | type HonorNodeJSON struct
  type NetworkResult (line 468) | type NetworkResult struct
  function getNodesJSON (line 476) | func getNodesJSON() []HonorNodeJSON {
  constant defaultSectionsLimit (line 489) | defaultSectionsLimit = 100
  type SectionsForm (line 491) | type SectionsForm struct
    method Validate (line 496) | func (f *SectionsForm) Validate(r *http.Request) error {
  type RowResult (line 585) | type RowResult struct
  type PartModel (line 654) | type PartModel interface
  function getPageRowMux (line 659) | func getPageRowMux(ctx RequestContext, name string) (PartModel, *Error) {
  function getMenuRowMux (line 663) | func getMenuRowMux(ctx RequestContext, name string) (PartModel, *Error) {
  function getSnippetRowMux (line 667) | func getSnippetRowMux(ctx RequestContext, name string) (PartModel, *Erro...
  function getInterfaceRow (line 671) | func getInterfaceRow(ctx RequestContext, name string, c PartModel) (Part...
  type columnInfo (line 707) | type columnInfo struct
  type TableResult (line 713) | type TableResult struct
  type tableInfo (line 780) | type tableInfo struct
  type TableCountResult (line 785) | type TableCountResult struct
  function replaceHttpSchemeToWs (line 850) | func replaceHttpSchemeToWs(centrifugoURL string) string {
  function centrifugoAddressHandler (line 859) | func centrifugoAddressHandler(r *http.Request) (string, error) {
  function parseEcosystem (line 892) | func parseEcosystem(in string) (string, string) {
  function pageValue (line 900) | func pageValue(r *http.Request, name string) (*sqldb.Page, string, error) {
  function initVars (line 945) | func initVars(r *http.Request, vals *map[string]string) *map[string]stri...
  type ContentResult (line 997) | type ContentResult struct
  constant strOne (line 1005) | strOne = `1`
  function getPage (line 1024) | func getPage(r *http.Request, name string, vals *map[string]string) (res...
  type hashResult (line 1097) | type hashResult struct
  type jsonContentForm (line 1159) | type jsonContentForm struct
    method Validate (line 1164) | func (f *jsonContentForm) Validate(r *http.Request) error {

FILE: packages/service/jsonrpc/common_forms.go
  constant defaultPaginatorLimit (line 19) | defaultPaginatorLimit = 25
  constant maxPaginatorLimit (line 20) | maxPaginatorLimit     = 100
  type paginatorForm (line 23) | type paginatorForm struct
    method Validate (line 30) | func (f *paginatorForm) Validate(r *http.Request) error {
  type paramsForm (line 46) | type paramsForm struct
    method AcceptNames (line 57) | func (f *paramsForm) AcceptNames(names string) {
  type nopeValidator (line 51) | type nopeValidator struct
    method Validate (line 53) | func (np nopeValidator) Validate(r *http.Request) error {
  type ecosystemForm (line 63) | type ecosystemForm struct
    method Validate (line 69) | func (f *ecosystemForm) Validate(r *http.Request) error {

FILE: packages/service/jsonrpc/context.go
  type contextKey (line 15) | type contextKey
  constant contextKeyLogger (line 18) | contextKeyLogger contextKey = iota
  constant contextKeyToken (line 19) | contextKeyToken
  constant contextKeyClient (line 20) | contextKeyClient
  function setContext (line 23) | func setContext(r *http.Request, key, value any) *http.Request {
  function getContext (line 27) | func getContext(r *http.Request, key any) any {
  function setLogger (line 31) | func setLogger(r *http.Request, log *log.Entry) *http.Request {
  function getLogger (line 35) | func getLogger(r *http.Request) *log.Entry {
  function setToken (line 42) | func setToken(r *http.Request, token *jwt.Token) *http.Request {
  function getToken (line 46) | func getToken(r *http.Request) *jwt.Token {
  function setClient (line 53) | func setClient(r *http.Request, client *UserClient) *http.Request {
  function getClient (line 57) | func getClient(r *http.Request) *UserClient {

FILE: packages/service/jsonrpc/data.go
  type NotSingle (line 16) | type NotSingle struct
  type dataApi (line 19) | type dataApi struct
    method BinaryVerify (line 41) | func (d *dataApi) BinaryVerify(ctx RequestContext, notSingle NotSingle...
    method DataVerify (line 75) | func (d *dataApi) DataVerify(ctx RequestContext, notSingle NotSingle, ...
    method GetAvatar (line 100) | func (d *dataApi) GetAvatar(ctx RequestContext, notSingle NotSingle, a...
  function newDataApi (line 22) | func newDataApi() *dataApi {
  function compareHash (line 26) | func compareHash(data []byte, urlHash string) bool {

FILE: packages/service/jsonrpc/debug.go
  type debugApi (line 13) | type debugApi struct
    method GetMemStat (line 25) | func (c *debugApi) GetMemStat() (*memMetric, *Error) {
    method GetNodeBanStat (line 39) | func (c *debugApi) GetNodeBanStat() (*[]banMetric, *Error) {
  function newDebugApi (line 16) | func newDebugApi() *debugApi {
  type memMetric (line 20) | type memMetric struct
  type banMetric (line 34) | type banMetric struct

FILE: packages/service/jsonrpc/ecosystem_params.go
  type ParamResult (line 7) | type ParamResult struct
  type ParamsResult (line 14) | type ParamsResult struct

FILE: packages/service/jsonrpc/errors.go
  type ErrorCode (line 8) | type ErrorCode
  type Error (line 10) | type Error struct
    method Error (line 40) | func (e *Error) Error() string {
  constant ErrCodeDefault (line 17) | ErrCodeDefault             = -32000
  constant ErrCodeInvalidInput (line 18) | ErrCodeInvalidInput        = -32001
  constant ErrCodeResourceNotFound (line 19) | ErrCodeResourceNotFound    = -32002
  constant ErrCodeResourceUnavailable (line 20) | ErrCodeResourceUnavailable = -32003
  constant ErrCodeTransactionRejected (line 21) | ErrCodeTransactionRejected = -32004
  constant ErrCodeMethodNotSupported (line 22) | ErrCodeMethodNotSupported  = -32005
  constant ErrCodeLimitExceeded (line 23) | ErrCodeLimitExceeded       = -32006
  constant ErrCodeParseError (line 24) | ErrCodeParseError          = -32007
  constant ErrCodeInvalidRequest (line 25) | ErrCodeInvalidRequest      = -32008
  constant ErrCodeMethodNotFound (line 26) | ErrCodeMethodNotFound      = -32009
  constant ErrCodeInvalidParams (line 27) | ErrCodeInvalidParams       = -32010
  constant ErrCodeInternalError (line 28) | ErrCodeInternalError       = -32011
  constant ErrCodeNotFound (line 29) | ErrCodeNotFound            = -32012
  constant ErrCodeUnknownUID (line 30) | ErrCodeUnknownUID          = -32013
  constant ErrCodeUnauthorized (line 31) | ErrCodeUnauthorized        = -32014
  constant ErrCodeParamsInvalid (line 32) | ErrCodeParamsInvalid       = -32015
  constant paramsEmpty (line 36) | paramsEmpty   = "params can not be empty"
  constant invalidParams (line 37) | invalidParams = "params %s invalid"
  function NewError (line 44) | func NewError(code ErrorCode, message string, data ...map[string]any) *E...
  function DefaultError (line 57) | func DefaultError(message string) *Error {
  function ParseError (line 64) | func ParseError(message string) *Error {
  function InvalidRequest (line 71) | func InvalidRequest(message string, data ...map[string]any) *Error {
  function MethodNotFound (line 75) | func MethodNotFound(method string, data ...map[string]any) *Error {
  function InvalidParamsError (line 80) | func InvalidParamsError(message string, data ...map[string]any) *Error {
  function InternalError (line 84) | func InternalError(message string, data ...map[string]any) *Error {
  function InvalidInput (line 88) | func InvalidInput(message string, data ...map[string]any) *Error {
  function ResourceNotFound (line 92) | func ResourceNotFound(message string, data ...map[string]any) *Error {
  function ResourceUnavailable (line 96) | func ResourceUnavailable(message string, data ...map[string]any) *Error {
  function TransactionRejected (line 100) | func TransactionRejected(message string, data ...map[string]any) *Error {
  function MethodNotSupported (line 104) | func MethodNotSupported(method string, data ...map[string]any) *Error {
  function LimitExceeded (line 109) | func LimitExceeded(message string, data ...map[string]any) *Error {
  function NotFoundError (line 113) | func NotFoundError() *Error {
  function UnauthorizedError (line 117) | func UnauthorizedError() *Error {
  function UnUnknownUIDError (line 121) | func UnUnknownUIDError() *Error {

FILE: packages/service/jsonrpc/handlers.go
  function RequestHandlerFunc (line 21) | func RequestHandlerFunc(fn requestHandlerFunc) *requestHandlerFunc {
  type RequestContext (line 25) | type RequestContext struct
    method HTTPRequest (line 29) | func (rc *RequestContext) HTTPRequest() *http.Request {
    method HTTPResponseWriter (line 33) | func (rc *RequestContext) HTTPResponseWriter() http.ResponseWriter {
    method RawJSON (line 37) | func (rc *RequestContext) RawJSON() json.RawMessage {
  type ctxKey (line 41) | type ctxKey
    method String (line 43) | func (c ctxKey) String() string {
  type requestHandlerFunc (line 53) | type requestHandlerFunc
    method ServeHTTP (line 55) | func (h requestHandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.R...
  function WriteResponse (line 83) | func WriteResponse(w http.ResponseWriter, request *Request, result any, ...
  function generateResponse (line 104) | func generateResponse(request *Request, result any, e *Error) any {
  function WriteBatchResponse (line 122) | func WriteBatchResponse(w http.ResponseWriter, resp any) {

FILE: packages/service/jsonrpc/history.go
  constant rollbackHistoryLimit (line 7) | rollbackHistoryLimit = 100
  type HistoryResult (line 9) | type HistoryResult struct

FILE: packages/service/jsonrpc/http.go
  constant maxRequestContentLength (line 23) | maxRequestContentLength = 1024 * 1024 * 5
  constant contentType (line 24) | contentType             = "application/json"
  function validateRequest (line 27) | func validateRequest(r *http.Request) (int, error) {
  function NewMiddlewares (line 50) | func NewMiddlewares(srv http.Handler, m Mode) http.Handler {
  type gzipResponseWriter (line 60) | type gzipResponseWriter struct
    method init (line 79) | func (w *gzipResponseWriter) init() {
    method Header (line 104) | func (w *gzipResponseWriter) Header() http.Header {
    method WriteHeader (line 108) | func (w *gzipResponseWriter) WriteHeader(status int) {
    method Write (line 113) | func (w *gzipResponseWriter) Write(b []byte) (int, error) {
    method Flush (line 132) | func (w *gzipResponseWriter) Flush() {
    method close (line 141) | func (w *gzipResponseWriter) close() {
  function newGzipHandler (line 150) | func newGzipHandler(next http.Handler) http.Handler {
  function ContextRequestTimeout (line 164) | func ContextRequestTimeout(ctx context.Context) (time.Duration, bool) {

FILE: packages/service/jsonrpc/id.go
  type ID (line 10) | type ID struct
    method String (line 37) | func (id ID) String() string {
    method MarshalJSON (line 45) | func (id ID) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 53) | func (id *ID) UnmarshalJSON(data []byte) error {
  function StringID (line 23) | func StringID(s string) ID {
  function IntID (line 30) | func IntID(i uint64) ID {

FILE: packages/service/jsonrpc/jwt.go
  type JWTClaims (line 27) | type JWTClaims struct
  function generateJWTToken (line 36) | func generateJWTToken(claims JWTClaims) (string, error) {
  function parseJWTToken (line 41) | func parseJWTToken(header string) (*jwt.Token, error) {
  function getClientFromToken (line 60) | func getClientFromToken(token *jwt.Token, ecosysNameService types.Ecosys...
  function InitJwtSecret (line 86) | func InitJwtSecret(secret []byte) {

FILE: packages/service/jsonrpc/middlewares.go
  function clientMiddleware (line 19) | func clientMiddleware(next http.Handler, m Mode) http.Handler {
  function loggerFromRequest (line 39) | func loggerFromRequest(r *http.Request) *log.Entry {
  function loggerMiddleware (line 47) | func loggerMiddleware(next http.Handler) http.Handler {
  function recoverMiddleware (line 56) | func recoverMiddleware(next http.Handler) http.Handler {
  function nodeStateMiddleware (line 73) | func nodeStateMiddleware(next http.Handler) http.Handler {
  function tokenMiddleware (line 89) | func tokenMiddleware(next http.Handler) http.Handler {
  function statsdMiddleware (line 106) | func statsdMiddleware(next http.Handler) http.Handler {
  function limiterMiddleware (line 124) | func limiterMiddleware(next http.Handler) http.Handler {

FILE: packages/service/jsonrpc/namespace.go
  type space (line 11) | type space
  constant namespaceSeparator (line 14) | namespaceSeparator = "."
  constant namespaceRPC (line 18) | namespaceRPC   space = "rpc"
  constant NamespaceDebug (line 19) | NamespaceDebug space = "debug"
  constant NamespaceIBAX (line 21) | NamespaceIBAX  space = "ibax"
  constant NamespaceAdmin (line 22) | NamespaceAdmin space = "admin"
  constant NamespaceNet (line 23) | NamespaceNet   space = "net"
  type RpcApis (line 26) | type RpcApis interface
  type RpcServers (line 30) | type RpcServers struct
    method Modules (line 70) | func (r *RpcServers) Modules() ([]string, *Error) {
  type NewApiService (line 34) | type NewApiService interface
  type Method (line 39) | type Method struct
    method Delete (line 43) | func (a *Method) Delete(name string) {
    method New (line 52) | func (a *Method) New(structObject any) (name string) {
  function GetStructValue (line 82) | func GetStructValue(structObject any) reflect.Value {

FILE: packages/service/jsonrpc/namespace_debug.go
  type DebugApi (line 7) | type DebugApi struct
    method GetApis (line 11) | func (p *DebugApi) GetApis() []any {
  function NewDebugApi (line 23) | func NewDebugApi() *DebugApi {

FILE: packages/service/jsonrpc/namespace_ibax.go
  type IbaxApi (line 7) | type IbaxApi struct
    method GetApis (line 16) | func (p *IbaxApi) GetApis() []any {
  function NewIbaxApi (line 42) | func NewIbaxApi(m Mode) *IbaxApi {

FILE: packages/service/jsonrpc/namespace_net.go
  type NetApi (line 14) | type NetApi struct
    method GetApis (line 24) | func (p *NetApi) GetApis() []any {
  function NewNetApi (line 18) | func NewNetApi() *NetApi {
  type networkApi (line 35) | type networkApi struct
    method Status (line 43) | func (n *networkApi) Status() string {
    method GetNetwork (line 47) | func (c *networkApi) GetNetwork() (*NetworkResult, *Error) {
  function NewNetworkApi (line 38) | func NewNetworkApi() *networkApi {

FILE: packages/service/jsonrpc/params.go
  type Param (line 16) | type Param
    method MarshalJSON (line 20) | func (m Param) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 28) | func (m *Param) UnmarshalJSON(data []byte) error {
  type Params (line 17) | type Params
    method UnmarshalInto (line 87) | func (p Params) UnmarshalInto(receivers ...any) error {
    method UnmarshalValue (line 106) | func (p Params) UnmarshalValue(types []reflect.Type) (args []reflect.V...
    method UnmarshalSingleParam (line 150) | func (p Params) UnmarshalSingleParam(pos int, receiver any) error {
  function MustParams (line 42) | func MustParams(params ...any) Params {
  function MakeParams (line 58) | func MakeParams(params ...any) (Params, error) {

FILE: packages/service/jsonrpc/raw_response.go
  type RawResponse (line 10) | type RawResponse struct
    method MarshalJSON (line 19) | func (r RawResponse) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 53) | func (r *RawResponse) UnmarshalJSON(data []byte) error {

FILE: packages/service/jsonrpc/request.go
  constant JsonRPCVersion (line 10) | JsonRPCVersion = "2.0"
  type Request (line 12) | type Request struct
    method MarshalJSON (line 59) | func (r Request) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 75) | func (r *Request) UnmarshalJSON(data []byte) error {
  type BatchRequest (line 19) | type BatchRequest
  type RequestWithNetwork (line 21) | type RequestWithNetwork struct
    method MarshalJSON (line 165) | func (r RequestWithNetwork) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 183) | func (r *RequestWithNetwork) UnmarshalJSON(data []byte) error {
  function NewRequest (line 26) | func NewRequest() *Request {
  function MakeRequest (line 32) | func MakeRequest(id int, method string, params ...any) (*Request, error) {
  function MustRequest (line 48) | func MustRequest(id int, method string, params ...any) *Request {
  function getBatch (line 116) | func getBatch(r io.ReadCloser, ctxer func(json.RawMessage)) (reqs []*Req...
  function parseRequest (line 136) | func parseRequest(raw json.RawMessage) ([]*Request, bool) {
  function isBatch (line 152) | func isBatch(raw json.RawMessage) bool {

FILE: packages/service/jsonrpc/response.go
  type Response (line 11) | type Response struct
    method MarshalJSON (line 26) | func (r Response) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 60) | func (r *Response) UnmarshalJSON(data []byte) error {
  type BatchResponse (line 18) | type BatchResponse
  function NewResponse (line 20) | func NewResponse() *Response {

FILE: packages/service/jsonrpc/server.go
  type Server (line 14) | type Server struct
    method ServeHTTP (line 19) | func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    method RegisterName (line 54) | func (s *Server) RegisterName(namespace string, function any) error {
    method Stop (line 58) | func (s *Server) Stop() {
  function NewServer (line 37) | func NewServer(m Mode) *Server {

FILE: packages/service/jsonrpc/service.go
  type service (line 19) | type service struct
  type serviceRegistry (line 23) | type serviceRegistry struct
    method registerName (line 34) | func (r *serviceRegistry) registerName(namespace string, stct any) err...
    method ServeHTTP (line 63) | func (s *serviceRegistry) ServeHTTP(w http.ResponseWriter, r *http.Req...
    method close (line 93) | func (s *serviceRegistry) close(err error) {
    method findCallback (line 102) | func (r *serviceRegistry) findCallback(method string) *callback {
    method run (line 112) | func (s *serviceRegistry) run(ctx RequestContext, isBatch bool, reqs [...
    method runBatch (line 139) | func (s *serviceRegistry) runBatch(reqCtx RequestContext, reqs []*Requ...
    method callProc (line 175) | func (s *serviceRegistry) callProc(fn func(ctx context.Context)) {
  function GetNamespace (line 98) | func GetNamespace(name space) string {
  function runMethod (line 135) | func runMethod(ctx RequestContext, m Mode, args []reflect.Value, cb *cal...
  type batchCallBuffer (line 185) | type batchCallBuffer struct
    method nextRequest (line 193) | func (b *batchCallBuffer) nextRequest() *Request {
    method pushResponse (line 205) | func (b *batchCallBuffer) pushResponse(answer *any, err *Error, req *R...
    method write (line 214) | func (b *batchCallBuffer) write(ctx RequestContext, isTimeOut bool) {

FILE: packages/service/jsonrpc/transaction.go
  type transactionApi (line 22) | type transactionApi struct
    method SendTx (line 54) | func (t *transactionApi) SendTx(ctx RequestContext, auth Auth, mtx map...
    method TxStatus (line 133) | func (t *transactionApi) TxStatus(ctx RequestContext, auth Auth, hashe...
    method TxInfo (line 154) | func (b *transactionApi) TxInfo(hash string, contractInfo *bool) (*TxI...
    method TxInfoMultiple (line 169) | func (b *transactionApi) TxInfoMultiple(hashList []string, contractInf...
  function newTransactionApi (line 25) | func newTransactionApi() *transactionApi {
  type sendTxResult (line 29) | type sendTxResult struct
  function txHandlerBatches (line 33) | func txHandlerBatches(r *http.Request, m Mode, mtx map[string][]byte) ([...
  type txstatusError (line 77) | type txstatusError struct
  type txstatusResult (line 83) | type txstatusResult struct
  function getTxStatus (line 90) | func getTxStatus(r *http.Request, hash string) (*txstatusResult, error) {

FILE: packages/service/jsonrpc/txinfo.go
  type feeInfo (line 20) | type feeInfo struct
  type TxInfoResult (line 26) | type TxInfoResult struct
  type MultiTxInfoResult (line 32) | type MultiTxInfoResult struct
  type TxDetailResult (line 36) | type TxDetailResult struct
  function getTxInfo (line 39) | func getTxInfo(txHash string, getInfo bool) (*TxInfoResult, error) {
  function transactionData (line 73) | func transactionData(blockId int64, txHash string) (*smart.TxInfo, error) {

FILE: packages/service/node/node_actualization.go
  constant DefaultBlockchainGap (line 22) | DefaultBlockchainGap int64 = 10
  type NodeActualizer (line 24) | type NodeActualizer struct
    method Run (line 35) | func (n *NodeActualizer) Run(ctx context.Context) {
    method checkBlockchainActuality (line 65) | func (n *NodeActualizer) checkBlockchainActuality(ctx context.Context)...
    method pauseNodeActivity (line 102) | func (n *NodeActualizer) pauseNodeActivity() {
    method resumeNodeActivity (line 106) | func (n *NodeActualizer) resumeNodeActivity() {
  function NewNodeActualizer (line 28) | func NewNodeActualizer(availableBlockchainGap int64) NodeActualizer {

FILE: packages/service/node/node_ban.go
  type localBannedNode (line 23) | type localBannedNode struct
  type NodesBanService (line 28) | type NodesBanService struct
    method RegisterBadBlock (line 54) | func (nbs *NodesBanService) RegisterBadBlock(node syspar.HonorNode, ba...
    method IsBanned (line 72) | func (nbs *NodesBanService) IsBanned(node syspar.HonorNode) bool {
    method refreshNodes (line 107) | func (nbs *NodesBanService) refreshNodes() {
    method localBan (line 113) | func (nbs *NodesBanService) localBan(node syspar.HonorNode) {
    method newBadBlock (line 129) | func (nbs *NodesBanService) newBadBlock(producer syspar.HonorNode, blo...
    method FilterHosts (line 174) | func (nbs *NodesBanService) FilterHosts(hosts []string) ([]string, []s...
    method FilterBannedHosts (line 192) | func (nbs *NodesBanService) FilterBannedHosts(hosts []string) (goodHos...
  function GetNodesBanService (line 38) | func GetNodesBanService() *NodesBanService {
  function InitNodesBanService (line 43) | func InitNodesBanService() error {

FILE: packages/service/node/node_paused.go
  constant NoPause (line 12) | NoPause PauseType = 0
  constant PauseTypeUpdatingBlockchain (line 14) | PauseTypeUpdatingBlockchain PauseType = 1 + iota
  constant PauseTypeStopingNetwork (line 15) | PauseTypeStopingNetwork
  type PauseType (line 21) | type PauseType
    method String (line 29) | func (p PauseType) String() string {
  type NodePaused (line 23) | type NodePaused struct
    method Set (line 41) | func (np *NodePaused) Set(pt PauseType) {
    method Unset (line 48) | func (np *NodePaused) Unset() {
    method Get (line 55) | func (np *NodePaused) Get() PauseType {
    method IsSet (line 62) | func (np *NodePaused) IsSet() bool {
  function IsNodePaused (line 69) | func IsNodePaused() bool {
  function PauseNodeActivity (line 73) | func PauseNodeActivity(pt PauseType) {
  function NodePauseType (line 77) | func NodePauseType() PauseType {

FILE: packages/service/node/node_relevance.go
  type NodeRelevanceService (line 22) | type NodeRelevanceService struct
    method Run (line 41) | func (n *NodeRelevanceService) Run(ctx context.Context) {
    method checkNodeRelevance (line 75) | func (n *NodeRelevanceService) checkNodeRelevance(ctx context.Context)...
    method pauseNodeActivity (line 139) | func (n *NodeRelevanceService) pauseNodeActivity() {
    method resumeNodeActivity (line 143) | func (n *NodeRelevanceService) resumeNodeActivity() {
  function NewNodeRelevanceService (line 27) | func NewNodeRelevanceService() *NodeRelevanceService {
  function NodeDoneUpdatingBlockchain (line 69) | func NodeDoneUpdatingBlockchain() {

FILE: packages/smart/builtin_excel.go
  function GetDataFromXLSX (line 19) | func GetDataFromXLSX(sc *SmartContract, binaryID, startLine, linesCount,...
  function GetRowsCountXLSX (line 43) | func GetRowsCountXLSX(sc *SmartContract, binaryID, sheetNum int64) (int6...
  function excelBookFromStoredBinary (line 54) | func excelBookFromStoredBinary(sc *SmartContract, binaryID int64) (*xl.F...

FILE: packages/smart/contract.go
  type Contract (line 12) | type Contract struct
    method Info (line 24) | func (c *Contract) Info() *script.ContractInfo {
    method GetFunc (line 116) | func (contract *Contract) GetFunc(name string) *script.CodeBlock {
  function LoadContracts (line 29) | func LoadContracts() error {
  function LoadContract (line 52) | func LoadContract(transaction *sqldb.DbTransaction, ecosystem int64) (er...
  function VMGetContract (line 67) | func VMGetContract(vm *script.VM, name string, state uint32) *Contract {
  function VMGetContractByID (line 80) | func VMGetContractByID(vm *script.VM, id int32) *Contract {
  function GetContract (line 101) | func GetContract(name string, state uint32) *Contract {
  function GetUsedContracts (line 106) | func GetUsedContracts(name string, state uint32, full bool) []string {
  function GetContractByID (line 111) | func GetContractByID(id int32) *Contract {
  function loadContractList (line 123) | func loadContractList(list []sqldb.Contract) error {
  function vmGetUsedContracts (line 148) | func vmGetUsedContracts(vm *script.VM, name string, state uint32, full b...

FILE: packages/smart/datetime.go
  constant dateTimeFormat (line 14) | dateTimeFormat = "2006-01-02 15:04:05"
  function Date (line 18) | func Date(timeFormat string, timestamp int64) string {
  function BlockTime (line 23) | func BlockTime(sc *SmartContract) string {
  function DateTime (line 34) | func DateTime(unix int64) string {
  function DateTimeLocation (line 38) | func DateTimeLocation(unix int64, locationName string) (string, error) {
  function AddDate (line 46) | func AddDate(unix, years, months, days int64) int64 {
  function UnixDateTime (line 50) | func UnixDateTime(value string) int64 {
  function UnixDateTimeLocation (line 58) | func UnixDateTimeLocation(value, locationName string) (int64, error) {

FILE: packages/smart/errors.go
  constant eContractLoop (line 13) | eContractLoop          = `there is loop in %s contract`
  constant eContractExist (line 14) | eContractExist         = `contract %s already exists`
  constant eLatin (line 15) | eLatin                 = `Name %s must only contain latin, digit and '_'...
  constant eAccessContract (line 16) | eAccessContract        = `%s can only be called with condition: %s`
  constant eColumnExist (line 17) | eColumnExist           = `column %s exists`
  constant eColumnNotExist (line 18) | eColumnNotExist        = `column %s doesn't exist`
  constant eColumnType (line 19) | eColumnType            = `Type '%s' of columns is not supported`
  constant eNotCustomTable (line 20) | eNotCustomTable        = `%s is not a custom table`
  constant eEmptyCond (line 21) | eEmptyCond             = `%v condition is empty`
  constant eIncorrectSignature (line 22) | eIncorrectSignature    = `incorrect signature %s`
  constant eItemNotFound (line 23) | eItemNotFound          = `item %d has not been found`
  constant eManyColumns (line 24) | eManyColumns           = `Too many columns. Limit is %d`
  constant eNotCondition (line 25) | eNotCondition          = `There is not %s in parameters`
  constant eParamNotFound (line 26) | eParamNotFound         = `Parameter %s has not been found`
  constant eRecordNotFound (line 27) | eRecordNotFound        = `Record %s has not been found`
  constant eTableExists (line 28) | eTableExists           = `table %s exists`
  constant eTableNotFound (line 29) | eTableNotFound         = `table %s has not been found`
  constant eTypeJSON (line 30) | eTypeJSON              = `Type %T doesn't support json marshalling`
  constant eUnknownContract (line 31) | eUnknownContract       = `Unknown contract %s`
  constant eUnsupportedType (line 32) | eUnsupportedType       = "Unsupported type %T"
  constant eWrongRandom (line 33) | eWrongRandom           = `wrong random parameters min: %v, max: %v`
  constant eGreaterThan (line 34) | eGreaterThan           = `%s must be greater than 0`
  constant eTableNotEmpty (line 35) | eTableNotEmpty         = `Table %s is not empty`
  constant eColumnNotDeleted (line 36) | eColumnNotDeleted      = `Column %s cannot be deleted`
  constant eRollbackContract (line 37) | eRollbackContract      = `Wrong rollback of the latest contract %d != %d`
  constant eExternalNet (line 38) | eExternalNet           = `External network %s is not defined`
  constant eKeyNotFound (line 39) | eKeyNotFound           = `sender %s has not been found`
  constant eEcoKeyNotFound (line 40) | eEcoKeyNotFound        = `sender %s has not been found in ecosystem %d`
  constant eEcoKeyDisable (line 41) | eEcoKeyDisable         = `%s disable in ecosystem %d`
  constant eEcoFuelRate (line 42) | eEcoFuelRate           = `fuel rate must be greater than 0 or empty in e...
  constant eEcoCurrentBalance (line 43) | eEcoCurrentBalance     = `account %s current balance is not enough in ec...
  constant eEcoCurrentBalanceDiff (line 44) | eEcoCurrentBalanceDiff = eEcoCurrentBalance + `, at least [%s] difference`

FILE: packages/smart/funcs.go
  constant nodeBanNotificationHeader (line 50) | nodeBanNotificationHeader = "Your node was banned"
  constant historyLimit (line 51) | historyLimit              = 250
  constant contractTxType (line 52) | contractTxType            = 128
  type permTable (line 61) | type permTable struct
  type permColumn (line 69) | type permColumn struct
  type TxInfo (line 74) | type TxInfo struct
  type TableInfo (line 88) | type TableInfo struct
  type FlushInfo (line 93) | type FlushInfo struct
    method FlushVM (line 100) | func (finfo *FlushInfo) FlushVM() {
  type NotifyInfo (line 115) | type NotifyInfo struct
  function EmbedFuncs (line 176) | func EmbedFuncs(vt script.VMType) map[string]any {
  function accessContracts (line 329) | func accessContracts(sc *SmartContract, names ...string) bool {
  function CompileContract (line 341) | func CompileContract(sc *SmartContract, code string, state, id, token in...
  function ContractAccess (line 349) | func ContractAccess(sc *SmartContract, names ...any) bool {
  function RoleAccess (line 377) | func RoleAccess(sc *SmartContract, ids ...any) (bool, error) {
  function ContractConditions (line 401) | func ContractConditions(sc *SmartContract, names ...any) (bool, error) {
  function contractName (line 439) | func contractName(value string) (name string, err error) {
  function ValidateEditContractNewValue (line 449) | func ValidateEditContractNewValue(sc *SmartContract, newValue, oldValue ...
  function UpdateContract (line 476) | func UpdateContract(sc *SmartContract, id int64, value, conditions strin...
  function CreateContract (line 513) | func CreateContract(sc *SmartContract, name, value, conditions string, t...
  function getColumns (line 553) | func getColumns(columns string) (colsSQL string, colout []byte, err erro...
  function CreateView (line 608) | func CreateView(sc *SmartContract, vname, columns, where string, applica...
  type ViewColSch (line 652) | type ViewColSch struct
  function parseViewColumnSql (line 658) | func parseViewColumnSql(sc *SmartContract, columns string) (colsSQL stri...
  type ViewWheSch (line 712) | type ViewWheSch struct
  function parseViewWhereSql (line 720) | func parseViewWhereSql(sc *SmartContract, columns string) (tabsSQL, whsS...
  function CreateTable (line 815) | func CreateTable(sc *SmartContract, name, columns, permissions string, a...
  function columnType (line 873) | func columnType(colType string) (string, error) {
  function mapToParams (line 880) | func mapToParams(values *types.Map) (pa
Condensed preview — 473 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,380K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2576,
    "preview": "name: \"\\U0001F41E Bug report\"\ndescription: Report an issue with IBAX\nlabels: [pending triage]\nbody:\n  - type: markdown\n "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 508,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: IBAX Official English Group\n    url: https://t.me/IBAXNetwork\n    a"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1605,
    "preview": "name: \"\\U0001F680 New feature proposal\"\ndescription: Propose a new feature to be added to IBAX\nlabels: [\"enhancement: pe"
  },
  {
    "path": ".gitignore",
    "chars": 1918,
    "preview": ".directory\n\n### JetBrains template\n# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Andro"
  },
  {
    "path": ".travis.yml",
    "chars": 165,
    "preview": "language: go\n\nenv: GO111MODULE=on\n\ngo:\n  - 1.17.x\n  - master\n\ngo_import_path: github.com/IBAX-io/go-ibax\n\ninstall: true\n"
  },
  {
    "path": "LICENSE",
    "chars": 11334,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "Makefile",
    "chars": 333,
    "preview": "export GOPROXY=https://goproxy.io\nexport GO111MODULE=on\n\nHOMEDIR := $(shell pwd)\n\nall: mod build\n\nmod:\n\tgo mod tidy -v\n\n"
  },
  {
    "path": "README.md",
    "chars": 1740,
    "preview": "# IBAX Blockchain System Platform\r\n\r\n[![Go Reference](https://pkg.go.dev/badge/github.com/IBAX-io/go-ibax.svg)](https://"
  },
  {
    "path": "build.sh",
    "chars": 571,
    "preview": "#!/bin/bash\nset -e -x\n\nHOMEDIR=$(pwd)\n\nfunction buildpkg() {\n    buildBin=$1\n    buildModule=$2\n    buildFile=$3\n    bui"
  },
  {
    "path": "cmd/config.go",
    "chars": 8000,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/generateFirstBlock.go",
    "chars": 3870,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/generateKeys.go",
    "chars": 2629,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/initDatabase.go",
    "chars": 849,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/rollback.go",
    "chars": 1913,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/root.go",
    "chars": 2154,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/start.go",
    "chars": 937,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/stopNetwork.go",
    "chars": 2069,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "cmd/version.go",
    "chars": 613,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "go.mod",
    "chars": 5315,
    "preview": "module github.com/IBAX-io/go-ibax\n\ngo 1.20\n\nrequire (\n\tgithub.com/360EntSecGroup-Skylar/excelize v1.4.1\n\tgithub.com/Burn"
  },
  {
    "path": "go.sum",
    "chars": 82262,
    "preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
  },
  {
    "path": "main.go",
    "chars": 426,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/api.go",
    "chars": 2698,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/api_test.go",
    "chars": 19887,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/app_content.go",
    "chars": 1958,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/app_content_test.go",
    "chars": 768,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/appparam.go",
    "chars": 1494,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/appparams.go",
    "chars": 1859,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/auth.go",
    "chars": 2976,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/balance.go",
    "chars": 2441,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/balance_test.go",
    "chars": 1629,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/block.go",
    "chars": 9631,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/block_test.go",
    "chars": 633,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/common_forms.go",
    "chars": 1804,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/config.go",
    "chars": 1764,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/content.go",
    "chars": 8442,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/content_test.go",
    "chars": 4769,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/context.go",
    "chars": 1486,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/contract_test.go",
    "chars": 57510,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/contracts.go",
    "chars": 1653,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/data.go",
    "chars": 2479,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/ecosystem.go",
    "chars": 1229,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/ecosystem_params.go",
    "chars": 2634,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/ecosystem_test.go",
    "chars": 6925,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/errors.go",
    "chars": 4822,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/getcontract.go",
    "chars": 2958,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/getuid.go",
    "chars": 2228,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/getuid_test.go",
    "chars": 1331,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/history.go",
    "chars": 1571,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/history_test.go",
    "chars": 826,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/import_test.go",
    "chars": 4321,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/interface.go",
    "chars": 1376,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/interface_test.go",
    "chars": 2509,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/lang_test.go",
    "chars": 4509,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/limit_test.go",
    "chars": 3636,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/list.go",
    "chars": 8183,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/list_test.go",
    "chars": 1367,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/login.go",
    "chars": 10930,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/member.go",
    "chars": 2645,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/metrics.go",
    "chars": 4397,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/middlewares.go",
    "chars": 4019,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/network.go",
    "chars": 1744,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/node.go",
    "chars": 508,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/platform_params.go",
    "chars": 1474,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/read_test.go",
    "chars": 4340,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/request.go",
    "chars": 7219,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/route.go",
    "chars": 6467,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/row.go",
    "chars": 2231,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/sections.go",
    "chars": 2864,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/send_tx.go",
    "chars": 2691,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/smart_test.go",
    "chars": 32276,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/table.go",
    "chars": 2698,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/tables.go",
    "chars": 2221,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/tables_test.go",
    "chars": 13583,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/template_test.go",
    "chars": 20741,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/trash.go",
    "chars": 797,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/tx_record.go",
    "chars": 849,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/txinfo.go",
    "chars": 4118,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/txstatus.go",
    "chars": 2923,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/api/version.go",
    "chars": 572,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/block/block.go",
    "chars": 2478,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/block/check.go",
    "chars": 3739,
    "preview": "/*----------------------------------------------------------------\n- Copyright (c) IBAX. All rights reserved.\n- See LICE"
  },
  {
    "path": "packages/block/db.go",
    "chars": 10021,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/block/play.go",
    "chars": 13111,
    "preview": "/*----------------------------------------------------------------\n- Copyright (c) IBAX. All rights reserved.\n- See LICE"
  },
  {
    "path": "packages/block/serialization.go",
    "chars": 3383,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/chain/daemonsctl/daemonsctl.go",
    "chars": 542,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/chain/notandroid.go",
    "chars": 1149,
    "preview": "//go:build !android && !ios\n\n/*-----------------------------------------------------------------------------------------"
  },
  {
    "path": "packages/chain/start.go",
    "chars": 6962,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/chain/system/pid.go",
    "chars": 2552,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/chain/system/unix.go",
    "chars": 780,
    "preview": "//go:build (linux || freebsd || darwin) && (386 || amd64 || arm64)\n\n/*--------------------------------------------------"
  },
  {
    "path": "packages/chain/system/windows.go",
    "chars": 1360,
    "preview": "//go:build windows\n\n/*---------------------------------------------------------------------------------------------\n *  "
  },
  {
    "path": "packages/clbmanager/config.go",
    "chars": 1867,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/clbmanager/manager.go",
    "chars": 12236,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/asymalgo/asymalgo.go",
    "chars": 1487,
    "preview": "package asymalgo\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"math/big\"\n)\n\n// ParseSign converts the hex signature to r a"
  },
  {
    "path": "packages/common/crypto/asymalgo/error.go",
    "chars": 350,
    "preview": "package asymalgo\n\nimport \"errors\"\n\nvar (\n\t// ErrSigningEmpty is Signing empty value error\n\tErrSigningEmpty = errors.New("
  },
  {
    "path": "packages/common/crypto/asymalgo/p256.go",
    "chars": 2120,
    "preview": "package asymalgo\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\tcrand \"crypto/rand\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"math/big\"\n\n\t"
  },
  {
    "path": "packages/common/crypto/asymalgo/secp256k1.go",
    "chars": 1976,
    "preview": "package asymalgo\n\nimport (\n\t\"crypto/ecdsa\"\n\n\tcrand \"crypto/rand\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/IBAX-i"
  },
  {
    "path": "packages/common/crypto/asymalgo/sm2.go",
    "chars": 1863,
    "preview": "package asymalgo\n\nimport (\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/IBAX-io/go-ibax/packages/consts\"\n\t\"github.com"
  },
  {
    "path": "packages/common/crypto/base58/base58.go",
    "chars": 1471,
    "preview": "package base58\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"math/big\"\n)\n\nvar base58Alphabets = []byte(\"12345678"
  },
  {
    "path": "packages/common/crypto/checksum.go",
    "chars": 564,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/converter.go",
    "chars": 2294,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/crypto.go",
    "chars": 3143,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/crypto.pb.go",
    "chars": 4165,
    "preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: crypto.proto\n\npackage crypto\n\nimport (\n\tfmt \"fmt\"\n\tproto \""
  },
  {
    "path": "packages/common/crypto/crypto_test.go",
    "chars": 1664,
    "preview": "package crypto\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"log\"\n\t\"testing\"\n)\n\nfunc TestGetCryptoer(t *testing.T) {\n\tInitAsymAlgo("
  },
  {
    "path": "packages/common/crypto/ecies/ecccrypt.go",
    "chars": 2781,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/ecies/ecies.go",
    "chars": 9901,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/hashalgo/hashalgo.go",
    "chars": 17,
    "preview": "package hashalgo\n"
  },
  {
    "path": "packages/common/crypto/hashalgo/keccak256.go",
    "chars": 600,
    "preview": "package hashalgo\n\nimport (\n\t\"crypto/hmac\"\n\t\"golang.org/x/crypto/sha3\"\n)\n\ntype Keccak256 struct{}\n\nfunc (k *Keccak256) Ge"
  },
  {
    "path": "packages/common/crypto/hashalgo/sha256.go",
    "chars": 525,
    "preview": "package hashalgo\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n)\n\ntype SHA256 struct{}\n\nfunc (s *SHA256) GetHMAC(secret stri"
  },
  {
    "path": "packages/common/crypto/hashalgo/sha3_256.go",
    "chars": 540,
    "preview": "package hashalgo\n\nimport (\n\t\"crypto/hmac\"\n\n\t\"golang.org/x/crypto/sha3\"\n)\n\ntype Sha3256 struct{}\n\nfunc (s *Sha3256) GetHM"
  },
  {
    "path": "packages/common/crypto/hashalgo/sm3.go",
    "chars": 491,
    "preview": "package hashalgo\n\nimport (\n\t\"crypto/hmac\"\n\n\t\"github.com/tjfoc/gmsm/sm3\"\n)\n\ntype SM3 struct{}\n\nfunc (s *SM3) GetHMAC(secr"
  },
  {
    "path": "packages/common/crypto/provider.go",
    "chars": 583,
    "preview": "package crypto\n\ntype AsymProvider interface {\n\tGenKeyPair() ([]byte, []byte, error)\n\tSign(privateKey, hash []byte) ([]by"
  },
  {
    "path": "packages/common/crypto/random.go",
    "chars": 644,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/symalgo/aes/aes.go",
    "chars": 4252,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/symalgo/aes/aes_test.go",
    "chars": 1045,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/crypto/x509/cert.go",
    "chars": 1395,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/log/filename_hook.go",
    "chars": 1618,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/log/hex_hook.go",
    "chars": 712,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/log/syslog_hook.go",
    "chars": 1360,
    "preview": "//go:build !windows && !nacl && !plan9\n\n/*------------------------------------------------------------------------------"
  },
  {
    "path": "packages/common/log/syslog_hook_windows.go",
    "chars": 749,
    "preview": "//go:build windows\n\n/*---------------------------------------------------------------------------------------------\n *  "
  },
  {
    "path": "packages/common/random/rand.go",
    "chars": 1424,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/random/rand_test.go",
    "chars": 686,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/common/size.go",
    "chars": 1349,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/conf/conf.go",
    "chars": 4792,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/conf/runmode.go",
    "chars": 1648,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/conf/syspar/honornode.go",
    "chars": 3925,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/conf/syspar/honornode_test.go",
    "chars": 2975,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/conf/syspar/syspar.go",
    "chars": 18330,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/conf/types.go",
    "chars": 3335,
    "preview": "package conf\n\ntype (\n\t// HostPort endpoint in form \"str:int\"\n\tHostPort struct {\n\t\tHost string // ipaddr, hostname, or \"0"
  },
  {
    "path": "packages/consts/conf.go",
    "chars": 1240,
    "preview": "/*----------------------------------------------------------------\n- Copyright (c) IBAX. All rights reserved.\n- See LICE"
  },
  {
    "path": "packages/consts/consts.go",
    "chars": 4050,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/consts/log_types.go",
    "chars": 2775,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/consts/used_stop_certs.go",
    "chars": 445,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/converter/address.go",
    "chars": 3531,
    "preview": "/*----------------------------------------------------------------\n- Copyright (c) IBAX. All rights reserved.\n- See LICE"
  },
  {
    "path": "packages/converter/converter.go",
    "chars": 27660,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/block_generator.go",
    "chars": 8345,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/block_generator_candidate.go",
    "chars": 7873,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/block_generator_tx.go",
    "chars": 2513,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/blocks_collection.go",
    "chars": 10907,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/candidate_node_votings.go",
    "chars": 5171,
    "preview": "package daemons\n\nimport (\n\t\"context\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/IBAX-"
  },
  {
    "path": "packages/daemons/common.go",
    "chars": 5743,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/confirmations.go",
    "chars": 4342,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/disseminator.go",
    "chars": 5083,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/external_network.go",
    "chars": 6039,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/genesis.go",
    "chars": 2279,
    "preview": "package daemons\n\nimport (\n\t\"context\"\n\t\"os\"\n\n\t\"github.com/pkg/errors\"\n\n\t\"github.com/IBAX-io/go-ibax/packages/network/tcpc"
  },
  {
    "path": "packages/daemons/locking.go",
    "chars": 1531,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/mode.go",
    "chars": 3123,
    "preview": "package daemons\n\nimport (\n\t\"encoding/hex\"\n\t\"errors\"\n\n\t\"github.com/IBAX-io/go-ibax/packages/conf/syspar\"\n\t\"github.com/IBA"
  },
  {
    "path": "packages/daemons/monitoring.go",
    "chars": 2528,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/queue_parser_blocks.go",
    "chars": 2926,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/queue_parser_tx.go",
    "chars": 1442,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/scheduler.go",
    "chars": 1760,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/stopdaemons.go",
    "chars": 1757,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/upd_full_nodes.go",
    "chars": 316,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/daemons/wait_for_signals.go",
    "chars": 2156,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/language/language.go",
    "chars": 5609,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/applications_data.go",
    "chars": 496,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/clb_data_contracts.go",
    "chars": 39372,
    "preview": "// Code generated by go generate; DO NOT EDIT.\n\npackage clb\n\nvar contractsDataSQL = `\nINSERT INTO \"1_contracts\" (id, nam"
  },
  {
    "path": "packages/migration/clb/data.go",
    "chars": 1746,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/keys_data.go",
    "chars": 576,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/menu_data.go",
    "chars": 1516,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/pages_data.go",
    "chars": 7748,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/parameters_data.go",
    "chars": 2485,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/platform_parameters_data.go",
    "chars": 8157,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/roles_data.go",
    "chars": 1788,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/scheme.go",
    "chars": 11928,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/sections_data.go",
    "chars": 495,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/snippets_data.go",
    "chars": 522,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/clb/tables_data.go",
    "chars": 9549,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) IBAX. "
  },
  {
    "path": "packages/migration/contracts/clb/EditCron.sim",
    "chars": 658,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditCron {\n\t\tdata {\n\t\t\tId     "
  },
  {
    "path": "packages/migration/contracts/clb/ListCLB.sim",
    "chars": 173,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract ListCLB {\n\t\tdata {}\n\t\n\t\tcondit"
  },
  {
    "path": "packages/migration/contracts/clb/MainCondition.sim",
    "chars": 247,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract MainCondition {\n\t\tconditions {"
  },
  {
    "path": "packages/migration/contracts/clb/NewCLB.sim",
    "chars": 959,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewCLB {\n\t\tdata {\n\t\t\tCLBName s"
  },
  {
    "path": "packages/migration/contracts/clb/NewCron.sim",
    "chars": 655,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewCron {\n\t\tdata {\n\t\t\tCron    "
  },
  {
    "path": "packages/migration/contracts/clb/RemoveCLB.sim",
    "chars": 273,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract RemoveCLB {\n\tdata {\n\t\t\tCLBName"
  },
  {
    "path": "packages/migration/contracts/clb/RunCLB.sim",
    "chars": 255,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract RunCLB {\n\tdata {\n\t\tCLBName str"
  },
  {
    "path": "packages/migration/contracts/clb/StopCLB.sim",
    "chars": 274,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract StopCLB {\n\t\tdata {\n\t\t\tCLBName "
  },
  {
    "path": "packages/migration/contracts/ecosystem/DeveloperCondition.sim",
    "chars": 1372,
    "preview": "// +prop AppID = '{{.AppID}}'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\n// This contract is used to se"
  },
  {
    "path": "packages/migration/contracts/ecosystem/MainCondition.sim",
    "chars": 566,
    "preview": "// +prop AppID = '{{.AppID}}'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract MainCondition {\n    f"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/AccessControlMode.sim",
    "chars": 1655,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract AccessControlMode {\n    data {"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/AccessVoteTempRun.sim",
    "chars": 933,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract AccessVoteTempRun {\n    data {"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/BindWallet.sim",
    "chars": 472,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract BindWallet {\n\tdata {\n\t\tId  int"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/CallDelayedContract.sim",
    "chars": 1022,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract CallDelayedContract {\n\tdata {\n"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/CheckNodesBan.sim",
    "chars": 1269,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract CheckNodesBan {\n    func getPe"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditAppParam.sim",
    "chars": 720,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditAppParam {\n    data {\n    "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditApplication.sim",
    "chars": 661,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditApplication {\n    data {\n "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditColumn.sim",
    "chars": 350,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditColumn {\n    data {\n      "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditContract.sim",
    "chars": 894,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditContract {\n    data {\n    "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditLang.sim",
    "chars": 373,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditLang {\n    data {\n        "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditMenu.sim",
    "chars": 824,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditMenu {\n    data {\n        "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditPage.sim",
    "chars": 1602,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditPage {\n    data {\n        "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditParameter.sim",
    "chars": 1779,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditParameter {\n    data {\n   "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditSnippet.sim",
    "chars": 715,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditSnippet {\n    data {\n     "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/EditTable.sim",
    "chars": 945,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract EditTable {\n    data {\n       "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/HonorNodeCondition.sim",
    "chars": 318,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract HonorNodeCondition {\n\tconditio"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/Import.sim",
    "chars": 3606,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract Import {\n    data {\n        Da"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/ImportUpload.sim",
    "chars": 4711,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract ImportUpload {\n    data {\n    "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/NewAppParam.sim",
    "chars": 703,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewAppParam {\n    data {\n     "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/NewApplication.sim",
    "chars": 599,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewApplication {\n    data {\n  "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/NewBadBlock.sim",
    "chars": 406,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewBadBlock {\n\tdata {\n\t\tProduc"
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/NewContract.sim",
    "chars": 953,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewContract {\n    data {\n     "
  },
  {
    "path": "packages/migration/contracts/first_ecosystem/NewEcosystem.sim",
    "chars": 189,
    "preview": "// +prop AppID = '1'\n// +prop Conditions = 'ContractConditions(\"MainCondition\")'\ncontract NewEcosystem {\n\tdata {\n\t\tName "
  }
]

// ... and 273 more files (download for full content)

About this extraction

This page contains the full source code of the IBAX-io/go-ibax GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 473 files (2.0 MB), approximately 559.9k tokens, and a symbol index with 3834 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!