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
[](https://pkg.go.dev/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, ¶mResult{
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
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
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[](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.