{"id":13650811,"url":"https://github.com/eoscanada/eosc","last_synced_at":"2026-01-16T15:30:24.860Z","repository":{"id":33890672,"uuid":"135083726","full_name":"eoscanada/eosc","owner":"eoscanada","description":"Cross-platform EOSIO command-line swiss-army-knife (EOS, BOS, Telos, Worbli, etc.)","archived":false,"fork":false,"pushed_at":"2025-05-15T15:29:49.000Z","size":46050,"stargazers_count":134,"open_issues_count":51,"forks_count":60,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-15T16:41:28.673Z","etag":null,"topics":["blockchain","eos","eosio","golang"],"latest_commit_sha":null,"homepage":"https://eosc.app","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eoscanada.png","metadata":{"files":{"readme":"README-cn.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-05-27T21:41:19.000Z","updated_at":"2025-05-15T15:29:54.000Z","dependencies_parsed_at":"2022-07-24T20:32:06.185Z","dependency_job_id":"13362672-b974-485e-9f2c-fdadb0d981e6","html_url":"https://github.com/eoscanada/eosc","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/eoscanada/eosc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoscanada%2Feosc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoscanada%2Feosc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoscanada%2Feosc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoscanada%2Feosc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eoscanada","download_url":"https://codeload.github.com/eoscanada/eosc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoscanada%2Feosc/sbom","scorecard":{"id":378705,"data":{"date":"2025-08-11","repo":{"name":"github.com/eoscanada/eosc","commit":"a8bf86fa62969a34ed26990d05e61ceae5ef17cc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 2/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":8,"reason":"5 out of the last 5 releases have a total of 5 signed artifacts.","details":["Info: signed release artifact: checksums.txt.sig: https://github.com/eoscanada/eosc/releases/tag/v1.4.0","Info: signed release artifact: checksums.txt.sig: https://github.com/eoscanada/eosc/releases/tag/v1.3.1","Info: signed release artifact: checksums.txt.sig: https://github.com/eoscanada/eosc/releases/tag/v1.3.0","Info: signed release artifact: checksums.txt.sig: https://github.com/eoscanada/eosc/releases/tag/v1.2.5","Info: signed release artifact: checksums.txt.sig: https://github.com/eoscanada/eosc/releases/tag/v1.2.4","Warn: release artifact v1.4.0 does not have provenance: https://api.github.com/repos/eoscanada/eosc/releases/25862397","Warn: release artifact v1.3.1 does not have provenance: https://api.github.com/repos/eoscanada/eosc/releases/17942534","Warn: release artifact v1.3.0 does not have provenance: https://api.github.com/repos/eoscanada/eosc/releases/17431933","Warn: release artifact v1.2.5 does not have provenance: https://api.github.com/repos/eoscanada/eosc/releases/16479440","Warn: release artifact v1.2.4 does not have provenance: https://api.github.com/repos/eoscanada/eosc/releases/16041713"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T14:53:40.687Z","repository_id":33890672,"created_at":"2025-08-18T14:53:40.687Z","updated_at":"2025-08-18T14:53:40.687Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","eos","eosio","golang"],"created_at":"2024-08-02T02:00:41.279Z","updated_at":"2026-01-16T15:30:24.715Z","avatar_url":"https://github.com/eoscanada.png","language":"Go","funding_links":[],"categories":["Tools"],"sub_categories":["Wallets and Toolkits"],"readme":"`eosc` 像瑞士军刀一样的多功能命令行工具\n----------------------------------\n\n`eosc` 是一个跨平台的命令行工具 (支持 Windows, Mac 和 Linux)，你可以通过这个工具实现与 EOS.IO 区块链的交互。\n\n这个工具可以用来投票，同时也可以作为存储私钥的钱包来使用。\n\n本工具依赖 `eos-go` 库，`eos-bios` 使用的也是这个库。\n\n当前版本只包含了最简单的命令，而类似 `cleos` 完整的功能还正在开发中，我们将会在主网上线后发布新的版本。几乎所有的执行源码都可以在当前仓库中找到。\n\n\n安装\n----\n\n1. 安装包下载地址 https://github.com/eoscanada/eosc/releases\n\n**或**\n\n2. 基于源码进行构建:\n\n```bash\ngo get -u -v github.com/eoscanada/eosc/eosc\n```\n\n3. 源代码树位置是本地主机\n\n```bash\ncd eosc/eosc\ngo build\n```\n\n投票!\n-----\n\n安装完成后运行下面命令来导入你的私钥:\n\n```\nexport EOSC_GLOBAL_API_URL=https://...\n\n# export EOSC_GLOBAL_HTTP_HEADER_0=\"Authorization: bearer abcdef12323453452565676589\"\n# export EOSC_GLOBAL_HTTP_HEADER_1=\"Origin: https://...\n\neosc vault create --import\n```\n\n接着再运行下面命令获取投票的帮助信息:\n\n```\neosc vote --help\n```\n\n然后运行如下命令为你的候选者投票:\n\n```\n\neosc vote producers [your account] [producer1] [producer2] [producer3]\n```\n命令中参数依次为: [你的账户名] [你要投票的BP1] [你要投票的BP2] [你要投票的BP3] （你共可以为30个BP投票）\n\n确保你的版本是 `v0.7.0` 以上的，你可以用下面的命令检查你的版本:\n\n```\neosc version\n```\n\n阅读以下内容获取更详细的信息。\n\n\neosc 私钥钱包\n-------------\n\n`eosc vault` 是一个简单但却非常强大的 EOS 钱包。\n\n\n\n将已有私钥导入新建的钱包\n====================\n\n你可以通过 `vault create --import` 命令 **导入外部生成的私钥**。\n\n这个交互式命令会要你粘贴你的私钥，导入时私钥并 **不会显示在屏幕上**，导入完成后命令将会再次显示（由导入的私钥衍生出来）公钥，以方便你进行交叉验证。\n\n```\n$ eosc vault create --import -c \"Imported key\"\nEnter passphrase to encrypt your vault: ****\nConfirm passphrase: ****\nType your first private key: ****\nType your next private key or hit ENTER if you are done:\nImported 1 keys. Let's secure them before showing the public keys.\nWallet file \"./eosc-vault.json\" created. Here are your public keys:\n- EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV\n```\n代码指令中文翻译：\n\n你的私钥将采用密语 (passphrase) 进行加密保护，参考后面的章节获取该工具所使用的加密库。\n\n\n创建钱包的同时生成公钥\n===================\n\n创建钱包的同时生成 2 个公钥:\n\n```\n$ eosc vault create --keys 2\nCreated 2 keys. Let's secure them before showing the public keys.\nEnter passphrase to encrypt your keys:\nConfirm passphrase:\nWallet file \"./eosc-vault.json\" created. Here are your public keys:\n- EOS7MEGq9FVb2Ve4bsZEan1t146TKCyo8dKtLvihrNhGbPLCPLjXd\n- EOS5QoyZwJvpPjmZAa3HdgTn2FdNABBffXLD95WPagiARmaAHMhin\n```\n\n\n将已有的私钥添加至已存在的钱包\n=========================\n\n将外部生成的私钥导入当前钱包:\n\n```\n$ eosc vault add\nVault file not found, creating a new wallet\nType your first private key:        [insert your private key here, NOT shown]\nType your next private key or hit ENTER if you are done:\nKeys imported. Let's secure them before showing the public keys.\nEnter passphrase to encrypt your keys:\nConfirm passphrase:\nWallet file \"./eosc-vault.json\" written. Here are your ADDED public keys:\n- EOS5tb61aZMAfQqKDsnkscFq76JXxNdi7ZhkUmkVZUkU4zPzfeAFx\nTotal keys writteN: 3\n```\n\n你可以离线运行钱包命令。\n生成的钱包文件 `eosc-vault.json` 是被加密处理的，因此你可以放心的把它存起来，他以后就是代替你私钥的凭证。\n\n投票\n----\n\n`eosc-vault.json` 成功生成之后，你就可以投票了:\n\n```\n$ eosc vote producers youraccount eoscanadacom someotherfavo riteproducer\nEnter passphrase to unlock vault:\nVoter [youraccount] voting for: [eoscanadacom]\nDone\n```\n\n上面的命令会在本地对投票交易进行签名处理，然后通过节点 `https://mainnet.eoscanada.com` 将交易发送至主网络。\n你也可以通过 `-u` 或 `--api-url` 参数指定主网上的其他节点服务器。\n\n在这里你可以查看你的账户信息 https://eosq.app\n\n\n\n\n使用的加密库\n----------\n\n加密算法采用的是 NaCl\n([C 语言实现](https://tweetnacl.cr.yp.to/), [Javascript 实现](https://github.com/dchest/tweetnacl-js),\n[Go 版本, 本工具所依赖的库](https://godoc.org/golang.org/x/crypto/nacl/secretbox))。\n和密钥衍生工具 [Argon2](https://en.wikipedia.org/wiki/Argon2),\n采用的是 [Go 语言实现](https://godoc.org/golang.org/x/crypto/argon2)。\n\n你可以在我们的代码库中审查与 `passphrase` 口令实现相关的代码: [第 61 行](./vault/passphrase.go)，包括空行及注释。\n\n\n\n\n## 离线交易签名\n\n`eosc` 具备管理一个 airtight 脱机钱包所需的一切。\n这是一个示例用法。 在 `/tmp/airtight` 中, 运行:\n\n* `eosc vault create --import --comment \"Airtight wallet\"`\n\n它会输出:\n\n```\nPLEASE READ:\nWe are now going to ask you to paste your private keys, one at a time.\nThey will not be shown on screen.\nPlease verify that the public keys printed on screen correspond to what you have noted\n\nPaste your first private key:       \u003cem\u003e[PASTE PRIVATE KEY HERE]\u003c/em\u003e\n- Scanned private key corresponding to EOS5J53bNtH5H1bJTyP237fr5LF6eQSQohfGY5iMCgpC4HpXApJBr\nPaste your next private key or hit ENTER if you are done:           \u003cem\u003e[PASTE SECOND PRIVATE KEY HERE]\u003c/em\u003e\n- Scanned private key corresponding to EOS6tgsdv6S7N1GYWgX8QEBAsanAwXwuaEkv11GGtteyk5ELqSzVP\nPaste your next private key or hit ENTER if you are done:           \u003cem\u003e[HIT ENTER HERE]\u003c/em\u003e\nImported 2 keys.\n\nYou will be asked to provide a passphrase to secure your newly created vault.\nMake sure you make it long and strong.\n\nEnter passphrase to encrypt your vault:       \u003cem\u003e[ENTER YOUR PASSPHRASE HERE]\u003c/em\u003e\nConfirm passphrase:                           \u003cem\u003e[RE-ENTER YOUR PASSPHRASE HERE]\u003c/em\u003e\n\nWallet file \"./eosc-vault.json\" written to disk.\nHere are the keys that were ADDED during this operation (use `list` to see them all):\n- EOS5J53bNtH5H1bJTyP237fr5LF6eQSQohfGY5iMCgpC4HpXApJBr\n- EOS6tgsdv6S7N1GYWgX8QEBAsanAwXwuaEkv11GGtteyk5ELqSzVP\nTotal keys stored: 2\n```\n\n这一操作会创建 `eosc-vault.json` 钱包，而且完全可以离线执行，不需要碰到网络上的任何东西。\n\n好，那让我们来实际操作它试试。从一个有互联网访问权限的计算机发出这些命令（就是说这些命令无法访问你的 eosc 保险库钱包）:\n\n* `eosc transfer airtight11111 cancancan123 1.0000 -m \"Can't say I haven't paid you now\" --write-transaction transaction.json --skip-sign --expiration 3600`\n\n输出就会是这样:\n\n```\n{\n  \"expiration\": \"2018-08-27T04:18:43\",\n  \"ref_block_num\": 43579,\n  \"ref_block_prefix\": 3787183056,\n  \"max_net_usage_words\": 0,\n  \"max_cpu_usage_ms\": 0,\n  \"delay_sec\": 0,\n  \"context_free_actions\": [],\n  \"actions\": [\n    {\n      \"account\": \"eosio.token\",\n      \"name\": \"transfer\",\n      \"authorization\": [\n        {\n          \"actor\": \"airtight1111\",\n          \"permission\": \"active\"\n        }\n      ],\n      \"data\": {\n        \"from\": \"airtight1111\",\n        \"to\": \"cancancan123\",\n        \"quantity\": \"0.0001 EOS\",\n        \"memo\": \"Can't say I haven't paid you now\"\n      }\n    }\n  ],\n  \"transaction_extensions\": [],\n  \"signatures\": [],\n  \"context_free_data\": []\n}\n---\nTransaction written to \"../transaction.json\"\nSign offline with: --offline-chain-id=5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191\nAbove is a pretty-printed representation of the outputted file\n```\n\n好，现在复制 `transaction.json` 文件到另外一台计算机上。注意上面输出的 `--offline-chain-id=...`。\n\n在一个 airtight 计算机上运行:\n\n* `eosc tx sign path/to/transaction.json --offline-sign-key EOS6tgsdv6S7N1GYWgX8QEBAsanAwXwuaEkv11GGtteyk5ELqSzVP  --offline-chain-id=5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191 --write-transaction signedtx.json`\n\n你想输入几个 `--offline-sign-key` 就可以输几个，你可以用 `,` (逗号) 来分隔每个条目，例如: `--offline-sign-key EOS6tgsdv6S7N1GYWgX8QEBAsanAwXwuaEkv11GGtteyk5ELqSzVP,EOS5J53bNtH5H1bJTyP237fr5LF6eQSQohfGY5iMCgpC4HpXApJBr`。这时的输出是:\n\n```\nEnter passphrase to decrypt your vault:\n{\n  \"expiration\": \"2018-08-27T04:18:43\",\n  \"ref_block_num\": 43579,\n  \"ref_block_prefix\": 3787183056,\n  \"max_net_usage_words\": 0,\n  \"max_cpu_usage_ms\": 0,\n  \"delay_sec\": 0,\n  \"context_free_actions\": [],\n  \"actions\": [\n    {\n      \"account\": \"eosio.token\",\n      \"name\": \"transfer\",\n      \"authorization\": [\n        {\n          \"actor\": \"airtight1111\",\n          \"permission\": \"active\"\n        }\n      ],\n      \"data\": \"104208b93197af33304498064d83a641010000000000000004454f53000000002043616e277420736179204920686176656e2774207061696420796f75206e6f77\"\n    }\n  ],\n  \"transaction_extensions\": [],\n  \"signatures\": [\n    \"SIG_K1_KbsvdjfXTzbn7DaghCbFyaxXnv9BHJaAVWZkeJ3AbvnznNgipSLj7BbZajZ1ECZEWKSMFtMbuqfUWQGq2tDzW2n7Fz5KTV\",\n    \"SIG_K1_K24N3kUfTLMJGwUUWV2qNiyhxAJsbVtpXh2KUj3SHGLTivPBru46QYX9v9gQj7G2yKHp6eZ786hHfJwuzjeZFF7atPfpTY\"\n  ],\n  \"context_free_data\": []\n}\n---\nTransaction written to \"signedtx.json\"\nSign offline with: --offline-chain-id=5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191\nAbove is a pretty-printed representation of the outputted file\n```\n\n你现在可一个把 `signedtx.json` 放到一个在线的计算机上了，然后运行:\n\n* `eosc tx push signedtx.json`\n\n这个应该是成功的，假如没有，请参照下面的解释:\n\n* `transaction bears irrelevant signatures from these keys: [\\\"EOS5J53bNtH5H1bJTyP237fr5LF6eQSQohfGY5iMCgpC4HpXApJBr\\\"]`: 这意味着你无需使用此密钥签名即可授权你在交易的操作中指定的 `actor@permission`。\n\n* `UnAuthorized` errors: 这是说你没有使用交易操作中指定授权\n`actor @ permission` 所需的密钥对交易进行签名。\n\n* `Transaction's reference block did not match.`: 这是说你的交易没有创建在你想推送的链上。\n\n* `expired transaction`: 你需要在原始 `--expiration` 的时间范围内完成整个循环。\n如果你给 `--expiration` 超过一个小时，那请注意你只能在到期的最后一小时内将交易提交到链上。\n\n\n* 一些其他 assertion（断言）错误，就是你尝试在线签名时发生的常见错误，请根据相关合约进行调查。\n\n\n\n### 离线 multisig（多签名）\n\n\n为增加离线交易签名的安全性，请考虑使用EOS区块链的 `multisig` 工具。\n\n你可以在链上（通过`eosc multisig proposal`）提出一个交易，所有人都可以审查，\n并准备一个离线交易来批准该交易。 使用这种方法，你可以拥有 X 个 airtight 的计算机，\n每个计算机都提供拼图中的一块，由不同的人控制，无需缝合交易文件或将签名收集到一个地方。\n\n\n常见问题\n-------\n\n问题: 为什么不使用 `cleos` ?\n\n答案：`cleos` 使用 C++ 编写，由于依赖太多的工具链而很难被编译。`eosc`\n可以在 Windows 上使用，而 `cleos` 却不可以。`eosc` 包含了一个内部钱包，\n可以很方便的用来签名交易，但 `cleos` 命令则需要借助 (`keosd`) 才可以实现对交易的签名，\n因此它很难使用。而 `eosc` 将 `cleos` 和 `keosd` 这两个工具整合为一个方便使用的命令行工具。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoscanada%2Feosc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feoscanada%2Feosc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoscanada%2Feosc/lists"}